From 7d5902752ee8088b04763bce2d950ab61be730f2 Mon Sep 17 00:00:00 2001 From: Nicolas Schodet Date: Tue, 9 Feb 2021 18:10:54 +0100 Subject: [PATCH] [Keyboard] Add Splitty keyboard (#11613) --- keyboards/splitty/config.h | 66 +++++++++++++++++ keyboards/splitty/info.json | 81 +++++++++++++++++++++ keyboards/splitty/keymaps/default/keymap.c | 54 ++++++++++++++ keyboards/splitty/keymaps/default/readme.md | 9 +++ keyboards/splitty/readme.md | 45 ++++++++++++ keyboards/splitty/rev1/readme.md | 3 + keyboards/splitty/rev1/rev1.c | 17 +++++ keyboards/splitty/rev1/rev1.h | 40 ++++++++++ keyboards/splitty/rev1/rules.mk | 0 keyboards/splitty/rules.mk | 26 +++++++ keyboards/splitty/splitty.c | 36 +++++++++ keyboards/splitty/splitty.h | 23 ++++++ 12 files changed, 400 insertions(+) create mode 100644 keyboards/splitty/config.h create mode 100644 keyboards/splitty/info.json create mode 100644 keyboards/splitty/keymaps/default/keymap.c create mode 100644 keyboards/splitty/keymaps/default/readme.md create mode 100644 keyboards/splitty/readme.md create mode 100644 keyboards/splitty/rev1/readme.md create mode 100644 keyboards/splitty/rev1/rev1.c create mode 100644 keyboards/splitty/rev1/rev1.h create mode 100644 keyboards/splitty/rev1/rules.mk create mode 100644 keyboards/splitty/rules.mk create mode 100644 keyboards/splitty/splitty.c create mode 100644 keyboards/splitty/splitty.h diff --git a/keyboards/splitty/config.h b/keyboards/splitty/config.h new file mode 100644 index 0000000000..3f0a8b9b20 --- /dev/null +++ b/keyboards/splitty/config.h @@ -0,0 +1,66 @@ +/* +Copyright 2018 Nicolas Schodet + +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 . +*/ + +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0x1D50 +#define PRODUCT_ID 0x6052 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Nicolas Schodet +#define PRODUCT Splitty + +/* key matrix size */ +#define MATRIX_ROWS 10 +#define MATRIX_COLS 7 + +/* Keyboard Matrix Assignments */ +#define MATRIX_ROW_PINS \ + { F0, F1, D4, D5, D6 } +#define MATRIX_COL_PINS \ + { B0, B1, B2, B3, B4, B5, B6 } +#define DIODE_DIRECTION COL2ROW + +/* Split Keyboard specific options. */ +#define USE_I2C +#define EE_HANDS +#define SPLIT_USB_DETECT + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCE 5 + +/* + * Feature disable options + * These options are also useful to firmware size reduction. + */ + +/* disable debug print */ +//#define NO_DEBUG + +/* disable print */ +//#define NO_PRINT + +/* disable action features */ +//#define NO_ACTION_LAYER +//#define NO_ACTION_TAPPING +//#define NO_ACTION_ONESHOT + +/* disable these deprecated features by default */ +#define NO_ACTION_MACRO +#define NO_ACTION_FUNCTION diff --git a/keyboards/splitty/info.json b/keyboards/splitty/info.json new file mode 100644 index 0000000000..2b87f2f9f1 --- /dev/null +++ b/keyboards/splitty/info.json @@ -0,0 +1,81 @@ +{ + "keyboard_name": "Splitty", + "url": "https://git.ni.fr.eu.org/splitty.git/about/", + "maintainer": "schodet", + "width": 14, + "height": 5, + "layouts": { + "LAYOUT": { + "layout": [ + {"label": "L00", "x": 0, "y": 0.6667}, + {"label": "L01", "x": 1, "y": 0.6667}, + {"label": "L02", "x": 2, "y": 0.2667}, + {"label": "L03", "x": 3, "y": 0}, + {"label": "L04", "x": 4, "y": 0.2667}, + {"label": "L05", "x": 5, "y": 0}, + {"label": "L06", "x": 6, "y": 0}, + {"label": "R06", "x": 10, "y": 0}, + {"label": "R05", "x": 11, "y": 0}, + {"label": "R04", "x": 12, "y": 0.2667}, + {"label": "R03", "x": 13, "y": 0}, + {"label": "R02", "x": 14, "y": 0.2667}, + {"label": "R01", "x": 15, "y": 0.6667}, + {"label": "R00", "x": 16, "y": 0.6667}, + + {"label": "L08", "x": 0, "y": 1.6667}, + {"label": "L09", "x": 1, "y": 1.6667}, + {"label": "L10", "x": 2, "y": 1.2667}, + {"label": "L11", "x": 3, "y": 1}, + {"label": "L12", "x": 4, "y": 1.2667}, + {"label": "L13", "x": 5, "y": 1}, + {"label": "L14", "x": 6, "y": 1, "h": 1.5}, + {"label": "R14", "x": 10, "y": 1, "h": 1.5}, + {"label": "R13", "x": 11, "y": 1}, + {"label": "R12", "x": 12, "y": 1.2667}, + {"label": "R11", "x": 13, "y": 1}, + {"label": "R10", "x": 14, "y": 1.2667}, + {"label": "R09", "x": 15, "y": 1.6667}, + {"label": "R08", "x": 16, "y": 1.6667}, + + {"label": "L16", "x": 0, "y": 2.6667}, + {"label": "L17", "x": 1, "y": 2.6667}, + {"label": "L18", "x": 2, "y": 2.2667}, + {"label": "L19", "x": 3, "y": 2}, + {"label": "L20", "x": 4, "y": 2.2667}, + {"label": "L21", "x": 5, "y": 2}, + {"label": "R21", "x": 11, "y": 2}, + {"label": "R20", "x": 12, "y": 2.2667}, + {"label": "R19", "x": 13, "y": 2}, + {"label": "R18", "x": 14, "y": 2.2667}, + {"label": "R17", "x": 15, "y": 2.6667}, + {"label": "R16", "x": 16, "y": 2.6667}, + + {"label": "L24", "x": 0, "y": 3.6667}, + {"label": "L25", "x": 1, "y": 3.6667}, + {"label": "L26", "x": 2, "y": 3.2667}, + {"label": "L27", "x": 3, "y": 3}, + {"label": "L28", "x": 4, "y": 3.2667}, + {"label": "L29", "x": 5, "y": 3}, + {"label": "L30", "x": 6, "y": 2.5, "h": 1.5}, + {"label": "R30", "x": 10, "y": 2.5, "h": 1.5}, + {"label": "R29", "x": 11, "y": 3}, + {"label": "R28", "x": 12, "y": 3.2667}, + {"label": "R27", "x": 13, "y": 3}, + {"label": "R26", "x": 14, "y": 3.2667}, + {"label": "R25", "x": 15, "y": 3.6667}, + {"label": "R24", "x": 16, "y": 3.6667}, + + {"label": "L34", "x": 2, "y": 4.2667}, + {"label": "L35", "x": 3, "y": 4}, + {"label": "L36", "x": 4, "y": 4.2667}, + {"label": "L37", "x": 5, "y": 4}, + {"label": "L38", "x": 6, "y": 4}, + {"label": "R38", "x": 10, "y": 4}, + {"label": "R37", "x": 11, "y": 4}, + {"label": "R36", "x": 12, "y": 4.2667}, + {"label": "R35", "x": 13, "y": 4}, + {"label": "R34", "x": 14, "y": 4.2667} + ] + } + } +} diff --git a/keyboards/splitty/keymaps/default/keymap.c b/keyboards/splitty/keymaps/default/keymap.c new file mode 100644 index 0000000000..e6075339b0 --- /dev/null +++ b/keyboards/splitty/keymaps/default/keymap.c @@ -0,0 +1,54 @@ +/* Copyright 2018 Nicolas Schodet + * + * 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 QMK_KEYBOARD_H + +/* Defines names for use in layer keycodes and the keymap */ +enum layer_names { _BASE, _NAV }; + +#define NAV_SPC LT(_NAV, KC_SPC) +#define CTL_BSP MT(MOD_LCTL, KC_BSPC) +#define KC_GTAB LGUI(KC_TAB) + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_BASE] = LAYOUT( + //,-------+-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------+-------. + KC_ESC , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 ,KC_GRV , KC_EQL , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 ,KC_MINS, + //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| + KC_RBRC, KC_Q , KC_W , KC_E , KC_R , KC_T ,KC_APP , KC_DEL , KC_Y , KC_U , KC_I , KC_O , KC_P ,KC_LBRC, + //|-------+-------+-------+-------+-------+-------| | | |-------+-------+-------+-------+-------+-------| + KC_TAB , KC_A , KC_S , KC_D , KC_F , KC_G ,/*-----| |------*/ KC_H , KC_J , KC_K , KC_L ,KC_SCLN,KC_QUOT, + //|-------+-------+-------+-------+-------+-------| | | |-------+-------+-------+-------+-------+-------| + KC_NUBS, KC_Z , KC_X , KC_C , KC_V , KC_B ,KC_GTAB, KC_ENT , KC_N , KC_M ,KC_COMM,KC_DOT ,KC_SLSH,KC_BSLS, + //`-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------' + KC_LGUI,KC_LALT,KC_ESC ,CTL_BSP,KC_LSFT, KC_RSFT,NAV_SPC,KC_RCTL,KC_RALT,KC_RGUI + // `-------+-------+-------+-------+-------' `-------+-------+-------+-------+-------' + ), + [_NAV] = LAYOUT( + //,-------+-------+-------+-------+-------+-------+-------. ,-------+-------+-------+-------+-------+-------+-------. + _______,_______,_______,_______,_______,_______,_______, _______,_______,_______,_______,_______,_______, RESET , + //|-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------| + _______,_______, KC_7 , KC_8 , KC_9 ,_______,_______, _______,KC_DEL ,KC_PGUP, KC_UP ,KC_PGDN,_______,_______, + //|-------+-------+-------+-------+-------+-------| | | |-------+-------+-------+-------+-------+-------| + KC_CAPS,_______, KC_4 , KC_5 , KC_6 ,_______,/*-----| |------*/KC_BSPC,KC_LEFT,KC_DOWN,KC_RGHT,KC_ENT ,_______, + //|-------+-------+-------+-------+-------+-------| | | |-------+-------+-------+-------+-------+-------| + _______,_______, KC_1 , KC_2 , KC_3 ,_______,_______, _______,C(KC_W),KC_HOME,_______,KC_END ,KC_INS ,_______, + //`-------+-------+-------+-------+-------+-------+-------| |-------+-------+-------+-------+-------+-------+-------' + KC_APP, KC_0 ,KC_DOT ,_______,_______, _______,_______,_______,_______,_______ + // `-------+-------+-------+-------+-------' `-------+-------+-------+-------+-------' + ), +}; +// clang-format on diff --git a/keyboards/splitty/keymaps/default/readme.md b/keyboards/splitty/keymaps/default/readme.md new file mode 100644 index 0000000000..3bd33bb405 --- /dev/null +++ b/keyboards/splitty/keymaps/default/readme.md @@ -0,0 +1,9 @@ +# The default keymap for Splitty + +Simple default keymap. + +Hold the space key to access the navigation layer. Hold the backspace key for +left control. + +There is a Ctrl-W shortcut which is usefull to erase previous word and for +window management in vim. diff --git a/keyboards/splitty/readme.md b/keyboards/splitty/readme.md new file mode 100644 index 0000000000..1dec34c665 --- /dev/null +++ b/keyboards/splitty/readme.md @@ -0,0 +1,45 @@ +# Splitty + +![Splitty](http://ni.fr.eu.org/~nico/qmk/splitty/splitty_for_scale.jpg) + +![Bottom view](http://ni.fr.eu.org/~nico/qmk/splitty/bottom_view.jpg) + +![Side view](http://ni.fr.eu.org/~nico/qmk/splitty/stack_view.jpg) + +![PCB](http://ni.fr.eu.org/~nico/qmk/splitty/splitty.png) + +This is a split ergonomic keyboard initially based on the Ergodox layout +without the thumb cluster. It uses 32 keys per sides with Cherry MX +compatibles switches, thirty 1u and two vertical 1.5u caps. + +The controller is integrated in order to make the keyboard as slim as possible. + +It connects to the computer using a micro-B USB. Both sides are connected +together also using micro-B USB. Any connection mistake should not break +anything and the keyboard supports hot plugging. + +* Keyboard Maintainer: [Nicolas Schodet](https://github.com/schodet) +* Hardware Supported: Splitty +* Hardware Availability: [Splitty](https://git.ni.fr.eu.org/splitty.git/about/) + +Make example for this keyboard (after setting up your build environment): + + make splitty:default + +Flashing example for this keyboard: + + make splitty:default:flash + +Handedness should be programmed in EEPROM once, you can use these commands to +flash the firmware and the EEPROM: + + make splitty:default:dfu-split-left + make splitty:default:dfu-split-right + +If you do not have a reset keycode in your keymap, press the reset button or +short the corresponding contacts if not populated to enter bootloader. + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) +and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) +for more information. Brand new to QMK? Start with our +[Complete Newbs Guide](https://docs.qmk.fm/#/newbs). diff --git a/keyboards/splitty/rev1/readme.md b/keyboards/splitty/rev1/readme.md new file mode 100644 index 0000000000..5a32a6c999 --- /dev/null +++ b/keyboards/splitty/rev1/readme.md @@ -0,0 +1,3 @@ +# First revision of the Splitty keyboard + +This is the initial version, see parent readme.md for more details. diff --git a/keyboards/splitty/rev1/rev1.c b/keyboards/splitty/rev1/rev1.c new file mode 100644 index 0000000000..0cf9a1d9c3 --- /dev/null +++ b/keyboards/splitty/rev1/rev1.c @@ -0,0 +1,17 @@ +/* Copyright 2018 Nicolas Schodet + * + * 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 "splitty.h" diff --git a/keyboards/splitty/rev1/rev1.h b/keyboards/splitty/rev1/rev1.h new file mode 100644 index 0000000000..9205165730 --- /dev/null +++ b/keyboards/splitty/rev1/rev1.h @@ -0,0 +1,40 @@ +/* Copyright 2018 Nicolas Schodet + * + * 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 . + */ + +#pragma once + +#include QMK_KEYBOARD_H + +// clang-format off +#define LAYOUT( \ + L00, L01, L02, L03, L04, L05, L06, R00, R01, R02, R03, R04, R05, R06, \ + L10, L11, L12, L13, L14, L15, L16, R10, R11, R12, R13, R14, R15, R16, \ + L20, L21, L22, L23, L24, L25, R21, R22, R23, R24, R25, R26, \ + L30, L31, L32, L33, L34, L35, L36, R30, R31, R32, R33, R34, R35, R36, \ + L42, L43, L44, L45, L46, R40, R41, R42, R43, R44 \ +) { \ + { L00, L01, L02, L03, L04, L05, L06 }, \ + { L10, L11, L12, L13, L14, L15, L16 }, \ + { L20, L21, L22, L23, L24, L25, KC_NO }, \ + { L30, L31, L32, L33, L34, L35, L36 }, \ + { KC_NO, KC_NO, L42, L43, L44, L45, L46 }, \ + { R06, R05, R04, R03, R02, R01, R00 }, \ + { R16, R15, R14, R13, R12, R11, R10 }, \ + { R26, R25, R24, R23, R22, R21, KC_NO }, \ + { R36, R35, R34, R33, R32, R31, R30 }, \ + { KC_NO, KC_NO, R44, R43, R42, R41, R40 }, \ +} +// clang-format on diff --git a/keyboards/splitty/rev1/rules.mk b/keyboards/splitty/rev1/rules.mk new file mode 100644 index 0000000000..e69de29bb2 diff --git a/keyboards/splitty/rules.mk b/keyboards/splitty/rules.mk new file mode 100644 index 0000000000..56572fe8ad --- /dev/null +++ b/keyboards/splitty/rules.mk @@ -0,0 +1,26 @@ +# MCU name +MCU = atmega32u4 + +# Bootloader selection +BOOTLOADER = atmel-dfu + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration +MOUSEKEY_ENABLE = yes # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +BLUETOOTH_ENABLE = no # Enable Bluetooth +AUDIO_ENABLE = no # Audio output + +SPLIT_KEYBOARD = yes + +DEFAULT_FOLDER = splitty/rev1 diff --git a/keyboards/splitty/splitty.c b/keyboards/splitty/splitty.c new file mode 100644 index 0000000000..652d1f781b --- /dev/null +++ b/keyboards/splitty/splitty.c @@ -0,0 +1,36 @@ +/* Copyright 2018 Nicolas Schodet + * + * 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 "splitty.h" + +#ifdef SWAP_HANDS_ENABLE +// clang-format off +__attribute__ ((weak)) +const keypos_t hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + + {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}, {6, 5}}, + {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}, {6, 6}}, + {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}, {6, 7}}, + {{0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 8}, {5, 8}, {6, 8}}, + {{0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 9}, {5, 9}, {6, 9}}, + {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}, {6, 0}}, + {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}, {6, 1}}, + {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}, {6, 2}}, + {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}, {6, 3}}, + {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}, {6, 4}}, +}; +// clang-format on +#endif diff --git a/keyboards/splitty/splitty.h b/keyboards/splitty/splitty.h new file mode 100644 index 0000000000..420e1ea27b --- /dev/null +++ b/keyboards/splitty/splitty.h @@ -0,0 +1,23 @@ +/* Copyright 2018 Nicolas Schodet + * + * 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 . + */ + +#pragma once + +#include "quantum.h" + +#ifdef KEYBOARD_splitty_rev1 +# include "rev1.h" +#endif