From 8665ed3efc62e649d0eac5b88761d7b3f8f30cd7 Mon Sep 17 00:00:00 2001 From: Stick Date: Tue, 18 Apr 2017 09:46:07 -0500 Subject: [PATCH 01/25] small changes --- keyboards/ergodox/keymaps/familiar/README.md | 4 ++-- keyboards/ergodox/keymaps/familiar/keymap.c | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/keyboards/ergodox/keymaps/familiar/README.md b/keyboards/ergodox/keymaps/familiar/README.md index e4336d9b55..8db9a77122 100644 --- a/keyboards/ergodox/keymaps/familiar/README.md +++ b/keyboards/ergodox/keymaps/familiar/README.md @@ -1,5 +1,5 @@ # ErgoDox Familiar Layout -Familiar layout for those who regularly switch back and forth from ErgoDox to regular QWERTY. +Familiar layout for those who regularly switch back and forth from ErgoDox to "normal" QWERTY. [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](../../../../license_GPLv3.md../../../../license_GPLv3.md) [![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg)](https://github.com/RichardLitt/standard-readme) @@ -50,7 +50,7 @@ $ make ergodox-ez-familiar-teensy ### Layers 1. Base Layer: QWERTY, with arrow keys at bottom right. 1. UCIS Layer: US-International symbols layer, plus —. Accessed by toggling the `INTL` layer using the UCIS key (bottom of left thumb cluster). -1. UCIS-Shifted Layer: Making shift work for UCIS characters. An ugly workaround. Any ideas? Accessed through holding shift while the UCIS layer is active (toggles the `INSF` layer). +1. UCIS-Shifted Layer: Making shift work for UCIS characters. An ugly workaround. Any ideas? Accessed by holding shift while the UCIS layer is active (toggles the `INSF` layer). 1. Numpad Layer: Right hand number pad. Accessed by toggling the `NUMP` layer using the NPAD key (bottom of right thumb cluster). 1. Function Layer: F1-F12, arrows on ESDF and HJKL, media player controls. Accessed by holding either FN key (center key of each thumb cluster), which toggles the `ARRW` layer. I know, I need to work on my naming conventions. diff --git a/keyboards/ergodox/keymaps/familiar/keymap.c b/keyboards/ergodox/keymaps/familiar/keymap.c index c5f94afda8..0e3958de01 100644 --- a/keyboards/ergodox/keymaps/familiar/keymap.c +++ b/keyboards/ergodox/keymaps/familiar/keymap.c @@ -31,7 +31,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | LCTRL | LGUI | MENU | ' | " | | [ | ] | LEFT | DOWN | RIGHT | * `------------------------------------' `------------------------------------' * ,-------------. ,-------------. - * | VOL- | VOL+ | | | | + * | VOL- | VOL+ | |PRTSCR| | * ,------|------|------| |------+------+------. * | SPC/ |SLASH/| MUTE | |NUMLCK|WHACK/| SPC/ | * | ALT | MO(1)|------| |------|MO(1) | ALT | @@ -54,7 +54,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENTER, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSPC, KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_RGHT, - _______, _______, + KC_PSCR, _______, KC_NLCK, TG(NUMP), LT(ARRW,KC_BSLS), ALT_T(KC_SPC) ), @@ -202,7 +202,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | HOME | PGDN | END | * `------------------------------------' `------------------------------------' * ,-------------. ,-------------. - * | | PAUSE| | | | + * | | PAUSE| |SYSREQ| | * ,------|------|------| |------+------+------. * | | | | |SCRLK | | | * | | |------| |------| | | @@ -225,7 +225,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, _______, _______, KC_HOME, KC_PGDN, KC_END, - _______, _______, + KC_SYSREQ, _______, KC_SLCK, _______, _______, _______ ), From 4cf17210b60eb7da77f66b8e5af1947a3d168f2f Mon Sep 17 00:00:00 2001 From: Stick Date: Fri, 2 Jun 2017 19:51:29 -0500 Subject: [PATCH 02/25] moved alt out from under space --- keyboards/ergodox/keymaps/familiar/keymap.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/keyboards/ergodox/keymaps/familiar/keymap.c b/keyboards/ergodox/keymaps/familiar/keymap.c index 0e3958de01..714118d93e 100644 --- a/keyboards/ergodox/keymaps/familiar/keymap.c +++ b/keyboards/ergodox/keymaps/familiar/keymap.c @@ -28,13 +28,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| END | | PGDN |------+------+------+------+------+--------| * | (/LSFT | Z | X | C | V | B | | | | N | M | , | . | UP | )/RSFT | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | LCTRL | LGUI | MENU | ' | " | | [ | ] | LEFT | DOWN | RIGHT | + * | LCTRL | LGUI | MENU | ' | LALT | |[/RALT| ] | LEFT | DOWN | RIGHT | * `------------------------------------' `------------------------------------' * ,-------------. ,-------------. * | VOL- | VOL+ | |PRTSCR| | * ,------|------|------| |------+------+------. - * | SPC/ |SLASH/| MUTE | |NUMLCK|WHACK/| SPC/ | - * | ALT | MO(1)|------| |------|MO(1) | ALT | + * | |SLASH/| MUTE | |NUMLCK|WHACK/| | + * | SPC | MO(1)|------| |------|MO(1) | SPC | * | | | LAY3 | | LAY2 | | | * `--------------------' `--------------------' */ @@ -44,19 +44,19 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_HOME, KC_GRV, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, - KC_LCTL, KC_LGUI, KC_MENU, KC_QUOT, S(KC_QUOT), + KC_LCTL, KC_LGUI, KC_MENU, KC_QUOT, KC_LALT, KC_VOLD, KC_VOLU, KC_MUTE, - ALT_T(KC_SPC), LT(ARRW,KC_SLSH), TG(INTL), + KC_SPC, LT(ARRW, KC_SLSH), TG(INTL), // right hand KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENTER, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSPC, - KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_RGHT, + MT(MOD_RALT, KC_LBRC), KC_RBRC, KC_LEFT, KC_DOWN, KC_RGHT, KC_PSCR, _______, KC_NLCK, - TG(NUMP), LT(ARRW,KC_BSLS), ALT_T(KC_SPC) + TG(NUMP), LT(ARRW, C_BSLS), KC_SPC ), /* layer 1: International symbols, etc From f397402e101774eedd1748b1e31c7386f927d4ed Mon Sep 17 00:00:00 2001 From: Stick Date: Fri, 2 Jun 2017 20:02:02 -0500 Subject: [PATCH 03/25] ugly workaround for ErgoDoxEZ LED bugs: turn 'em all off --- keyboards/ergodox/ez/ez.c | 42 ++++++++++---------- keyboards/ergodox/ez/matrix.c | 3 +- keyboards/ergodox/keymaps/familiar/keymap.c | 44 ++++++++++----------- 3 files changed, 44 insertions(+), 45 deletions(-) diff --git a/keyboards/ergodox/ez/ez.c b/keyboards/ergodox/ez/ez.c index 3e19f23028..55b51f6fa8 100644 --- a/keyboards/ergodox/ez/ez.c +++ b/keyboards/ergodox/ez/ez.c @@ -22,30 +22,30 @@ void matrix_init_kb(void) { PORTD |= (1<<5 | 1<<4); PORTE |= (1<<6); - ergodox_blink_all_leds(); + //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(); -} +// 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; @@ -57,7 +57,7 @@ uint8_t init_mcp23018(void) { // cli(); if (i2c_initialized == 0) { i2c_init(); // on pins D(1,0) - i2c_initialized++; + i2c_initialized = 1; _delay_ms(1000); } diff --git a/keyboards/ergodox/ez/matrix.c b/keyboards/ergodox/ez/matrix.c index 21b60a542e..a489e5b5cc 100644 --- a/keyboards/ergodox/ez/matrix.c +++ b/keyboards/ergodox/ez/matrix.c @@ -183,7 +183,7 @@ uint8_t matrix_scan(void) print("left side not responding\n"); } else { print("left side attached\n"); - ergodox_blink_all_leds(); +// ergodox_blink_all_leds(); } } } @@ -391,4 +391,3 @@ static void select_row(uint8_t row) } } } - diff --git a/keyboards/ergodox/keymaps/familiar/keymap.c b/keyboards/ergodox/keymaps/familiar/keymap.c index 714118d93e..513bb5541c 100644 --- a/keyboards/ergodox/keymaps/familiar/keymap.c +++ b/keyboards/ergodox/keymaps/familiar/keymap.c @@ -56,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { MT(MOD_RALT, KC_LBRC), KC_RBRC, KC_LEFT, KC_DOWN, KC_RGHT, KC_PSCR, _______, KC_NLCK, - TG(NUMP), LT(ARRW, C_BSLS), KC_SPC + TG(NUMP), LT(ARRW, KC_BSLS), KC_SPC ), /* layer 1: International symbols, etc @@ -242,26 +242,26 @@ 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 INTL: - case INSF: - ergodox_right_led_1_on(); - break; - case NUMP: - ergodox_right_led_2_on(); - break; - case ARRW: - ergodox_right_led_3_on(); - break; - default: - // none - break; - } + // 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 INTL: + // case INSF: + // ergodox_right_led_1_on(); + // break; + // case NUMP: + // ergodox_right_led_2_on(); + // break; + // case ARRW: + // ergodox_right_led_3_on(); + // break; + // default: + // // none + // break; + // } }; From 5a70cb30eecc8b76410e4b21a225b10c344e12c7 Mon Sep 17 00:00:00 2001 From: Stick Date: Thu, 8 Jun 2017 08:59:30 -0500 Subject: [PATCH 04/25] trying to fix LEDs --- keyboards/ergodox/keymaps/familiar/keymap.c | 42 ++++++++++----------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/keyboards/ergodox/keymaps/familiar/keymap.c b/keyboards/ergodox/keymaps/familiar/keymap.c index 513bb5541c..1dd1d5cbc1 100644 --- a/keyboards/ergodox/keymaps/familiar/keymap.c +++ b/keyboards/ergodox/keymaps/familiar/keymap.c @@ -242,26 +242,26 @@ 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 INTL: - // case INSF: - // ergodox_right_led_1_on(); - // break; - // case NUMP: - // ergodox_right_led_2_on(); - // break; - // case ARRW: - // ergodox_right_led_3_on(); - // break; - // default: - // // none - // break; - // } + 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 INTL: + case INSF: + ergodox_right_led_1_on(); + break; + case NUMP: + ergodox_right_led_2_on(); + break; + case ARRW: + ergodox_right_led_3_on(); + break; + default: + // none + break; + } }; From 4b50ab029d49830cf0efd0e5e0606cb39c8dabae Mon Sep 17 00:00:00 2001 From: Stick Date: Thu, 8 Jun 2017 08:59:33 -0500 Subject: [PATCH 05/25] Revert "ugly workaround for ErgoDoxEZ LED bugs: turn 'em all off" This reverts commit f397402e101774eedd1748b1e31c7386f927d4ed. --- keyboards/ergodox/ez/ez.c | 42 ++++++++++----------- keyboards/ergodox/ez/matrix.c | 3 +- keyboards/ergodox/keymaps/familiar/keymap.c | 2 +- 3 files changed, 24 insertions(+), 23 deletions(-) diff --git a/keyboards/ergodox/ez/ez.c b/keyboards/ergodox/ez/ez.c index 55b51f6fa8..3e19f23028 100644 --- a/keyboards/ergodox/ez/ez.c +++ b/keyboards/ergodox/ez/ez.c @@ -22,30 +22,30 @@ void matrix_init_kb(void) { PORTD |= (1<<5 | 1<<4); PORTE |= (1<<6); - //ergodox_blink_all_leds(); + 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(); -// } +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; @@ -57,7 +57,7 @@ uint8_t init_mcp23018(void) { // cli(); if (i2c_initialized == 0) { i2c_init(); // on pins D(1,0) - i2c_initialized = 1; + i2c_initialized++; _delay_ms(1000); } diff --git a/keyboards/ergodox/ez/matrix.c b/keyboards/ergodox/ez/matrix.c index a489e5b5cc..21b60a542e 100644 --- a/keyboards/ergodox/ez/matrix.c +++ b/keyboards/ergodox/ez/matrix.c @@ -183,7 +183,7 @@ uint8_t matrix_scan(void) print("left side not responding\n"); } else { print("left side attached\n"); -// ergodox_blink_all_leds(); + ergodox_blink_all_leds(); } } } @@ -391,3 +391,4 @@ static void select_row(uint8_t row) } } } + diff --git a/keyboards/ergodox/keymaps/familiar/keymap.c b/keyboards/ergodox/keymaps/familiar/keymap.c index 1dd1d5cbc1..714118d93e 100644 --- a/keyboards/ergodox/keymaps/familiar/keymap.c +++ b/keyboards/ergodox/keymaps/familiar/keymap.c @@ -56,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { MT(MOD_RALT, KC_LBRC), KC_RBRC, KC_LEFT, KC_DOWN, KC_RGHT, KC_PSCR, _______, KC_NLCK, - TG(NUMP), LT(ARRW, KC_BSLS), KC_SPC + TG(NUMP), LT(ARRW, C_BSLS), KC_SPC ), /* layer 1: International symbols, etc From 23b0fc20e3c94972db7ff897854d2b0513937d71 Mon Sep 17 00:00:00 2001 From: npoirey Date: Fri, 7 Oct 2016 17:18:49 +0200 Subject: [PATCH 06/25] Frenchdev v1 --- keyboards/frenchdev/Makefile | 5 + keyboards/frenchdev/config.h | 34 ++ keyboards/frenchdev/frenchdev.c | 4 + keyboards/frenchdev/frenchdev.h | 7 + .../keymaps/default/keyboard-layout.png | Bin 0 -> 138511 bytes keyboards/frenchdev/keymaps/default/keymap.c | 409 ++++++++++++++++++ keyboards/frenchdev/readme.md | 53 +++ keyboards/frenchdev/rules.mk | 79 ++++ keyboards/frenchdev/v1/Makefile | 8 + keyboards/frenchdev/v1/config.h | 68 +++ keyboards/frenchdev/v1/i2cmaster.h | 178 ++++++++ keyboards/frenchdev/v1/matrix.c | 394 +++++++++++++++++ keyboards/frenchdev/v1/rules.mk | 80 ++++ keyboards/frenchdev/v1/twimaster.c | 208 +++++++++ keyboards/frenchdev/v1/v1.c | 86 ++++ keyboards/frenchdev/v1/v1.h | 116 +++++ 16 files changed, 1729 insertions(+) create mode 100644 keyboards/frenchdev/Makefile create mode 100644 keyboards/frenchdev/config.h create mode 100644 keyboards/frenchdev/frenchdev.c create mode 100644 keyboards/frenchdev/frenchdev.h create mode 100644 keyboards/frenchdev/keymaps/default/keyboard-layout.png create mode 100644 keyboards/frenchdev/keymaps/default/keymap.c create mode 100644 keyboards/frenchdev/readme.md create mode 100644 keyboards/frenchdev/rules.mk create mode 100644 keyboards/frenchdev/v1/Makefile create mode 100644 keyboards/frenchdev/v1/config.h create mode 100644 keyboards/frenchdev/v1/i2cmaster.h create mode 100644 keyboards/frenchdev/v1/matrix.c create mode 100644 keyboards/frenchdev/v1/rules.mk create mode 100644 keyboards/frenchdev/v1/twimaster.c create mode 100644 keyboards/frenchdev/v1/v1.c create mode 100644 keyboards/frenchdev/v1/v1.h diff --git a/keyboards/frenchdev/Makefile b/keyboards/frenchdev/Makefile new file mode 100644 index 0000000000..73a289f1d4 --- /dev/null +++ b/keyboards/frenchdev/Makefile @@ -0,0 +1,5 @@ +SUBPROJECT_DEFAULT = v1 + +ifndef MAKEFILE_INCLUDED + include ../../Makefile +endif diff --git a/keyboards/frenchdev/config.h b/keyboards/frenchdev/config.h new file mode 100644 index 0000000000..f535010ef1 --- /dev/null +++ b/keyboards/frenchdev/config.h @@ -0,0 +1,34 @@ +#ifndef KEYBOARDS_ERGODOX_CONFIG_H_ +#define KEYBOARDS_ERGODOX_CONFIG_H_ + +#define MOUSEKEY_INTERVAL 20 +#define MOUSEKEY_DELAY 0 +#define MOUSEKEY_TIME_TO_MAX 5 +#define MOUSEKEY_MAX_SPEED 2 +#define MOUSEKEY_WHEEL_DELAY 0 + +#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_v1 + #include "v1/config.h" +#endif + + +#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */ diff --git a/keyboards/frenchdev/frenchdev.c b/keyboards/frenchdev/frenchdev.c new file mode 100644 index 0000000000..ecc1021696 --- /dev/null +++ b/keyboards/frenchdev/frenchdev.c @@ -0,0 +1,4 @@ +#include "frenchdev.h" +#include "debug.h" +#include "action_layer.h" + diff --git a/keyboards/frenchdev/frenchdev.h b/keyboards/frenchdev/frenchdev.h new file mode 100644 index 0000000000..60afda21d6 --- /dev/null +++ b/keyboards/frenchdev/frenchdev.h @@ -0,0 +1,7 @@ +#ifndef KEYBOARDS_ERGODOX_ERGODOX_H_ +#define KEYBOARDS_ERGODOX_ERGODOX_H_ +#ifdef SUBPROJECT_v1 + #include "v1.h" +#endif + +#endif /* KEYBOARDS_ERGODOX_ERGODOX_H_ */ diff --git a/keyboards/frenchdev/keymaps/default/keyboard-layout.png b/keyboards/frenchdev/keymaps/default/keyboard-layout.png new file mode 100644 index 0000000000000000000000000000000000000000..40f556f4381be4cc6c486f80cc0617a69feb363a GIT binary patch literal 138511 zcmeAS@N?(olHy`uVBq!ia0y~yU{PUUU_8sg#=yXE?CGi}3=9eko-U3d6>)F&a?TLB zdef}tyOFVN_W4r`n>XxiNiA?TV3HCK5EFD26j3=Qq1v(N-$e6gzvG?unX4Vk2naFh z?A)`4OM{X1sHo%}hY+_I2bQ+RM2WPvo7Ky!zElR-fB> zKB)9vvHkbO&95`EvQFh@Xa8P)HEZsp606`N_b-P#H3%rMa4=$_7CAaBzZ@AH92~E$ zsX24;<(E2dqO88%?-W*dD=jO_Gne4WRGZA{w%Bmi?+fXi*h~N$TcDh<`R0Y2H#wJI z&NQ5T*8c42)4wMP3$^ph=b6s*iCnpIC5yPC1BU=p3j-F)&~d@;-O^&+OPALF|Ce_6 z;$rvz*I$;LJ9p|-*U7Ul7Gc!`7VO~IvTfU;1cN`ZvS_1Q zLu-CXNy(NMbw3`mr`Ofht$FW$T^)PSfIRloW5LdyH&nA17 zSRxwa8vzBUreD}10BqtBSw#6RjXDVsJnJ5(QI~LU|?gXuzJ$7GcyzHFFSH% za55^XY`GE@5{41;0X&Ruc4uZ7GV`95%{VX9a;uDa!mOn?z9!c#d}sFM>?Y;KZxy)C zNJi`~)14?}$UZl3feMq0heoGbthOSDf!gk+OH~!W_kCGrX=ypuV-huVkhc3a~zRlR8mRmH@vIp#$ogAMsmf!pU)Gw zTVJTZaMN&?caC25j|YqrJXLp!&)Y`qC`io7a|%~QNj@AM47ab$GW;BNMJ(=Zb>C%9 zi!}|G75@aEUU-@L&3rr73omQDu0FqF9kDyjG`D8u(!DEW6hWCt#igW4N-$zih2g!w z3GAzSn=dAruG-k4csj*z>%ud?bl3g58KD!kMdQiO5+;-qsiBBt!`Zdv+U3dR*(;yB zN=hcacB)#%nW?$*LZj}VxeUK;?OWFSeN6us`set6fjY&zOPF@IpYt_(VN-YhpUR)R zoa#E)@*;NWHW;35pCU0awt4ljo&~(?KSVd2^D$s@@le^p_~P3q!HB(8rqgWpid>Cc zd@*9vX z&&qaQH`xifr#>kvE?Lqtd%_1bZ3}rpKFxz19RC(++_~>+#c_WZ2iN!aw&%0AZaH`? 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

