diff options
Diffstat (limited to 'keyboards')
-rw-r--r-- | keyboards/ergodox/keymaps/familiar/Makefile | 1 | ||||
-rw-r--r-- | keyboards/ergodox/keymaps/familiar/README.md | 20 | ||||
-rw-r--r-- | keyboards/ergodox/keymaps/familiar/keymap.c | 124 | ||||
-rw-r--r-- | keyboards/ergodox/readme.md | 2 | ||||
-rw-r--r-- | keyboards/handwired/frenchdev/Makefile | 3 | ||||
-rw-r--r-- | keyboards/handwired/frenchdev/config.h | 85 | ||||
-rw-r--r-- | keyboards/handwired/frenchdev/frenchdev.c | 87 | ||||
-rw-r--r-- | keyboards/handwired/frenchdev/frenchdev.h | 115 | ||||
-rw-r--r-- | keyboards/handwired/frenchdev/i2cmaster.h | 178 | ||||
-rw-r--r-- | keyboards/handwired/frenchdev/keymaps/default/keymap.c | 409 | ||||
-rw-r--r-- | keyboards/handwired/frenchdev/keymaps/default/readme.md | 13 | ||||
-rw-r--r-- | keyboards/handwired/frenchdev/matrix.c | 396 | ||||
-rw-r--r-- | keyboards/handwired/frenchdev/readme.md | 102 | ||||
-rw-r--r-- | keyboards/handwired/frenchdev/rules.mk | 92 | ||||
-rw-r--r-- | keyboards/handwired/frenchdev/twimaster.c | 208 | ||||
-rw-r--r-- | keyboards/lets_split/rev1/config.h | 3 | ||||
-rw-r--r-- | keyboards/lets_split/rev2/config.h | 5 |
17 files changed, 1772 insertions, 71 deletions
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/README.md b/keyboards/ergodox/keymaps/familiar/README.md index 7252f571a4..536179337f 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) @@ -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,13 @@ $ make ergodox-ez-familiar-teensy ## Usage -[![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. -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. 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 +61,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 c5f94afda8..c0334615b2 100644 --- a/keyboards/ergodox/keymaps/familiar/keymap.c +++ b/keyboards/ergodox/keymaps/familiar/keymap.c @@ -5,8 +5,8 @@ // 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 +14,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 | ' | " | | [ | ] | LEFT | DOWN | RIGHT | + * | LCTRL | LGUI | MENU | LEAD | LALT | |[/RALT|]/RCTL| LEFT | DOWN | RIGHT | * `------------------------------------' `------------------------------------' * ,-------------. ,-------------. - * | VOL- | VOL+ | | | | + * |PRTSCR| ESC | | VOL- | VOL+ | * ,------|------|------| |------+------+------. - * | SPC/ |SLASH/| MUTE | |NUMLCK|WHACK/| SPC/ | - * | ALT | MO(1)|------| |------|MO(1) | ALT | - * | | | LAY3 | | LAY2 | | | + * | |SLASH/| LOCKS| | MUTE |WHACK/| | + * | SPC | MO(4)|------| |------|MO(4) | SPC | + * | | | TO(1)| |TO(3) | | | * `--------------------' `--------------------' */ [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, S(KC_QUOT), - KC_VOLD, KC_VOLU, - KC_MUTE, - ALT_T(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, - KC_LBRC, KC_RBRC, KC_LEFT, KC_DOWN, KC_RGHT, - _______, _______, - KC_NLCK, - TG(NUMP), LT(ARRW,KC_BSLS), ALT_T(KC_SPC) + 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 ), /* layer 1: International symbols, etc * * ,--------------------------------------------------. ,--------------------------------------------------. - * | ´ | ¡ | ² | ³ | ¤ | € | ¼ | | ½ | ¾ | ‘ | ’ | ¥ | × | | + * | | ¡ | ² | ³ | ¤ | € | ¼ | | ½ | ¾ | ‘ | ’ | ¥ | × | | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | ä | å | é | ® | þ | | | | ü | ú | í | ó | ö | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | á | ß | ð | | |------| |------| | | | ø | ¶ | | + * | ´ | á | ß | ð | | |------| |------| | | | ø | ¶ | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * |MO(INSF)| æ | | © | | | | | | ñ | µ | ç | | |MO(INSF)| + * |MO(CSYM)| æ | ¿ | © | ¬ | | | | | ñ | µ | ç | | |MO(CSYM)| * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | ¬ | ¿ | | « | » | | | | + * | | | | | | | « | » | | | | * `------------------------------------' `------------------------------------' * ,-------------. ,-------------. * | | | | | | @@ -80,13 +98,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(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(0x00AC), UC(0x00A9), _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, @@ -94,7 +112,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,15 +124,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * which don't produce an "upper case" or "shifted" international symobol. * * ,--------------------------------------------------. ,--------------------------------------------------. - * | ¨ | ¹ | | | £ | | | | | | | | — | ÷ | | + * | | ¹ | | | £ | | | | | | | | — | ÷ | | * |--------+------+------+------+------+-------------| |------+------+------+------+------+------+--------| * | | Ä | Å | É | | Þ | | | | Ü | Ú | Í | Ó | Ö | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | Á | § | Ð | | |------| |------| | | | Ø | ° | | + * | ¨ | Á | § | Ð | | |------| |------| | | | Ø | ° | | * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| - * | | Æ | | ¢ | | | | | | Ñ | | Ç | | | | + * | | Æ | | ¢ | ¦ | | | | | Ñ | | Ç | | | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | ¦ | | | | | | | | + * | | | | | | | “ | ” | | | | * `------------------------------------' `------------------------------------' * ,-------------. ,-------------. * | | | | | | @@ -124,13 +142,13 @@ 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(0x00C6), S(KC_X), UC(0x00A2), S(KC_V), S(KC_B), _______, - _______, _______, _______, UC(0x00A6), _______, + _______, 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), UC(0x00A6), UC(0x00A2), S(KC_V), S(KC_B), _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, @@ -139,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), _______, _______, _______, _______, _______, _______, _______, _______, _______ @@ -156,7 +174,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { * |--------+------+------+------+------+------| | | |------+------+------+------+------+--------| * | | | | | | | | | | | 1 | 2 | 3 | = | | * `--------+------+------+------+------+-------------' `-------------+------+------+------+------+--------' - * | | | | | | | 0 | . | , | ENTER| | + * | | | | | | |0/RALT|./RCTL| , | ENTER| | * `------------------------------------' `------------------------------------' * ,-------------. ,-------------. * | | | | | | @@ -181,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, _______, _______, _______, _______, _______, _______, _______ @@ -191,20 +209,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| | | | + * | SYSRQ| PAUSE| | | | * ,------|------|------| |------+------+------. - * | | | | |SCRLK | | | + * | | | | | | | | * | | |------| |------| | | * | | | | | | | | * `--------------------' `--------------------' @@ -213,20 +231,20 @@ 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_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, _______, _______, _______, KC_HOME, KC_PGDN, KC_END, _______, _______, - KC_SLCK, + _______, _______, _______, _______ ), }; @@ -249,8 +267,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: diff --git a/keyboards/ergodox/readme.md b/keyboards/ergodox/readme.md index 618422055f..7327087ffe 100644 --- a/keyboards/ergodox/readme.md +++ b/keyboards/ergodox/readme.md @@ -94,7 +94,7 @@ To flash with ´teensy-loader-cli´: - Build the firmware with `make keymapname`, for example `make default` - - Run ´<path/to/>teensy_loader_cli --mcu=atmega32u4 -w ergodox_ez_<keymap>.hex´ + - Run ´<path/to/>teensy_loader_cli -mmcu=atmega32u4 -w ergodox_ez_<keymap>.hex´ - Press the Reset button by inserting a paperclip gently into the reset hole in the top right corder. diff --git a/keyboards/handwired/frenchdev/Makefile b/keyboards/handwired/frenchdev/Makefile new file mode 100644 index 0000000000..57b2ef62e5 --- /dev/null +++ b/keyboards/handwired/frenchdev/Makefile @@ -0,0 +1,3 @@ +ifndef MAKEFILE_INCLUDED + include ../../Makefile +endif diff --git a/keyboards/handwired/frenchdev/config.h b/keyboards/handwired/frenchdev/config.h new file mode 100644 index 0000000000..dd386402c8 --- /dev/null +++ b/keyboards/handwired/frenchdev/config.h @@ -0,0 +1,85 @@ +/* +Copyright 201 Nicolas Poirey <nicolas.poirey@gmail.com> + +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 <http://www.gnu.org/licenses/>. +*/ + +#ifndef FRENCHDEV_V1_CONFIG_H +#define FRENCHDEV_V1_CONFIG_H + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0xFEED +#define PRODUCT_ID 0x1307 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Nicolas Poirey +#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 + +#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. + */ + +/* 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 //FRENCHDEV_V1_CONFIG_H diff --git a/keyboards/handwired/frenchdev/frenchdev.c b/keyboards/handwired/frenchdev/frenchdev.c new file mode 100644 index 0000000000..6d5883a3a8 --- /dev/null +++ b/keyboards/handwired/frenchdev/frenchdev.c @@ -0,0 +1,87 @@ +#include "frenchdev.h" +#include "i2cmaster.h" + +bool i2c_initialized = 0; +uint8_t mcp23018_status = 0x20; + +void matrix_init_kb(void) { + // keyboard LEDs (see "PWM on ports OC1(A|B|C)" in "teensy-2-0.md") + TCCR1A = 0b10101001; // set and configure fast PWM + TCCR1B = 0b00001001; // set and configure fast PWM + + + + // unused pins - D4, D5, D7, E6 + // set as input with internal pull-ip enabled + DDRD &= ~(1<<5 | 1<<4); + DDRE &= ~(1<<6); + PORTD |= (1<<5 | 1<<4); + PORTE |= (1<<6); + + frenchdev_blink_all_leds(); + frenchdev_blink_all_leds(); + frenchdev_blink_all_leds(); + frenchdev_blink_all_leds(); + + matrix_init_user(); +} + +void frenchdev_blink_all_leds(void) +{ + frenchdev_led_all_off(); + frenchdev_led_all_set(LED_BRIGHTNESS_HI); + frenchdev_led_1_on(); + _delay_ms(50); + frenchdev_led_2_on(); + _delay_ms(50); + frenchdev_led_3_on(); + _delay_ms(50); + frenchdev_led_1_off(); + _delay_ms(50); + frenchdev_led_2_off(); + _delay_ms(50); + frenchdev_led_3_off(); + frenchdev_led_all_off(); +} + +uint8_t init_mcp23018(void) { + mcp23018_status = 0x20; + + // I2C subsystem + + // uint8_t sreg_prev; + // sreg_prev=SREG; + // cli(); + if (i2c_initialized == 0) { + i2c_init(); // on pins D(1,0) + i2c_initialized++; + _delay_ms(1000); + } + + // set pin direction + // - unused : input : 1 + // - input : input : 1 + // - driving : output : 0 + mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out; + mcp23018_status = i2c_write(IODIRA); if (mcp23018_status) goto out; + mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out; + mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out; + i2c_stop(); + + // set pull-up + // - unused : on : 1 + // - input : on : 1 + // - driving : off : 0 + mcp23018_status = i2c_start(I2C_ADDR_WRITE); if (mcp23018_status) goto out; + mcp23018_status = i2c_write(GPPUA); if (mcp23018_status) goto out; + mcp23018_status = i2c_write(0b00000000); if (mcp23018_status) goto out; + mcp23018_status = i2c_write(0b00111111); if (mcp23018_status) goto out; + +out: + i2c_stop(); + + // SREG=sreg_prev; + + return mcp23018_status; +} + diff --git a/keyboards/handwired/frenchdev/frenchdev.h b/keyboards/handwired/frenchdev/frenchdev.h new file mode 100644 index 0000000000..82121e044e --- /dev/null +++ b/keyboards/handwired/frenchdev/frenchdev.h @@ -0,0 +1,115 @@ +#ifndef FRENCHDEV_V1_H +#define FRENCHDEV_V1_H + +#include "quantum.h" +#include <stdint.h> +#include <stdbool.h> +#include "i2cmaster.h" +#include <util/delay.h> + +#define CPU_PRESCALE(n) (CLKPR = 0x80, CLKPR = (n)) +#define CPU_16MHz 0x00 + +// 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 ) +#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_frenchdev(void); +void frenchdev_blink_all_leds(void); +uint8_t init_mcp23018(void); + +#define LED_BRIGHTNESS_LO 15 +#define LED_BRIGHTNESS_HI 255 + + +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 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 frenchdev_led_all_on(void) +{ + frenchdev_board_led_on(); + frenchdev_led_1_on(); + frenchdev_led_2_on(); + frenchdev_led_3_on(); +} + +inline void frenchdev_led_all_off(void) +{ + frenchdev_board_led_off(); + frenchdev_led_1_off(); + frenchdev_led_2_off(); + frenchdev_led_3_off(); +} + +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 frenchdev_led_all_set(uint8_t n) +{ + frenchdev_led_1_set(n); + frenchdev_led_2_set(n); + frenchdev_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, |