From 47fc8b8dbdbb6a01b72b2602ce847d6298a1c16b Mon Sep 17 00:00:00 2001 From: DidierLoiseau Date: Sun, 7 Feb 2016 23:31:27 +0100 Subject: [PATCH 01/11] Fixed link to Magic doc in Dvorak section --- keyboard/ergodox_ez/keymaps/tm2030/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/tm2030/README.md b/keyboard/ergodox_ez/keymaps/tm2030/README.md index 096939dc287..ae69adf78a0 100644 --- a/keyboard/ergodox_ez/keymaps/tm2030/README.md +++ b/keyboard/ergodox_ez/keymaps/tm2030/README.md @@ -55,7 +55,7 @@ As on the original TM 2030, when `num` layer is activated, holding `fn` disables ## Dvorak Layer Same as Layer 0 but with _Dvorak_ layout, to use with QWERTY OS layout. -Enable Dvorak layout with [`Magic`](/TMK_README.md#magic-commands+`1` (`LShift`+`RShift`+`1`), disable with `Magic`-`0`. +Enable Dvorak layout with [`Magic`](/TMK_README.md#magic-commands)+`1` (`LShift`+`RShift`+`1`), disable with `Magic`-`0`. The middle (green) led indicates when the Dvorak layer is activated. From 7ba42b994babfa5f6b7dff5bdb779d8d06a9bb30 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sun, 31 Jan 2016 15:18:30 +0100 Subject: [PATCH 02/11] Fixed inconsistency between comment and actual numeric layer - KC_INS should only be present on Fn layer --- keyboard/ergodox_ez/keymaps/tm2030/keymap.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/tm2030/keymap.c b/keyboard/ergodox_ez/keymaps/tm2030/keymap.c index cbdf0ae00e2..4ab0f7cc385 100644 --- a/keyboard/ergodox_ez/keymaps/tm2030/keymap.c +++ b/keyboard/ergodox_ez/keymaps/tm2030/keymap.c @@ -142,7 +142,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS,KC_TRNS, // right hand - KC_INS, KC_F6, KC_F7, KC_TAB, KC_PSLS, KC_PAST, KC_PMNS, + KC_TRNS, KC_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, From a2f6ab16c001c1cc456882457aec6c7d7999fd1c Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sun, 7 Feb 2016 23:22:48 +0100 Subject: [PATCH 03/11] FN macro: use layer_invert() instead of modifying layer_state directly - fixes stuck keys from the temporary layers (see also jackhumbert/qmk_firmware#78) - removed the workaround for jackhumbert/qmk_firmware#81 (using layer_invert() fixes the problem) --- keyboard/ergodox_ez/keymaps/tm2030/keymap.c | 23 +++------------------ 1 file changed, 3 insertions(+), 20 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/tm2030/keymap.c b/keyboard/ergodox_ez/keymaps/tm2030/keymap.c index 4ab0f7cc385..975460479b8 100644 --- a/keyboard/ergodox_ez/keymaps/tm2030/keymap.c +++ b/keyboard/ergodox_ez/keymaps/tm2030/keymap.c @@ -11,9 +11,6 @@ #define MDBL0 1 #define MFNLR 2 -#define MCUT 3 -#define MCOPY 4 -#define MPSTE 5 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Basic layer @@ -178,7 +175,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_INS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_CALC, KC_MAIL, KC_WHOM, - KC_TRNS, KC_TRNS, M(MCUT), M(MCOPY), M(MPSTE), KC_MUTE, KC_VOLD, + 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, @@ -210,22 +207,8 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } break; case MFNLR: - layer_state ^= (1 << NUMR) | (1 << FNLR); - break; - case MCUT: - if (record->event.pressed) { - return MACRO(D(LSFT), T(DELT), U(LSFT), END); - } - break; - case MCOPY: - if (record->event.pressed) { - return MACRO(D(LCTL), T(INS), U(LCTL), END); - } - break; - case MPSTE: - if (record->event.pressed) { - return MACRO(D(LSFT), T(INS), U(LSFT), END); - } + layer_invert(NUMR); + layer_invert(FNLR); break; } return MACRO_NONE; From 47dcec29456106828b83fe5b85fa7a7427ddc710 Mon Sep 17 00:00:00 2001 From: Chris Gerber Date: Sun, 3 Jan 2016 17:49:28 -0500 Subject: [PATCH 04/11] Add support for Atreus running on A-Star --- keyboard/atreus/Makefile | 17 ++++++- keyboard/atreus/README.md | 10 ++-- keyboard/atreus/atreus.h | 19 ++++---- keyboard/atreus/config.h | 10 ++-- keyboard/atreus/keymaps/keymap_gerb.c | 66 +++++++++++++++++++++++++++ quantum/keymap_common.c | 3 ++ 6 files changed, 106 insertions(+), 19 deletions(-) create mode 100644 keyboard/atreus/keymaps/keymap_gerb.c diff --git a/keyboard/atreus/Makefile b/keyboard/atreus/Makefile index e1ebee47bde..6666be11925 100644 --- a/keyboard/atreus/Makefile +++ b/keyboard/atreus/Makefile @@ -58,6 +58,10 @@ else SRC := keymaps/keymap_default.c $(SRC) endif +ifdef ASTAR + OPT_DEFS += -DATREUS_ASTAR +endif + CONFIG_H = config.h # MCU name @@ -114,8 +118,8 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096 # 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) +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 @@ -137,3 +141,12 @@ VPATH += $(TMK_DIR) include $(TOP_DIR)/quantum/quantum.mk +USB ?= /dev/cu.usbmodem1411 + +upload: build +ifdef ASTAR + while [ ! -r $(USB) ]; do sleep 1; done; \ + avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB) +else + teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex +endif diff --git a/keyboard/atreus/README.md b/keyboard/atreus/README.md index 75f198fd1c1..e3bcaa4c4df 100644 --- a/keyboard/atreus/README.md +++ b/keyboard/atreus/README.md @@ -1,10 +1,6 @@ atreus keyboard firmware ====================== -## Note - -This is for the Teensy2 hand wired boards only. - ## Quantum MK Firmware You have access to a bunch of goodies! Check out the Makefile to enable/disable some of the features. Uncomment the `#` to enable them. Setting them to `no` does nothing and will only confuse future you. @@ -14,6 +10,12 @@ You have access to a bunch of goodies! Check out the Makefile to enable/disable # UNICODE_ENABLE = yes # Unicode support - this is commented out, just as an example. You have to use #, not // BLUETOOTH_ENABLE = yes # Enable Bluetooth with the Adafruit EZ-Key HID +## Atreus specific information + +These configuration files are specifically for the Atreus keyboards created by Phil Hagelberg (@technomancy). This keyboard is available in two variants: one powered by a Teensy 2, one powered by an A-Star. This repository currently assumes that you have a Teensy 2 powered Atreus. If you are using an A-Star, specify that by adding `ASTAR=yes` to your `make` commands. + +If you are coming from the [atreus-firmware](https://github.com/technomancy/atreus-firmware), we've also brought forward the `make upload` command for you to use. + ## Quick aliases to common actions Your keymap can include shortcuts to common operations (called "function actions" in tmk). diff --git a/keyboard/atreus/atreus.h b/keyboard/atreus/atreus.h index 29d1d18bac2..9dd77859f9e 100644 --- a/keyboard/atreus/atreus.h +++ b/keyboard/atreus/atreus.h @@ -7,21 +7,20 @@ #include // 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, k37, k38, k39, k3a, k3b \ + 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, 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, k35, 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 } \ +} void * matrix_init_user(void); void * matrix_scan_user(void); diff --git a/keyboard/atreus/config.h b/keyboard/atreus/config.h index 733f579d43e..1ceef808a1a 100644 --- a/keyboard/atreus/config.h +++ b/keyboard/atreus/config.h @@ -33,11 +33,15 @@ along with this program. If not, see . #define MATRIX_ROWS 4 #define MATRIX_COLS 11 -// Planck PCB default pin-out // Change this to how you wired your keyboard // COLS: Left to right, ROWS: Top to bottom -#define COLS (int []){ F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0} -#define ROWS (int []){ D0, D1, D2, D3 } +#ifdef ATREUS_ASTAR + #define COLS (int []){ B7, D6, F7, F6, B6, D4, E6, B4, B5, C6, D7 } + #define ROWS (int []){ D0, D1, D3, D2 } +#else + #define COLS (int []){ F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0} + #define ROWS (int []){ D0, D1, D2, D3 } +#endif /* COL2ROW or ROW2COL */ #define DIODE_DIRECTION COL2ROW diff --git a/keyboard/atreus/keymaps/keymap_gerb.c b/keyboard/atreus/keymaps/keymap_gerb.c new file mode 100644 index 00000000000..1ba3942e3b9 --- /dev/null +++ b/keyboard/atreus/keymaps/keymap_gerb.c @@ -0,0 +1,66 @@ +// This is the personal keymap of Chris Gerber (@gerbercj). I haven't worked out the kinks +// with the Colemak and Dvorak support yet, but everything else works nicely. + +#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 _CM 1 +#define _DV 2 +#define _L1 3 +#define _L2 4 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_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}, + {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_RCTL, 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 }, + {KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LALT, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH}, + {KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_RCTL, KC_SPC, MO(_L1), KC_MINS, KC_QUOT, KC_ENT } + }, + [_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 }, + {KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_LALT, KC_B, KC_M, KC_W, KC_V, KC_Z }, + {KC_ESC, KC_TAB, KC_LGUI, KC_LSFT, KC_BSPC, KC_RCTL, KC_SPC, MO(_L1), KC_MINS, KC_SLSH, KC_ENT } + }, + [_L1] = { /* LAYER 1 */ + {KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, KC_NO, KC_VOLU, KC_7, KC_8, KC_9, KC_LBRC}, + {KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_NO, KC_VOLD, KC_4, KC_5, KC_6, KC_RBRC}, + {KC_GRV, KC_MPRV, KC_MPLY, KC_MNXT, KC_MINS, KC_LALT, KC_MUTE, KC_1, KC_2, KC_3, KC_BSLS}, + {TG(_L2), KC_APP, KC_LGUI, KC_LSFT, KC_BSPC, KC_RCTL, KC_SPC, KC_TRNS, KC_DOT, KC_0, KC_EQL } + }, + [_L2] = { /* LAYER 2 */ + {KC_TRNS, KC_WH_L, KC_MS_U, KC_WH_R, KC_WH_U, KC_NO, DF(_QW), KC_F7, KC_F8, KC_F9, KC_F10 }, + {KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_WH_D, KC_NO, DF(_CM), KC_F6, KC_F5, KC_F6, KC_F11 }, + {KC_BTN4, KC_BTN1, KC_BTN2, KC_BTN3, KC_BTN4, KC_LALT, DF(_DV), KC_F1, KC_F2, KC_F3, KC_F12 }, + {KC_TRNS, KC_TRNS, KC_LGUI, KC_LSFT, KC_BSPC, KC_RCTL, KC_SPC, KC_TRNS, 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/quantum/keymap_common.c b/quantum/keymap_common.c index ae109da16ae..7068ca4f315 100644 --- a/quantum/keymap_common.c +++ b/quantum/keymap_common.c @@ -91,6 +91,9 @@ action_t action_for_key(uint8_t layer, keypos_t key) play_notes(&goodbye, 5, false); #endif _delay_ms(250); + #ifdef ATREUS_ASTAR + *(uint16_t *)0x0800 = 0x7777; // these two are a-star-specific + #endif bootloader_jump(); return; } else if (keycode == DEBUG) { // DEBUG is 0x5001 From 1db3558a921d465e1c2f7f280f94dad8e95d32ac Mon Sep 17 00:00:00 2001 From: Chris Gerber Date: Wed, 17 Feb 2016 18:55:17 -0500 Subject: [PATCH 05/11] Change default controller for Atreus from Teensy2 to A-Star --- keyboard/atreus/Makefile | 14 +++++++------- keyboard/atreus/README.md | 2 +- keyboard/atreus/config.h | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/keyboard/atreus/Makefile b/keyboard/atreus/Makefile index 6666be11925..2e542d62edd 100644 --- a/keyboard/atreus/Makefile +++ b/keyboard/atreus/Makefile @@ -58,8 +58,13 @@ else SRC := keymaps/keymap_default.c $(SRC) endif -ifdef ASTAR +ifdef TEENSY2 + OPT_DEFS += -DATREUS_TEENSY2 + ATRUES_UPLOAD_COMMAND = teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex +else OPT_DEFS += -DATREUS_ASTAR + ATRUES_UPLOAD_COMMAND = while [ ! -r $(USB) ]; do sleep 1; done; \ + avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB) endif CONFIG_H = config.h @@ -144,9 +149,4 @@ include $(TOP_DIR)/quantum/quantum.mk USB ?= /dev/cu.usbmodem1411 upload: build -ifdef ASTAR - while [ ! -r $(USB) ]; do sleep 1; done; \ - avrdude -p $(MCU) -c avr109 -U flash:w:$(TARGET).hex -P $(USB) -else - teensy_loader_cli -w -mmcu=$(MCU) $(TARGET).hex -endif + $(ATRUES_UPLOAD_COMMAND) diff --git a/keyboard/atreus/README.md b/keyboard/atreus/README.md index e3bcaa4c4df..4db7ac1203b 100644 --- a/keyboard/atreus/README.md +++ b/keyboard/atreus/README.md @@ -12,7 +12,7 @@ You have access to a bunch of goodies! Check out the Makefile to enable/disable ## Atreus specific information -These configuration files are specifically for the Atreus keyboards created by Phil Hagelberg (@technomancy). This keyboard is available in two variants: one powered by a Teensy 2, one powered by an A-Star. This repository currently assumes that you have a Teensy 2 powered Atreus. If you are using an A-Star, specify that by adding `ASTAR=yes` to your `make` commands. +These configuration files are specifically for the Atreus keyboards created by Phil Hagelberg (@technomancy). This keyboard is available in two variants: one powered by a Teensy 2, one powered by an A-Star. This repository currently assumes that you have an A-Star powered Atreus. If you are using a Teensy2, specify that by adding `TEENSY2=yes` to your `make` commands. If you are coming from the [atreus-firmware](https://github.com/technomancy/atreus-firmware), we've also brought forward the `make upload` command for you to use. diff --git a/keyboard/atreus/config.h b/keyboard/atreus/config.h index 1ceef808a1a..ca0cd7e47a0 100644 --- a/keyboard/atreus/config.h +++ b/keyboard/atreus/config.h @@ -35,10 +35,10 @@ along with this program. If not, see . // Change this to how you wired your keyboard // COLS: Left to right, ROWS: Top to bottom -#ifdef ATREUS_ASTAR +#if defined(ATREUS_ASTAR) #define COLS (int []){ B7, D6, F7, F6, B6, D4, E6, B4, B5, C6, D7 } #define ROWS (int []){ D0, D1, D3, D2 } -#else +#elif defined(ATREUS_TEENSY2) #define COLS (int []){ F6, F5, F4, B7, B6, B5, B4, B3, B2, B1, B0} #define ROWS (int []){ D0, D1, D2, D3 } #endif From 39ed50f6055a33b45b9f9db0aa6f7d07b7732208 Mon Sep 17 00:00:00 2001 From: Lukas Klingsbo Date: Thu, 18 Feb 2016 21:27:02 +0100 Subject: [PATCH 06/11] Added a keymap optimized for xmonad The M(1) function changes layer temporarily (so that numbers can be used) and holds LGUI which makes it possible to easily change virtual screens and swap windows inbetween them. --- keyboard/planck/keymaps/lukas.c | 64 +++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 keyboard/planck/keymaps/lukas.c diff --git a/keyboard/planck/keymaps/lukas.c b/keyboard/planck/keymaps/lukas.c new file mode 100644 index 00000000000..6fd95378b1e --- /dev/null +++ b/keyboard/planck/keymaps/lukas.c @@ -0,0 +1,64 @@ +#include "planck.h" +#ifdef BACKLIGHT_ENABLE + #include "backlight.h" +#endif + +// This simple keymap is optimized for xmonad users using super as their modifier key. +// M(1) makes it possible to change virtual screens and swap windows between them. + +// Each layer gets a name for readability, which is then used in the keymap matrix below. +#define _QW 0 +#define _LW 1 +#define _RS 2 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QW] = { /* Qwerty */ + {KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC}, + {KC_ESC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT}, + {KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT }, + {KC_LCTL, KC_LALT, KC_LGUI, M(1), MO(_LW), KC_SPC, KC_SPC, MO(_RS), KC_LEFT, KC_DOWN, KC_UP, KC_RGHT} + }, + [_RS] = { /* RAISE */ + {KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_DEL }, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS} + }, + [_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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LBRC, KC_RBRC, KC_TRNS}, + {KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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); + #ifdef BACKLIGHT_ENABLE + backlight_step(); + #endif + } else { + unregister_code(KC_RSFT); + } + break; + case 1: + if (record->event.pressed) { + register_code(KC_LGUI); + layer_on(_RS); + } else { + unregister_code(KC_LGUI); + layer_off(_RS); + } + break; + } + return MACRO_NONE; +}; From 1934e8a270820ff6f08c95f4399b26162623e4e0 Mon Sep 17 00:00:00 2001 From: Vincent Pochet Date: Sat, 20 Feb 2016 14:01:28 +0100 Subject: [PATCH 07/11] Add extra keymap for swiss french keyboard --- quantum/keymap_extras/keymap_fr_ch.h | 98 ++++++++++++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 quantum/keymap_extras/keymap_fr_ch.h diff --git a/quantum/keymap_extras/keymap_fr_ch.h b/quantum/keymap_extras/keymap_fr_ch.h new file mode 100644 index 00000000000..d3884c19a11 --- /dev/null +++ b/quantum/keymap_extras/keymap_fr_ch.h @@ -0,0 +1,98 @@ +#ifndef KEYMAP_FR_CH +#define KEYMAP_FR_CH + +#include "keymap_common.h" + +// Alt gr +#define ALGR(kc) kc | 0x1400 +#define FR_CH_ALGR KC_RALT + +// normal characters +#define FR_CH_Z KC_Y +#define FR_CH_Y KC_Z + +#define FR_CH_A KC_A +#define FR_CH_B KC_B +#define FR_CH_C KC_C +#define FR_CH_D KC_D +#define FR_CH_E KC_E +#define FR_CH_F KC_F +#define FR_CH_G KC_G +#define FR_CH_H KC_H +#define FR_CH_I KC_I +#define FR_CH_J KC_J +#define FR_CH_K KC_K +#define FR_CH_L KC_L +#define FR_CH_M KC_M +#define FR_CH_N KC_N +#define FR_CH_O KC_O +#define FR_CH_P KC_P +#define FR_CH_Q KC_Q +#define FR_CH_R KC_R +#define FR_CH_S KC_S +#define FR_CH_T KC_T +#define FR_CH_U KC_U +#define FR_CH_V KC_V +#define FR_CH_W KC_W +#define FR_CH_X KC_X + +#define FR_CH_0 KC_0 +#define FR_CH_1 KC_1 +#define FR_CH_2 KC_2 +#define FR_CH_3 KC_3 +#define FR_CH_4 KC_4 +#define FR_CH_5 KC_5 +#define FR_CH_6 KC_6 +#define FR_CH_7 KC_7 +#define FR_CH_8 KC_8 +#define FR_CH_9 KC_9 + +#define FR_CH_DOT KC_DOT +#define FR_CH_COMM KC_COMM + +#define FR_CH_QUOT KC_MINS +#define FR_CH_AE KC_QUOT +#define FR_CH_UE KC_LBRC +#define FR_CH_OE KC_SCLN + +#define FR_CH_CIRC KC_EQL // accent circumflex ^ and grave ` and ~ +#define FR_CH_LESS KC_NUBS // < and > and backslash +#define FR_CH_MINS KC_SLSH // - and _ +#define FR_CH_DLR KC_BSLS // $, £ and } +#define FR_CH_PARA KC_GRV // § and ring ° +#define FR_CH_DIAE KC_RBRC // accent ¨ + +// shifted characters +#define FR_CH_RING LSFT(KC_GRV) // ° +#define FR_CH_EXLM LSFT(KC_RBRC) // ! +#define FR_CH_PLUS LSFT(KC_1) // + +#define FR_CH_DQOT LSFT(KC_2) // " +#define FR_CH_ASTR LSFT(KC_3) // * +#define FR_CH_PERC LSFT(KC_5) // % +#define FR_CH_AMPR LSFT(KC_6) // & +#define FR_CH_SLSH LSFT(KC_7) // / +#define FR_CH_LPRN LSFT(KC_8) // ( +#define FR_CH_RPRN LSFT(KC_9) // ) +#define FR_CH_EQL LSFT(KC_0) // = +#define FR_CH_QST LSFT(FR_CH_QUOT) // ? +#define FR_CH_MORE LSFT(FR_CH_LESS) // > +#define FR_CH_COLN LSFT(KC_DOT) // : +#define FR_CH_SCLN LSFT(KC_COMM) // ; +#define FR_CH_UNDS LSFT(FR_CH_MINS) // _ +#define FR_CH_CCED LSFT(KC_4) // ç +#define FR_CH_GRV LSFT(FR_CH_CIRC) // accent grave ` + +// Alt Gr-ed characters +#define FR_CH_LCBR ALGR(KC_QUOT) // { +#define FR_CH_LBRC ALGR(KC_LBRC) // [ +#define FR_CH_RBRC ALGR(KC_9) // ] +#define FR_CH_RCBR ALGR(KC_0) // } +#define FR_CH_BSLS ALGR(FR_CH_LESS) // backslash +#define FR_CH_AT ALGR(KC_2) // @ +#define FR_CH_EURO ALGR(KC_E) // € +#define FR_CH_TILD ALGR(FR_CH_CIRC) // ~ +#define FR_CH_PIPE ALGR(KC_1) // | +#define FR_CH_HASH ALGR(KC_3) // # +#define FR_CH_ACUT ALGR(FR_CH_QUOT) // accent acute ´ + +#endif From e336af79eb8178cfe1adf3d8213c36200a93c280 Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sun, 21 Feb 2016 18:56:21 +0100 Subject: [PATCH 08/11] Fixed compilation warnings due to missing return statements --- keyboard/ergodox_ez/keymaps/tm2030/keymap.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/keyboard/ergodox_ez/keymaps/tm2030/keymap.c b/keyboard/ergodox_ez/keymaps/tm2030/keymap.c index 975460479b8..92efd9b5e6c 100644 --- a/keyboard/ergodox_ez/keymaps/tm2030/keymap.c +++ b/keyboard/ergodox_ez/keymaps/tm2030/keymap.c @@ -216,7 +216,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) { - + return NULL; }; // Runs constantly in the background, in a loop. @@ -238,4 +238,5 @@ void * matrix_scan_user(void) { if (host_keyboard_leds() & (1< Date: Sun, 21 Feb 2016 19:10:03 +0100 Subject: [PATCH 09/11] Updated tm2030 keymap.hex --- keyboard/ergodox_ez/keymaps/tm2030/keymap.hex | Bin 69424 -> 69154 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/keyboard/ergodox_ez/keymaps/tm2030/keymap.hex b/keyboard/ergodox_ez/keymaps/tm2030/keymap.hex index 7e1118e3b216e8c02ed6698c1b2818e98e5811e3..1100ba2fa257b9b486de2564efd5dfe9d28f3cc6 100644 GIT binary patch literal 69154 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 From e63126ace2a6718353563ffe22e413340969ae8b Mon Sep 17 00:00:00 2001 From: Didier Loiseau Date: Sun, 21 Feb 2016 19:23:28 +0100 Subject: [PATCH 10/11] Added eclipse settings files to .gitignore --- .gitignore | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 1e19ce9a873..ae342167dfc 100644 --- a/.gitignore +++ b/.gitignore @@ -13,4 +13,9 @@ tags build/ *.bak .vagrant/ -.DS_STORE \ No newline at end of file +.DS_STORE + +# Eclipse Settings +.cproject +.project +.settings/ \ No newline at end of file From 233af3a41c69d456583bfcfd897233b9c117caa6 Mon Sep 17 00:00:00 2001 From: Keller-Laminar Date: Mon, 22 Feb 2016 13:06:26 -0500 Subject: [PATCH 11/11] Include Dvorak underscore and plus keys. There were previously no Dvorak specific underscore and plus key codes. For a keyboard like the Planck which has layers directly to shifted versions of special character keys you were unable to produce those characters using the Lower layer. --- quantum/keymap_extras/keymap_dvorak.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/quantum/keymap_extras/keymap_dvorak.h b/quantum/keymap_extras/keymap_dvorak.h index d172e0019bf..93e355bf91c 100644 --- a/quantum/keymap_extras/keymap_dvorak.h +++ b/quantum/keymap_extras/keymap_dvorak.h @@ -68,5 +68,7 @@ #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) -#endif \ No newline at end of file +#endif