From a50b09cba53010c378da06510dfd4cf4798acb7b Mon Sep 17 00:00:00 2001 From: durken1 <71756879+durken1@users.noreply.github.com> Date: Sat, 11 Jun 2022 20:24:58 +0200 Subject: [Keyboard] add pierce (#17000) Co-authored-by: Ryan Co-authored-by: Dan Abrahamsson --- keyboards/pierce/config.h | 36 +++++++ keyboards/pierce/info.json | 50 ++++++++++ keyboards/pierce/keymaps/default/keymap.c | 37 +++++++ keyboards/pierce/keymaps/default/rules.mk | 2 + keyboards/pierce/keymaps/durken1/config.h | 77 +++++++++++++++ keyboards/pierce/keymaps/durken1/keymap.c | 159 ++++++++++++++++++++++++++++++ keyboards/pierce/keymaps/durken1/rules.mk | 4 + keyboards/pierce/matrix.c | 43 ++++++++ keyboards/pierce/pierce.c | 17 ++++ keyboards/pierce/pierce.h | 31 ++++++ keyboards/pierce/post_rules.mk | 11 +++ keyboards/pierce/readme.md | 27 +++++ keyboards/pierce/rules.mk | 24 +++++ 13 files changed, 518 insertions(+) create mode 100644 keyboards/pierce/config.h create mode 100644 keyboards/pierce/info.json create mode 100644 keyboards/pierce/keymaps/default/keymap.c create mode 100644 keyboards/pierce/keymaps/default/rules.mk create mode 100644 keyboards/pierce/keymaps/durken1/config.h create mode 100644 keyboards/pierce/keymaps/durken1/keymap.c create mode 100644 keyboards/pierce/keymaps/durken1/rules.mk create mode 100644 keyboards/pierce/matrix.c create mode 100644 keyboards/pierce/pierce.c create mode 100644 keyboards/pierce/pierce.h create mode 100644 keyboards/pierce/post_rules.mk create mode 100644 keyboards/pierce/readme.md create mode 100644 keyboards/pierce/rules.mk (limited to 'keyboards') diff --git a/keyboards/pierce/config.h b/keyboards/pierce/config.h new file mode 100644 index 0000000000..242b2ebf92 --- /dev/null +++ b/keyboards/pierce/config.h @@ -0,0 +1,36 @@ +/* Copyright 2022 durken (https://github.com/durken1/) + * + * 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 0xFEED +#define PRODUCT_ID 0x6060 +#define DEVICE_VER 0x0001 +#define MANUFACTURER durken +#define PRODUCT pierce + +/* key matrix size */ +#define MATRIX_ROWS 4 +#define MATRIX_COLS 10 + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION COL2ROW + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 diff --git a/keyboards/pierce/info.json b/keyboards/pierce/info.json new file mode 100644 index 0000000000..7179076794 --- /dev/null +++ b/keyboards/pierce/info.json @@ -0,0 +1,50 @@ +{ + "keyboard_name": "pierce", + "url": "https://github.com/durken1/pierce", + "maintainer": "durken1", + "layouts": { + "LAYOUT_split_3x5_3": { + "layout": [ + {"x":0, "y":1}, + {"x":1, "y":0.63}, + {"x":2, "y":0.5}, + {"x":3, "y":0.63}, + {"x":4, "y":0.75}, + {"x":7, "y":0.75}, + {"x":8, "y":0.63}, + {"x":9, "y":0.5}, + {"x":10, "y":0.63}, + {"x":11, "y":1}, + + {"x":0, "y":2}, + {"x":1, "y":1.63}, + {"x":2, "y":1.5}, + {"x":3, "y":1.63}, + {"x":4, "y":1.75}, + {"x":7, "y":1.75}, + {"x":8, "y":1.63}, + {"x":9, "y":1.5}, + {"x":10, "y":1.63}, + {"x":11, "y":2}, + + {"x":0, "y":3}, + {"x":1, "y":2.63}, + {"x":2, "y":2.5}, + {"x":3, "y":2.63}, + {"x":4, "y":2.75}, + {"x":7, "y":2.75}, + {"x":8, "y":2.63}, + {"x":9, "y":2.5}, + {"x":10, "y":2.63}, + {"x":11, "y":3}, + + {"x":2.5, "y":3.66}, + {"x":3.5, "y":4.0}, + {"x":4.5, "y":4.25}, + + {"x":7.5, "y":4.0}, + {"x":6.5, "y":4.25}, + {"x":8.5, "y":3.66}] + } + } +} diff --git a/keyboards/pierce/keymaps/default/keymap.c b/keyboards/pierce/keymaps/default/keymap.c new file mode 100644 index 0000000000..69ff60113b --- /dev/null +++ b/keyboards/pierce/keymaps/default/keymap.c @@ -0,0 +1,37 @@ +/* Copyright 2022 durken (https://github.com/durken1/) + * + * 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 + +enum layers { + BASE, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [BASE] = LAYOUT_split_3x5_3( + // Base + //,--------------------------------------------, ,--------------------------------------------. + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_ESC, KC_SPC, KC_TAB, KC_ENT, KC_BSPC, KC_DEL + //`--------------------------' '--------------------------' + + ) +}; diff --git a/keyboards/pierce/keymaps/default/rules.mk b/keyboards/pierce/keymaps/default/rules.mk new file mode 100644 index 0000000000..0ba59d4e7e --- /dev/null +++ b/keyboards/pierce/keymaps/default/rules.mk @@ -0,0 +1,2 @@ +TRACKPOINT = no +AUTO_BUTTONS = no diff --git a/keyboards/pierce/keymaps/durken1/config.h b/keyboards/pierce/keymaps/durken1/config.h new file mode 100644 index 0000000000..7d19a0b83b --- /dev/null +++ b/keyboards/pierce/keymaps/durken1/config.h @@ -0,0 +1,77 @@ +/* Copyright 2022 durken (https://github.com/durken1/) + * + * 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 + +// default but important +#define TAPPING_TERM 220 + +// Prevent normal rollover on alphas from accidentally triggering mods. +#define IGNORE_MOD_TAP_INTERRUPT + +// Enable rapid switch from tap to hold, disables double tap hold auto-repeat. +#define TAPPING_FORCE_HOLD + +#define PERMISSIVE_HOLD + +// Recommended for heavy chording. +#define QMK_KEYS_PER_SCAN 4 + +// Combo settings +#define COMBO_COUNT 3 +#define COMBO_TERM 35 + +#ifdef PS2_USE_USART +#define PS2_CLOCK_PIN D5 +#define PS2_DATA_PIN D2 + +/* synchronous, odd parity, 1-bit stop, 8-bit data, sample at falling edge */ +/* set DDR of CLOCK as input to be slave */ +#define PS2_MOUSE_ROTATE 270 // compensate for east-facing device orientation +#define PS2_USART_INIT() do { \ + PS2_CLOCK_DDR &= ~(1<. + */ + +#include QMK_KEYBOARD_H +#include "keymap_swedish.h" + +enum layers { + BASE, + MBO, + SYM, + NUM, + FN +}; + +enum combos { + WF_ARNG, + EI_ADIA, + UK_ODIA +}; + +#if defined PS2_MOUSE_ENABLE +#include "ps2_mouse.h" +#endif + +#if defined AUTO_BUTTONS && defined PS2_MOUSE_ENABLE + +static uint16_t auto_buttons_timer; +extern int tp_buttons; // mousekey button state set in action.c and used in ps2_mouse.c + +void ps2_mouse_moved_user(report_mouse_t *mouse_report) { + if (auto_buttons_timer) { + auto_buttons_timer = timer_read(); + } else { + if (!tp_buttons) { + layer_on(MBO); + auto_buttons_timer = timer_read(); + } + } +} + +void matrix_scan_user(void) { + if (auto_buttons_timer && (timer_elapsed(auto_buttons_timer) > AUTO_BUTTONS_TIMEOUT)) { + if (!tp_buttons) { + layer_off(MBO); + auto_buttons_timer = 0; + } + } +} + +#endif // defined AUTO_BUTTONS && defined PS2_MOUSE_ENABLE + +// Left-hand home row mods +#define GUI_A LGUI_T(KC_A) +#define ALT_R LALT_T(KC_R) +#define SFT_S LSFT_T(KC_S) +#define CTRL_T LCTL_T(KC_T) + +// Right-hand home row mods +#define CTL_N RCTL_T(KC_N) +#define SFT_E RSFT_T(KC_E) +#define ALT_I LALT_T(KC_I) +#define GUI_O LGUI_T(KC_O) + +#define NUM_SPC LT(NUM, KC_SPC) +#define FN_ENT LT(FN, KC_ENT) +#define SYM_BSP LT(SYM, KC_BSPC) + +const uint16_t PROGMEM arng_combo[] = {ALT_R, SFT_S, COMBO_END}; +const uint16_t PROGMEM adia_combo[] = {SFT_E, ALT_I, COMBO_END}; +const uint16_t PROGMEM odia_combo[] = {SE_U, SE_K, COMBO_END}; + +combo_t key_combos[COMBO_COUNT] = { + [WF_ARNG] = COMBO(arng_combo, SE_ARNG), + [EI_ADIA] = COMBO(adia_combo, SE_ADIA), + [UK_ODIA] = COMBO(odia_combo, SE_ODIA) +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [BASE] = LAYOUT_split_3x5_3( + // BASE + //,--------------------------------------------, ,--------------------------------------------. + SE_Q, SE_W, SE_F, SE_P, SE_B, SE_Y, SE_L, SE_U, SE_K, SE_QUOT, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + GUI_A, ALT_R, SFT_S, CTRL_T, SE_G, SE_M, CTL_N, SFT_E, ALT_I, GUI_O, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + SE_Z, SE_X, SE_C, SE_D, SE_V, SE_J, SE_H, SE_COMM, SE_DOT, SE_MINS, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_ESC, NUM_SPC, KC_TAB, FN_ENT, SYM_BSP, KC_DEL + //`--------------------------' '--------------------------' + + ), + + + [MBO] = LAYOUT_split_3x5_3( + // Mouse + //,--------------------------------------------, ,--------------------------------------------. + _______, _______, _______, _______, _______, KC_BTN1, KC_BTN2, _______, _______, _______, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, KC_BTN3, _______, _______, _______, _______, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, _______, _______, _______, KC_BSPC, _______ + //`--------------------------' '--------------------------' + + ), + + [SYM] = LAYOUT_split_3x5_3( + // Symbols + //,--------------------------------------------, ,--------------------------------------------. + SE_SECT, SE_ACUT, SE_SLSH, SE_TILD, _______, _______, SE_PIPE, SE_BSLS, SE_DIAE, SE_CIRC, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + SE_EXLM, SE_DLR, SE_LPRN, SE_LBRC, _______, _______, SE_RBRC, SE_RPRN, SE_HASH, SE_QUES, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + _______, SE_PERC, SE_LCBR, SE_LABK, _______, _______, SE_RABK, SE_RCBR, SE_AMPR, _______, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + SE_AT, SE_EQL, SE_DQUO, _______, _______, _______ + //`--------------------------' '--------------------------' + ), + + [NUM] = LAYOUT_split_3x5_3( + // Numbers + //,--------------------------------------------, ,--------------------------------------------. + _______, KC_MPRV, KC_MPLY, KC_MNXT, _______, _______, SE_7, SE_8, SE_9, SE_QUOT, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + SE_PLUS, SE_MINS, SE_ASTR, SE_SLSH, SE_CIRC, _______, SE_4, SE_5, SE_6, _______, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + _______, _______, KC_VOLD, KC_VOLU, _______, KC_SPC, SE_1, SE_2, SE_3, _______, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + _______, _______, _______, SE_COMM, SE_0, SE_DOT + //`--------------------------' '--------------------------' + ), + + [FN] = LAYOUT_split_3x5_3( + // FN + //,--------------------------------------------, ,--------------------------------------------. + _______, _______, _______, _______, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, KC_F4, KC_F5, KC_F6, KC_F11, + //|--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------| + _______, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F12, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_PSCR, KC_CAPS, _______, _______, _______, _______ + //`--------------------------' '--------------------------' + ) +}; diff --git a/keyboards/pierce/keymaps/durken1/rules.mk b/keyboards/pierce/keymaps/durken1/rules.mk new file mode 100644 index 0000000000..bea18c02d1 --- /dev/null +++ b/keyboards/pierce/keymaps/durken1/rules.mk @@ -0,0 +1,4 @@ +EXTRAKEY_ENABLE = yes +TRACKPOINT = yes +AUTO_BUTTONS = yes +COMBO_ENABLE = yes diff --git a/keyboards/pierce/matrix.c b/keyboards/pierce/matrix.c new file mode 100644 index 0000000000..5023024b8b --- /dev/null +++ b/keyboards/pierce/matrix.c @@ -0,0 +1,43 @@ +/* Copyright 2022 durken (https://github.com/durken1/) + * + * 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 "quantum.h" +#include "i2c_slave.h" + +#define MY_I2C_ADDRESS (0x20U << 1) + +void matrix_init_custom(void) { + i2c_slave_init(MY_I2C_ADDRESS); +} + + +bool matrix_scan_custom(matrix_row_t current_matrix[]) { + bool matrix_has_changed = false; + matrix_row_t current_row_value; + + for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) { + current_row_value = 0; // Start with empty row + current_row_value |= (((matrix_row_t)(i2c_slave_reg[current_row+4])) << 5); // Add left half scan + current_row_value |= ((matrix_row_t)i2c_slave_reg[current_row]); // Add right half scan + + if (current_matrix[current_row] != current_row_value) { + matrix_has_changed = true; + } + current_matrix[current_row] = current_row_value; + } + + return matrix_has_changed; +} diff --git a/keyboards/pierce/pierce.c b/keyboards/pierce/pierce.c new file mode 100644 index 0000000000..085ca9cdec --- /dev/null +++ b/keyboards/pierce/pierce.c @@ -0,0 +1,17 @@ +/* Copyright 2022 durken (https://github.com/durken1/) + * + * 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 "pierce.h" diff --git a/keyboards/pierce/pierce.h b/keyboards/pierce/pierce.h new file mode 100644 index 0000000000..edb4151740 --- /dev/null +++ b/keyboards/pierce/pierce.h @@ -0,0 +1,31 @@ +/* Copyright 2022 durken (https://github.com/durken1/) + * + * 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" + +#define LAYOUT_split_3x5_3( \ + K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, \ + K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, \ + K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, \ + K32, K33, K34, K35, K36, K37 \ +) { \ + { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09 }, \ + { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19 }, \ + { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29 }, \ + { KC_NO, KC_NO, K32, K33, K34, K35, K36, K37, KC_NO, KC_NO } \ +} diff --git a/keyboards/pierce/post_rules.mk b/keyboards/pierce/post_rules.mk new file mode 100644 index 0000000000..e0360a3391 --- /dev/null +++ b/keyboards/pierce/post_rules.mk @@ -0,0 +1,11 @@ +ifeq ($(strip $(TRACKPOINT)), yes) + PS2_MOUSE_ENABLE = yes + PS2_USE_USART = yes + OPT_DEFS += -DUSART +endif + +ifeq ($(strip $(AUTO_BUTTONS)), yes) + OPT_DEFS += -DAUTO_BUTTONS +endif + + diff --git a/keyboards/pierce/readme.md b/keyboards/pierce/readme.md new file mode 100644 index 0000000000..351bacbfa0 --- /dev/null +++ b/keyboards/pierce/readme.md @@ -0,0 +1,27 @@ +# Pierce + +![Pierce](https://i.imgur.com/JOUH1UIh.jpeg) + +A modular wireless / semi-wireless split 36 key keyboard. Wireless version uses a dongle as a receiver for both halves while the semi-wireless version uses the wired half as a receiver for the wireless half. +Supports MX, Choc V1 and Alps switches. + + * Keyboard Maintainer: [durken1](https://github.com/durken1/) + * Hardware Supported: pierce 2.0 + * Hardware Information: [pierce](https://github.com/durken1/pierce) + +Make example for this keyboard (after setting up your build environment): + + make pierce:default + +Flashing example for this keyboard: + + make pierce:default:flash + +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). + +## Bootloader + +Enter the bootloader in 2 ways: + +* **Physical reset button**: Briefly press the button on the dongle / wired half +* **Keycode in layout**: Press the key mapped to `RESET` if it is available diff --git a/keyboards/pierce/rules.mk b/keyboards/pierce/rules.mk new file mode 100644 index 0000000000..47546919a8 --- /dev/null +++ b/keyboards/pierce/rules.mk @@ -0,0 +1,24 @@ +# MCU name +MCU = atmega32u4 + +# Bootloader selection +BOOTLOADER = atmel-dfu + +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +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 +NKRO_ENABLE = yes # Enable N-Key Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output + +CUSTOM_MATRIX = lite +SRC += matrix.c +QUANTUM_LIB_SRC += i2c_slave.c + +LAYOUTS = split_3x5_3 -- cgit v1.2.3