vaddu6j!~o=##g9H>>eT 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 literal 0 HcmV?d00001 diff --git a/keyboards/frenchdev/keymaps/default/keymap.c b/keyboards/frenchdev/keymaps/default/keymap.c new file mode 100644 index 0000000000..e0a05cb3c6 --- /dev/null +++ b/keyboards/frenchdev/keymaps/default/keymap.c @@ -0,0 +1,409 @@ +#include "frenchdev.h" +#include "mousekey.h" +#include "action.h" +#include "action_layer.h" +#include "keymap_extras/keymap_bepo.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 _BASE 0 +#define _SYMBOLS 1 +#define _MEDIA 2 +#define _TRNS 8 + +#define PEDAL_DELAY 250 +#define KEY_DELAY 130 + +enum macros { + M_LP, // left pedal + M_RP, // right pedal + M_SF, // shift + M_SFS, // shift and space + M_L1E, // L1 and space + L2INS, // L2 and insert + L2LOC, // Lock L2 + M_UN, // undo + M_CUT, // cut + M_CP, // copy + M_PS, // paste + M_SE, // search + M_SFU, // shift and underscore +}; + +static uint16_t key_timer_left_pedal; +static uint16_t key_timer_right_pedal; +static uint16_t key_timer_shift; +static uint16_t key_timer_1; +static uint16_t key_timer_2; + +static uint16_t shift_count = 0; //this is used to keep track of shift state and avoid inserting non breakable space +static uint16_t l2_locked = 0; //this indicate wether L2 is locked + +#define BP_CBSP CTL_T(KC_BSPC) +#define BP_CDEL CTL_T(KC_DEL) + +//layout : http://www.keyboard-layout-editor.com/#/gists/4480e3ab8026eb7c710a7e22203ef4aa +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* base + * left foot clicked is right click + * left foot pressed is layer 2 + * right foot clicked is left click + * right foot pressed is layer 1 + scroll lock (used with autohotkey for easier scrolling with trackballs) + * ,------. .. ,------. * + * ,------| F3 |-------------. .. ,-------------| F10 |------. * + * ,------| F2 |------| F4 | F5 |------. .. ,------| F8 | F9 |------| F11 |------. * + * | F1 |------| »/3 |------|------| F6 | .. | F7 |------|------| -/8 |------| F12 | * + * ,------+------| «/2 |------| (/4 | )/5 |------| .. |------| @/6 | +/7 |------| //9 |------+------. * + * | ESC | "/1 |------| O |------|------| ¨ | .. | ^ |------|------| D |------| * /0 |BCKSP | * + * |------+------| É |------| P | È |------| .. |------| K | V |------| L |------+------| * + * | TAB | B |------| E |------|------| _ | .. | =/° |------|------| S |------| J |ENTER | * + * |------+------| U |------| I | F |------| .. |------| C | T |------| R |------+------| * + * | ` | A |------| Y |------|------| ; | .. | ! |------|------| UP |------| N | '/? | * + * |------+------| À |------| X | W |------|-------------. .. .-------------|------| M | G |------| H |------+------| * + * | SHIFT| Z |------| . |------|------|sp/sh |bsp/ct|L2/ins| .. |L2lock|del/CT|sp/sh |------|------| DOWN |------| Q |SHIFT | * + * |------+------| / |------| , | space|------|------|------ .. ------|------|------| L1/sp| LEFT |------| UP |------+------| * + * | CTRL | win |------/ \-------------| L1 | alt | .. | CAPS | L1 |-------------/ \------| : | CTRL | * + * `-------------/ \-------------/ .. \-------------/ \-------------/ * + *M(M_LP) + */ +[_BASE] = KEYMAP( + 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_ESC, BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN, BP_DTRM, BP_DCRC, BP_AT, BP_PLUS, BP_MINS, BP_SLSH, BP_ASTR, KC_BSPC, \ + KC_TAB, BP_B, BP_ECUT, BP_O, BP_P, BP_EGRV, BP_UNDS, BP_EQL, BP_K, BP_V, BP_D, BP_L, BP_J, KC_ENT, \ + BP_GRV, BP_A, BP_U, BP_E, BP_I, BP_F, BP_SCLN, BP_EXLM, BP_C, BP_T, BP_S, BP_R, BP_N, BP_APOS, \ + M(M_SF), BP_Z, BP_AGRV, BP_Y, BP_X, BP_W, M(M_SFS), BP_CBSP, M(L2INS), M(L2LOC), BP_CDEL, M(M_SFS),BP_M, BP_G, KC_UP, BP_H, BP_Q, M(M_SF), \ + KC_LCTL, KC_LGUI, KC_PSLS, BP_DOT, BP_COMM, KC_SPACE,M(M_L1E), KC_LALT, KC_CAPS, M(M_L1E),KC_SPACE,KC_LEFT, KC_DOWN, KC_RIGHT,BP_COLN, KC_RCTL, \ + //left pedals + M(M_LP), M(M_RP), KC_TRNS, \ + //right pedals + M(M_LP), M(M_RP), KC_TRNS \ +), + + /* Larer 1 for symbols. + * left foot is middle click + * ,------. .. ,------. * + * ,------| |-------------. .. ,-------------| |------. * + * ,------| |------| | |------. .. ,------| | |------| |------. * + * | |------| § |------|------| | .. | |------|------| ± |------| | * + * ,------+------| ¶ |------| µ | |------| .. |------| ≤ | ≥ |------| ÷ |------+------. * + * | | ¤ |------| { |------|------| ~ | .. | ˇ |------|------| ] |------| × | | * + * |------+------| * |------| } | ` |------| .. |------| # | [ |------| % |------+------| * + * | | \ |------| ( |------|------| | .. | ≠ |------|------| > |------| ‰ | | * + * |------+------| Ù |------| ) | + |------| .. |------| Ç | < |------| & |------+------| * + * | | = |------| copy |------|------| : | .. | ? |------|------| PGUP |------| _ | | * + * |------+------| cut |------| paste|search|------|-------------. .. .-------------|------| $ | = |------| | |------+------| * + * | | undo |------| \ |------|------| | | | .. | | | |------|------| PGDN |------| / | | * + * |------+------| |------| | |------|------|------ .. ------|------|------| | HOME |------| PGDN |------+------| * + * | | |------/ \-------------| | | .. | | |-------------/ \------| | | * + * `-------------/ \-------------/ .. \-------------/ \-------------/ * + * + */ +[_SYMBOLS] = 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, BP_DCUR, BP_PARG, BP_SECT, BP_DGRK, KC_TRNS, BP_TILD, BP_DCAR, BP_LEQL, BP_GEQL, BP_PSMS, BP_OBEL, BP_TIMS, KC_TRNS, \ + KC_TRNS, BP_BSLS, BP_ASTR, BP_LCBR, BP_RCBR, BP_GRV, KC_TRNS, BP_DIFF, BP_HASH, BP_LBRC, BP_RBRC, BP_PERC, BP_PMIL, KC_TRNS, \ + KC_TRNS, BP_EQL, BP_UGRV, BP_LPRN, BP_RPRN, BP_PLUS, BP_COLN, BP_QEST, BP_CCED, BP_LESS, BP_GRTR, BP_AMPR, BP_UNDS, KC_TRNS, \ + KC_TRNS, M(M_UN), M(M_CUT),M(M_CP), M(M_PS), M(M_SE), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, BP_DLR, BP_EQL, KC_PGUP, BP_PIPE, BP_SLSH, KC_TRNS, \ + KC_TRNS, KC_TRNS, BP_BSLS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END, KC_TRNS, KC_TRNS, \ + //left pedals + KC_TRNS, KC_BTN1, KC_TRNS, \ + //right pedals + KC_TRNS, KC_BTN1, KC_TRNS \ +), + + /* MEDIA, mouse and numpad. + * right pedal is left clic + * ,------. .. ,------. * + * ,------|PAUSE |-------------. .. ,-------------| PRINT|------. * + * ,------|SCROLL|------|MUTE |VOLUD |------. .. ,------| pre | next |------| calc |------. * + * |RESET |------| stop |------|------|VOLDU | .. | play |------|------| stop |------| num | * + * ,------+------| |------| pre | next |------| .. |------| pre | next |------| |------+------. * + * | | |------|scrolu|------|------| play | .. | play |------|------| 8 |------| - | | * + * |------+------| |------| | bt4 |------| .. |------| next | 7 |------| 9 |------+------| * + * | | |------|scrold|------|------| bt5 | .. | pre |------|------| 5 |------| + | | * + * |------+------| |------|mclic | rclic|------| .. |------| rclic| 4 |------| 6 |------+------| * + * | | |------| |------|------| lclic| .. | lclic|------|------| 2 |------| * | | * + * |------+------| |------| | mclck|------|-------------. .. .-------------|------| mclic| 1 |------| 3 |------+------| * + * | | |------| |------|------| | | | .. | | | |------|------| num. |------| / | | * + * |------+------| |------| | |------|------|------ .. ------|------|------| | 0 |------| . |------+------| * + * | | |------/ \-------------| | | .. | | |-------------/ \------| , | | * + * `-------------/ \-------------/ .. \-------------/ \-------------/ * + * + */ +[_MEDIA] = KEYMAP( + RESET, KC_SLCK, KC_PAUS, KC_MUTE, KC_VOLD, KC_VOLU, KC_MUTE, KC_VOLD, KC_VOLU, KC_PSCR, KC_CALC, KC_NLCK, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_MSTP, KC_MPRV, KC_MNXT, KC_MPLY, KC_MPLY, KC_MPRV, KC_MNXT, KC_MSTP, KC_TRNS, KC_PMNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_WH_U, KC_TRNS, KC_BTN4, KC_BTN5, KC_BTN4, KC_BTN5, KC_KP_7, KC_KP_8, KC_KP_9, KC_PPLS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_WH_D, KC_BTN3, KC_BTN2, KC_BTN1, KC_BTN1, KC_BTN2, KC_KP_4, KC_KP_5, KC_KP_6, KC_PAST, KC_TRNS, \ + KC_TRNS, M(M_UN), M(M_CUT),M(M_CP), M(M_PS), KC_BTN3, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN3, KC_KP_1, KC_KP_2, KC_KP_3, KC_PSLS, KC_TRNS, \ + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_KP_0, KC_PDOT, BP_DOT, BP_COMM, KC_TRNS, \ + //left pedals + KC_BTN3, M(M_RP), KC_TRNS, \ + //right pedals + KC_BTN3, M(M_RP), KC_TRNS \ +), + +/* TRNS - skeleton for laters + * ,------. .. ,------. * + * ,------| |-------------. .. ,-------------| |------. * + * ,------| |------| | |------. .. ,------| | |------| |------. * + * | |------| |------|------| | .. | |------|------| |------| | * + * ,------+------| |------| | |------| .. |------| | |------| |------+------. * + * | | |------| |------|------| | .. | |------|------| |------| | | * + * |------+------| |------| | |------| .. |------| | |------| |------+------| * + * | | |------| |------|------| | .. | |------|------| |------| | | * + * |------+------| |------| | |------| .. |------| | |------| |------+------| * + * | | |------| |------|------| | .. | |------|------| |------| | | * + * |------+------| |------| | |------|-------------. .. .-------------|------| | |------| |------+------| * + * | | |------| |------|------| | | | .. | | | |------|------| |------| | | * + * |------+------| |------| | |------|------|------ .. ------|------|------| | |------| |------+------| * + * | | |------/ \-------------| | | .. | | |-------------/ \------| | | * + * `-------------/ \-------------/ .. \-------------/ \-------------/ * + * + */ + +[_TRNS] = 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, \ + //left pedals + KC_BTN3, M(M_RP), KC_TRNS, \ + //right pedals + KC_BTN3, M(M_RP), KC_TRNS \ +), + +}; + + +const uint16_t PROGMEM fn_actions[] = { + +}; + +void hold_shift(void) { + shift_count = shift_count + 1; + register_code(KC_LSHIFT); +} + +void release_shift(void) { + shift_count = shift_count - 1; + if(shift_count <= 0){ + unregister_code(KC_LSHIFT); + shift_count = 0; + } +} + +void press_space(void) { + if(shift_count > 0) unregister_code (KC_LSHIFT); + register_code (KC_SPACE); + unregister_code (KC_SPACE); + if(shift_count > 0) register_code (KC_LSHIFT); +} + +void press_enter(void) { + if(shift_count > 0) unregister_code (KC_LSHIFT); + register_code (KC_ENT); + unregister_code (KC_ENT); + if(shift_count > 0) register_code (KC_LSHIFT); +} + +void press_underscore(void) { + if(shift_count > 0) unregister_code (KC_LSHIFT); + register_code (BP_UNDS); + unregister_code (BP_UNDS); + if(shift_count > 0) register_code (KC_LSHIFT); +} + +const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) +{ + switch(id) { + case M_LP: //left pedal + if (record->event.pressed) { + layer_on(1); + register_code (KC_SLCK); + key_timer_left_pedal = timer_read(); // if the key is being pressed, we start the timer. + } else { + if (timer_elapsed(key_timer_left_pedal) < KEY_DELAY) { + mousekey_on (KC_BTN2); + mousekey_send(); + mousekey_off (KC_BTN2); + mousekey_send(); + } + unregister_code (KC_SLCK); + layer_off(1); + } + break; + case M_RP: //right pedal + if (record->event.pressed) { + layer_on(2); + key_timer_right_pedal = timer_read(); // if the key is being pressed, we start the timer. + } else { + if (timer_elapsed(key_timer_right_pedal) < PEDAL_DELAY) { + mousekey_on (KC_BTN1); + mousekey_send(); + mousekey_off (KC_BTN1); + mousekey_send(); + } + layer_off(2); + } + break; + case M_SF: // shift, using macro to keep track of shift state and avoid inserting nbsp by mistake + if (record->event.pressed) { + hold_shift(); + } else { + release_shift(); + } + break; + case M_SFS: // shift when held, space when tapped + if (record->event.pressed) { + hold_shift(); + key_timer_shift = timer_read(); // if the key is being pressed, we start the timer. + } else { + if (timer_elapsed(key_timer_shift) < KEY_DELAY) { + press_space(); + } + release_shift(); + } + break; + case M_SFU: // shift when held, _ when tapped + if (record->event.pressed) { + hold_shift(); + key_timer_shift = timer_read(); // if the key is being pressed, we start the timer. + } else { + if (timer_elapsed(key_timer_shift) < KEY_DELAY) { + press_space(); + } + release_shift(); + } + break; + case M_L1E: // L1 when held, space when tapped + if (record->event.pressed) { + layer_on(1); + key_timer_1 = timer_read(); // if the key is being pressed, we start the timer. + } else { + if (timer_elapsed(key_timer_1) < KEY_DELAY) { + press_enter(); + } + layer_off(1); + } + break; + case L2INS: //activate layer 2, if released before 100ms trigger INS. basicaly equivalent to LT(2, KC_INS) but without delay for activation of layer 2 + if (record->event.pressed) { + layer_on(2); + key_timer_2 = timer_read(); // if the key is being pressed, we start the timer. + } else { + if (timer_elapsed(key_timer_2) < KEY_DELAY) { + register_code (KC_INS); + unregister_code (KC_INS); + } + l2_locked = 0; + layer_off(2); + } + break; + case L2LOC: //lock L2 + if (record->event.pressed) { + key_timer_2 = timer_read(); // if the key is being pressed, we start the timer. + layer_on(2); + } else { + if (timer_elapsed(key_timer_2) < KEY_DELAY && l2_locked == 0) { + l2_locked = 1; + layer_on(2); + } else { + l2_locked = 0; + layer_off(2); + } + } + break; + case M_UN: // undo + if (record->event.pressed) { + register_code(KC_LCTL); + register_code(BP_Z); + unregister_code(BP_Z); + unregister_code(KC_LCTL); + } + break; + case M_CUT: // cut + if (record->event.pressed) { + register_code(KC_LCTL); + register_code(BP_X); + unregister_code(BP_X); + unregister_code(KC_LCTL); + } + break; + case M_CP: // copy + if (record->event.pressed) { + register_code(KC_LCTL); + register_code(BP_C); + unregister_code(BP_C); + unregister_code(KC_LCTL); + } + break; + case M_PS: // paste + if (record->event.pressed) { + register_code(KC_LCTL); + register_code(BP_V); + unregister_code(BP_V); + unregister_code(KC_LCTL); + } + break; + case M_SE: // search + if (record->event.pressed) { + register_code(KC_LCTL); + register_code(BP_F); + unregister_code(BP_F); + unregister_code(KC_LCTL); + } + break; + } + return MACRO_NONE; +}; + +void action_function(keyrecord_t *record, uint8_t id, uint8_t opt) { + +} + +void matrix_init_user(void) { +} + +// Bleah globals need to be initialized. +uint8_t old_layer=_BASE; + +void matrix_scan_user(void) { + uint8_t layer = biton32(layer_state); + + ergodox_right_led_1_off(); + ergodox_right_led_2_off(); + switch (layer) { + case _BASE: + ergodox_right_led_2_on(); + break; + case _SYMBOLS: + ergodox_right_led_1_on(); + break; + case _MEDIA: + ergodox_right_led_1_on(); + ergodox_right_led_2_on(); + default: + // none + break; + } +} + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + return true; +} + +void led_set_user(uint8_t usb_led) { + if (usb_led & (1< +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 FRENCHDEV_V1_CONFIG_H +#define FRENCHDEV_V1_CONFIG_H + +#include "../config.h" + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x1307 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Sacapuces +#define PRODUCT Frenchdev V1 +#define DESCRIPTION QMK keyboard firmware for Frenchdev + +/* key matrix size */ +#define MATRIX_ROWS 16 +#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 + +#define USB_MAX_POWER_CONSUMPTION 500 + +/* + * 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/frenchdev/v1/i2cmaster.h b/keyboards/frenchdev/v1/i2cmaster.h new file mode 100644 index 0000000000..3917b9e6c0 --- /dev/null +++ b/keyboards/frenchdev/v1/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/frenchdev/v1/matrix.c b/keyboards/frenchdev/v1/matrix.c new file mode 100644 index 0000000000..70fa6a696d --- /dev/null +++ b/keyboards/frenchdev/v1/matrix.c @@ -0,0 +1,394 @@ +/* + +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 + +Note to self, the "column" and "row" in here actually refers to the opposite on the keyboard +see definition of KEYMAP in v1.h, the grid is transposed so that a "row" in here is actually a "column" on the physical keyboard +Nicolas + +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 "v1.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 + debug_enable = true; + debug_matrix = true; + debug_keyboard = true; + debug_mouse = true; + + 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_quantum(); + +} + +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< +#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( \ + \ + k01, k02, k03, k04, k05, k06, k09, k0a, k0b, k0c, k0d, k0e, \ + k10, k11, k12, k13, k14, k15, k16, k19, k1a, k1b, k1c, k1d, k1e, k1f, \ + k20, k21, k22, k23, k24, k25, k26, k29, k2a, k2b, k2c, k2d, k2e, k2f, \ + k30, k31, k32, k33, k34, k35, k36, k39, k3a, k3b, k3c, k3d, k3e, k3f, \ + k40, k41, k42, k43, k44, k45, k46, k47, k37, k38, k48, k49, k4a, k4b, k4c, k4d, k4e, k4f, \ + k50, k51, k52, k53, k54, k55, k56, k57, k58, k59, k5a, k5b, k5c, k5d, k5e, k5f, \ + \ + PL1, PL2, PL3, \ + PR1, PR2, PR3 \ + ) \ + \ + /* matrix positions, inverted left and right for I2C to be on row 0-7 */\ + { \ + \ + { k5f, k4f, k3f, k2f, k1f, KC_NO}, \ + { k5e, k4e, k3e, k2e, k1e, k0e }, \ + { k5d, k4d, k3d, k2d, k1d, k0d }, \ + { k5c, k4c, k3c, k2c, k1c, k0c }, \ + { k5b, k4b, k3b, k2b, k1b, k0b }, \ + { k5a, k4a, k3a, k2a, k1a, k0a }, \ + { k59, k49, k39, k29, k19, k09 }, \ + { k58, k48, k38, PR1, PR2, PR3 }, \ + \ + { k57, k47, k37, PL1, PL2, PL3 }, \ + { k56, k46, k36, k26, k16, k06 }, \ + { k55, k44, k35, k25, k15, k05 }, \ + { k54, k44, k34, k24, k14, k04 }, \ + { k53, k43, k33, k23, k13, k03 }, \ + { k52, k42, k32, k22, k12, k02 }, \ + { k51, k41, k31, k21, k11, k01 }, \ + { k50, k40, k30, k20, k10, KC_NO } \ + } + +#endif From 0fb835c54c02926ec76635741567bf63bd55dce4 Mon Sep 17 00:00:00 2001 From: npoirey Date: Thu, 22 Jun 2017 10:47:44 +0200 Subject: [PATCH 07/25] Fix warning in frenchdev --- keyboards/frenchdev/keymaps/default/keymap.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/keyboards/frenchdev/keymaps/default/keymap.c b/keyboards/frenchdev/keymaps/default/keymap.c index e0a05cb3c6..035e0179d3 100644 --- a/keyboards/frenchdev/keymaps/default/keymap.c +++ b/keyboards/frenchdev/keymaps/default/keymap.c @@ -212,8 +212,8 @@ void press_enter(void) { void press_underscore(void) { if(shift_count > 0) unregister_code (KC_LSHIFT); - register_code (BP_UNDS); - unregister_code (BP_UNDS); + register_code ((unsigned char) BP_UNDS); + unregister_code ((unsigned char) BP_UNDS); if(shift_count > 0) register_code (KC_LSHIFT); } From a012c24225e2deb1269d2a9bd2e1e76b0a6a4375 Mon Sep 17 00:00:00 2001 From: npoirey Date: Thu, 22 Jun 2017 22:19:50 +0200 Subject: [PATCH 08/25] Removed image from git and added references to imgur album for Frenchdev keyboard. --- .../keymaps/default/keyboard-layout.png | Bin 138511 -> 0 bytes keyboards/frenchdev/readme.md | 9 +++++++++ 2 files changed, 9 insertions(+) delete mode 100644 keyboards/frenchdev/keymaps/default/keyboard-layout.png diff --git a/keyboards/frenchdev/keymaps/default/keyboard-layout.png b/keyboards/frenchdev/keymaps/default/keyboard-layout.png deleted file mode 100644 index 40f556f4381be4cc6c486f80cc0617a69feb363a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 138511 zcmeAS@N?(olHy`uVBq!ia0y~yU{PUUU_8sg#=yXE?CGi}3=9eko-U3d6>)F&a?TLB zdef}tyOFVN_W4r`n>XxiNiA?TV3HCK5EFD26j3=Qq1v(N-$e6gzvG?unX4Vk2naFh z?A)`4OM{X1sHo%}hY+_I2bQ+RM2WPvo7Ky!zElR-fB> zKB)9vvHkbO&95`EvQFh@Xa8P)HEZsp606`N_b-P#H3%rMa4=$_7CAaBzZ@AH92~E$ zsX24;<(E2dqO88%?-W*dD=jO_Gne4WRGZA{w%Bmi?+fXi*h~N$TcDh<`R0Y2H#wJI z&NQ5T*8c42)4wMP3$^ph=b6s*iCnpIC5yPC1BU=p3j-F)&~d@;-O^&+OPALF|Ce_6 z;$rvz*I$;LJ9p|-*U7Ul7Gc!`7VO~IvTfU;1cN`ZvS_1Q zLu-CXNy(NMbw3`mr`Ofht$FW$T^)PSfIRloW5LdyH&nA17 zSRxwa8vzBUreD}10BqtBSw#6RjXDVsJnJ5(QI~LU|?gXuzJ$7GcyzHFFSH% za55^XY`GE@5{41;0X&Ruc4uZ7GV`95%{VX9a;uDa!mOn?z9!c#d}sFM>?Y;KZxy)C zNJi`~)14?}$UZl3feMq0heoGbthOSDf!gk+OH~!W_kCGrX=ypuV-huVkhc3a~zRlR8mRmH@vIp#$ogAMsmf!pU)Gw zTVJTZaMN&?caC25j|YqrJXLp!&)Y`qC`io7a|%~QNj@AM47ab$GW;BNMJ(=Zb>C%9 zi!}|G75@aEUU-@L&3rr73omQDu0FqF9kDyjG`D8u(!DEW6hWCt#igW4N-$zih2g!w z3GAzSn=dAruG-k4csj*z>%ud?bl3g58KD!kMdQiO5+;-qsiBBt!`Zdv+U3dR*(;yB zN=hcacB)#%nW?$*LZj}VxeUK;?OWFSeN6us`set6fjY&zOPF@IpYt_(VN-YhpUR)R zoa#E)@*;NWHW;35pCU0awt4ljo&~(?KSVd2^D$s@@le^p_~P3q!HB(8rqgWpid>Cc zd@*9vX z&&qaQH`xifr#>kvE?Lqtd%_1bZ3}rpKFxz19RC(++_~>+#c_WZ2iN!aw&%0AZaH`? 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

vaddu6j!~o=##g9H>>eT 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 diff --git a/keyboards/frenchdev/readme.md b/keyboards/frenchdev/readme.md index 34962bad51..0d79930ac0 100644 --- a/keyboards/frenchdev/readme.md +++ b/keyboards/frenchdev/readme.md @@ -1,5 +1,14 @@ # My take on a splitted keyboard +default layout : +[default layout](http://i.imgur.com/r2Nvr4p.png) + +the thing when finished : +http://imgur.com/a/6FY8v + +concept and mockup: +http://imgur.com/a/R0vvs + to build : docker run --rm -e keymap=default -e subproject=v1 -e keyboard=frenchdev --rm -v D:/Repositories/qmk:/qmk:rw edasque/qmk_firmware From 98373f2fc1ee149a2fd0ac9fab74464f2cfd4b81 Mon Sep 17 00:00:00 2001 From: Stick Date: Thu, 22 Jun 2017 22:22:43 -0500 Subject: [PATCH 09/25] added tapdance locking --- keyboards/ergodox/keymaps/familiar/Makefile | 1 + keyboards/ergodox/keymaps/familiar/keymap.c | 109 ++++++++++++-------- 2 files changed, 66 insertions(+), 44 deletions(-) create mode 100644 keyboards/ergodox/keymaps/familiar/Makefile diff --git a/keyboards/ergodox/keymaps/familiar/Makefile b/keyboards/ergodox/keymaps/familiar/Makefile new file mode 100644 index 0000000000..31e0fcf293 --- /dev/null +++ b/keyboards/ergodox/keymaps/familiar/Makefile @@ -0,0 +1 @@ +TAP_DANCE_ENABLE=yes diff --git a/keyboards/ergodox/keymaps/familiar/keymap.c b/keyboards/ergodox/keymaps/familiar/keymap.c index 714118d93e..fb326b3ddf 100644 --- a/keyboards/ergodox/keymaps/familiar/keymap.c +++ b/keyboards/ergodox/keymaps/familiar/keymap.c @@ -3,10 +3,13 @@ #include "action_layer.h" #include "version.h" +// Leader Key Timeout +//#define LEADER_TIMEOUT 300 + // Layers #define BASE 0 // default layer -#define INTL 1 // international symbols -#define INSF 2 // international symbols shifted +#define SYMB 1 // international symbols +#define CSYM 2 // international symbols shifted #define NUMP 3 // numpad #define ARRW 4 // function, media, arrow keys @@ -14,63 +17,81 @@ #define _______ KC_TRNS #define XXXXXXX KC_NO +// Tap Dancing +void dance_lock (qk_tap_dance_state_t *state, void *user_data) { + if (state->count == 1) { // Press once for NUMLOCK + register_code (KC_NLCK); + unregister_code (KC_NLCK); + } else if (state->count == 2) { // Press twice for CAPSLOCK + register_code (KC_CAPS); + unregister_code (KC_CAPS); + } else if (state->count == 3) { //Press thrice for SCROLLLOCK + register_code (KC_SLCK); + unregister_code (KC_SLCK); + } +} +enum {LOCKS = 0}; +qk_tap_dance_action_t tap_dance_actions[] = { + [LOCKS] = ACTION_TAP_DANCE_FN(dance_lock) +}; + 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_* /* layer 0 : default * * ,--------------------------------------------------. ,--------------------------------------------------. - * | ESC | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | - | = | BCKSPC | + * | ` | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | 0 | - | = | BCKSPC | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | TAB | Q | W | E | R | T | HOME | | PGUP | Y | U | I | O | P | DELETE | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | ` | A | S | D | F | G |------| |------| H | J | K | L | ; | ENTER | + * | ' | A | S | D | F | G |------| |------| H | J | K | L | ; | ENTER | * |--------+------+------+------+------+------| END | | PGDN |------+------+------+------+------+--------| * | (/LSFT | Z | X | C | V | B | | | | N | M | , | . | UP | )/RSFT | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | LCTRL | LGUI | MENU | ' | LALT | |[/RALT| ] | LEFT | DOWN | RIGHT | + * | LCTRL | LGUI | MENU | LEAD | LALT | |[/RALT|]/RCTL| LEFT | DOWN | RIGHT | * `------------------------------------' `------------------------------------' * ,-------------. ,-------------. - * | VOL- | VOL+ | |PRTSCR| | + * |PRTSCR| ESC | | VOL- | VOL+ | * ,------|------|------| |------+------+------. - * | |SLASH/| MUTE | |NUMLCK|WHACK/| | - * | SPC | MO(1)|------| |------|MO(1) | SPC | - * | | | LAY3 | | LAY2 | | | + * | |SLASH/| LOCKS| | MUTE |WHACK/| | + * | SPC | MO(4)|------| |------|MO(4) | SPC | + * | | | TO(3)| |TO(1) | | | * `--------------------' `--------------------' */ [BASE] = KEYMAP( // left hand - KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, + 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_HOME, - KC_GRV, KC_A, KC_S, KC_D, KC_F, KC_G, + KC_QUOT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_LSPO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_END, - KC_LCTL, KC_LGUI, KC_MENU, KC_QUOT, KC_LALT, - KC_VOLD, KC_VOLU, - KC_MUTE, - KC_SPC, LT(ARRW, KC_SLSH), TG(INTL), + KC_LCTL, KC_LGUI, KC_MENU, KC_LEAD, KC_LALT, + KC_PSCR, KC_ESC, + TD(LOCKS), + KC_SPC, LT(ARRW, KC_SLSH), TG(SYMB), // right hand KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENTER, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSPC, MT(MOD_RALT, KC_LBRC), KC_RBRC, KC_LEFT, KC_DOWN, KC_RGHT, - KC_PSCR, _______, - KC_NLCK, - TG(NUMP), LT(ARRW, C_BSLS), KC_SPC + KC_VOLD, KC_VOLU, + KC_MUTE, + TG(NUMP), LT(ARRW, KC_BSLS), KC_SPC ), /* layer 1: International symbols, etc * * ,--------------------------------------------------. ,--------------------------------------------------. - * | ´ | ¡ | ² | ³ | ¤ | € | ¼ | | ½ | ¾ | ‘ | ’ | ¥ | × | | + * | ¬ | ¡ | ² | ³ | ¤ | € | ¼ | | ½ | ¾ | ‘ | ’ | ¥ | × | | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | ä | å | é | ® | þ | | | | ü | ú | í | ó | ö | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | á | ß | ð | | |------| |------| | | | ø | ¶ | | + * | ´ | á | ß | ð | | |------| |------| | | | ø | ¶ | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * |MO(INSF)| æ | | © | | | | | | ñ | µ | ç | | |MO(INSF)| + * |MO(CSYM)| æ | ¿ | © | | | | | | ñ | µ | ç | | |MO(CSYM)| * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | ¬ | ¿ | | « | » | | | | + * | | | | | | | « | » | | | | * `------------------------------------' `------------------------------------' * ,-------------. ,-------------. * | | | | | | @@ -80,13 +101,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | * `--------------------' `--------------------' */ -[INTL] = KEYMAP( +[SYMB] = KEYMAP( // left hand - UC(0x00B4), UC(0x00A1), UC(0x00B2), UC(0x00B3), UC(0x00A4), UC(0x20AC), UC(0x00BC), + UC(0x00AC), UC(0x00A1), UC(0x00B2), UC(0x00B3), UC(0x00A4), UC(0x20AC), UC(0x00BC), _______, UC(0x00E4), UC(0x00E5), UC(0x00E9), UC(0x00AE), UC(0x00FE), _______, - _______, UC(0x00E1), UC(0x00DF), UC(0x00F0), _______, _______, - MO(INSF), UC(0x00E6), _______, UC(0x00A9), _______, _______, _______, - _______, _______, _______, UC(0x00AC), UC(0x00BF), + UC(0x00B4), UC(0x00E1), UC(0x00DF), UC(0x00F0), _______, _______, + MO(CSYM), UC(0x00E6), UC(0x00BF), UC(0x00A9), _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, @@ -94,7 +115,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { UC(0x00BD), UC(0x00BE), UC(0x2018), UC(0x2019), UC(0x00A5), UC(0x00D7), _______, _______, UC(0x00FC), UC(0x00FA), UC(0x00ED), UC(0x00F3), UC(0x00F6), _______, _______, _______, _______, UC(0x00F8), UC(0x00B6), _______, - _______, UC(0x00F1), UC(0x00B5), UC(0x00E7), _______, _______, MO(INSF), + _______, UC(0x00F1), UC(0x00B5), UC(0x00E7), _______, _______, MO(CSYM), UC(0x00AB), UC(0x00BB), _______, _______, _______, _______, _______, _______, @@ -106,11 +127,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * which don't produce an "upper case" or "shifted" international symobol. * * ,--------------------------------------------------. ,--------------------------------------------------. - * | ¨ | ¹ | | | £ | | | | | | | | — | ÷ | | + * | | ¹ | | | £ | | | | | | | | — | ÷ | | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | Ä | Å | É | | Þ | | | | Ü | Ú | Í | Ó | Ö | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | Á | § | Ð | | |------| |------| | | | Ø | ° | | + * | ¨ | Á | § | Ð | | |------| |------| | | | Ø | ° | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | Æ | | ¢ | | | | | | Ñ | | Ç | | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' @@ -124,11 +145,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | * `--------------------' `--------------------' */ -[INSF] = KEYMAP( +[CSYM] = KEYMAP( // left hand - UC(0x00A8), UC(0x00B9), _______, _______, UC(0x00A3), _______, _______, - _______, UC(0x00C4), UC(0x00C5), UC(0x00C9), _______, UC(0x00DE), _______, - _______, UC(0x00C1), UC(0x00A7), UC(0x00D0), S(KC_F), S(KC_G), + _______, UC(0x00B9), _______, _______, UC(0x00A3), _______, _______, + _______, UC(0x00C4), UC(0x00C5), UC(0x00C9), S(KC_R), UC(0x00DE), _______, + UC(0x00A8), UC(0x00C1), UC(0x00A7), UC(0x00D0), S(KC_F), S(KC_G), _______, UC(0x00C6), S(KC_X), UC(0x00A2), S(KC_V), S(KC_B), _______, _______, _______, _______, UC(0x00A6), _______, _______, _______, @@ -191,20 +212,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * This layer is at the top so that the functions still work no matter what layers are active. * * ,--------------------------------------------------. ,--------------------------------------------------. - * | ESCAPE | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | SYSREQ | + * | ESCAPE | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F10 | F11 | F12 | | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | | | UP | | | | | | | | | | | INSERT | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * |CAPSLOCK| | LEFT | DOWN |RIGHT | |------| |------| LEFT | DOWN | UP | RIGHT| | | + * | | | LEFT | DOWN |RIGHT | |------| |------| LEFT | DOWN | UP | RIGHT| | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | |M_PREV|M_STOP|M_PLPS|M_NEXT| | | | | | | | | PGUP | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | | | | | | | | | HOME | PGDN | END | * `------------------------------------' `------------------------------------' * ,-------------. ,-------------. - * | | PAUSE| |SYSREQ| | + * | PAUSE|SYSREQ| | | | * ,------|------|------| |------+------+------. - * | | | | |SCRLK | | | + * | | | | | | | | * | | |------| |------| | | * | | | | | | | | * `--------------------' `--------------------' @@ -213,10 +234,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // left hand KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, _______, KC_UP, _______, _______, _______, - KC_CAPS, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, + _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, - _______, KC_PAUSE, + KC_PAUSE, _______, _______, _______, _______, _______, // right hand @@ -225,8 +246,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, _______, _______, KC_HOME, KC_PGDN, KC_END, - KC_SYSREQ, _______, - KC_SLCK, + _______, _______, + _______, _______, _______, _______ ), }; @@ -249,8 +270,8 @@ void matrix_scan_user(void) { ergodox_right_led_2_off(); ergodox_right_led_3_off(); switch (layer) { - case INTL: - case INSF: + case SYMB: + case CSYM: ergodox_right_led_1_on(); break; case NUMP: From 67b8bf8f70303741027575428a53513c6610d22c Mon Sep 17 00:00:00 2001 From: Mathias Andersson Date: Sat, 17 Jun 2017 19:29:47 +0200 Subject: [PATCH 10/25] Move Phantom LED handling to phantom.c This is more in line with the structure provided by the keyboard template. --- keyboards/phantom/led.c | 43 ------------------------ keyboards/phantom/phantom.c | 66 +++++++++++++++++++++++++++++++++---- keyboards/phantom/rules.mk | 4 --- 3 files changed, 60 insertions(+), 53 deletions(-) delete mode 100644 keyboards/phantom/led.c diff --git a/keyboards/phantom/led.c b/keyboards/phantom/led.c deleted file mode 100644 index 69dba7d40e..0000000000 --- a/keyboards/phantom/led.c +++ /dev/null @@ -1,43 +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 -#include "stdint.h" -#include "led.h" - -void led_init_ports(void) { - // * Set our LED pins as output - DDRB |= (1<<6); - DDRB |= (1<<7); -} - -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 . + */ #include "phantom.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(); -}; + // put your keyboard start-up code here + // runs once when the firmware starts up + led_init_ports(); + 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_init_ports(void) { + DDRB |= (1<<6) | (1<<7); // OUT +} + +void led_set_kb(uint8_t usb_led) { + if (usb_led & (1< Date: Sat, 17 Jun 2017 19:41:55 +0200 Subject: [PATCH 11/25] Update Phantom config to better match template --- keyboards/phantom/config.h | 114 ++++++++++++++++++++++++++++++++++--- keyboards/phantom/rules.mk | 30 +++++----- 2 files changed, 122 insertions(+), 22 deletions(-) diff --git a/keyboards/phantom/config.h b/keyboards/phantom/config.h index 71a33498b4..e073cd8dc9 100644 --- a/keyboards/phantom/config.h +++ b/keyboards/phantom/config.h @@ -44,6 +44,19 @@ 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 + +/* Underlight configuration + */ +#define RGB_DI_PIN E2 +#define RGBLIGHT_ANIMATIONS +#define RGBLED_NUM 20 // Number of LEDs +#define RGBLIGHT_HUE_STEP 10 +#define RGBLIGHT_SAT_STEP 17 +#define RGBLIGHT_VAL_STEP 17 + /* define if matrix has ghost */ //#define MATRIX_HAS_GHOST @@ -55,19 +68,79 @@ along with this program. If not, see . /* Locking resynchronize hack */ #define LOCKING_RESYNC_ENABLE -/* key combination for command */ +/* + * 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)) \ ) -/* Underlight configuration - */ -#define RGB_DI_PIN E2 -#define RGBLIGHT_ANIMATIONS -#define RGBLED_NUM 20 // Number of LEDs -#define RGBLIGHT_HUE_STEP 10 -#define RGBLIGHT_SAT_STEP 17 -#define RGBLIGHT_VAL_STEP 17 +/* 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 @@ -87,4 +160,27 @@ along with this program. If not, see . //#define NO_ACTION_MACRO //#define NO_ACTION_FUNCTION +/* + * MIDI options + */ + +/* Prevent use of disabled MIDI features in the keymap */ +//#define MIDI_ENABLE_STRICT 1 + +/* enable basic MIDI features: + - MIDI notes can be sent when in Music mode is on +*/ +//#define MIDI_BASIC + +/* enable advanced MIDI features: + - MIDI notes can be added to the keymap + - Octave shift and transpose + - Virtual sustain, portamento, and modulation wheel + - etc. +*/ +//#define MIDI_ADVANCED + +/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */ +//#define MIDI_TONE_KEYCODE_OCTAVES 1 + #endif diff --git a/keyboards/phantom/rules.mk b/keyboards/phantom/rules.mk index cb3274d735..23b42cf989 100644 --- a/keyboards/phantom/rules.mk +++ b/keyboards/phantom/rules.mk @@ -49,17 +49,21 @@ OPT_DEFS += -DBOOTLOADER_SIZE=4096 # Build Options -# comment out to disable the options. +# change yes to no to disable # -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 ?= 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 +# 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 +RGBLIGHT_ENABLE ?= yes # Enable WS2812 RGB underlight. Do not enable this with audio at the same time. +MIDI_ENABLE ?= no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE ?= no # Unicode +BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE ?= no # Audio output on port C6 +FAUXCLICKY_ENABLE ?= no # Use buzzer to emulate clicky switches From 7ca335cf5b86e7d59de5daabeb75bea43d8f0ced Mon Sep 17 00:00:00 2001 From: Mathias Andersson Date: Sat, 17 Jun 2017 19:56:49 +0200 Subject: [PATCH 12/25] Adjust Phantom for standard PCB The previous default configuration and keymap was made for a Phantom modified with RGB underlight. This commit makes the default more in line with the "official" configurations provided by the PCB. The previous default have been moved to a separate keymap named `rgbmod`. It has also been updated to better match the template keymap. --- keyboards/phantom/config.h | 6 +- keyboards/phantom/keymaps/default/Makefile | 37 +++++ keyboards/phantom/keymaps/default/config.h | 24 ++++ keyboards/phantom/keymaps/default/keymap.c | 145 ++++++++------------ keyboards/phantom/keymaps/default/readme.md | 45 ++++++ keyboards/phantom/keymaps/rgbmod/Makefile | 37 +++++ keyboards/phantom/keymaps/rgbmod/config.h | 24 ++++ keyboards/phantom/keymaps/rgbmod/keymap.c | 77 +++++++++++ keyboards/phantom/phantom.h | 129 ++++++++++++----- keyboards/phantom/rules.mk | 2 +- 10 files changed, 405 insertions(+), 121 deletions(-) create mode 100644 keyboards/phantom/keymaps/default/Makefile create mode 100644 keyboards/phantom/keymaps/default/config.h create mode 100644 keyboards/phantom/keymaps/default/readme.md create mode 100644 keyboards/phantom/keymaps/rgbmod/Makefile create mode 100644 keyboards/phantom/keymaps/rgbmod/config.h create mode 100644 keyboards/phantom/keymaps/rgbmod/keymap.c diff --git a/keyboards/phantom/config.h b/keyboards/phantom/config.h index e073cd8dc9..5b7fa62ff5 100644 --- a/keyboards/phantom/config.h +++ b/keyboards/phantom/config.h @@ -24,9 +24,9 @@ along with this program. If not, see . #define VENDOR_ID 0xFEED #define PRODUCT_ID 0x6060 #define DEVICE_VER 0x0003 -#define MANUFACTURER PHANTOM -#define PRODUCT PHANTOM RGB MOD -#define DESCRIPTION QMK keyboard firmware for PHANTOM TKL +#define MANUFACTURER bpiphany +#define PRODUCT PHANTOM +#define DESCRIPTION QMK keyboard firmware for PHANTOM /* key matrix size */ #define MATRIX_ROWS 6 diff --git a/keyboards/phantom/keymaps/default/Makefile b/keyboards/phantom/keymaps/default/Makefile new file mode 100644 index 0000000000..555ac79fa7 --- /dev/null +++ b/keyboards/phantom/keymaps/default/Makefile @@ -0,0 +1,37 @@ +# Copyright 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 . + + +# QMK 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 = no # Enable keyboard backlight functionality +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +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/phantom/keymaps/default/config.h b/keyboards/phantom/keymaps/default/config.h new file mode 100644 index 0000000000..a3828f7d5d --- /dev/null +++ b/keyboards/phantom/keymaps/default/config.h @@ -0,0 +1,24 @@ +/* Copyright 2017 Mathias Andersson + * + * 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" + +// place overrides here + +#endif diff --git a/keyboards/phantom/keymaps/default/keymap.c b/keyboards/phantom/keymaps/default/keymap.c index a4fc319ac8..1568d0a143 100644 --- a/keyboards/phantom/keymaps/default/keymap.c +++ b/keyboards/phantom/keymaps/default/keymap.c @@ -1,7 +1,22 @@ +/* Copyright 2017 Mathias Andersson + * + * 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 "phantom.h" -// Used for SHIFT_ESC -#define MODS_CTRL_MASK (MOD_BIT(KC_LSHIFT)|MOD_BIT(KC_RSHIFT)) +// Helpful defines +#define _______ KC_TRNS // 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. @@ -11,92 +26,52 @@ #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_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_DELETE, 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, 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_UP, \ - KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT), - - /* Keymap _FL: Function Layer - * ,-----------------------------------------------------------------------------. - * | | | | | | | | | | | | | | | | | | | | - * |-----------------------------------------------------------| |--------------| - * | | | | | | | | | | | | | | Reset | | | | | - * |-----------------------------------------------------------| |--------------| - * | | | | | | | | | | | | | | | | | | | - * |-----------------------------------------------------------| `--------------' - * | | | | | | | | | | | | | | - * |-----------------------------------------------------------| ,----. - * | | F1| F2| F3| F4| F5|F6 |F7 |F8 | | | | | | - * |-----------------------------------------------------------| ,-------------. - * | | | | | | | | | | | | | - * `-----------------------------------------------------------' `-------------' - */ -[_FL] = 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, KC_TRNS, KC_TRNS, \ - KC_TRNS, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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, 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_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), - #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, 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, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_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_TRNS, 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 + [_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_BRK, \ + 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_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_UP, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \ + ), + [_FL] = KEYMAP( + _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MSEL, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, KC_CALC, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), }; -enum function_id { - SHIFT_ESC, +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; }; -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; - } +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/phantom/keymaps/default/readme.md b/keyboards/phantom/keymaps/default/readme.md new file mode 100644 index 0000000000..f58f4f0f33 --- /dev/null +++ b/keyboards/phantom/keymaps/default/readme.md @@ -0,0 +1,45 @@ +# Keymap for a standard winkey ANSI configuration of the Phantom + +A basic keymap intended for a Phantom using the standard ANSI layout. + +See [keymap.c](keymap.c) for details. + +## Layers + +The keymap have two layers. To access the functions on the second layer, hold down `Fn` and press the corresponding key. + +### Layer 1: Default Layer + ,---. ,---------------. ,---------------. ,---------------. ,-----------. + |Esc| |F1 |F2 |F3 |F4 | |F5 |F6 |F7 |F8 | |F9 |F10|F11|F12| |PrS|ScL|Pau| + `---' `---------------' `---------------' `---------------' `-----------' + ,-----------------------------------------------------------. ,-----------. + |~ | 1| 2| 3| 4| 5| 6| 7| 8| 9| 0| -| =|Backsp | |Ins|Hom|PgU| + |-----------------------------------------------------------| |-----------| + |Tab | Q| W| E| R| T| Y| U| I| O| P| [| ]| \| |Del|End|PgD| + |-----------------------------------------------------------| '-----------' + |Caps | A| S| D| F| G| H| J| K| L| ;| '|Return | + |-----------------------------------------------------------| ,---. + |Shift | Z| X| C| V| B| N| M| ,| .| /|Shift | |Up | + |-----------------------------------------------------------| ,-----------. + |Ctl|Gui|Alt| Space |Alt|Gui|Fn |Ctl| |Lef|Dow|Rig| + `-----------------------------------------------------------' `-----------' + +### Layer 2: Function Layer + ,---. ,---------------. ,---------------. ,---------------. ,-----------. + | | | | | | | | | | | | |Stp|Ply|Prv|Nxt| |Mut|Vo-|Vo+| + `---' `---------------' `---------------' `---------------' `-----------' + ,-----------------------------------------------------------. ,-----------. + | | | | | | | | | | | | | | | | | | | + |-----------------------------------------------------------| |-----------| + | | | | | | | | | | | | | | | | | | | + |-----------------------------------------------------------| '-----------' + | | | | | | | | | | | | | Media | + |-----------------------------------------------------------| ,---. + | | | |Cal| | | | | | | | | | | + |-----------------------------------------------------------| ,-----------. + | | | | | | | | | | | | | + `-----------------------------------------------------------' `-----------' + +## Building + +To build the firmware with the default keymap, run `make default`. diff --git a/keyboards/phantom/keymaps/rgbmod/Makefile b/keyboards/phantom/keymaps/rgbmod/Makefile new file mode 100644 index 0000000000..38c23a1b89 --- /dev/null +++ b/keyboards/phantom/keymaps/rgbmod/Makefile @@ -0,0 +1,37 @@ +# Copyright 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 . + + +# QMK 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 support (+2400 to 4200, depending on config) +AUDIO_ENABLE = no # Audio output on port C6 +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +RGBLIGHT_ENABLE = yes # 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/phantom/keymaps/rgbmod/config.h b/keyboards/phantom/keymaps/rgbmod/config.h new file mode 100644 index 0000000000..a3828f7d5d --- /dev/null +++ b/keyboards/phantom/keymaps/rgbmod/config.h @@ -0,0 +1,24 @@ +/* Copyright 2017 Mathias Andersson + * + * 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" + +// place overrides here + +#endif diff --git a/keyboards/phantom/keymaps/rgbmod/keymap.c b/keyboards/phantom/keymaps/rgbmod/keymap.c new file mode 100644 index 0000000000..baef27a268 --- /dev/null +++ b/keyboards/phantom/keymaps/rgbmod/keymap.c @@ -0,0 +1,77 @@ +/* Copyright 2017 Mathias Andersson + * + * 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 "phantom.h" + +// Helpful defines +#define _______ KC_TRNS + +// 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] = { + [_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_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_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_UP, \ + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT \ + ), + [_FL] = KEYMAP( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RESET, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UP, _______, \ + _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, _______, _______, _______, _______, \ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ \ + ), +}; + +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/phantom/phantom.h b/keyboards/phantom/phantom.h index 420826becf..784fca21f1 100644 --- a/keyboards/phantom/phantom.h +++ b/keyboards/phantom/phantom.h @@ -1,40 +1,105 @@ +/* Copyright 2017 Mathias Andersson + * + * 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 PHANTOM_H #define PHANTOM_H #include "quantum.h" -/* Phantom matrix layout - * ,-----------------------------------------------------------------------------. - * |00 |02| 03| 04| 05| | 06| 07| 08| 09| | 0a|0b |0c |0d | |0e |0f |0g | - * |-----------------------------------------------------------| |--------------| - * | 01| 10| 11| 12| 13| 14| 15| 16| 17| 18| 19| 1a| 1b| 1d | |1e |1f |1g | - * |-----------------------------------------------------------| |--------------| - * |20 | 21| 22| 23| 24| 25| 26| 27| 28| 29| 2a| 2b| 2c| 2d| | 2e | 2f | 2g | - * |-----------------------------------------------------------| `--------------' - * |30 | 31| 32| 33| 34| 35| 36| 37| 38| 39| 3a| 3b| 3d | - * |-----------------------------------------------------------| ,----. - * | 40 | 42| 43| 44| 45| 46| 47| 48| 49| 4a| 4b| 4d | | 4f | - * |-----------------------------------------------------------| ,-------------. - * | 50 | 51 | 52 | 57 |5a | 5b | 5c | 5d | | 5e| 5f | 5g | - * `-----------------------------------------------------------' `-------------' - */ -// The first section contains all of the arguments -// The second converts the arguments into a two-dimensional array -#define KEYMAP( \ - k00, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, k0g, \ - k01, k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1d, k1e, k1f, k1g, \ - k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, k2f, k2g, \ - k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, \ - k40, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4d, k4f, \ - k50, k51, k52, k57, k5a, k5b, k5c, k5d, k5e, k5f, k5g \ -) \ -{ \ - {k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, k0g}, \ - {k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1d, k1d, k1e, k1f, k1g}, \ - {k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, k2f, k2g}, \ - {k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3d, k3d, k3d, k3d, k3d}, \ - {k40, k40, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4d, k4d, k4f, k4f, k4f}, \ - {k50, k51, k52, k57, k57, k57, k57, k57, k57, k57, k5a, k5b, k5c, k5d, k5e, k5f, k5g} \ +// Keymap utilizing all the possible keys on the PCB. +#define KEYMAP_7BIT( \ + K00, K53, K02, K03, K04, K05, K56, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ + K01, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, K3G, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, K4F, K4G, \ + K50, K51, K52, K54, K55, K57, K58, K5A, K5B, K5C, K5D, K5E, K5F, K5G \ +) { \ +/* 0 1 2 3 4 5 6 7 8 9 A B C D E F G */ \ +/* 0 */ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G }, \ +/* 1 */ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G }, \ +/* 2 */ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G }, \ +/* 3 */ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, K3G }, \ +/* 4 */ { K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4D, K4E, K4F, K4G }, \ +/* 5 */ { K50, K51, K52, K53, K54, K55, K56, K57, K58, KC_NO, K5A, K5B, K5C, K5D, K5E, K5F, K5G } \ } + +// Keymap for a standard ANSI layout. +#define KEYMAP( \ + K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ + K01, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1D, K1E, K1F, K1G, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ + K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \ + K50, K51, K52, K57, K5A, K5B, K5C, K5D, K5E, K5F, K5G \ +) KEYMAP_7BIT( \ + K00, KC_NO, K02, K03, K04, K05, KC_NO, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ + K01, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, KC_NO, K1D, K1E, K1F, K1G, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, KC_NO, KC_NO, KC_NO, \ + K40, KC_NO, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, KC_NO, K4D, KC_NO, K4F, KC_NO, \ + K50, K51, K52, KC_NO, KC_NO, K57, KC_NO, K5A, K5B, K5C, K5D, K5E, K5F, K5G \ +) + +#define KEYMAP_WINKEYLESS( \ + K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ + K01, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1D, K1E, K1F, K1G, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \ + K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \ + K50, K51, K52, K57, K5B, K5C, K5D, K5E, K5F, K5G \ +) KEYMAP_7BIT( \ + K00, KC_NO, K02, K03, K04, K05, KC_NO, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ + K01, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, KC_NO, K1D, K1E, K1F, K1G, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, K2G, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, KC_NO, K3D, KC_NO, KC_NO, KC_NO, \ + K40, KC_NO, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, KC_NO, K4D, KC_NO, K4F, KC_NO, \ + K50, K51, K52, KC_NO, KC_NO, K57, KC_NO, KC_NO, K5B, K5C, K5D, K5E, K5F, K5G \ +) + +#define KEYMAP_ISO( \ + K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ + K01, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1D, K1E, K1F, K1G, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2E, K2F, K2G, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \ + K50, K51, K52, K57, K5A, K5B, K5C, K5D, K5E, K5F, K5G \ +) KEYMAP_7BIT( \ + K00, KC_NO, K02, K03, K04, K05, KC_NO, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ + K01, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, KC_NO, K1D, K1E, K1F, K1G, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, KC_NO, K2E, K2F, K2G, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO, KC_NO, KC_NO, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, KC_NO, K4D, KC_NO, K4F, KC_NO, \ + K50, K51, K52, KC_NO, KC_NO, K57, KC_NO, K5A, K5B, K5C, K5D, K5E, K5F, K5G \ +) + +#define KEYMAP_ISO_WINKEYLESS( \ + K00, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ + K01, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1D, K1E, K1F, K1G, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2E, K2F, K2G, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4D, K4F, \ + K50, K51, K52, K57, K5B, K5C, K5D, K5E, K5F, K5G \ +) KEYMAP_7BIT( \ + K00, KC_NO, K02, K03, K04, K05, KC_NO, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \ + K01, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, KC_NO, K1D, K1E, K1F, K1G, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, KC_NO, K2E, K2F, K2G, \ + K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, KC_NO, KC_NO, KC_NO, \ + K40, K41, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, KC_NO, K4D, KC_NO, K4F, KC_NO, \ + K50, K51, K52, KC_NO, KC_NO, K57, KC_NO, KC_NO, K5B, K5C, K5D, K5E, K5F, K5G \ +) + #endif diff --git a/keyboards/phantom/rules.mk b/keyboards/phantom/rules.mk index 23b42cf989..c075939613 100644 --- a/keyboards/phantom/rules.mk +++ b/keyboards/phantom/rules.mk @@ -61,7 +61,7 @@ SLEEP_LED_ENABLE ?= no # Breathing sleep LED during USB suspend # if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work NKRO_ENABLE ?= yes # USB Nkey Rollover BACKLIGHT_ENABLE ?= no # Enable keyboard backlight functionality -RGBLIGHT_ENABLE ?= yes # 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. MIDI_ENABLE ?= no # MIDI support (+2400 to 4200, depending on config) UNICODE_ENABLE ?= no # Unicode BLUETOOTH_ENABLE ?= no # Enable Bluetooth with the Adafruit EZ-Key HID From dd9b00543b4fd08d851d91bd917615fc8fc0911e Mon Sep 17 00:00:00 2001 From: Mathias Andersson Date: Sat, 17 Jun 2017 20:03:58 +0200 Subject: [PATCH 13/25] Update Phantom readme Added basic description of the keyboard and some build and configuration instructions. Also moved the RGB underlight modification instructions to the readme. --- keyboards/phantom/pinout.txt | 1 - keyboards/phantom/readme.md | 48 ++++++++++++++++++++++++++++++++++-- 2 files changed, 46 insertions(+), 3 deletions(-) delete mode 100644 keyboards/phantom/pinout.txt diff --git a/keyboards/phantom/pinout.txt b/keyboards/phantom/pinout.txt deleted file mode 100644 index 415ad46d93..0000000000 --- a/keyboards/phantom/pinout.txt +++ /dev/null @@ -1 +0,0 @@ -For WS2812B LED strip support, connect DIN from strip to PE2 on Teensy (see reference image https://i.imgur.com/aDfNoHT.jpg) \ No newline at end of file diff --git a/keyboards/phantom/readme.md b/keyboards/phantom/readme.md index 190f738faf..614c21fda0 100644 --- a/keyboards/phantom/readme.md +++ b/keyboards/phantom/readme.md @@ -1,4 +1,48 @@ Phantom keyboard firmware -====================== +========================= -TODO: to be updated. +A community-developed keyboard PCB designed to fit inside the case of a Filco Majestouch. + +See the [Deskthority wiki](https://deskthority.net/wiki/Phantom) for more information. + +## Bootloader + +The Phantom uses a [Teensy 2.0](https://www.pjrc.com/store/teensy.html) as a controller. + +The Teensy has a special bootloader that can be accessed by pressing the button on the Teensy PCB. It is also possible to use Boot Magic and Command to access the bootloader. + +To write the firmware to the Teensy use [Teensy loader](https://www.pjrc.com/teensy/loader.html). + +## Quantum MK Firmware + +For the full Quantum feature list, see the [documentation](https://docs.qmk.fm). + +## RGB underlight + +It is possible to connect a WS2812B LED strip to the Teensy for RGB underlight support. + +For this to work the DIN connection on the WS2812B strip should be soldered to PE2 on the Teensy (see reference image https://i.imgur.com/aDfNoHT.jpg). + +See [rgbmod](keymaps/rgbmod) for a keymap that utilizes the RGB underlight feature. + +## Building + +The Phantom allows for a huge amount of different layouts. + +Depending on which layout and keymap you would like to use, you will have to compile the firmware slightly differently. All of the commands should be run in the [keyboards/phantom](/keyboards/phantom) folder. + +### Custom keymaps + +To define your own keymap, copy one of the [existing keymap](keymaps) folders and give it the name of your keymap. Then check the [keymap documentation](https://docs.qmk.fm/Keymap.html) for details on how to modify the keymap. + +To make it easy to define keymaps for the most common layouts a few macros are provided. + +| Layout | Macro | +| --------------- | ------------------------- | +| Winkey ANSI | `KEYMAP()` | +| Winkeyless ANSI | `KEYMAP_WINKEYLESS()` | +| Winkey ISO | `KEYMAP_ISO()` | +| Winkeyless ISO | `KEYMAP_ISO_WINKEYLESS()` | +| 7BIT | `KEYMAP_7BIT()` | + +To build the firmware with a custom keymap, run `make ` From 7389beb18c557403939e60ae36b0a51b481d80a9 Mon Sep 17 00:00:00 2001 From: Fredric Silberberg Date: Fri, 9 Jun 2017 15:01:01 -0700 Subject: [PATCH 14/25] Small keymap layout updates --- keyboards/ergodox/keymaps/333fred/README.md | 14 ++++---- keyboards/ergodox/keymaps/333fred/config.h | 9 ++++++ keyboards/ergodox/keymaps/333fred/keymap.c | 36 +++++++++++++-------- 3 files changed, 40 insertions(+), 19 deletions(-) create mode 100644 keyboards/ergodox/keymaps/333fred/config.h diff --git a/keyboards/ergodox/keymaps/333fred/README.md b/keyboards/ergodox/keymaps/333fred/README.md index af8042d859..d3f5913612 100644 --- a/keyboards/ergodox/keymaps/333fred/README.md +++ b/keyboards/ergodox/keymaps/333fred/README.md @@ -38,7 +38,7 @@ | | | | | | | | | | | | `----------------------------------' `----------------------------------' ,-------------. ,---------------. - |Format| | | Test | DTest | + |Format|Build | | Test | DTest | ,------|------|------| |------+--------+------. | | |Refact| | | | | | | |------| |------| | | @@ -49,6 +49,7 @@ * Refact - Visual Studio Refactor. Sends `CTRL + R, R` * Test - Visual Studio Run Test. Sends `CTRL + R, T` * DTest - Visual Studio Debug Test. Sends `CTRL + R, CTRL + T` +* Build - Visualt Studio Build Solution. Sends `CTRL + SHFT + B` ### Keymap 2: Symbol Layer ``` @@ -100,11 +101,11 @@ ,--------------------------------------------------. ,--------------------------------------------------. | | | | | | | | | | | | | | | | |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| -| | | | | | | | | | | | | | | | +| |KOpen |KType | | | | | | | | | | | | | |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| | |DLeft |DRight|LShift| | |------| |------| Left | Down | Up | Right| | | |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -| |KOpen |KType | | | | | | | | | | | | | +| |SFT_TB| Tab | | | | | | | | | | | | | `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' | | | | | | | | | | | | `----------------------------------' `----------------------------------' @@ -116,7 +117,8 @@ | | | | | | | | `--------------------' `--------------------' ``` -* DLeft - Move to the left Desktop. Sends `Ctrl + Win + Left Arrow` +* DLeft - Move to the left Desktop. Sends `Ctrl + Win + Left Arrow` * DRight - Move to the right Desktop. Sends `Ctrl + Win + Right Arrow` -* KOpen - Opens KeePass. Sends `Ctrl + Alt + k` -* KType - Autotypes KeePass password. Sends `Ctrl + Alt + a` +* KOpen - Opens KeePass. Sends `Ctrl + Alt + k` +* KType - Autotypes KeePass password. Sends `Ctrl + Alt + a` +* SFT_TB - Sends `CTRL + TAB`. diff --git a/keyboards/ergodox/keymaps/333fred/config.h b/keyboards/ergodox/keymaps/333fred/config.h new file mode 100644 index 0000000000..32d190de7a --- /dev/null +++ b/keyboards/ergodox/keymaps/333fred/config.h @@ -0,0 +1,9 @@ +#ifndef CONFIG_H_ +#define CONFIG_H_ + +#include "../../config.h" + +#undef TAPPING_TERM +#define TAPPING_TERM 150 + +#endif diff --git a/keyboards/ergodox/keymaps/333fred/keymap.c b/keyboards/ergodox/keymaps/333fred/keymap.c index 070ad1f72a..893ba12eaf 100644 --- a/keyboards/ergodox/keymaps/333fred/keymap.c +++ b/keyboards/ergodox/keymaps/333fred/keymap.c @@ -23,12 +23,14 @@ enum custom_macros { DLEFT, DRIGHT, PSCREEN_APP, + LSFT_TAB, // VS Macros REFACTOR, TEST, DEBUG_TEST, FORMAT, + BUILD, // KeePass macros KEEPASS_OPEN, @@ -104,7 +106,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | | * `----------------------------------' `----------------------------------' * ,-------------. ,---------------. - * |Format| | | Test | DTest | + * |Format|Build | | Test | DTest | * ,------|------|------| |------+--------+------. * | | |Refact| | | | | * | | |------| |------| | | @@ -120,9 +122,9 @@ 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, - M(FORMAT), KC_TRNS, - M(REFACTOR), - KC_TRNS, KC_TRNS, KC_TRNS, + M(FORMAT),M(BUILD), + M(REFACTOR), + KC_TRNS, KC_TRNS, KC_TRNS, // right hand KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, @@ -222,11 +224,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,--------------------------------------------------. ,--------------------------------------------------. * | | | | | | | | | | | | | | | | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | | | | | | | | | | | | | | | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | |DLeft |DRight|LShift|ACCESS| |------| |------| Left | Down | Up | Right| | | - * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | |KOpen |KType | | | | | | | | | | | | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | |DLeft |DRight|LCTRL |ACCESS| |------| |------| Left | Down | Up | Right| | | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * | |SFT_TB| TAB | | | | | | | | | | | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | | | | | | | | | | | | * `----------------------------------' `----------------------------------' @@ -234,20 +236,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | * ,------|------|------| |------+------+------. * | | | | | | | | - * | | CTRL |------| |------| | | + * | |LSHIFT|------| |------| | | * | | | | | | | | * `--------------------' `--------------------' */ // MEDIA AND MOUSE [MOVE] = 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, M(DLEFT), M(DRIGHT), KC_LSFT, KC_TRNS, KC_TRNS, KC_TRNS, M(KEEPASS_OPEN),M(KEEPASS_TYPE),KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, M(DLEFT), M(DRIGHT), KC_LCTL, KC_TRNS, KC_TRNS, + KC_TRNS, M(LSFT_TAB), KC_TAB, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - KC_TRNS, KC_LCTRL,KC_TRNS, + KC_TRNS, KC_LSFT, 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, @@ -291,9 +293,13 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) break; case PSCREEN_APP: if (record->event.pressed) { - return MACRO(D(LALT), T(PSCR), U(LALT)); + return MACRO(D(LALT), T(PSCR), U(LALT), END); } break; + case LSFT_TAB: + if (record->event.pressed) { + return MACRO(D(LSFT), T(TAB), U(LSFT), END); + } case REFACTOR: if (record->event.pressed) { // VS Refactor CTRL+R, R return MACRO(D(LCTL), T(R), U(LCTL), T(R), END); @@ -314,6 +320,10 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) return MACRO(D(LCTL), T(K), T(D), U(LCTL), END); } break; + case BUILD: + if (record->event.pressed) { + return MACRO(D(LCTL), D(LSFT), T(B), U(LSFT), U(LCTL), END); + } case KEEPASS_OPEN: if (record->event.pressed) { // Keepass open application return MACRO(D(LCTL), D(LALT), T(K), U(LALT), U(LCTL), END); From a2fbd671ad6edde77fe8f3c1a05c73c6b7056f00 Mon Sep 17 00:00:00 2001 From: Fredric Silberberg Date: Thu, 15 Jun 2017 13:49:16 -0700 Subject: [PATCH 15/25] Added a few more VS macros and another ctrl --- keyboards/ergodox/keymaps/333fred/keymap.c | 41 ++++++++++++++++------ 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/keyboards/ergodox/keymaps/333fred/keymap.c b/keyboards/ergodox/keymaps/333fred/keymap.c index 893ba12eaf..c4f28feb0e 100644 --- a/keyboards/ergodox/keymaps/333fred/keymap.c +++ b/keyboards/ergodox/keymaps/333fred/keymap.c @@ -31,6 +31,9 @@ enum custom_macros { DEBUG_TEST, FORMAT, BUILD, + GO_TO_IMPL, + FIND_ALL_REF, + REMOVE_SORT_USINGS, // KeePass macros KEEPASS_OPEN, @@ -67,7 +70,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,------|------|------| |------+--------+------. * | | | PgUp | | PgDn | | | * | Bcksp|OSL(2)|------| |------| Ent |Space | - * | | | Del | |OSL(2)| | | + * | | | Del | | RCtrl| | | * `--------------------' `----------------------' */ // If it accepts an argument (i.e, is a function), it doesn't need KC_. @@ -88,9 +91,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_H, KC_J, KC_K, KC_L, TD(TD_SEMICOLON_COLON),KC_QUOT, MO(MDIA), KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT, KC_RGUI, - KC_RALT, CTL_T(KC_ESC), + KC_RALT, CTL_T(KC_ESC), KC_PGDN, - OSL(SYMB),KC_ENT, KC_SPC + KC_RCTL, KC_ENT, KC_SPC ), /* Keymap 1: Code Layer * @@ -103,12 +106,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------|ACCESS| | |------+------+------+------+------+--------| * | | | | | | | | | | | | | | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | + * | | | | | | | F12 |GoToIm| FAR | | | * `----------------------------------' `----------------------------------' * ,-------------. ,---------------. * |Format|Build | | Test | DTest | * ,------|------|------| |------+--------+------. - * | | |Refact| | | | | + * | | |Refact| |Sort U| | | * | | |------| |------| | | * | | | | | | | | * `--------------------' `----------------------' @@ -127,13 +130,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_TRNS, // right hand - KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, - 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_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_F12, M(GO_TO_IMPL),M(FIND_ALL_REF),KC_TRNS, KC_TRNS, M(TEST), M(DEBUG_TEST), - KC_TRNS, + M(REMOVE_SORT_USINGS), KC_TRNS, KC_TRNS, KC_TRNS ), /* Keymap 2: Symbol Layer @@ -324,6 +327,22 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) if (record->event.pressed) { return MACRO(D(LCTL), D(LSFT), T(B), U(LSFT), U(LCTL), END); } + break; + case GO_TO_IMPL: + if (record->event.pressed) { + return MACRO(D(LCTL), T(F12), U(LCTL), END); + } + break; + case FIND_ALL_REF: + if (record->event.pressed) { + return MACRO(D(LCTL), T(K), U(LCTL), T(R), END); + } + break; + case REMOVE_SORT_USINGS: + if (record->event.pressed) { + return MACRO(D(LCTL), T(R), T(G), U(LCTL), END); + } + break; case KEEPASS_OPEN: if (record->event.pressed) { // Keepass open application return MACRO(D(LCTL), D(LALT), T(K), U(LALT), U(LCTL), END); From 946f4854c5e219ceec39103bdec1502293e4d79c Mon Sep 17 00:00:00 2001 From: Fredric Silberberg Date: Thu, 15 Jun 2017 16:41:21 -0700 Subject: [PATCH 16/25] Added backlight control keys --- keyboards/ergodox/keymaps/333fred/Makefile | 1 - keyboards/ergodox/keymaps/333fred/keymap.c | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/keyboards/ergodox/keymaps/333fred/Makefile b/keyboards/ergodox/keymaps/333fred/Makefile index b977722a2f..17f736458c 100644 --- a/keyboards/ergodox/keymaps/333fred/Makefile +++ b/keyboards/ergodox/keymaps/333fred/Makefile @@ -2,7 +2,6 @@ SUBPROJECT_DEFAULT = infinity LCD_BACKLIGHT_ENABLE = yes LCD_ENABLE = yes BACKLIGHT_ENABLE = yes -BACKLIGHT_ENABLE = yes NKRO_ENABLE = yes TAP_DANCE_ENABLE = yes diff --git a/keyboards/ergodox/keymaps/333fred/keymap.c b/keyboards/ergodox/keymaps/333fred/keymap.c index c4f28feb0e..ce30a22b95 100644 --- a/keyboards/ergodox/keymaps/333fred/keymap.c +++ b/keyboards/ergodox/keymaps/333fred/keymap.c @@ -195,9 +195,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | Lclk | Rclk | | | | | | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. - * | | | | Vol+ | | + * | Back+| Back-| | Vol+ | | * ,------|------|------| |------+------+------. - * | | | | | Vol- | | | + * | | |BackTg| | Vol- | | | * | | |------| |------| PL/PS| Next | * | | | | | Back | | | * `--------------------' `--------------------' @@ -209,8 +209,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 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, + BL_INC, BL_DEC, + BL_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, // right hand KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, From 2b26abf9a90a562438126c7933fe00221b7ce67c Mon Sep 17 00:00:00 2001 From: Fredric Silberberg Date: Fri, 23 Jun 2017 11:24:55 -0700 Subject: [PATCH 17/25] Copy/paste additions. --- keyboards/ergodox/keymaps/333fred/config.h | 2 ++ keyboards/ergodox/keymaps/333fred/keymap.c | 30 +++++++++++----------- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/keyboards/ergodox/keymaps/333fred/config.h b/keyboards/ergodox/keymaps/333fred/config.h index 32d190de7a..f19a52bca1 100644 --- a/keyboards/ergodox/keymaps/333fred/config.h +++ b/keyboards/ergodox/keymaps/333fred/config.h @@ -6,4 +6,6 @@ #undef TAPPING_TERM #define TAPPING_TERM 150 +#define PERMISSIVE_HOLD + #endif diff --git a/keyboards/ergodox/keymaps/333fred/keymap.c b/keyboards/ergodox/keymaps/333fred/keymap.c index ce30a22b95..fdbfddd0cf 100644 --- a/keyboards/ergodox/keymaps/333fred/keymap.c +++ b/keyboards/ergodox/keymaps/333fred/keymap.c @@ -66,7 +66,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |LCTRL | F4 | F5 | LGUI | LALT | | Left | Down | Up | Right| RGUI | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. - * | Home | End | | Alt |Ctrl/Esc| + * | Copy | Paste| | Alt |Ctrl/Esc| * ,------|------|------| |------+--------+------. * | | | PgUp | | PgDn | | | * | Bcksp|OSL(2)|------| |------| Ent |Space | @@ -80,16 +80,16 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_EQL, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), KC_ESC, KC_A, KC_S, KC_D, LT(MOVE, KC_F),KC_G, - KC_LSFT, CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, TG(CODE), - KC_LCTRL, KC_F4, KC_F5, KC_LGUI,KC_LALT, - KC_HOME, KC_END, - KC_PGUP, - KC_BSPC,OSL(SYMB),KC_DEL, + OSM(MOD_LSFT), CTL_T(KC_Z), KC_X, KC_C, KC_V, KC_B, TG(CODE), + OSM(MOD_LCTL), KC_F4, KC_F5, KC_LGUI,KC_LALT, + LCTL(KC_C),LCTL(KC_V), + KC_PGUP, + KC_BSPC,OSL(SYMB), KC_DEL, // right hand TG(CODE), 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, TD(TD_SEMICOLON_COLON),KC_QUOT, - MO(MDIA), KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), KC_RSFT, + MO(MDIA), KC_N, KC_M, KC_COMM,KC_DOT, CTL_T(KC_SLSH), OSM(MOD_RSFT), KC_LEFT,KC_DOWN,KC_UP, KC_RIGHT, KC_RGUI, KC_RALT, CTL_T(KC_ESC), KC_PGDN, @@ -227,7 +227,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,--------------------------------------------------. ,--------------------------------------------------. * | | | | | | | | | | | | | | | | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| - * | |KOpen |KType | | | | | | | | | | | | | + * | |KOpen |KType | | | | | | | Copy | | | | Paste| | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | |DLeft |DRight|LCTRL |ACCESS| |------| |------| Left | Down | Up | Right| | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| @@ -236,7 +236,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | | | | * `----------------------------------' `----------------------------------' * ,-------------. ,-------------. - * | | | | | | + * | | | | Home | End | * ,------|------|------| |------+------+------. * | | | | | | | | * | |LSHIFT|------| |------| | | @@ -254,12 +254,12 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_TRNS, KC_TRNS, KC_LSFT, 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_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, LCTL(KC_C),KC_TRNS, KC_TRNS, KC_TRNS, LCTL(KC_V),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 From 67944953369b3430d44bbb400220529586b947f7 Mon Sep 17 00:00:00 2001 From: Fredric Silberberg Date: Fri, 23 Jun 2017 11:36:14 -0700 Subject: [PATCH 18/25] Doc updates --- keyboards/ergodox/keymaps/333fred/README.md | 32 ++++++++++++--------- keyboards/ergodox/keymaps/333fred/keymap.c | 12 ++++---- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/keyboards/ergodox/keymaps/333fred/README.md b/keyboards/ergodox/keymaps/333fred/README.md index d3f5913612..f7b4ca42f4 100644 --- a/keyboards/ergodox/keymaps/333fred/README.md +++ b/keyboards/ergodox/keymaps/333fred/README.md @@ -14,7 +14,7 @@ |LCTRL | F4 | F5 | LGUI | LALT | | Left | Down | Up | Right| RGUI | `----------------------------------' `----------------------------------' ,-------------. ,-------------. - | Home | End | | Alt |Ctrl/Esc| + | Copy | Paste| | Alt |Ctrl/Esc| ,------|------|------| |------+--------+------. | | | PgUp | | PgDn | | | | Bcksp|OSL(2)|------| |------| Ent |Space | @@ -32,24 +32,28 @@ | | | | | | | F10 | | F11 | | | | | | | |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| | | | | | | |------| |------| | | | | | | -|--------+------+------+------+------+------| | | |------+------+------+------+------+--------| +|--------+------+------+------+------+------| L2 | | |------+------+------+------+------+--------| | | | | | | | | | | | | | | | | `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - | | | | | | | | | | | | + | | | | | | | F12 |GoToIm| FAR | | | `----------------------------------' `----------------------------------' ,-------------. ,---------------. |Format|Build | | Test | DTest | ,------|------|------| |------+--------+------. - | | |Refact| | | | | + | | |Refact| |Sort U| | | | | |------| |------| | | | | | | | | | | `--------------------' `----------------------' ``` -* Format - Visual Studio Format. Sends `CTRL + K, CTRL + D` -* Refact - Visual Studio Refactor. Sends `CTRL + R, R` -* Test - Visual Studio Run Test. Sends `CTRL + R, T` -* DTest - Visual Studio Debug Test. Sends `CTRL + R, CTRL + T` * Build - Visualt Studio Build Solution. Sends `CTRL + SHFT + B` +* DTest - Visual Studio Debug Test. Sends `CTRL + R, CTRL + T` +* FAR - Visual Studio Find All References. Sends `CTRL + K, R` +* Format - Visual Studio Format. Sends `CTRL + K, CTRL + D` +* GoToIm - Visual Studio Go To Implementation. Sends `CTRL + F12` +* Refact - Visual Studio Refactor. Sends `CTRL + R, R` +* Sort U - Visual Studio Sort Usings. Sends `CTRL + R, CTRL + G` +* Test - Visual Studio Run Test. Sends `CTRL + R, T` + ### Keymap 2: Symbol Layer ``` @@ -88,9 +92,9 @@ | | | | Lclk | Rclk | | | | | | | `----------------------------------' `----------------------------------' ,-------------. ,-------------. - | | | | Vol+ | | + | Back+| Back-| | Vol+ | | ,------|------|------| |------+------+------. - | | | | | Vol- | | | + | | |BL_TOG| | Vol- | | | | | |------| |------| PL/PS| Next | | | | | | Back | | | `--------------------' `--------------------' @@ -101,19 +105,19 @@ ,--------------------------------------------------. ,--------------------------------------------------. | | | | | | | | | | | | | | | | |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| -| |KOpen |KType | | | | | | | | | | | | | +| |KOpen |KType | | | | | | | Copy | | | | Paste| | |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| -| |DLeft |DRight|LShift| | |------| |------| Left | Down | Up | Right| | | +| |DLeft |DRight| LCTL | | |------| |------| Left | Down | Up | Right| | | |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| | |SFT_TB| Tab | | | | | | | | | | | | | `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' | | | | | | | | | | | | `----------------------------------' `----------------------------------' ,-------------. ,-------------. - | | | | | | + | | | | Home | End | ,------|------|------| |------+------+------. | | | | | | | | - | | CTRL |------| |------| | | + | | LSFT |------| |------| | | | | | | | | | | `--------------------' `--------------------' ``` diff --git a/keyboards/ergodox/keymaps/333fred/keymap.c b/keyboards/ergodox/keymaps/333fred/keymap.c index fdbfddd0cf..e3f95132d3 100644 --- a/keyboards/ergodox/keymaps/333fred/keymap.c +++ b/keyboards/ergodox/keymaps/333fred/keymap.c @@ -103,7 +103,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | F10 | | F11 | | | | | | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | | | | |------| |------| | | | | | | - * |--------+------+------+------+------+------|ACCESS| | |------+------+------+------+------+--------| + * |--------+------+------+------+------+------| L2 | | |------+------+------+------+------+--------| * | | | | | | | | | | | | | | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | | | | | | | F12 |GoToIm| FAR | | | @@ -123,7 +123,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_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, TG(SYMB), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, M(FORMAT),M(BUILD), M(REFACTOR), @@ -147,7 +147,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | ! | @ | ( | ) | | |ACCESS| |ACCESS| Up | 7 | 8 | 9 | * | F12 | * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | # | $ | { | } | ` |------| |------| Down | 4 | 5 | 6 | + | | - * |---------+------+------+------+------+------| | | |------+------+------+------+------+--------| + * |---------+------+------+------+------+------|ACCESS| | |------+------+------+------+------+--------| * | | % | ^ | [ | ] | ~ | | | | & | 1 | 2 | 3 | \ | | * `---------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | EPRM | | | | | | 0 | 0 | . | = | | @@ -324,17 +324,17 @@ const macro_t *action_get_macro(keyrecord_t *record, uint8_t id, uint8_t opt) } break; case BUILD: - if (record->event.pressed) { + if (record->event.pressed) { // VS Build. Sends CTRL+SHFT+B return MACRO(D(LCTL), D(LSFT), T(B), U(LSFT), U(LCTL), END); } break; case GO_TO_IMPL: - if (record->event.pressed) { + if (record->event.pressed) { // VS Go To Implementation. Sends CTRL+F12 return MACRO(D(LCTL), T(F12), U(LCTL), END); } break; case FIND_ALL_REF: - if (record->event.pressed) { + if (record->event.pressed) { // VS Find All References. Sends CTRL+K, R return MACRO(D(LCTL), T(K), U(LCTL), T(R), END); } break; From de80e2c756508fbd14562ece23b0cbdfbb959e1f Mon Sep 17 00:00:00 2001 From: npoirey Date: Fri, 23 Jun 2017 21:25:46 +0200 Subject: [PATCH 19/25] Moved frenchdev to handwired --- keyboards/frenchdev/config.h | 34 -------- keyboards/frenchdev/frenchdev.c | 4 - keyboards/frenchdev/frenchdev.h | 7 -- keyboards/frenchdev/v1/Makefile | 8 -- keyboards/frenchdev/v1/rules.mk | 80 ------------------- keyboards/{ => handwired}/frenchdev/Makefile | 2 - .../v1 => handwired/frenchdev}/config.h | 29 +++++-- .../v1.c => handwired/frenchdev/frenchdev.c} | 2 +- .../v1.h => handwired/frenchdev/frenchdev.h} | 2 +- .../v1 => handwired/frenchdev}/i2cmaster.h | 0 .../frenchdev/keymaps/default/keymap.c | 2 +- .../frenchdev/keymaps/default/readme.md | 13 +++ .../v1 => handwired/frenchdev}/matrix.c | 2 +- keyboards/{ => handwired}/frenchdev/readme.md | 4 +- keyboards/{ => handwired}/frenchdev/rules.mk | 55 ++++++++----- .../v1 => handwired/frenchdev}/twimaster.c | 0 16 files changed, 77 insertions(+), 167 deletions(-) delete mode 100644 keyboards/frenchdev/config.h delete mode 100644 keyboards/frenchdev/frenchdev.c delete mode 100644 keyboards/frenchdev/frenchdev.h delete mode 100644 keyboards/frenchdev/v1/Makefile delete mode 100644 keyboards/frenchdev/v1/rules.mk rename keyboards/{ => handwired}/frenchdev/Makefile (68%) rename keyboards/{frenchdev/v1 => handwired/frenchdev}/config.h (65%) rename keyboards/{frenchdev/v1/v1.c => handwired/frenchdev/frenchdev.c} (98%) rename keyboards/{frenchdev/v1/v1.h => handwired/frenchdev/frenchdev.h} (98%) rename keyboards/{frenchdev/v1 => handwired/frenchdev}/i2cmaster.h (100%) rename keyboards/{ => handwired}/frenchdev/keymaps/default/keymap.c (99%) create mode 100644 keyboards/handwired/frenchdev/keymaps/default/readme.md rename keyboards/{frenchdev/v1 => handwired/frenchdev}/matrix.c (99%) rename keyboards/{ => handwired}/frenchdev/readme.md (91%) rename keyboards/{ => handwired}/frenchdev/rules.mk (93%) rename keyboards/{frenchdev/v1 => handwired/frenchdev}/twimaster.c (100%) diff --git a/keyboards/frenchdev/config.h b/keyboards/frenchdev/config.h deleted file mode 100644 index f535010ef1..0000000000 --- a/keyboards/frenchdev/config.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef KEYBOARDS_ERGODOX_CONFIG_H_ -#define KEYBOARDS_ERGODOX_CONFIG_H_ - -#define MOUSEKEY_INTERVAL 20 -#define MOUSEKEY_DELAY 0 -#define MOUSEKEY_TIME_TO_MAX 5 -#define MOUSEKEY_MAX_SPEED 2 -#define MOUSEKEY_WHEEL_DELAY 0 - -#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_v1 - #include "v1/config.h" -#endif - - -#endif /* KEYBOARDS_ERGODOX_CONFIG_H_ */ diff --git a/keyboards/frenchdev/frenchdev.c b/keyboards/frenchdev/frenchdev.c deleted file mode 100644 index ecc1021696..0000000000 --- a/keyboards/frenchdev/frenchdev.c +++ /dev/null @@ -1,4 +0,0 @@ -#include "frenchdev.h" -#include "debug.h" -#include "action_layer.h" - diff --git a/keyboards/frenchdev/frenchdev.h b/keyboards/frenchdev/frenchdev.h deleted file mode 100644 index 60afda21d6..0000000000 --- a/keyboards/frenchdev/frenchdev.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef KEYBOARDS_ERGODOX_ERGODOX_H_ -#define KEYBOARDS_ERGODOX_ERGODOX_H_ -#ifdef SUBPROJECT_v1 - #include "v1.h" -#endif - -#endif /* KEYBOARDS_ERGODOX_ERGODOX_H_ */ diff --git a/keyboards/frenchdev/v1/Makefile b/keyboards/frenchdev/v1/Makefile deleted file mode 100644 index 1098332b8a..0000000000 --- a/keyboards/frenchdev/v1/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend -COMMAND_ENABLE = no # Commands for debug and configuration -RGBLIGHT_ENABLE ?= yes -MIDI_ENABLE ?= no - -ifndef MAKEFILE_INCLUDED - include ../../../Makefile -endif diff --git a/keyboards/frenchdev/v1/rules.mk b/keyboards/frenchdev/v1/rules.mk deleted file mode 100644 index 64b2db8158..0000000000 --- a/keyboards/frenchdev/v1/rules.mk +++ /dev/null @@ -1,80 +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. -# - -SLEEP_LED_ENABLE = no -API_SYSEX_ENABLE ?= no -RGBLIGHT_ENABLE ?= yes - -ifndef QUANTUM_DIR - include ../../../Makefile -endif diff --git a/keyboards/frenchdev/Makefile b/keyboards/handwired/frenchdev/Makefile similarity index 68% rename from keyboards/frenchdev/Makefile rename to keyboards/handwired/frenchdev/Makefile index 73a289f1d4..57b2ef62e5 100644 --- a/keyboards/frenchdev/Makefile +++ b/keyboards/handwired/frenchdev/Makefile @@ -1,5 +1,3 @@ -SUBPROJECT_DEFAULT = v1 - ifndef MAKEFILE_INCLUDED include ../../Makefile endif diff --git a/keyboards/frenchdev/v1/config.h b/keyboards/handwired/frenchdev/config.h similarity index 65% rename from keyboards/frenchdev/v1/config.h rename to keyboards/handwired/frenchdev/config.h index c4c42df82a..dd386402c8 100644 --- a/keyboards/frenchdev/v1/config.h +++ b/keyboards/handwired/frenchdev/config.h @@ -1,6 +1,5 @@ /* -Copyright 2012 Jun Wako -Copyright 2013 Oleg Kostyuk +Copyright 201 Nicolas Poirey 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 @@ -19,15 +18,13 @@ along with this program. If not, see . #ifndef FRENCHDEV_V1_CONFIG_H #define FRENCHDEV_V1_CONFIG_H -#include "../config.h" - #include "config_common.h" /* USB Device descriptor parameter */ #define VENDOR_ID 0xFEED #define PRODUCT_ID 0x1307 #define DEVICE_VER 0x0001 -#define MANUFACTURER Sacapuces +#define MANUFACTURER Nicolas Poirey #define PRODUCT Frenchdev V1 #define DESCRIPTION QMK keyboard firmware for Frenchdev @@ -46,6 +43,26 @@ along with this program. If not, see . #define USB_MAX_POWER_CONSUMPTION 500 +#define MOUSEKEY_INTERVAL 20 +#define MOUSEKEY_DELAY 0 +#define MOUSEKEY_TIME_TO_MAX 5 +#define MOUSEKEY_MAX_SPEED 2 +#define MOUSEKEY_WHEEL_DELAY 0 + +#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.) + +/* 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. @@ -65,4 +82,4 @@ along with this program. If not, see . //#define NO_ACTION_FUNCTION //#define DEBUG_MATRIX_SCAN_RATE -#endif +#endif //FRENCHDEV_V1_CONFIG_H diff --git a/keyboards/frenchdev/v1/v1.c b/keyboards/handwired/frenchdev/frenchdev.c similarity index 98% rename from keyboards/frenchdev/v1/v1.c rename to keyboards/handwired/frenchdev/frenchdev.c index 71c4b5cf57..101fe92e0b 100644 --- a/keyboards/frenchdev/v1/v1.c +++ b/keyboards/handwired/frenchdev/frenchdev.c @@ -1,4 +1,4 @@ -#include "v1.h" +#include "frenchdev.h" #include "i2cmaster.h" bool i2c_initialized = 0; diff --git a/keyboards/frenchdev/v1/v1.h b/keyboards/handwired/frenchdev/frenchdev.h similarity index 98% rename from keyboards/frenchdev/v1/v1.h rename to keyboards/handwired/frenchdev/frenchdev.h index 4ef7a3512e..bf4df18ef5 100644 --- a/keyboards/frenchdev/v1/v1.h +++ b/keyboards/handwired/frenchdev/frenchdev.h @@ -105,7 +105,7 @@ inline void ergodox_led_all_set(uint8_t n) \ { k57, k47, k37, PL1, PL2, PL3 }, \ { k56, k46, k36, k26, k16, k06 }, \ - { k55, k44, k35, k25, k15, k05 }, \ + { k55, k45, k35, k25, k15, k05 }, \ { k54, k44, k34, k24, k14, k04 }, \ { k53, k43, k33, k23, k13, k03 }, \ { k52, k42, k32, k22, k12, k02 }, \ diff --git a/keyboards/frenchdev/v1/i2cmaster.h b/keyboards/handwired/frenchdev/i2cmaster.h similarity index 100% rename from keyboards/frenchdev/v1/i2cmaster.h rename to keyboards/handwired/frenchdev/i2cmaster.h diff --git a/keyboards/frenchdev/keymaps/default/keymap.c b/keyboards/handwired/frenchdev/keymaps/default/keymap.c similarity index 99% rename from keyboards/frenchdev/keymaps/default/keymap.c rename to keyboards/handwired/frenchdev/keymaps/default/keymap.c index 035e0179d3..74b20cb0f7 100644 --- a/keyboards/frenchdev/keymaps/default/keymap.c +++ b/keyboards/handwired/frenchdev/keymaps/default/keymap.c @@ -72,7 +72,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_ESC, BP_DQOT, BP_LGIL, BP_RGIL, BP_LPRN, BP_RPRN, BP_DTRM, BP_DCRC, BP_AT, BP_PLUS, BP_MINS, BP_SLSH, BP_ASTR, KC_BSPC, \ KC_TAB, BP_B, BP_ECUT, BP_O, BP_P, BP_EGRV, BP_UNDS, BP_EQL, BP_K, BP_V, BP_D, BP_L, BP_J, KC_ENT, \ BP_GRV, BP_A, BP_U, BP_E, BP_I, BP_F, BP_SCLN, BP_EXLM, BP_C, BP_T, BP_S, BP_R, BP_N, BP_APOS, \ - M(M_SF), BP_Z, BP_AGRV, BP_Y, BP_X, BP_W, M(M_SFS), BP_CBSP, M(L2INS), M(L2LOC), BP_CDEL, M(M_SFS),BP_M, BP_G, KC_UP, BP_H, BP_Q, M(M_SF), \ + M(M_SF), BP_Z, BP_AGRV, BP_Y, BP_X, KC_RBRACKET, M(M_SFS), BP_CBSP, M(L2INS), M(L2LOC), BP_CDEL, M(M_SFS),BP_M, BP_G, KC_UP, BP_H, BP_Q, M(M_SF), \ KC_LCTL, KC_LGUI, KC_PSLS, BP_DOT, BP_COMM, KC_SPACE,M(M_L1E), KC_LALT, KC_CAPS, M(M_L1E),KC_SPACE,KC_LEFT, KC_DOWN, KC_RIGHT,BP_COLN, KC_RCTL, \ //left pedals M(M_LP), M(M_RP), KC_TRNS, \ diff --git a/keyboards/handwired/frenchdev/keymaps/default/readme.md b/keyboards/handwired/frenchdev/keymaps/default/readme.md new file mode 100644 index 0000000000..1a81d1779f --- /dev/null +++ b/keyboards/handwired/frenchdev/keymaps/default/readme.md @@ -0,0 +1,13 @@ +layout : + +[default layout](http://i.imgur.com/r2Nvr4p.png) + +the thing when finished : +http://imgur.com/a/6FY8v + +concept and mockup: +http://imgur.com/a/R0vvs + +to build : + + docker run --rm -e keymap=default -e keyboard=frenchdev --rm -v D:/Repositories/qmk:/qmk:rw edasque/qmk_firmware diff --git a/keyboards/frenchdev/v1/matrix.c b/keyboards/handwired/frenchdev/matrix.c similarity index 99% rename from keyboards/frenchdev/v1/matrix.c rename to keyboards/handwired/frenchdev/matrix.c index 70fa6a696d..df2b8e8b07 100644 --- a/keyboards/frenchdev/v1/matrix.c +++ b/keyboards/handwired/frenchdev/matrix.c @@ -37,7 +37,7 @@ along with this program. If not, see . #include "debug.h" #include "util.h" #include "matrix.h" -#include "v1.h" +#include "frenchdev.h" #include "i2cmaster.h" #ifdef DEBUG_MATRIX_SCAN_RATE #include "timer.h" diff --git a/keyboards/frenchdev/readme.md b/keyboards/handwired/frenchdev/readme.md similarity index 91% rename from keyboards/frenchdev/readme.md rename to keyboards/handwired/frenchdev/readme.md index 0d79930ac0..47e4ade16c 100644 --- a/keyboards/frenchdev/readme.md +++ b/keyboards/handwired/frenchdev/readme.md @@ -11,7 +11,7 @@ http://imgur.com/a/R0vvs to build : - docker run --rm -e keymap=default -e subproject=v1 -e keyboard=frenchdev --rm -v D:/Repositories/qmk:/qmk:rw edasque/qmk_firmware + docker run --rm -e keymap=default -e keyboard=frenchdev --rm -v D:/Repositories/qmk:/qmk:rw edasque/qmk_firmware The PHYSICAL rows and columns are connected as such : @@ -60,3 +60,5 @@ and on left hand (main) : we use pull up resistor for SCL et VDA, see https://github.com/ErgoDox-EZ/docs/blob/master/ErgoDox%20EZ%20Schematic.pdf for example the connector is a standard TRRS (jack with audio + mic) + +Diode direction is row to column diff --git a/keyboards/frenchdev/rules.mk b/keyboards/handwired/frenchdev/rules.mk similarity index 93% rename from keyboards/frenchdev/rules.mk rename to keyboards/handwired/frenchdev/rules.mk index e14a154070..40a3e4676c 100644 --- a/keyboards/frenchdev/rules.mk +++ b/keyboards/handwired/frenchdev/rules.mk @@ -13,26 +13,12 @@ # (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 ?= yes # Console for debug(+400) -COMMAND_ENABLE ?= yes # Commands for debug and configuration -CUSTOM_MATRIX ?= yes # Custom matrix file (taken and adapted from the ErgoDox EZ to acomodate custom number of columns) -SLEEP_LED_ENABLE ?= no # 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 -UNICODE_ENABLE ?= yes # Unicode -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 = no -#MCU = at90usb1287 +# # project specific files +SRC = twimaster.c \ + matrix.c + +# MCU name MCU = atmega32u4 # Processor frequency. @@ -48,8 +34,7 @@ MCU = atmega32u4 # software delays. F_CPU = 16000000 -# for avr upload -USB ?= /dev/cu.usbmodem1421 + # # LUFA specific # @@ -69,6 +54,10 @@ ARCH = AVR8 # 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 @@ -77,3 +66,27 @@ F_USB = $(F_CPU) # 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 ?= yes # Console for debug(+400) +COMMAND_ENABLE ?= yes # Commands for debug and configuration +CUSTOM_MATRIX ?= yes # Custom matrix file (taken and adapted from the ErgoDox EZ to acomodate custom number of columns) +SLEEP_LED_ENABLE ?= no # 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 +UNICODE_ENABLE ?= yes # Unicode +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 = no +API_SYSEX_ENABLE ?= no + +#ifndef QUANTUM_DIR +# include ../../../Makefile +#endif diff --git a/keyboards/frenchdev/v1/twimaster.c b/keyboards/handwired/frenchdev/twimaster.c similarity index 100% rename from keyboards/frenchdev/v1/twimaster.c rename to keyboards/handwired/frenchdev/twimaster.c From a3f151b8e9dc93850fa6eba45d55f35f309b848f Mon Sep 17 00:00:00 2001 From: npoirey Date: Fri, 23 Jun 2017 21:35:33 +0200 Subject: [PATCH 20/25] Refactoring frenchdev --- keyboards/handwired/frenchdev/frenchdev.c | 27 ++++---- keyboards/handwired/frenchdev/frenchdev.h | 63 +++++++++---------- .../frenchdev/keymaps/default/keymap.c | 16 ++--- keyboards/handwired/frenchdev/matrix.c | 12 ++-- keyboards/handwired/frenchdev/rules.mk | 2 +- 5 files changed, 61 insertions(+), 59 deletions(-) diff --git a/keyboards/handwired/frenchdev/frenchdev.c b/keyboards/handwired/frenchdev/frenchdev.c index 101fe92e0b..6d5883a3a8 100644 --- a/keyboards/handwired/frenchdev/frenchdev.c +++ b/keyboards/handwired/frenchdev/frenchdev.c @@ -18,29 +18,30 @@ void matrix_init_kb(void) { PORTD |= (1<<5 | 1<<4); PORTE |= (1<<6); - ergodox_blink_all_leds(); + frenchdev_blink_all_leds(); + frenchdev_blink_all_leds(); + frenchdev_blink_all_leds(); + frenchdev_blink_all_leds(); matrix_init_user(); } -void ergodox_blink_all_leds(void) +void frenchdev_blink_all_leds(void) { - ergodox_led_all_off(); - ergodox_led_all_set(LED_BRIGHTNESS_HI); - ergodox_right_led_1_on(); + frenchdev_led_all_off(); + frenchdev_led_all_set(LED_BRIGHTNESS_HI); + frenchdev_led_1_on(); _delay_ms(50); - ergodox_right_led_2_on(); + frenchdev_led_2_on(); _delay_ms(50); - ergodox_right_led_3_on(); + frenchdev_led_3_on(); _delay_ms(50); - ergodox_right_led_1_off(); + frenchdev_led_1_off(); _delay_ms(50); - ergodox_right_led_2_off(); + frenchdev_led_2_off(); _delay_ms(50); - ergodox_right_led_3_off(); - //ergodox_led_all_on(); - //_delay_ms(333); - ergodox_led_all_off(); + frenchdev_led_3_off(); + frenchdev_led_all_off(); } uint8_t init_mcp23018(void) { diff --git a/keyboards/handwired/frenchdev/frenchdev.h b/keyboards/handwired/frenchdev/frenchdev.h index bf4df18ef5..82121e044e 100644 --- a/keyboards/handwired/frenchdev/frenchdev.h +++ b/keyboards/handwired/frenchdev/frenchdev.h @@ -10,7 +10,7 @@ #define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) #define CPU_16MHz 0x00 -// I2C aliases and register addresses (see "mcp23018.md") +// I2C aliases and register addresses (see "mcp23018.md" on tmk repository) #define I2C_ADDR 0b0100000 #define I2C_ADDR_WRITE ( (I2C_ADDR<<1) | I2C_WRITE ) #define I2C_ADDR_READ ( (I2C_ADDR<<1) | I2C_READ ) @@ -25,57 +25,56 @@ extern uint8_t mcp23018_status; -void init_ergodox(void); -void ergodox_blink_all_leds(void); +void init_frenchdev(void); +void frenchdev_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 frenchdev_board_led_on(void) { DDRD |= (1<<6); PORTD |= (1<<6); } +inline void frenchdev_led_1_on(void) { DDRB |= (1<<5); PORTB |= (1<<5); } +inline void frenchdev_led_2_on(void) { DDRB |= (1<<6); PORTB |= (1<<6); } +inline void frenchdev_led_3_on(void) { DDRB |= (1<<7); PORTB |= (1<<7); } +inline void frenchdev_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 frenchdev_board_led_off(void) { DDRD &= ~(1<<6); PORTD &= ~(1<<6); } +inline void frenchdev_led_1_off(void) { DDRB &= ~(1<<5); PORTB &= ~(1<<5); } +inline void frenchdev_led_2_off(void) { DDRB &= ~(1<<6); PORTB &= ~(1<<6); } +inline void frenchdev_led_3_off(void) { DDRB &= ~(1<<7); PORTB &= ~(1<<7); } +inline void frenchdev_led_off(uint8_t led) { DDRB &= ~(1<<(led+4)); PORTB &= ~(1<<(led+4)); } -inline void ergodox_led_all_on(void) +inline void frenchdev_led_all_on(void) { - ergodox_board_led_on(); - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); - ergodox_right_led_3_on(); + frenchdev_board_led_on(); + frenchdev_led_1_on(); + frenchdev_led_2_on(); + frenchdev_led_3_on(); } -inline void ergodox_led_all_off(void) +inline void frenchdev_led_all_off(void) { - ergodox_board_led_off(); - ergodox_right_led_1_off(); - ergodox_right_led_2_off(); - ergodox_right_led_3_off(); + frenchdev_board_led_off(); + frenchdev_led_1_off(); + frenchdev_led_2_off(); + frenchdev_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) { +inline void frenchdev_led_1_set(uint8_t n) { OCR1A = n; } +inline void frenchdev_led_2_set(uint8_t n) { OCR1B = n; } +inline void frenchdev_led_3_set(uint8_t n) { OCR1C = n; } +inline void frenchdev_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) +inline void frenchdev_led_all_set(uint8_t n) { - ergodox_right_led_1_set(n); - ergodox_right_led_2_set(n); - ergodox_right_led_3_set(n); + frenchdev_led_1_set(n); + frenchdev_led_2_set(n); + frenchdev_led_3_set(n); } #define KEYMAP( \ diff --git a/keyboards/handwired/frenchdev/keymaps/default/keymap.c b/keyboards/handwired/frenchdev/keymaps/default/keymap.c index 74b20cb0f7..e6d72d0131 100644 --- a/keyboards/handwired/frenchdev/keymaps/default/keymap.c +++ b/keyboards/handwired/frenchdev/keymaps/default/keymap.c @@ -374,18 +374,18 @@ uint8_t old_layer=_BASE; void matrix_scan_user(void) { uint8_t layer = biton32(layer_state); - ergodox_right_led_1_off(); - ergodox_right_led_2_off(); + frenchdev_led_1_off(); + frenchdev_led_2_off(); switch (layer) { case _BASE: - ergodox_right_led_2_on(); + frenchdev_led_2_on(); break; case _SYMBOLS: - ergodox_right_led_1_on(); + frenchdev_led_1_on(); break; case _MEDIA: - ergodox_right_led_1_on(); - ergodox_right_led_2_on(); + frenchdev_led_1_on(); + frenchdev_led_2_on(); default: // none break; @@ -399,9 +399,9 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { void led_set_user(uint8_t usb_led) { if (usb_led & (1< +Copyright 2013 Nicolas Poirey 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 @@ -164,7 +166,7 @@ uint8_t matrix_scan(void) print("left side not responding\n"); } else { print("left side attached\n"); - ergodox_blink_all_leds(); + frenchdev_blink_all_leds(); } } } diff --git a/keyboards/handwired/frenchdev/rules.mk b/keyboards/handwired/frenchdev/rules.mk index 40a3e4676c..16203a5f5f 100644 --- a/keyboards/handwired/frenchdev/rules.mk +++ b/keyboards/handwired/frenchdev/rules.mk @@ -75,7 +75,7 @@ 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 (taken and adapted from the ErgoDox EZ to acomodate custom number of columns) +CUSTOM_MATRIX ?= yes # Custom matrix file (taken and adapted from the ErgoDox EZ to handle custom number of columns) SLEEP_LED_ENABLE ?= no # 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 UNICODE_ENABLE ?= yes # Unicode From 37987837b18a758dffbed2b01ab34103f4f6f69f Mon Sep 17 00:00:00 2001 From: Stick Date: Fri, 23 Jun 2017 16:02:01 -0500 Subject: [PATCH 21/25] added media keys; many bug fixes --- keyboards/ergodox/keymaps/familiar/README.md | 18 +++++----- keyboards/ergodox/keymaps/familiar/keymap.c | 35 +++++++++----------- 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/keyboards/ergodox/keymaps/familiar/README.md b/keyboards/ergodox/keymaps/familiar/README.md index 7e3bce4061..4438fccf0b 100644 --- a/keyboards/ergodox/keymaps/familiar/README.md +++ b/keyboards/ergodox/keymaps/familiar/README.md @@ -23,12 +23,12 @@ Key features of the familiar layout: 1. QWERTY default layout. 1. International symbols layer, mapped in the US-International layout default positions, through [UCIS](https://github.com/qmk/qmk_firmware/wiki/Unicode-and-additional-language-support#ucis_enable). 1. Numpad layer on right hand. -1. Thumb cluster holds spacebar, ALT, and access to secondary layers. +1. Thumb cluster holds spacebar and access to secondary layers. 1. Function-layer arrow keys in both the first-person-shooter (actually ESDF instead of WASD) and vim (HJKL) locations. ## Install -If you are on Windows or Mac, choose the proper line in [`keymap.c`](keymap.c) for [unicode/international character support](https://github.com/qmk/qmk_firmware/wiki/Unicode-and-additional-language-support#ucis_enable) (starts at line 235). +If you are on Windows or Mac, choose the proper line in [`keymap.c`](keymap.c) for [unicode/international character support](https://github.com/qmk/qmk_firmware/wiki/Unicode-and-additional-language-support#ucis_enable) (starts at line 253). ```c void matrix_init_user(void) { set_unicode_input_mode(UC_LNX); // Linux @@ -45,13 +45,15 @@ $ make ergodox-ez-familiar-teensy ## Usage +NOTE: The keymap below is out of date. + [![Familiar Layout](https://i.imgur.com/jflmkBb.png)](http://www.keyboard-layout-editor.com/#/gists/13508a9f99cff381d58b7be6f7dcc644) ### Layers 1. Base Layer: QWERTY, with arrow keys at bottom right. -1. UCIS Layer: US-International symbols layer, plus —. Accessed by toggling the `INTL` layer using the UCIS key (bottom of left thumb cluster). -1. UCIS-Shifted Layer: Making shift work for UCIS characters. An ugly workaround. Any ideas? Accessed by holding shift while the UCIS layer is active (toggles the `INSF` layer). -1. Numpad Layer: Right hand number pad. Accessed by toggling the `NUMP` layer using the NPAD key (bottom of right thumb cluster). +1. UCIS Layer: US-International symbols layer, plus —. Accessed by toggling the `SYMB` layer using the UCIS key (bottom of left thumb cluster). +1. UCIS-Shifted Layer: Making shift work for UCIS characters. An ugly workaround. Any ideas? Accessed by holding shift while the `SYMB` layer is active (toggles the `CSYM` layer). +1. Numpad Layer: Right hand number pad. Accessed by toggling the `NUMP` layer using the NUMP key (bottom of right thumb cluster). 1. Function Layer: F1-F12, arrows on ESDF and HJKL, media player controls. Accessed by holding either FN key (center key of each thumb cluster), which toggles the `ARRW` layer. I know, I need to work on my naming conventions. ## Contribute @@ -61,9 +63,9 @@ $ make ergodox-ez-familiar-teensy I'm terrible at this; I have no background in human-computer interaction, kinesiology, or keyboard-ology. Please send comments/issues/pull requests/angry tweets/etc. If you think there is a better way to take advantage of the ErgoDox/QMK comination without straying far from 84/101-key QWERTY, I want to know it. ### Issues -1. The top two keys of the right thumb cluster are currently unused. I wanted them for screen brightness, but I haven't found a solution I like. -1. The `'`, `"`, `[`, and `]` keys are terrible to access; I want to put them somewhere else but I haven't figured out where. -1. The `INSF` layer is an ugly workaround. I should write a function for doing different things in the `INTL` layer depending on whether SHIFT is being held. Or something. Ideas? +1. The `CSYM` layer is an ugly workaround. I should write a function for doing different things in the `SYMB` layer depending on whether SHIFT is being held. Or something. Ideas? +1. Right now, the thumb cluster function keys double as slash and whack... this really isnt a great solution. +1. `MENU` and `LEAD` are useless, at the moment. ## License QMK is licensed ([mostly](https://github.com/qmk/qmk_firmware/issues/1038)) under the [GPLv2](blob/master/license_GPLv2.md). Accordingly, to whatever extent applicable, this keymap is licensed under the [GPLv3](../../../../license_GPLv3.md). diff --git a/keyboards/ergodox/keymaps/familiar/keymap.c b/keyboards/ergodox/keymaps/familiar/keymap.c index fb326b3ddf..e457515651 100644 --- a/keyboards/ergodox/keymaps/familiar/keymap.c +++ b/keyboards/ergodox/keymaps/familiar/keymap.c @@ -3,9 +3,6 @@ #include "action_layer.h" #include "version.h" -// Leader Key Timeout -//#define LEADER_TIMEOUT 300 - // Layers #define BASE 0 // default layer #define SYMB 1 // international symbols @@ -56,7 +53,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * ,------|------|------| |------+------+------. * | |SLASH/| LOCKS| | MUTE |WHACK/| | * | SPC | MO(4)|------| |------|MO(4) | SPC | - * | | | TO(3)| |TO(1) | | | + * | | | TO(1)| |TO(3) | | | * `--------------------' `--------------------' */ [BASE] = KEYMAP( @@ -74,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_PGUP, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENTER, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_RSPC, - MT(MOD_RALT, KC_LBRC), KC_RBRC, KC_LEFT, KC_DOWN, KC_RGHT, + MT(MOD_RALT, KC_LBRC), MT(MOD_RCTL, KC_RBRC), KC_LEFT, KC_DOWN, KC_RGHT, KC_VOLD, KC_VOLU, KC_MUTE, TG(NUMP), LT(ARRW, KC_BSLS), KC_SPC @@ -83,13 +80,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* layer 1: International symbols, etc * * ,--------------------------------------------------. ,--------------------------------------------------. - * | ¬ | ¡ | ² | ³ | ¤ | € | ¼ | | ½ | ¾ | ‘ | ’ | ¥ | × | | + * | | ¡ | ² | ³ | ¤ | € | ¼ | | ½ | ¾ | ‘ | ’ | ¥ | × | | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | ä | å | é | ® | þ | | | | ü | ú | í | ó | ö | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | ´ | á | ß | ð | | |------| |------| | | | ø | ¶ | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * |MO(CSYM)| æ | ¿ | © | | | | | | ñ | µ | ç | | |MO(CSYM)| + * |MO(CSYM)| æ | ¿ | © | ¬ | | | | | ñ | µ | ç | | |MO(CSYM)| * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' * | | | | | | | « | » | | | | * `------------------------------------' `------------------------------------' @@ -103,10 +100,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { */ [SYMB] = KEYMAP( // left hand - UC(0x00AC), UC(0x00A1), UC(0x00B2), UC(0x00B3), UC(0x00A4), UC(0x20AC), UC(0x00BC), + _______, UC(0x00A1), UC(0x00B2), UC(0x00B3), UC(0x00A4), UC(0x20AC), UC(0x00BC), _______, UC(0x00E4), UC(0x00E5), UC(0x00E9), UC(0x00AE), UC(0x00FE), _______, UC(0x00B4), UC(0x00E1), UC(0x00DF), UC(0x00F0), _______, _______, - MO(CSYM), UC(0x00E6), UC(0x00BF), UC(0x00A9), _______, _______, _______, + MO(CSYM), UC(0x00E6), UC(0x00BF), _______, UC(0x00AC), UC(0x00A9), _______, _______, _______, _______, _______, _______, _______, _______, _______, @@ -133,9 +130,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | ¨ | Á | § | Ð | | |------| |------| | | | Ø | ° | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | Æ | | ¢ | | | | | | Ñ | | Ç | | | | + * | | Æ | | ¢ | ¦ | | | | | Ñ | | Ç | | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | ¦ | | | | | | | | + * | | | | | | | | | | | | * `------------------------------------' `------------------------------------' * ,-------------. ,-------------. * | | | | | | @@ -150,8 +147,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, UC(0x00B9), _______, _______, UC(0x00A3), _______, _______, _______, UC(0x00C4), UC(0x00C5), UC(0x00C9), S(KC_R), UC(0x00DE), _______, UC(0x00A8), UC(0x00C1), UC(0x00A7), UC(0x00D0), S(KC_F), S(KC_G), - _______, UC(0x00C6), S(KC_X), UC(0x00A2), S(KC_V), S(KC_B), _______, - _______, _______, _______, UC(0x00A6), _______, + _______, UC(0x00C6), UC(0x00A6), UC(0x00A2), S(KC_V), S(KC_B), _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, @@ -177,7 +174,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | | | | | | | | | 1 | 2 | 3 | = | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | 0 | . | , | ENTER| | + * | | | | | | |0/RALT|./RCTL| , | ENTER| | * `------------------------------------' `------------------------------------' * ,-------------. ,-------------. * | | | | | | @@ -202,7 +199,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, _______, KC_KP_7, KC_KP_8, KC_KP_9, KC_PMNS, _______, _______, KC_KP_4, KC_KP_5, KC_KP_6, KC_PPLS, _______, _______, _______, KC_KP_1, KC_KP_2, KC_KP_3, KC_PEQL, _______, - KC_KP_0, KC_KP_DOT, KC_PCMM, KC_PENT, _______, + MT(MOD_RALT, KC_KP_0), MT(MOD_RCTL, KC_KP_DOT),KC_PCMM, KC_PENT, _______, _______, _______, _______, _______, _______, _______ @@ -223,7 +220,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * | | | | | | | | | HOME | PGDN | END | * `------------------------------------' `------------------------------------' * ,-------------. ,-------------. - * | PAUSE|SYSREQ| | | | + * | SYSRQ| PAUSE| | | | * ,------|------|------| |------+------+------. * | | | | | | | | * | | |------| |------| | | @@ -235,13 +232,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, _______, _______, _______, KC_UP, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, - _______, _______, _______, _______, _______, _______, _______, + _______, KC_MPRV, KC_MSTP, KC_MPLY, KC_MNXT, _______, _______, _______, _______, _______, _______, _______, - KC_PAUSE, _______, + KC_SYSREQ, KC_PAUSE, _______, _______, _______, _______, // right hand - KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_SYSREQ, + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, _______, _______, _______, KC_INS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, KC_PGUP, _______, From e43e58aad15da922b05b75a682a338dc19680c7a Mon Sep 17 00:00:00 2001 From: Stick Date: Fri, 23 Jun 2017 16:28:06 -0500 Subject: [PATCH 22/25] updated README.md --- keyboards/ergodox/keymaps/familiar/README.md | 4 +--- keyboards/ergodox/keymaps/familiar/keymap.c | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/keyboards/ergodox/keymaps/familiar/README.md b/keyboards/ergodox/keymaps/familiar/README.md index 4438fccf0b..536179337f 100644 --- a/keyboards/ergodox/keymaps/familiar/README.md +++ b/keyboards/ergodox/keymaps/familiar/README.md @@ -45,9 +45,7 @@ $ make ergodox-ez-familiar-teensy ## Usage -NOTE: The keymap below is out of date. - -[![Familiar Layout](https://i.imgur.com/jflmkBb.png)](http://www.keyboard-layout-editor.com/#/gists/13508a9f99cff381d58b7be6f7dcc644) +[![Familiar Layout](http://i.imgur.com/6nLN9UT.png)](https://gist.github.com/nstickney/13508a9f99cff381d58b7be6f7dcc644) ### Layers 1. Base Layer: QWERTY, with arrow keys at bottom right. diff --git a/keyboards/ergodox/keymaps/familiar/keymap.c b/keyboards/ergodox/keymaps/familiar/keymap.c index e457515651..c0334615b2 100644 --- a/keyboards/ergodox/keymaps/familiar/keymap.c +++ b/keyboards/ergodox/keymaps/familiar/keymap.c @@ -132,7 +132,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | Æ | | ¢ | ¦ | | | | | Ñ | | Ç | | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | | | | | | + * | | | | | | | “ | ” | | | | * `------------------------------------' `------------------------------------' * ,-------------. ,-------------. * | | | | | | @@ -157,7 +157,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { _______, UC(0x00DC), UC(0x00DA), UC(0x00CD), UC(0x00D3), UC(0x00D6), _______, S(KC_H), S(KC_J), S(KC_K), UC(0x00D8), UC(0x00B0), _______, _______, UC(0x00D1), _______, UC(0x00C7), S(KC_DOT), _______, _______, - _______, _______, _______, _______, _______, + UC(0x201C), UC(0x201D), _______, _______, _______, _______, _______, _______, _______, _______, _______ From 8ad12b1eb7cc196943b26a7becfdab209789cdc3 Mon Sep 17 00:00:00 2001 From: npoirey Date: Fri, 23 Jun 2017 23:59:30 +0200 Subject: [PATCH 23/25] Updated frenchdev readme --- keyboards/handwired/frenchdev/readme.md | 58 ++++++++++++++++++++----- 1 file changed, 48 insertions(+), 10 deletions(-) diff --git a/keyboards/handwired/frenchdev/readme.md b/keyboards/handwired/frenchdev/readme.md index 47e4ade16c..698b4befb2 100644 --- a/keyboards/handwired/frenchdev/readme.md +++ b/keyboards/handwired/frenchdev/readme.md @@ -1,18 +1,55 @@ -# My take on a splitted keyboard +# Frenchdev : My take on a splitted keyboard for dev and french language +Concept based on + - [ergodox](https://ergodox-ez.com/) + - [katy](https://deskthority.net/workshop-f7/katy-keyboard-or-k80cs-key80-contoured-split-t8524.html) -default layout : -[default layout](http://i.imgur.com/r2Nvr4p.png) +with the added possibility to connect up to 6 external switches like pedals, + and somewhat like the katy, not all keys are on the same level for easier reach. -the thing when finished : -http://imgur.com/a/6FY8v +###Photos +- [default layout](http://i.imgur.com/r2Nvr4p.png) +- [editable layout on keyboard layout editor](http://www.keyboard-layout-editor.com/#/gists/4480e3ab8026eb7c710a7e22203ef4aa) (keys placement is NOT precise on this) +- [the thing when finished](http://imgur.com/a/6FY8v) +- [concept and cardboard mockup](http://imgur.com/a/R0vvs) -concept and mockup: -http://imgur.com/a/R0vvs - -to build : +##Build instructions docker run --rm -e keymap=default -e keyboard=frenchdev --rm -v D:/Repositories/qmk:/qmk:rw edasque/qmk_firmware +##Laser-cuttable file +There is intentionnaly no hole for the TRRS connector, you are supposed to use a drill for it. +This way if you don't want to use the pedals you don't have a useless hole. Plus it's cleaner. +http://qmk.fm/frenchdev/frenchdev_v1_lasercut_template.svg + +##Side stickers +You can find my original file here : http://qmk.fm/frenchdev/example_printable_stickers.svg + +I used it when training but now I use blanks and the layout is different. +I still uploaded it because I think it can be a good jumpstart for any temporary stickers on the +side of keycaps. + +##List of parts +- I2C mcp23018 +- [teensy 2](https://www.pjrc.com/store/teensy.html) +- 3 LED, 5mm tall with flat head +- 3 330 ohm resistor +- 2 470 ohm resistor +- 2 TRRS connectors +- 1 [micro usb breakout board](http://www.ebay.com/itm/-/201387922085?) +- 88 cherry/gateron switchs +- 94 4148 diodes +- 34 R4 keys +- 14 R3 keys +- 20 R2 keys +- 22 R1 keys + +if you fancy adding pedals : +[these are good enough and cheap](https://www.amazon.fr/gp/product/B00V7WITKI/ref=oh_aui_detailpage_o04_s00?ie=UTF8&psc=1). You also need a RCA connector for each of those to replace the included cable + +If you (or your coworkers) find them too loud you can replace the switch inside them. +For once we don't really care about what's inside :) + +##Various indications The PHYSICAL rows and columns are connected as such : @@ -57,8 +94,9 @@ and on left hand (main) : | E6 GND | `------------------' -we use pull up resistor for SCL et VDA, see https://github.com/ErgoDox-EZ/docs/blob/master/ErgoDox%20EZ%20Schematic.pdf for example +We use pull up resistor for SCL and VDA, see https://github.com/ErgoDox-EZ/docs/blob/master/ErgoDox%20EZ%20Schematic.pdf for example the connector is a standard TRRS (jack with audio + mic) Diode direction is row to column + From b4f2f44a6f4e80ab358e439ec3c4695fccdba189 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Fri, 23 Jun 2017 21:29:04 -0400 Subject: [PATCH 24/25] Create isp_flashing_guide.md --- docs/isp_flashing_guide.md | 106 +++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 docs/isp_flashing_guide.md diff --git a/docs/isp_flashing_guide.md b/docs/isp_flashing_guide.md new file mode 100644 index 0000000000..02b34497ea --- /dev/null +++ b/docs/isp_flashing_guide.md @@ -0,0 +1,106 @@ +# ISP Flashing Guide + +If you're having trouble flashing/erasing your board, and running into cryptic error messages like any of the following: + + libusb: warning [darwin_transfer_status] transfer error: timed out + dfu.c:844: -ETIMEDOUT: Transfer timed out, NAK 0xffffffc4 (-60) + atmel.c:1627: atmel_flash: flash data dfu_download failed. + atmel.c:1629: Expected message length of 1072, got -60. + atmel.c:1434: Error flashing the block: err -2. + ERROR + Memory write error, use debug for more info. + commands.c:360: Error writing memory data. (err -4) + + dfu.c:844: -EPIPE: a) Babble detect or b) Endpoint stalled 0xffffffe0 (-32) + Device is write protected. + dfu.c:252: dfu_clear_status( 0x7fff4fc2ea80 ) + atmel.c:1434: Error flashing the block: err -2. + ERROR + Memory write error, use debug for more info. + commands.c:360: Error writing memory data. (err -4) + +You're likely going to need to ISP flash your board/device to get it working again. Luckily, this process is pretty straight-forward, provided you have any extra programmable keyboard, Arduino, or Teensy 2.0/Teensy 2.0++. There are also dedicated ISP flashers available for this, but most cost >$15, and it's assumed that if you are googling this error, this is the first you've heard about ISP flashing, and don't have one readily available (whereas you might have some other AVR board). __We'll be using a Teensy 2.0 with Windows 10 in this guide__ - if you are comfortable doing this on another system, please consider editing this guide and contributing those instructions! + +## Software needed + +* [The Arduino IDE](https://www.arduino.cc/en/Main/Software) +* [Teensyduino](https://www.pjrc.com/teensy/td_download.html) (if you're using a Teensy) +* [WinAVR](http://www.ladyada.net/learn/avr/setup-win.html) (Windows) + +## Wiring + +This is pretty straight-forward - we'll be connecting like-things to like-things in the following manner: + + Flasher B0 <-> Keyboard RESET + Flasher B1 <-> Keyboard B1 (SCLK) + Flasher B2 <-> Keyboard B2 (MOSI) + Flasher B3 <-> Keyboard B3 (MISO) + Flasher VCC <-> Keyboard VCC + Flasher GND <-> Keyboard GND + +## The ISP firmware + +Make sure your keyboard is unplugged from any device, and plug in your Teensy. + +1. Run Arduino after you have everything installed +2. Select `Tools > Board * > Teensy 2.0` +3. Click `File > Examples > 11.ArduinoISP > ArduinoISP` + +Then scroll down until you see something that looks like this block of code: + + // Configure which pins to use: + + // The standard pin configuration. + #ifndef ARDUINO_HOODLOADER2 + + #define RESET 0 // Use 0 (B0) instead of 10 + #define LED_HB 11 // Use 11 (LED on the Teensy 2.0) + #define LED_ERR 8 // This won't be used unless you have an LED hooked-up to 8 (D3) + #define LED_PMODE 7 // This won't be used unless you have an LED hooked-up to 7 (D2) + +And make the changes in the last four lines. If you're using something besides the Teenys 2.0, you'll want to choose something else that makes sense for `LED_HB`. We define `RESET` as `0`/`B0` because that's what's close - if you want to use another pin for some reason, [you can use the pinouts to choose something else](https://www.pjrc.com/teensy/pinout.html). + +Once you've made your changes, you can click the Upload button (right arrow), which will open up the Teensy flasher app - you'll need to press the reset button on the Teensy the first time, but after that, it's automatic (you shouldn't be flashing this more than once, though). Once flashed, the orange LED on the Teensy will flash on and off, indicating it's ready for some action. + +## The .hex file + +Before flashing your firmware, you're going to need to and do a little preparation. We'll be appending [this bootloader (also a .hex file)](https://github.com/qmk/qmk_firmware/blob/master/util/bootloader.hex) to the end of our firmware by opening the original .hex file in a text editor, and removing the last line, which should be `:00000001FF` (this is an EOF message). After that's been removed, copy the entire bootloader's contents and paste it at the end of the original file, and save it. + +It's possible to use other bootloaders here in the same way, but __you need a bootloader__, otherwise you'll have to ISP to write new firmware to your keyboard. + +## Flashing your firmware + +Make sure your keyboard is unplugged from any device, and plug in your Teensy. + +Open `cmd` and navigate to your where your modified .hex file is. We'll pretend this file is called `main.hex`, and that your Teensy 2.0 is on the `COM3` port - if you're unsure, you can open your Device Manager, and look for `Ports > USB Serial Device`. Use that COM port here. You can confirm it's the right port with: + + avrdude -c avrisp -P COM3 -p atmega32u4 + +and you should get something like the following output: + + avrdude: AVR device initialized and ready to accept instructions + + Reading | ################################################## | 100% 0.02s + + avrdude: Device signature = 0x1e9587 + + avrdude: safemode: Fuses OK + + avrdude done. Thank you. + +Since our keyboard uses an `atmega32u4` (common), that is the chip we'll specify. This is the full command: + + avrdude -c avrisp -P COM3 -p atmega32u4 -U flash:w:main.hex:i + +You should see a couple of progress bars, then you should see: + + avrdude: verifying ... + avrdude: 32768 bytes of flash verified + + avrdude: safemode: Fuses OK + + avrdude done. Thank you. + +Which means everything should be ok! Your board may restart automatically, otherwise, unplug your Teensy and plug in your keyboard - you can leave your Teensy wired to your keyboard while testing things, but it's recommended that you desolder it/remove the wiring once you're sure everything works. + +If you have any questions/problems, feel free to [open an issue](https://github.com/qmk/qmk_firmware/issues/new)! From 918aea5b473ebc1dee99c8ac967b8167e8b852b6 Mon Sep 17 00:00:00 2001 From: Jack Humbert Date: Fri, 23 Jun 2017 21:29:35 -0400 Subject: [PATCH 25/25] Update _summary.md --- docs/_summary.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_summary.md b/docs/_summary.md index 23128cafe4..88ed75117b 100644 --- a/docs/_summary.md +++ b/docs/_summary.md @@ -23,6 +23,7 @@ * [Porting your keyboard to QMK](porting_your_keyboard_to_qmk.md) * [Modding your keyboard](modding_your_keyboard.md) * [Adding features to QMK](adding_features_to_qmk.md) +* [ISP flashing guide](isp_flashing_guide.md) ### Other topics * [General FAQ](faq.md)