diff --git a/keyboards/bastardkb/charybdis/3x5/3x5.c b/keyboards/bastardkb/charybdis/3x5/3x5.c new file mode 100644 index 00000000..6e8e3bef --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/3x5.c @@ -0,0 +1,87 @@ +/* + * Copyright 2020 Christopher Courtney (@drashna) + * Copyright 2021 Quentin LEBASTARD + * Copyright 2021 Charly Delay (@0xcharly) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Publicw 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 "charybdis.h" + +// clang-format off +#ifdef RGB_MATRIX_ENABLE +/** + * \brief LEDs index. + * + * ╭────────────────────╮ ╭────────────────────╮ + * 2 3 8 9 12 30 27 26 21 20 + * ├────────────────────┤ ├────────────────────┤ + * 1 4 7 10 13 31 28 25 22 19 + * ├────────────────────┤ ├────────────────────┤ + * 0 5 6 11 14 32 29 24 23 18 + * ╰────────────────────╯ ╰────────────────────╯ + * 15 16 17 33 34 XX + * ╰────────────╯ ╰────────────╯ + * + * Note: the LED config simulates 36 LEDs instead of the actual 35 to prevent + * confusion when testing LEDs during assembly when handedness is not set + * correctly. Those fake LEDs are bound to the physical top-left corner. + */ +led_config_t g_led_config = { { + /* Key Matrix to LED index. */ + // Left split. + { 2, 3, 8, 9, 12 }, // Top row + { 1, 4, 7, 10, 13 }, // Middle row + { 0, 5, 6, 11, 14 }, // Bottom row + { 17, NO_LED, 15, 16, NO_LED }, // Thumb cluster + // Right split. + { 20, 21, 26, 27, 30 }, // Top row + { 19, 22, 25, 28, 31 }, // Middle row + { 18, 23, 24, 29, 32 }, // Bottom row + { 33, NO_LED, 34, NO_LED, NO_LED }, // Thumb cluster +}, { + /* LED index to physical position. */ + // Left split. + /* index=0 */ { 0, 42 }, { 0, 21 }, { 0, 0 }, // col 1 (left most) + /* index=3 */ { 18, 0 }, { 18, 21 }, { 18, 42 }, // col 2 + /* index=6 */ { 36, 42 }, { 36, 21 }, { 36, 0 }, + /* index=9 */ { 54, 0 }, { 54, 21 }, { 54, 42 }, + /* index=12 */ { 72, 0 }, { 72, 21 }, { 72, 42 }, + /* index=15 */ { 72, 64 }, { 90, 64 }, { 108, 64 }, // Thumb cluster + // Right split. + /* index=18 */ { 224, 42 }, { 224, 21 }, { 224, 0 }, // col 10 (right most) + /* index=21 */ { 206, 0 }, { 206, 21 }, { 206, 42 }, // col 9 + /* index=24 */ { 188, 42 }, { 188, 21 }, { 188, 0 }, + /* index=27 */ { 170, 0 }, { 170, 21 }, { 170, 42 }, + /* index=30 */ { 152, 0 }, { 152, 21 }, { 152, 42 }, + /* index=33 */ { 134, 64 }, { 152, 64 }, { 0, 0 }, +}, { + /* LED index to flag. */ + // Left split. + /* index=0 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 1 + /* index=3 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 2 + /* index=6 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=9 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=12 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=15 */ LED_FLAG_MODIFIER, LED_FLAG_MODIFIER, LED_FLAG_MODIFIER, // Thumb cluster + // Right split. + /* index=18 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 10 + /* index=21 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 9 + /* index=24 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=27 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=30 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=33 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // Thumb cluster +} }; +#endif +// clang-format on diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/config.h b/keyboards/bastardkb/charybdis/3x5/blackpill/config.h new file mode 100644 index 00000000..bd1e0fe3 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/blackpill/config.h @@ -0,0 +1,54 @@ +/* + * Copyright 2020 Christopher Courtney (@drashna) + * Copyright 2021 Stefan Kerkmann (@KarlK90) + * Copyright 2021 Charly Delay (@0xcharly) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Publicw 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 + +/* Handedness. */ +#define SPLIT_HAND_PIN A3 // High -> left, Low -> right. + +/* RGB settings. */ +#define WS2812_PWM_DRIVER PWMD2 +#define WS2812_PWM_CHANNEL 2 +#define WS2812_PWM_PAL_MODE 1 +#define WS2812_EXTERNAL_PULLUP +#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM1 +#define WS2812_PWM_DMA_CHANNEL 3 + +/* Serial configuration for split keyboard. */ +#define SERIAL_USART_TX_PIN A9 + +/* CRC. */ +#define CRC8_USE_TABLE +#define CRC8_OPTIMIZE_SPEED + +/* SPI config for EEPROM and pmw3360 sensor. */ +#define SPI_DRIVER SPID1 +#define SPI_SCK_PIN A5 +#define SPI_SCK_PAL_MODE 5 +#define SPI_MOSI_PIN A7 +#define SPI_MOSI_PAL_MODE 5 +#define SPI_MISO_PIN A6 +#define SPI_MISO_PAL_MODE 5 + +/* EEPROM config. */ +#define EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN A4 + +/* PMW3360 settings. */ +#define POINTING_DEVICE_CS_PIN B14 +#define PMW33XX_CS_DIVISOR 64 diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/halconf.h b/keyboards/bastardkb/charybdis/3x5/blackpill/halconf.h new file mode 100644 index 00000000..c43f84e0 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/blackpill/halconf.h @@ -0,0 +1,27 @@ +/** + * Copyright 2020 Nick Brassel (tzarc) + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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 + +#define HAL_USE_PWM TRUE +#define HAL_USE_SERIAL TRUE +#define HAL_USE_SPI TRUE +#define SPI_USE_WAIT TRUE +#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD + +#include_next diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/keyboard.json b/keyboards/bastardkb/charybdis/3x5/blackpill/keyboard.json new file mode 100644 index 00000000..bcc57981 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/blackpill/keyboard.json @@ -0,0 +1,38 @@ +{ + "keyboard_name": "Charybdis Nano (3x5) Blackpill", + "usb": { + "device_version": "1.0.0", + "shared_endpoint": { + "keyboard": true + } + }, + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "rgb_matrix": true, + "pointing_device": true + }, + "eeprom": { + "driver": "spi" + }, + "split": { + "enabled": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "ws2812": { + "pin": "A1", + "driver": "pwm" + }, + "build": { + "debounce_type": "asym_eager_defer_pk" + }, + "matrix_pins": { + "cols": ["B1", "B10", "B3", "B4", "B5"], + "rows": ["A2", "B8", "A8", "B9"] + }, + "diode_direction": "ROW2COL", + "development_board": "blackpill_f411" +} diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/mcuconf.h b/keyboards/bastardkb/charybdis/3x5/blackpill/mcuconf.h new file mode 100644 index 00000000..46b3b42f --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/blackpill/mcuconf.h @@ -0,0 +1,45 @@ +/* + * Copyright 2020 Nick Brassel (tzarc) + * Copyright 2021 Stefan Kerkmann (@KarlK90) + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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_next + +#undef STM32_PWM_USE_TIM2 +#define STM32_PWM_USE_TIM2 TRUE + +#undef STM32_PWM_USE_TIM3 +#define STM32_PWM_USE_TIM3 TRUE + +#undef STM32_SPI_USE_SPI1 +#define STM32_SPI_USE_SPI1 TRUE + +#undef STM32_SPI_SPI1_RX_DMA_STREAM +#define STM32_SPI_SPI1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 0) +#undef STM32_SPI_SPI1_TX_DMA_STREAM +#define STM32_SPI_SPI1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 3) + +#undef STM32_SERIAL_USE_USART1 +#define STM32_SERIAL_USE_USART1 TRUE + +#undef STM32_GPT_USE_TIM4 +#define STM32_GPT_USE_TIM4 TRUE + +#undef STM32_ST_USE_TIMER +#define STM32_ST_USE_TIMER 5 diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/readme.md b/keyboards/bastardkb/charybdis/3x5/blackpill/readme.md new file mode 100644 index 00000000..7ef08798 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/blackpill/readme.md @@ -0,0 +1,3 @@ +# Charybdis Nano (3x5) BlackPill + +An ergonomic keyboard with integrated trackball, with BlackPill (STM32F411) mod. diff --git a/keyboards/bastardkb/charybdis/3x5/blackpill/rules.mk b/keyboards/bastardkb/charybdis/3x5/blackpill/rules.mk new file mode 100644 index 00000000..c8d355ef --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/blackpill/rules.mk @@ -0,0 +1,5 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +POINTING_DEVICE_DRIVER = pmw3360 +MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint +SERIAL_DRIVER = usart diff --git a/keyboards/bastardkb/charybdis/3x5/config.h b/keyboards/bastardkb/charybdis/3x5/config.h new file mode 100644 index 00000000..1c952759 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/config.h @@ -0,0 +1,22 @@ +/* + * Copyright 2021 Quentin LEBASTARD + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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 + +/* Trackball angle adjustment. */ +#define ROTATIONAL_TRANSFORM_ANGLE -25 diff --git a/keyboards/bastardkb/charybdis/3x5/info.json b/keyboards/bastardkb/charybdis/3x5/info.json new file mode 100644 index 00000000..9627b985 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/info.json @@ -0,0 +1,62 @@ +{ + "manufacturer": "Bastard Keyboards", + "url": "https://bastardkb.com/charybdis-nano", + "usb": { + "pid": "0x1832", + "vid": "0xA8F8" + }, + "rgb_matrix": { + "split_count": [18, 18] + }, + "layout_aliases": { + "LAYOUT_charybdis_3x5": "LAYOUT" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 4], "x": 4, "y": 0}, + + {"matrix": [4, 4], "x": 11, "y": 0}, + {"matrix": [4, 3], "x": 12, "y": 0}, + {"matrix": [4, 2], "x": 13, "y": 0}, + {"matrix": [4, 1], "x": 14, "y": 0}, + {"matrix": [4, 0], "x": 15, "y": 0}, + + {"matrix": [1, 0], "x": 0, "y": 1}, + {"matrix": [1, 1], "x": 1, "y": 1}, + {"matrix": [1, 2], "x": 2, "y": 1}, + {"matrix": [1, 3], "x": 3, "y": 1}, + {"matrix": [1, 4], "x": 4, "y": 1}, + + {"matrix": [5, 4], "x": 11, "y": 1}, + {"matrix": [5, 3], "x": 12, "y": 1}, + {"matrix": [5, 2], "x": 13, "y": 1}, + {"matrix": [5, 1], "x": 14, "y": 1}, + {"matrix": [5, 0], "x": 15, "y": 1}, + + {"matrix": [2, 0], "x": 0, "y": 2}, + {"matrix": [2, 1], "x": 1, "y": 2}, + {"matrix": [2, 2], "x": 2, "y": 2}, + {"matrix": [2, 3], "x": 3, "y": 2}, + {"matrix": [2, 4], "x": 4, "y": 2}, + + {"matrix": [6, 4], "x": 11, "y": 2}, + {"matrix": [6, 3], "x": 12, "y": 2}, + {"matrix": [6, 2], "x": 13, "y": 2}, + {"matrix": [6, 1], "x": 14, "y": 2}, + {"matrix": [6, 0], "x": 15, "y": 2}, + + {"matrix": [3, 2], "x": 4, "y": 3}, + {"matrix": [3, 3], "x": 5, "y": 3}, + {"matrix": [3, 0], "x": 6, "y": 3}, + + {"matrix": [7, 0], "x": 9, "y": 3}, + {"matrix": [7, 2], "x": 10, "y": 3} + ] + } + } +} diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/default/keymap.c b/keyboards/bastardkb/charybdis/3x5/keymaps/default/keymap.c new file mode 100644 index 00000000..e5e0ba12 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/keymaps/default/keymap.c @@ -0,0 +1,71 @@ +/** + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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 charybdis_keymap_layers { + LAYER_BASE = 0, + LAYER_LOWER, + LAYER_RAISE, +}; + +#define LOWER MO(LAYER_LOWER) +#define RAISE MO(LAYER_RAISE) + +#define CTL_BSP CTL_T(KC_BSPC) +#define SFT_SPC SFT_T(KC_SPC) +#define GUI_ENT GUI_T(KC_ENT) + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [LAYER_BASE] = LAYOUT( + // ╭─────────────────────────────────────────────╮ ╭─────────────────────────────────────────────╮ + 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, + // ╰─────────────────────────────────────────────┤ ├─────────────────────────────────────────────╯ + CTL_BSP, SFT_SPC, LOWER, RAISE, GUI_ENT + // ╰───────────────────────────╯ ╰──────────────────╯ + ), + + [LAYER_LOWER] = LAYOUT( + // ╭─────────────────────────────────────────────╮ ╭─────────────────────────────────────────────╮ + RM_TOGG, KC_MNXT, KC_MPLY, KC_MPRV, XXXXXXX, KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, + // ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤ + KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_PPLS, KC_4, KC_5, KC_6, KC_PMNS, + // ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤ + XXXXXXX, XXXXXXX, XXXXXXX, EE_CLR, QK_BOOT, KC_PAST, KC_1, KC_2, KC_3, KC_PSLS, + // ╰─────────────────────────────────────────────┤ ├─────────────────────────────────────────────╯ + XXXXXXX, XXXXXXX, _______, XXXXXXX, _______ + // ╰───────────────────────────╯ ╰──────────────────╯ + ), + + [LAYER_RAISE] = LAYOUT( + // ╭─────────────────────────────────────────────╮ ╭─────────────────────────────────────────────╮ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, KC_MUTE, KC_VOLD, XXXXXXX, + // ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤ + KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_RSFT, KC_RCTL, KC_RALT, KC_RGUI, + // ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤ + KC_HOME, KC_PGUP, KC_PGDN, KC_END, XXXXXXX, QK_BOOT, EE_CLR, XXXXXXX, XXXXXXX, XXXXXXX, + // ╰─────────────────────────────────────────────┤ ├─────────────────────────────────────────────╯ + _______, _______, XXXXXXX, _______, XXXXXXX + // ╰───────────────────────────╯ ╰──────────────────╯ + ), +}; +// clang-format on diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/default/readme.md b/keyboards/bastardkb/charybdis/3x5/keymaps/default/readme.md new file mode 100644 index 00000000..39086568 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/keymaps/default/readme.md @@ -0,0 +1,7 @@ +# Charybdis (3x5) default keymap + +> :bulb: Have a look at the [`via` keymap](../via) for a more feature-rich layout. + +The Charydbis (3x5) default keymap is inspired from the original [Dactyl Manuform](../../../../../handwired/dactyl_manuform) default keymap. + +This layout supports RGB matrix. However, due to space constraints on the MCU, only a limited number of effect can be enabled at once. Look at the `config.h` file and enable your favorite effect. diff --git a/keyboards/bastardkb/charybdis/3x5/readme.md b/keyboards/bastardkb/charybdis/3x5/readme.md new file mode 100644 index 00000000..7a91035b --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/readme.md @@ -0,0 +1,15 @@ +# Charybdis Nano (3x5) + +An ergonomic keyboard with integrated trackball. + +The Charybdis is available in 4x6 and 3x5 form factor at [bastardkb.com](https://bastardkb.com). + +## Keymaps + +### [`default`](keymaps/default) + +A simple QWERTY layout with 4 layers. + +### [`via`](keymaps/via) + +A [Miryoku-inspired](https://github.com/manna-harbour/miryoku), feature-rich, keymap with VIA support. diff --git a/keyboards/bastardkb/charybdis/3x5/v1/elitec/config.h b/keyboards/bastardkb/charybdis/3x5/v1/elitec/config.h new file mode 100644 index 00000000..dc0c6e4e --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v1/elitec/config.h @@ -0,0 +1,25 @@ +/* + * Copyright 2020 Christopher Courtney (@drashna) + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +/* PMW3360 settings. */ +#define POINTING_DEVICE_CS_PIN B0 diff --git a/keyboards/bastardkb/charybdis/3x5/v1/elitec/keyboard.json b/keyboards/bastardkb/charybdis/3x5/v1/elitec/keyboard.json new file mode 100644 index 00000000..4a94d023 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v1/elitec/keyboard.json @@ -0,0 +1,39 @@ +{ + "keyboard_name": "Charybdis Nano (3x5) Elite-C", + "usb": { + "device_version": "1.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": false, + "extrakey": true, + "rgb_matrix": true, + "pointing_device": true + }, + "build": { + "lto": true + }, + "ws2812": { + "pin": "D3" + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["C7", "F0", "D7", "E6", "B4"], + "rows": ["B7", "C6", "D4", "B5"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "D2", + "matrix_pins": { + "right": { + "cols": ["C7", "B7", "D7", "E6", "B4"], + "rows": ["F0", "C6", "D4", "B5"] + } + } + }, + "processor": "atmega32u4", + "bootloader": "atmel-dfu" +} diff --git a/keyboards/bastardkb/charybdis/3x5/v1/elitec/rules.mk b/keyboards/bastardkb/charybdis/3x5/v1/elitec/rules.mk new file mode 100644 index 00000000..17dae28b --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v1/elitec/rules.mk @@ -0,0 +1,4 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +POINTING_DEVICE_DRIVER = pmw3360 +MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint diff --git a/keyboards/bastardkb/charybdis/3x5/v2/elitec/config.h b/keyboards/bastardkb/charybdis/3x5/v2/elitec/config.h new file mode 100644 index 00000000..3b913222 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v2/elitec/config.h @@ -0,0 +1,24 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +/* PMW3360 settings. */ +#define POINTING_DEVICE_CS_PIN F0 diff --git a/keyboards/bastardkb/charybdis/3x5/v2/elitec/keyboard.json b/keyboards/bastardkb/charybdis/3x5/v2/elitec/keyboard.json new file mode 100644 index 00000000..bc95061c --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v2/elitec/keyboard.json @@ -0,0 +1,33 @@ +{ + "keyboard_name": "Charybdis Nano (3x5) Elite-C", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": false, + "extrakey": true, + "rgb_matrix": true, + "pointing_device": true + }, + "build": { + "lto": true + }, + "ws2812": { + "pin": "D3" + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["F5", "B6", "D7", "E6", "B4"], + "rows": ["F7", "C6", "D4", "B5"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "D2" + }, + "processor": "atmega32u4", + "bootloader": "atmel-dfu" +} diff --git a/keyboards/bastardkb/charybdis/3x5/v2/elitec/rules.mk b/keyboards/bastardkb/charybdis/3x5/v2/elitec/rules.mk new file mode 100644 index 00000000..17dae28b --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v2/elitec/rules.mk @@ -0,0 +1,4 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +POINTING_DEVICE_DRIVER = pmw3360 +MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint diff --git a/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/config.h b/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/config.h new file mode 100644 index 00000000..e6e2a4f2 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/config.h @@ -0,0 +1,38 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +// To use the handedness pin, resistors need to be installed on the adapter PCB. +// If so, uncomment the following code, and undefine MASTER_RIGHT above. +// #define SPLIT_HAND_PIN GP13 +// #define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* SPI & PMW3360 settings. */ +#define SPI_DRIVER SPID0 +#define SPI_SCK_PIN GP18 +#define SPI_MISO_PIN GP20 +#define SPI_MOSI_PIN GP19 +#define POINTING_DEVICE_CS_PIN GP14 + +/* Reset. */ +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17 +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U diff --git a/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/keyboard.json b/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/keyboard.json new file mode 100644 index 00000000..cc990d3f --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/keyboard.json @@ -0,0 +1,31 @@ +{ + "keyboard_name": "Charybdis Nano (3x5) Splinky", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": false, + "extrakey": true, + "rgb_matrix": true, + "pointing_device": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["GP28", "GP15", "GP6", "GP7", "GP8"], + "rows": ["GP26", "GP5", "GP4", "GP9"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "GP1" + }, + "ws2812": { + "pin": "GP0", + "driver": "vendor" + }, + "processor": "RP2040", + "bootloader": "rp2040" +} diff --git a/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/mcuconf.h b/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/mcuconf.h new file mode 100644 index 00000000..6aaf3142 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/mcuconf.h @@ -0,0 +1,23 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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_next + +#undef RP_SPI_USE_SPI0 +#define RP_SPI_USE_SPI0 TRUE diff --git a/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/readme.md b/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/readme.md new file mode 100644 index 00000000..662eb582 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/readme.md @@ -0,0 +1,5 @@ +# Splinky controller + +The splinky is a Pro-Micro/Elite-C replacement with USB-C and RP2040. + +See [plut0nium/0xB2](https://github.com/plut0nium/0xB2/#releases) to figure out the right version for you (v2 or v3). diff --git a/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/rules.mk b/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/rules.mk new file mode 100644 index 00000000..db29cb67 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v2/splinky_2/rules.mk @@ -0,0 +1,5 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +POINTING_DEVICE_DRIVER = pmw3360 + +SERIAL_DRIVER = vendor diff --git a/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/config.h b/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/config.h new file mode 100644 index 00000000..ee7745d4 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/config.h @@ -0,0 +1,38 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +// To use the handedness pin, resistors need to be installed on the adapter PCB. +// If so, uncomment the following code, and undefine MASTER_RIGHT above. +// #define SPLIT_HAND_PIN GP15 +// #define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* SPI & PMW3360 settings. */ +#define SPI_DRIVER SPID0 +#define SPI_SCK_PIN GP22 +#define SPI_MISO_PIN GP20 +#define SPI_MOSI_PIN GP23 +#define POINTING_DEVICE_CS_PIN GP16 + +/* Reset. */ +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17 +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U diff --git a/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/keyboard.json b/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/keyboard.json new file mode 100644 index 00000000..6719b211 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/keyboard.json @@ -0,0 +1,31 @@ +{ + "keyboard_name": "Charybdis Nano (3x5) Splinky", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": false, + "extrakey": true, + "rgb_matrix": true, + "pointing_device": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["GP28", "GP21", "GP6", "GP7", "GP8"], + "rows": ["GP26", "GP5", "GP4", "GP9"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "GP1" + }, + "ws2812": { + "pin": "GP0", + "driver": "vendor" + }, + "processor": "RP2040", + "bootloader": "rp2040" +} diff --git a/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/mcuconf.h b/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/mcuconf.h new file mode 100644 index 00000000..6aaf3142 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/mcuconf.h @@ -0,0 +1,23 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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_next + +#undef RP_SPI_USE_SPI0 +#define RP_SPI_USE_SPI0 TRUE diff --git a/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/readme.md b/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/readme.md new file mode 100644 index 00000000..662eb582 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/readme.md @@ -0,0 +1,5 @@ +# Splinky controller + +The splinky is a Pro-Micro/Elite-C replacement with USB-C and RP2040. + +See [plut0nium/0xB2](https://github.com/plut0nium/0xB2/#releases) to figure out the right version for you (v2 or v3). diff --git a/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/rules.mk b/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/rules.mk new file mode 100644 index 00000000..db29cb67 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v2/splinky_3/rules.mk @@ -0,0 +1,5 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +POINTING_DEVICE_DRIVER = pmw3360 + +SERIAL_DRIVER = vendor diff --git a/keyboards/bastardkb/charybdis/3x5/v2/stemcell/config.h b/keyboards/bastardkb/charybdis/3x5/v2/stemcell/config.h new file mode 100644 index 00000000..3efb3233 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v2/stemcell/config.h @@ -0,0 +1,52 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +// To use the handedness pin, resistors need to be installed on the adapter PCB. +// If so, uncomment the following code, and undefine MASTER_RIGHT above. +// #define A0 PAL_LINE(GPIOA, 0) +// #define SPLIT_HAND_PIN A0 +// #define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* RGB settings. */ +#define WS2812_PWM_DRIVER PWMD2 +#define WS2812_PWM_CHANNEL 4 +#define WS2812_PWM_PAL_MODE 1 +#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM7 +#define WS2812_PWM_DMA_CHANNEL 3 + +/* CRC. */ +#define CRC8_USE_TABLE +#define CRC8_OPTIMIZE_SPEED + +/* SPI config for pmw3360 sensor. */ +#define SPI_DRIVER SPID1 +#define SPI_SCK_PIN A5 +#define SPI_SCK_PAL_MODE 5 +#define SPI_MOSI_PIN A7 +#define SPI_MOSI_PAL_MODE 5 +#define SPI_MISO_PIN A6 +#define SPI_MISO_PAL_MODE 5 + +/* PMW3360 settings. */ +#define POINTING_DEVICE_CS_PIN A1 +#define PMW3360_CS_MODE 3 +#define PMW3360_CS_DIVISOR 64 diff --git a/keyboards/bastardkb/charybdis/3x5/v2/stemcell/halconf.h b/keyboards/bastardkb/charybdis/3x5/v2/stemcell/halconf.h new file mode 100644 index 00000000..0397de50 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v2/stemcell/halconf.h @@ -0,0 +1,24 @@ +/* + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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 + +#define HAL_USE_PWM TRUE +#define HAL_USE_SERIAL TRUE +#define HAL_USE_SPI TRUE + +#include_next diff --git a/keyboards/bastardkb/charybdis/3x5/v2/stemcell/keyboard.json b/keyboards/bastardkb/charybdis/3x5/v2/stemcell/keyboard.json new file mode 100644 index 00000000..2de77b07 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v2/stemcell/keyboard.json @@ -0,0 +1,36 @@ +{ + "keyboard_name": "Charybdis Nano (3x5) STeMCell", + "usb": { + "device_version": "2.0.0", + "shared_endpoint": { + "keyboard": true + } + }, + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "rgb_matrix": true, + "pointing_device": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "ws2812": { + "pin": "A2", + "driver": "pwm" + }, + "build": { + "debounce_type": "asym_eager_defer_pk" + }, + "matrix_pins": { + "cols": ["B2", "A4", "B4", "B5", "B8"], + "rows": ["B0", "B3", "A15", "B9"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "A3" + }, + "development_board": "stemcell" +} diff --git a/keyboards/bastardkb/charybdis/3x5/v2/stemcell/mcuconf.h b/keyboards/bastardkb/charybdis/3x5/v2/stemcell/mcuconf.h new file mode 100644 index 00000000..17a46d8f --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v2/stemcell/mcuconf.h @@ -0,0 +1,32 @@ +/* + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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_next + +#undef STM32_SPI_USE_SPI1 +#define STM32_SPI_USE_SPI1 TRUE + +#undef STM32_SERIAL_USE_USART1 +#define STM32_SERIAL_USE_USART1 FALSE + +#undef STM32_PWM_USE_TIM2 +#define STM32_PWM_USE_TIM2 TRUE + +#undef STM32_ST_USE_TIMER +#define STM32_ST_USE_TIMER 5 diff --git a/keyboards/bastardkb/charybdis/3x5/v2/stemcell/rules.mk b/keyboards/bastardkb/charybdis/3x5/v2/stemcell/rules.mk new file mode 100644 index 00000000..4373b9c3 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x5/v2/stemcell/rules.mk @@ -0,0 +1,6 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +POINTING_DEVICE_DRIVER = pmw3360 +MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint + +SERIAL_DRIVER = usart diff --git a/keyboards/bastardkb/charybdis/3x6/3x6.c b/keyboards/bastardkb/charybdis/3x6/3x6.c new file mode 100644 index 00000000..d2c0a398 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/3x6.c @@ -0,0 +1,91 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Publicw 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 "charybdis.h" + +// clang-format off +#ifdef RGB_MATRIX_ENABLE +/** + * \brief LEDs index. + * + # 0,0 14 28 42 56 70 84 98 126 140 154 168 182 196 210 224,0 + # 0,0 15 30 45 60 75 90 105 119 134 149 164 179 194 209 224,0 + * ╭────────────────────────╮ ╭────────────────────────╮ + * 0 5 6 11 12 15 36 33 32 27 26 21 + * ├────────────────────────┤ ├────────────────────────┤ + * 1 4 7 10 13 16 37 34 31 28 25 22 + * ├────────────────────────┤ ├────────────────────────┤ + * 2 3 8 9 14 17 38 35 30 29 24 23 + * ╰────────────────────────╯ ╰────────────────────────╯ + * 18 19 20 39 40 XX + * ╰────────────╯ ╰────────────╯ + * + * Note: the LED config simulates 42 LEDs instead of the actual 41 to prevent + * confusion when testing LEDs during assembly when handedness is not set + * correctly. Those fake LEDs are bound to the physical top-left corner. + */ +led_config_t g_led_config = { { + /* Key Matrix to LED index. */ + // Left split. + { 0, 5, 6, 11, 12, 15 }, // Top row + { 1, 4, 7, 10, 13, 16 }, // Middle row + { 2, 3, 8, 9, 14, 17 }, // Bottom row + { NO_LED, 20, NO_LED, 18, 19, NO_LED }, // Thumb cluster + // Right split. + { 21, 26, 27, 32, 33, 36 }, // Top row + { 22, 25, 28, 31, 34, 37 }, // Middle row + { 23, 24, 29, 30, 35, 38 }, // Bottom row + { NO_LED, 41, NO_LED, 39, 40, NO_LED }, // Thumb cluster +}, { + /* LED index to physical position. */ + // Left split. + /* index=0 */ { 0, 0 }, { 0, 21 }, { 0, 42 }, // col 1 (left most) + /* index=3 */ { 15, 42 }, { 15, 21 }, { 15, 0 }, // col 2 + /* index=6 */ { 30, 0 }, { 30, 21 }, { 30, 42 }, + /* index=9 */ { 45, 42 }, { 45, 21 }, { 45, 0 }, + /* index=12 */ { 60, 0 }, { 60, 21 }, { 60, 42 }, + /* index=15 */ { 75, 0 }, { 75, 21 }, { 75, 42 }, + /* index=18 */ { 75, 64 }, { 90, 64 }, { 105, 64 }, // Thumb cluster + // Right split. + /* index=21 */ { 224, 0 }, { 224, 21 }, { 224, 42 }, // col 12 (right most) + /* index=24 */ { 209, 42 }, { 209, 21 }, { 209, 0 }, // col 10 + /* index=27 */ { 194, 0 }, { 194, 21 }, { 194, 42 }, + /* index=30 */ { 179, 42 }, { 179, 21 }, { 179, 0 }, + /* index=33 */ { 164, 0 }, { 164, 21 }, { 164, 42 }, + /* index=36 */ { 149, 0 }, { 149, 21 }, { 149, 42 }, + /* index=39 */ { 119, 64 }, { 134, 64 }, { 0, 0 }, // Thumb cluster +}, { + /* LED index to flag. */ + // Left split. + /* index=0 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 1 + /* index=3 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 2 + /* index=6 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=9 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=12 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=15 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=18 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // Thumb cluster + // Right split. + /* index=21 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 10 + /* index=24 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 9 + /* index=27 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=30 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=33 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=36 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=39 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // Thumb cluster +} }; +#endif +// clang-format on diff --git a/keyboards/bastardkb/charybdis/3x6/blackpill/config.h b/keyboards/bastardkb/charybdis/3x6/blackpill/config.h new file mode 100644 index 00000000..e1365a10 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/blackpill/config.h @@ -0,0 +1,52 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Publicw 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 + +/* Handedness. */ +#define SPLIT_HAND_PIN A3 // High -> left, Low -> right. + +/* RGB settings. */ +#define WS2812_PWM_DRIVER PWMD2 +#define WS2812_PWM_CHANNEL 2 +#define WS2812_PWM_PAL_MODE 1 +#define WS2812_EXTERNAL_PULLUP +#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM1 +#define WS2812_PWM_DMA_CHANNEL 3 + +/* Serial configuration for split keyboard. */ +#define SERIAL_USART_TX_PIN A9 + +/* CRC. */ +#define CRC8_USE_TABLE +#define CRC8_OPTIMIZE_SPEED + +/* SPI config for EEPROM and pmw3360 sensor. */ +#define SPI_DRIVER SPID1 +#define SPI_SCK_PIN A5 +#define SPI_SCK_PAL_MODE 5 +#define SPI_MOSI_PIN A7 +#define SPI_MOSI_PAL_MODE 5 +#define SPI_MISO_PIN A6 +#define SPI_MISO_PAL_MODE 5 + +/* EEPROM config. */ +#define EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN A4 + +/* PMW3360 settings. */ +#define POINTING_DEVICE_CS_PIN B14 +#define PMW33XX_CS_DIVISOR 64 diff --git a/keyboards/bastardkb/charybdis/3x6/blackpill/halconf.h b/keyboards/bastardkb/charybdis/3x6/blackpill/halconf.h new file mode 100644 index 00000000..1ba700a8 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/blackpill/halconf.h @@ -0,0 +1,27 @@ +/** + * Copyright 2020 Nick Brassel (tzarc) + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +#define HAL_USE_PWM TRUE +#define HAL_USE_SERIAL TRUE +#define HAL_USE_SPI TRUE +#define SPI_USE_WAIT TRUE +#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD + +#include_next diff --git a/keyboards/bastardkb/charybdis/3x6/blackpill/keyboard.json b/keyboards/bastardkb/charybdis/3x6/blackpill/keyboard.json new file mode 100644 index 00000000..ecefbbeb --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/blackpill/keyboard.json @@ -0,0 +1,38 @@ +{ + "keyboard_name": "Charybdis Mini (3x6) Blackpill", + "usb": { + "device_version": "1.0.0", + "shared_endpoint": { + "keyboard": true + } + }, + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "rgb_matrix": true, + "pointing_device": true + }, + "eeprom": { + "driver": "spi" + }, + "split": { + "enabled": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "ws2812": { + "pin": "A1", + "driver": "pwm" + }, + "build": { + "debounce_type": "asym_eager_defer_pk" + }, + "matrix_pins": { + "cols": ["B0", "B1", "B10", "B3", "B4", "B5"], + "rows": ["A2", "B8", "A8", "B9"] + }, + "diode_direction": "ROW2COL", + "development_board": "blackpill_f411" +} diff --git a/keyboards/bastardkb/charybdis/3x6/blackpill/mcuconf.h b/keyboards/bastardkb/charybdis/3x6/blackpill/mcuconf.h new file mode 100644 index 00000000..e4cde488 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/blackpill/mcuconf.h @@ -0,0 +1,45 @@ +/* + * Copyright 2020 Nick Brassel (tzarc) + * Copyright 2021 Stefan Kerkmann (@KarlK90) + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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_next + +#undef STM32_PWM_USE_TIM2 +#define STM32_PWM_USE_TIM2 TRUE + +#undef STM32_PWM_USE_TIM3 +#define STM32_PWM_USE_TIM3 TRUE + +#undef STM32_SPI_USE_SPI1 +#define STM32_SPI_USE_SPI1 TRUE + +#undef STM32_SPI_SPI1_RX_DMA_STREAM +#define STM32_SPI_SPI1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 0) +#undef STM32_SPI_SPI1_TX_DMA_STREAM +#define STM32_SPI_SPI1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 3) + +#undef STM32_SERIAL_USE_USART1 +#define STM32_SERIAL_USE_USART1 TRUE + +#undef STM32_GPT_USE_TIM4 +#define STM32_GPT_USE_TIM4 TRUE + +#undef STM32_ST_USE_TIMER +#define STM32_ST_USE_TIMER 5 diff --git a/keyboards/bastardkb/charybdis/3x6/blackpill/readme.md b/keyboards/bastardkb/charybdis/3x6/blackpill/readme.md new file mode 100644 index 00000000..6a9907c2 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/blackpill/readme.md @@ -0,0 +1,3 @@ +# Charybdis Mini (3x6) BlackPill + +An ergonomic keyboard with integrated trackball, with BlackPill (STM32F411) mod. diff --git a/keyboards/bastardkb/charybdis/3x6/blackpill/rules.mk b/keyboards/bastardkb/charybdis/3x6/blackpill/rules.mk new file mode 100644 index 00000000..4373b9c3 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/blackpill/rules.mk @@ -0,0 +1,6 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +POINTING_DEVICE_DRIVER = pmw3360 +MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint + +SERIAL_DRIVER = usart diff --git a/keyboards/bastardkb/charybdis/3x6/config.h b/keyboards/bastardkb/charybdis/3x6/config.h new file mode 100644 index 00000000..1c952759 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/config.h @@ -0,0 +1,22 @@ +/* + * Copyright 2021 Quentin LEBASTARD + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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 + +/* Trackball angle adjustment. */ +#define ROTATIONAL_TRANSFORM_ANGLE -25 diff --git a/keyboards/bastardkb/charybdis/3x6/info.json b/keyboards/bastardkb/charybdis/3x6/info.json new file mode 100644 index 00000000..3597e725 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/info.json @@ -0,0 +1,66 @@ +{ + "url": "https://bastardkb.com", + "usb": { + "pid": "0x1834" + }, + "rgb_matrix": { + "split_count": [21, 21] + }, + "layout_aliases": { + "LAYOUT_charybdis_3x6": "LAYOUT" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"label": "L00", "matrix": [0, 0], "x": 0, "y": 0}, + {"label": "L01", "matrix": [0, 1], "x": 1, "y": 0}, + {"label": "L02", "matrix": [0, 2], "x": 2, "y": 0}, + {"label": "L03", "matrix": [0, 3], "x": 3, "y": 0}, + {"label": "L04", "matrix": [0, 4], "x": 4, "y": 0}, + {"label": "L05", "matrix": [0, 5], "x": 5, "y": 0}, + + {"label": "R00", "matrix": [4, 5], "x": 11, "y": 0}, + {"label": "R01", "matrix": [4, 4], "x": 12, "y": 0}, + {"label": "R02", "matrix": [4, 3], "x": 13, "y": 0}, + {"label": "R03", "matrix": [4, 2], "x": 14, "y": 0}, + {"label": "R04", "matrix": [4, 1], "x": 15, "y": 0}, + {"label": "R05", "matrix": [4, 0], "x": 16, "y": 0}, + + {"label": "L10", "matrix": [1, 0], "x": 0, "y": 1}, + {"label": "L11", "matrix": [1, 1], "x": 1, "y": 1}, + {"label": "L12", "matrix": [1, 2], "x": 2, "y": 1}, + {"label": "L13", "matrix": [1, 3], "x": 3, "y": 1}, + {"label": "L14", "matrix": [1, 4], "x": 4, "y": 1}, + {"label": "L15", "matrix": [1, 5], "x": 5, "y": 1}, + + {"label": "R10", "matrix": [5, 5], "x": 11, "y": 1}, + {"label": "R11", "matrix": [5, 4], "x": 12, "y": 1}, + {"label": "R12", "matrix": [5, 3], "x": 13, "y": 1}, + {"label": "R13", "matrix": [5, 2], "x": 14, "y": 1}, + {"label": "R14", "matrix": [5, 1], "x": 15, "y": 1}, + {"label": "R15", "matrix": [5, 0], "x": 16, "y": 1}, + + {"label": "L20", "matrix": [2, 0], "x": 0, "y": 2}, + {"label": "L21", "matrix": [2, 1], "x": 1, "y": 2}, + {"label": "L22", "matrix": [2, 2], "x": 2, "y": 2}, + {"label": "L23", "matrix": [2, 3], "x": 3, "y": 2}, + {"label": "L24", "matrix": [2, 4], "x": 4, "y": 2}, + {"label": "L25", "matrix": [2, 5], "x": 5, "y": 2}, + + {"label": "R20", "matrix": [6, 5], "x": 11, "y": 2}, + {"label": "R21", "matrix": [6, 4], "x": 12, "y": 2}, + {"label": "R22", "matrix": [6, 3], "x": 13, "y": 2}, + {"label": "R23", "matrix": [6, 2], "x": 14, "y": 2}, + {"label": "R24", "matrix": [6, 1], "x": 15, "y": 2}, + {"label": "R25", "matrix": [6, 0], "x": 16, "y": 2}, + + {"label": "L33", "matrix": [3, 3], "x": 5, "y": 3}, + {"label": "L34", "matrix": [3, 4], "x": 6, "y": 3}, + {"label": "L31", "matrix": [3, 1], "x": 7, "y": 3}, + + {"label": "R31", "matrix": [7, 1], "x": 9, "y": 3}, + {"label": "R33", "matrix": [7, 3], "x": 10, "y": 3} + ] + } + } +} diff --git a/keyboards/bastardkb/charybdis/3x6/keymaps/default/keymap.c b/keyboards/bastardkb/charybdis/3x6/keymaps/default/keymap.c new file mode 100644 index 00000000..ba802810 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/keymaps/default/keymap.c @@ -0,0 +1,66 @@ +/** + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 charybdis_keymap_layers { + LAYER_BASE = 0, + LAYER_LOWER, + LAYER_RAISE, +}; + +#define LOWER MO(LAYER_LOWER) +#define RAISE MO(LAYER_RAISE) + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [LAYER_BASE] = LAYOUT( + // ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮ + KC_LGUI, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_RGUI, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_RCTL, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + 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_BSPC, KC_SPC, LOWER, RAISE, KC_ENT + // ╰───────────────────────────╯ ╰──────────────────╯ + ), + + [LAYER_LOWER] = LAYOUT( + // ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮ + XXXXXXX, RM_TOGG, KC_MNXT, KC_MPLY, KC_MPRV, XXXXXXX, KC_LBRC, KC_7, KC_8, KC_9, KC_RBRC, XXXXXXX, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_PPLS, KC_4, KC_5, KC_6, KC_PMNS, XXXXXXX, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EE_CLR, QK_BOOT, KC_PAST, KC_1, KC_2, KC_3, KC_PSLS, XXXXXXX, + // ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯ + XXXXXXX, XXXXXXX, _______, XXXXXXX, _______ + // ╰───────────────────────────╯ ╰──────────────────╯ + ), + + [LAYER_RAISE] = LAYOUT( + // ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, KC_MUTE, KC_VOLD, XXXXXXX, XXXXXXX, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + XXXXXXX, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_RSFT, KC_RCTL, KC_RALT, KC_RGUI, XXXXXXX, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + XXXXXXX, KC_HOME, KC_PGUP, KC_PGDN, KC_END, XXXXXXX, QK_BOOT, EE_CLR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + // ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯ + _______, _______, XXXXXXX, _______, XXXXXXX + // ╰───────────────────────────╯ ╰──────────────────╯ + ), +}; +// clang-format on diff --git a/keyboards/bastardkb/charybdis/3x6/keymaps/default/readme.md b/keyboards/bastardkb/charybdis/3x6/keymaps/default/readme.md new file mode 100644 index 00000000..8b407f68 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/keymaps/default/readme.md @@ -0,0 +1,7 @@ +# Charybdis Mini (3x6) default keymap + +> :bulb: Have a look at the [`via` keymap](../via) for a more feature-rich layout. + +The Charydbis Mini (3x6) default keymap is inspired from the original [Dactyl Manuform](../../../../../handwired/dactyl_manuform) default keymap. + +This layout supports RGB matrix. However, due to space constraints on the MCU, only a limited number of effect can be enabled at once. Look at the `config.h` file and enable your favorite effect. diff --git a/keyboards/bastardkb/charybdis/3x6/readme.md b/keyboards/bastardkb/charybdis/3x6/readme.md new file mode 100644 index 00000000..c6385ed8 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/readme.md @@ -0,0 +1,15 @@ +# Charybdis Nano (3x6) + +An ergonomic keyboard with integrated trackball. + +The Charybdis is available in 4x6, 3x6 and 3x5 form factor at [bastardkb.com](https://bastardkb.com). + +## Keymaps + +### [`default`](keymaps/default) + +A simple QWERTY layout with 4 layers. + +### [`via`](keymaps/via) + +A [Miryoku-inspired](https://github.com/manna-harbour/miryoku), feature-rich, keymap with VIA support. diff --git a/keyboards/bastardkb/charybdis/3x6/v1/elitec/config.h b/keyboards/bastardkb/charybdis/3x6/v1/elitec/config.h new file mode 100644 index 00000000..f5c54c58 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v1/elitec/config.h @@ -0,0 +1,24 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +/* PMW3360 settings. */ +#define POINTING_DEVICE_CS_PIN B0 diff --git a/keyboards/bastardkb/charybdis/3x6/v1/elitec/keyboard.json b/keyboards/bastardkb/charybdis/3x6/v1/elitec/keyboard.json new file mode 100644 index 00000000..dcc45436 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v1/elitec/keyboard.json @@ -0,0 +1,39 @@ +{ + "keyboard_name": "Charybdis Mini (3x6) Elite-C", + "usb": { + "device_version": "1.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": false, + "extrakey": true, + "rgb_matrix": true, + "pointing_device": true + }, + "build": { + "lto": true + }, + "ws2812": { + "pin": "D3" + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["D5", "C7", "F0", "D7", "E6", "B4"], + "rows": ["B7", "C6", "D4", "B5"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "D2", + "matrix_pins": { + "right": { + "cols": ["F1", "C7", "B7", "D7", "E6", "B4"], + "rows": ["F0", "C6", "D4", "B5"] + } + } + }, + "processor": "atmega32u4", + "bootloader": "atmel-dfu" +} diff --git a/keyboards/bastardkb/charybdis/3x6/v1/elitec/rules.mk b/keyboards/bastardkb/charybdis/3x6/v1/elitec/rules.mk new file mode 100644 index 00000000..17dae28b --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v1/elitec/rules.mk @@ -0,0 +1,4 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +POINTING_DEVICE_DRIVER = pmw3360 +MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint diff --git a/keyboards/bastardkb/charybdis/3x6/v2/elitec/config.h b/keyboards/bastardkb/charybdis/3x6/v2/elitec/config.h new file mode 100644 index 00000000..3b913222 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v2/elitec/config.h @@ -0,0 +1,24 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +/* PMW3360 settings. */ +#define POINTING_DEVICE_CS_PIN F0 diff --git a/keyboards/bastardkb/charybdis/3x6/v2/elitec/keyboard.json b/keyboards/bastardkb/charybdis/3x6/v2/elitec/keyboard.json new file mode 100644 index 00000000..ce74b2dc --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v2/elitec/keyboard.json @@ -0,0 +1,33 @@ +{ + "keyboard_name": "Charybdis Mini (3x6) Elite-C", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": false, + "extrakey": true, + "rgb_matrix": true, + "pointing_device": true + }, + "build": { + "lto": true + }, + "ws2812": { + "pin": "D3" + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["F6", "F5", "B6", "D7", "E6", "B4"], + "rows": ["F7", "C6", "D4", "B5"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "D2" + }, + "processor": "atmega32u4", + "bootloader": "atmel-dfu" +} diff --git a/keyboards/bastardkb/charybdis/3x6/v2/elitec/rules.mk b/keyboards/bastardkb/charybdis/3x6/v2/elitec/rules.mk new file mode 100644 index 00000000..17dae28b --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v2/elitec/rules.mk @@ -0,0 +1,4 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +POINTING_DEVICE_DRIVER = pmw3360 +MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint diff --git a/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/config.h b/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/config.h new file mode 100644 index 00000000..e6e2a4f2 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/config.h @@ -0,0 +1,38 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +// To use the handedness pin, resistors need to be installed on the adapter PCB. +// If so, uncomment the following code, and undefine MASTER_RIGHT above. +// #define SPLIT_HAND_PIN GP13 +// #define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* SPI & PMW3360 settings. */ +#define SPI_DRIVER SPID0 +#define SPI_SCK_PIN GP18 +#define SPI_MISO_PIN GP20 +#define SPI_MOSI_PIN GP19 +#define POINTING_DEVICE_CS_PIN GP14 + +/* Reset. */ +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17 +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U diff --git a/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/keyboard.json b/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/keyboard.json new file mode 100644 index 00000000..82550847 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/keyboard.json @@ -0,0 +1,31 @@ +{ + "keyboard_name": "Charybdis Mini (3x6) Splinky", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": false, + "extrakey": true, + "rgb_matrix": true, + "pointing_device": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["GP27", "GP28", "GP15", "GP6", "GP7", "GP8"], + "rows": ["GP26", "GP5", "GP4", "GP9"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "GP1" + }, + "ws2812": { + "pin": "GP0", + "driver": "vendor" + }, + "processor": "RP2040", + "bootloader": "rp2040" +} diff --git a/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/mcuconf.h b/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/mcuconf.h new file mode 100644 index 00000000..6aaf3142 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/mcuconf.h @@ -0,0 +1,23 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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_next + +#undef RP_SPI_USE_SPI0 +#define RP_SPI_USE_SPI0 TRUE diff --git a/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/readme.md b/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/readme.md new file mode 100644 index 00000000..662eb582 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/readme.md @@ -0,0 +1,5 @@ +# Splinky controller + +The splinky is a Pro-Micro/Elite-C replacement with USB-C and RP2040. + +See [plut0nium/0xB2](https://github.com/plut0nium/0xB2/#releases) to figure out the right version for you (v2 or v3). diff --git a/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/rules.mk b/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/rules.mk new file mode 100644 index 00000000..db29cb67 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v2/splinky_2/rules.mk @@ -0,0 +1,5 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +POINTING_DEVICE_DRIVER = pmw3360 + +SERIAL_DRIVER = vendor diff --git a/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/config.h b/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/config.h new file mode 100644 index 00000000..ee7745d4 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/config.h @@ -0,0 +1,38 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +// To use the handedness pin, resistors need to be installed on the adapter PCB. +// If so, uncomment the following code, and undefine MASTER_RIGHT above. +// #define SPLIT_HAND_PIN GP15 +// #define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* SPI & PMW3360 settings. */ +#define SPI_DRIVER SPID0 +#define SPI_SCK_PIN GP22 +#define SPI_MISO_PIN GP20 +#define SPI_MOSI_PIN GP23 +#define POINTING_DEVICE_CS_PIN GP16 + +/* Reset. */ +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17 +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U diff --git a/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/keyboard.json b/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/keyboard.json new file mode 100644 index 00000000..4d9cfb61 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/keyboard.json @@ -0,0 +1,31 @@ +{ + "keyboard_name": "Charybdis Mini (3x6) Splinky", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": false, + "extrakey": true, + "rgb_matrix": true, + "pointing_device": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["GP27", "GP28", "GP21", "GP6", "GP7", "GP8"], + "rows": ["GP26", "GP5", "GP4", "GP9"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "GP1" + }, + "ws2812": { + "pin": "GP0", + "driver": "vendor" + }, + "processor": "RP2040", + "bootloader": "rp2040" +} diff --git a/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/mcuconf.h b/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/mcuconf.h new file mode 100644 index 00000000..6aaf3142 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/mcuconf.h @@ -0,0 +1,23 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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_next + +#undef RP_SPI_USE_SPI0 +#define RP_SPI_USE_SPI0 TRUE diff --git a/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/readme.md b/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/readme.md new file mode 100644 index 00000000..662eb582 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/readme.md @@ -0,0 +1,5 @@ +# Splinky controller + +The splinky is a Pro-Micro/Elite-C replacement with USB-C and RP2040. + +See [plut0nium/0xB2](https://github.com/plut0nium/0xB2/#releases) to figure out the right version for you (v2 or v3). diff --git a/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/rules.mk b/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/rules.mk new file mode 100644 index 00000000..db29cb67 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v2/splinky_3/rules.mk @@ -0,0 +1,5 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +POINTING_DEVICE_DRIVER = pmw3360 + +SERIAL_DRIVER = vendor diff --git a/keyboards/bastardkb/charybdis/3x6/v2/stemcell/config.h b/keyboards/bastardkb/charybdis/3x6/v2/stemcell/config.h new file mode 100644 index 00000000..3efb3233 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v2/stemcell/config.h @@ -0,0 +1,52 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +// To use the handedness pin, resistors need to be installed on the adapter PCB. +// If so, uncomment the following code, and undefine MASTER_RIGHT above. +// #define A0 PAL_LINE(GPIOA, 0) +// #define SPLIT_HAND_PIN A0 +// #define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* RGB settings. */ +#define WS2812_PWM_DRIVER PWMD2 +#define WS2812_PWM_CHANNEL 4 +#define WS2812_PWM_PAL_MODE 1 +#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM7 +#define WS2812_PWM_DMA_CHANNEL 3 + +/* CRC. */ +#define CRC8_USE_TABLE +#define CRC8_OPTIMIZE_SPEED + +/* SPI config for pmw3360 sensor. */ +#define SPI_DRIVER SPID1 +#define SPI_SCK_PIN A5 +#define SPI_SCK_PAL_MODE 5 +#define SPI_MOSI_PIN A7 +#define SPI_MOSI_PAL_MODE 5 +#define SPI_MISO_PIN A6 +#define SPI_MISO_PAL_MODE 5 + +/* PMW3360 settings. */ +#define POINTING_DEVICE_CS_PIN A1 +#define PMW3360_CS_MODE 3 +#define PMW3360_CS_DIVISOR 64 diff --git a/keyboards/bastardkb/charybdis/3x6/v2/stemcell/halconf.h b/keyboards/bastardkb/charybdis/3x6/v2/stemcell/halconf.h new file mode 100644 index 00000000..8141e0cf --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v2/stemcell/halconf.h @@ -0,0 +1,24 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +#define HAL_USE_PWM TRUE +#define HAL_USE_SERIAL TRUE +#define HAL_USE_SPI TRUE + +#include_next diff --git a/keyboards/bastardkb/charybdis/3x6/v2/stemcell/keyboard.json b/keyboards/bastardkb/charybdis/3x6/v2/stemcell/keyboard.json new file mode 100644 index 00000000..05d82b24 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v2/stemcell/keyboard.json @@ -0,0 +1,36 @@ +{ + "keyboard_name": "Charybdis Mini (3x6) STeMCell", + "usb": { + "device_version": "2.0.0", + "shared_endpoint": { + "keyboard": true + } + }, + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "rgb_matrix": true, + "pointing_device": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "ws2812": { + "pin": "A2", + "driver": "pwm" + }, + "build": { + "debounce_type": "asym_eager_defer_pk" + }, + "matrix_pins": { + "cols": ["B1", "B2", "A4", "B4", "B5", "B8"], + "rows": ["B0", "B3", "A15", "B9"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "A3" + }, + "development_board": "stemcell" +} diff --git a/keyboards/bastardkb/charybdis/3x6/v2/stemcell/mcuconf.h b/keyboards/bastardkb/charybdis/3x6/v2/stemcell/mcuconf.h new file mode 100644 index 00000000..1a3c4433 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v2/stemcell/mcuconf.h @@ -0,0 +1,32 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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_next + +#undef STM32_SPI_USE_SPI1 +#define STM32_SPI_USE_SPI1 TRUE + +#undef STM32_SERIAL_USE_USART1 +#define STM32_SERIAL_USE_USART1 FALSE + +#undef STM32_PWM_USE_TIM2 +#define STM32_PWM_USE_TIM2 TRUE + +#undef STM32_ST_USE_TIMER +#define STM32_ST_USE_TIMER 5 diff --git a/keyboards/bastardkb/charybdis/3x6/v2/stemcell/rules.mk b/keyboards/bastardkb/charybdis/3x6/v2/stemcell/rules.mk new file mode 100644 index 00000000..4373b9c3 --- /dev/null +++ b/keyboards/bastardkb/charybdis/3x6/v2/stemcell/rules.mk @@ -0,0 +1,6 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +POINTING_DEVICE_DRIVER = pmw3360 +MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint + +SERIAL_DRIVER = usart diff --git a/keyboards/bastardkb/charybdis/4x6/4x6.c b/keyboards/bastardkb/charybdis/4x6/4x6.c new file mode 100644 index 00000000..ff1bbea4 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/4x6.c @@ -0,0 +1,100 @@ +/* + * Copyright 2020 Christopher Courtney (@drashna) + * Copyright 2021 Quentin LEBASTARD + * Copyright 2021 Charly Delay (@0xcharly) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Publicw 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 "charybdis.h" + +// clang-format off +#ifdef RGB_MATRIX_ENABLE +/** + * \brief LEDs index. + * + * ╭────────────────────────╮ ╭────────────────────────╮ + * 0 7 8 15 16 20 49 45 44 37 36 29 + * ├────────────────────────┤ ├────────────────────────┤ + * 1 6 9 14 17 21 50 46 43 38 35 30 + * ├────────────────────────┤ ├────────────────────────┤ + * 2 5 10 13 18 22 51 47 42 39 34 31 + * ├────────────────────────┤ ├────────────────────────┤ + * 3 4 11 12 19 23 52 48 41 40 33 32 + * ╰────────────────────────╯ ╰────────────────────────╯ + * 26 27 28 53 54 XX + * 25 24 55 XX + * ╰────────────╯ ╰────────────╯ + * + * Note: the LED config simulates 58 LEDs instead of the actual 56 to prevent + * confusion when testing LEDs during assembly when handedness is not set + * correctly. Those fake LEDs are bound to the physical bottom-left corner. + */ +led_config_t g_led_config = { { + /* Key Matrix to LED index. */ + // Left split. + { 0, 7, 8, 15, 16, 20 }, // Num row + { 1, 6, 9, 14, 17, 21 }, // Top row + { 2, 5, 10, 13, 18, 22 }, // Middle row + { 3, 4, 11, 12, 19, 23 }, // Bottom row + { NO_LED, 28, 24, 26, 27, 25 }, // Thumb cluster + // Right split. + { 29, 36, 37, 44, 45, 49 }, // Num row + { 30, 35, 38, 43, 46, 50 }, // Top row + { 31, 34, 39, 42, 47, 51 }, // Middle row + { 32, 33, 40, 41, 48, 52 }, // Bottom row + { NO_LED, 53, 55, 54, NO_LED, NO_LED }, // Thumb cluster +}, { + /* LED index to physical position. */ + // Left split. + /* index=0 */ { 0, 0 }, { 0, 12 }, { 0, 24 }, { 0, 36 }, // col 1 (left most) + /* index=4 */ { 16, 36 }, { 16, 24 }, { 16, 12 }, { 16, 0 }, // col 2 + /* index=8 */ { 32, 0 }, { 32, 12 }, { 32, 24 }, { 32, 36 }, + /* index=12 */ { 48, 36 }, { 48, 24 }, { 48, 12 }, { 48, 0 }, + /* index=16 */ { 64, 0 }, { 64, 12 }, { 64, 24 }, { 64, 36 }, + /* index=20 */ { 80, 0 }, { 80, 12 }, { 80, 24 }, { 80, 36 }, + /* index=24 */ { 112, 64 }, { 96, 64 }, { 80, 52 }, + /* index=27 */ { 96, 52 }, { 112, 52 }, + // Right split. + /* index=29 */ { 224, 0 }, { 224, 12 }, { 224, 24 }, { 224, 36 }, // col 12 (right most) + /* index=33 */ { 208, 36 }, { 208, 24 }, { 208, 12 }, { 208, 0 }, // col 11 + /* index=37 */ { 192, 0 }, { 192, 12 }, { 192, 24 }, { 192, 36 }, + /* index=41 */ { 176, 36 }, { 176, 24 }, { 176, 12 }, { 176, 0 }, + /* index=45 */ { 160, 0 }, { 160, 12 }, { 160, 24 }, { 160, 36 }, + /* index=49 */ { 144, 0 }, { 144, 12 }, { 144, 24 }, { 144, 36 }, + /* index=53 */ { 112, 52 }, { 128, 64 }, { 112, 64 }, + /* index=56 */ { 0, 0 }, { 0, 0 }, +}, { + /* LED index to flag. */ + // Left split. + /* index=0 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 1 + /* index=4 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 2 + /* index=8 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=12 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=16 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=20 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=24 */ LED_FLAG_MODIFIER, LED_FLAG_MODIFIER, LED_FLAG_MODIFIER, // Thumb cluster top + /* index=27 */ LED_FLAG_MODIFIER, LED_FLAG_MODIFIER, // Thumb cluster bottom + // Right split. + /* index=29 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 12 + /* index=33 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 11 + /* index=37 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=41 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=45 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=49 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=53 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // Thumb cluster + /* index=55 */ LED_FLAG_MODIFIER, LED_FLAG_MODIFIER, // Thumb cluster fakes +} }; +#endif +// clang-format on diff --git a/keyboards/bastardkb/charybdis/4x6/blackpill/config.h b/keyboards/bastardkb/charybdis/4x6/blackpill/config.h new file mode 100644 index 00000000..bd1e0fe3 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/blackpill/config.h @@ -0,0 +1,54 @@ +/* + * Copyright 2020 Christopher Courtney (@drashna) + * Copyright 2021 Stefan Kerkmann (@KarlK90) + * Copyright 2021 Charly Delay (@0xcharly) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Publicw 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 + +/* Handedness. */ +#define SPLIT_HAND_PIN A3 // High -> left, Low -> right. + +/* RGB settings. */ +#define WS2812_PWM_DRIVER PWMD2 +#define WS2812_PWM_CHANNEL 2 +#define WS2812_PWM_PAL_MODE 1 +#define WS2812_EXTERNAL_PULLUP +#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM1 +#define WS2812_PWM_DMA_CHANNEL 3 + +/* Serial configuration for split keyboard. */ +#define SERIAL_USART_TX_PIN A9 + +/* CRC. */ +#define CRC8_USE_TABLE +#define CRC8_OPTIMIZE_SPEED + +/* SPI config for EEPROM and pmw3360 sensor. */ +#define SPI_DRIVER SPID1 +#define SPI_SCK_PIN A5 +#define SPI_SCK_PAL_MODE 5 +#define SPI_MOSI_PIN A7 +#define SPI_MOSI_PAL_MODE 5 +#define SPI_MISO_PIN A6 +#define SPI_MISO_PAL_MODE 5 + +/* EEPROM config. */ +#define EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN A4 + +/* PMW3360 settings. */ +#define POINTING_DEVICE_CS_PIN B14 +#define PMW33XX_CS_DIVISOR 64 diff --git a/keyboards/bastardkb/charybdis/4x6/blackpill/halconf.h b/keyboards/bastardkb/charybdis/4x6/blackpill/halconf.h new file mode 100644 index 00000000..c43f84e0 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/blackpill/halconf.h @@ -0,0 +1,27 @@ +/** + * Copyright 2020 Nick Brassel (tzarc) + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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 + +#define HAL_USE_PWM TRUE +#define HAL_USE_SERIAL TRUE +#define HAL_USE_SPI TRUE +#define SPI_USE_WAIT TRUE +#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD + +#include_next diff --git a/keyboards/bastardkb/charybdis/4x6/blackpill/keyboard.json b/keyboards/bastardkb/charybdis/4x6/blackpill/keyboard.json new file mode 100644 index 00000000..b55dc294 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/blackpill/keyboard.json @@ -0,0 +1,38 @@ +{ + "keyboard_name": "Charybdis (4x6) Blackpill", + "usb": { + "device_version": "1.0.0", + "shared_endpoint": { + "keyboard": true + } + }, + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "rgb_matrix": true, + "pointing_device": true + }, + "eeprom": { + "driver": "spi" + }, + "split": { + "enabled": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "ws2812": { + "pin": "A1", + "driver": "pwm" + }, + "build": { + "debounce_type": "asym_eager_defer_pk" + }, + "matrix_pins": { + "cols": ["B0", "B1", "B10", "B3", "B4", "B5"], + "rows": ["B15", "A2", "B8", "A8", "B9"] + }, + "diode_direction": "ROW2COL", + "development_board": "blackpill_f411" +} diff --git a/keyboards/bastardkb/charybdis/4x6/blackpill/mcuconf.h b/keyboards/bastardkb/charybdis/4x6/blackpill/mcuconf.h new file mode 100644 index 00000000..46b3b42f --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/blackpill/mcuconf.h @@ -0,0 +1,45 @@ +/* + * Copyright 2020 Nick Brassel (tzarc) + * Copyright 2021 Stefan Kerkmann (@KarlK90) + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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_next + +#undef STM32_PWM_USE_TIM2 +#define STM32_PWM_USE_TIM2 TRUE + +#undef STM32_PWM_USE_TIM3 +#define STM32_PWM_USE_TIM3 TRUE + +#undef STM32_SPI_USE_SPI1 +#define STM32_SPI_USE_SPI1 TRUE + +#undef STM32_SPI_SPI1_RX_DMA_STREAM +#define STM32_SPI_SPI1_RX_DMA_STREAM STM32_DMA_STREAM_ID(2, 0) +#undef STM32_SPI_SPI1_TX_DMA_STREAM +#define STM32_SPI_SPI1_TX_DMA_STREAM STM32_DMA_STREAM_ID(2, 3) + +#undef STM32_SERIAL_USE_USART1 +#define STM32_SERIAL_USE_USART1 TRUE + +#undef STM32_GPT_USE_TIM4 +#define STM32_GPT_USE_TIM4 TRUE + +#undef STM32_ST_USE_TIMER +#define STM32_ST_USE_TIMER 5 diff --git a/keyboards/bastardkb/charybdis/4x6/blackpill/readme.md b/keyboards/bastardkb/charybdis/4x6/blackpill/readme.md new file mode 100644 index 00000000..bbae15bb --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/blackpill/readme.md @@ -0,0 +1,3 @@ +# Charybdis (4x6) BlackPill + +An ergonomic keyboard with integrated trackball, with BlackPill (STM32F411) mod. diff --git a/keyboards/bastardkb/charybdis/4x6/blackpill/rules.mk b/keyboards/bastardkb/charybdis/4x6/blackpill/rules.mk new file mode 100644 index 00000000..3caafdef --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/blackpill/rules.mk @@ -0,0 +1,6 @@ +AUDIO_SUPPORTED = no # Audio is not supported. + +POINTING_DEVICE_DRIVER = pmw3360 +MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint + +SERIAL_DRIVER = usart diff --git a/keyboards/bastardkb/charybdis/4x6/config.h b/keyboards/bastardkb/charybdis/4x6/config.h new file mode 100644 index 00000000..1c952759 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/config.h @@ -0,0 +1,22 @@ +/* + * Copyright 2021 Quentin LEBASTARD + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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 + +/* Trackball angle adjustment. */ +#define ROTATIONAL_TRANSFORM_ANGLE -25 diff --git a/keyboards/bastardkb/charybdis/4x6/info.json b/keyboards/bastardkb/charybdis/4x6/info.json new file mode 100644 index 00000000..54bb5643 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/info.json @@ -0,0 +1,87 @@ +{ + "manufacturer": "Bastard Keyboards", + "url": "https://bastardkb.com/charybdis", + "usb": { + "pid": "0x1833", + "vid": "0xA8F8" + }, + "rgb_matrix": { + "split_count": [29, 29] + }, + "layout_aliases": { + "LAYOUT_charybdis_4x6": "LAYOUT" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 4], "x": 4, "y": 0}, + {"matrix": [0, 5], "x": 5, "y": 0}, + + {"matrix": [5, 5], "x": 11, "y": 0}, + {"matrix": [5, 4], "x": 12, "y": 0}, + {"matrix": [5, 3], "x": 13, "y": 0}, + {"matrix": [5, 2], "x": 14, "y": 0}, + {"matrix": [5, 1], "x": 15, "y": 0}, + {"matrix": [5, 0], "x": 16, "y": 0}, + + {"matrix": [1, 0], "x": 0, "y": 1}, + {"matrix": [1, 1], "x": 1, "y": 1}, + {"matrix": [1, 2], "x": 2, "y": 1}, + {"matrix": [1, 3], "x": 3, "y": 1}, + {"matrix": [1, 4], "x": 4, "y": 1}, + {"matrix": [1, 5], "x": 5, "y": 1}, + + {"matrix": [6, 5], "x": 11, "y": 1}, + {"matrix": [6, 4], "x": 12, "y": 1}, + {"matrix": [6, 3], "x": 13, "y": 1}, + {"matrix": [6, 2], "x": 14, "y": 1}, + {"matrix": [6, 1], "x": 15, "y": 1}, + {"matrix": [6, 0], "x": 16, "y": 1}, + + {"matrix": [2, 0], "x": 0, "y": 2}, + {"matrix": [2, 1], "x": 1, "y": 2}, + {"matrix": [2, 2], "x": 2, "y": 2}, + {"matrix": [2, 3], "x": 3, "y": 2}, + {"matrix": [2, 4], "x": 4, "y": 2}, + {"matrix": [2, 5], "x": 5, "y": 2}, + + {"matrix": [7, 5], "x": 11, "y": 2}, + {"matrix": [7, 4], "x": 12, "y": 2}, + {"matrix": [7, 3], "x": 13, "y": 2}, + {"matrix": [7, 2], "x": 14, "y": 2}, + {"matrix": [7, 1], "x": 15, "y": 2}, + {"matrix": [7, 0], "x": 16, "y": 2}, + + {"matrix": [3, 0], "x": 0, "y": 3}, + {"matrix": [3, 1], "x": 1, "y": 3}, + {"matrix": [3, 2], "x": 2, "y": 3}, + {"matrix": [3, 3], "x": 3, "y": 3}, + {"matrix": [3, 4], "x": 4, "y": 3}, + {"matrix": [3, 5], "x": 5, "y": 3}, + + {"matrix": [8, 5], "x": 11, "y": 3}, + {"matrix": [8, 4], "x": 12, "y": 3}, + {"matrix": [8, 3], "x": 13, "y": 3}, + {"matrix": [8, 2], "x": 14, "y": 3}, + {"matrix": [8, 1], "x": 15, "y": 3}, + {"matrix": [8, 0], "x": 16, "y": 3}, + + {"matrix": [4, 3], "x": 5, "y": 4}, + {"matrix": [4, 4], "x": 6, "y": 4}, + {"matrix": [4, 1], "x": 7, "y": 4}, + + {"matrix": [9, 1], "x": 9, "y": 4}, + {"matrix": [9, 3], "x": 10, "y": 4}, + + {"matrix": [4, 5], "x": 6, "y": 5}, + {"matrix": [4, 2], "x": 7, "y": 5}, + + {"matrix": [9, 5], "x": 9, "y": 5} + ] + } + } +} diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/default/keymap.c b/keyboards/bastardkb/charybdis/4x6/keymaps/default/keymap.c new file mode 100644 index 00000000..f440dac8 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/keymaps/default/keymap.c @@ -0,0 +1,75 @@ +/** + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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 charybdis_keymap_layers { + LAYER_BASE = 0, + LAYER_LOWER, + LAYER_RAISE, +}; + +#define LOWER MO(LAYER_LOWER) +#define RAISE MO(LAYER_RAISE) + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [LAYER_BASE] = LAYOUT( + // ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LALT, + // ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯ + KC_LGUI, KC_SPC, LOWER, RAISE, KC_ENT, + KC_LALT, KC_BSPC, KC_DEL + // ╰───────────────────────────╯ ╰──────────────────╯ + ), + + [LAYER_LOWER] = LAYOUT( + // ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UNDS, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + RM_NEXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LBRC, KC_P7, KC_P8, KC_P9, KC_RBRC, XXXXXXX, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + RM_TOGG, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_PPLS, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PEQL, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + RM_PREV, XXXXXXX, XXXXXXX, XXXXXXX, EE_CLR, QK_BOOT, KC_PAST, KC_P1, KC_P2, KC_P3, KC_PSLS, KC_PDOT, + // ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯ + XXXXXXX, XXXXXXX, _______, XXXXXXX, _______, + XXXXXXX, XXXXXXX, KC_P0 + // ╰───────────────────────────╯ ╰──────────────────╯ + ), + + [LAYER_RAISE] = LAYOUT( + // ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮ + KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + KC_MPLY, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_RSFT, KC_RCTL, KC_RALT, KC_RGUI, KC_MUTE, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + KC_MPRV, KC_HOME, KC_PGUP, KC_PGDN, KC_END, XXXXXXX, QK_BOOT, EE_CLR, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, + // ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯ + _______, _______, XXXXXXX, _______, XXXXXXX, + _______, _______, XXXXXXX + // ╰───────────────────────────╯ ╰──────────────────╯ + ), +}; +// clang-format on diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/default/readme.md b/keyboards/bastardkb/charybdis/4x6/keymaps/default/readme.md new file mode 100644 index 00000000..23a85e54 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/keymaps/default/readme.md @@ -0,0 +1,7 @@ +# Charybdis (4x6) default keymap + +> :bulb: Have a look at the [`via` keymap](../via) for a more feature-rich layout. + +The Charydbis (4x6) default keymap is inspired from the original [Dactyl Manuform](../../../../../handwired/dactyl_manuform) default keymap. + +This layout supports RGB matrix. However, due to space constraints on the MCU, only a limited number of effect can be enabled at once. Look at the `config.h` file and enable your favorite effect. diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/oco9oco/config.h b/keyboards/bastardkb/charybdis/4x6/keymaps/oco9oco/config.h new file mode 100644 index 00000000..0bdb2653 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/keymaps/oco9oco/config.h @@ -0,0 +1,6 @@ +#define CHARYBDIS_CONFIG_SYNC +#define POINTING_DEVICE_AUTO_MOUSE_ENABLE +#define AUTO_MOUSE_DEFAULT_LAYER 10 +#define AUTO_MOUSE_TIME 650 +#define AUTO_MOUSE_DELAY TAPPING_TERM +#define CHARYBDIS_DRAGSCROLL_REVERSE_Y diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/oco9oco/keymap.c b/keyboards/bastardkb/charybdis/4x6/keymaps/oco9oco/keymap.c new file mode 100644 index 00000000..b33e56e3 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/keymaps/oco9oco/keymap.c @@ -0,0 +1,154 @@ +/* +Copyright 2022 oco9oco + +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 "oco9oco.h" //look for users/oco9oco/ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +//clang-format off + +/* + [LAYER_BASE] = LAYOUT( + // ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LALT, + // ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯ + KC_LGUI, KC_SPC, LOWER, RAISE, KC_ENT, + KC_LALT, KC_BSPC, KC_DEL + // ╰───────────────────────────╯ ╰──────────────────╯ +), + */ + +[_BASE] = LAYOUT_charybdis_wrapper( +// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮ + KC_ESC, __________________NUMROW_L_________________, __________________NUMROW_R_________________, KC_MINS, + KC_TAB, __________________QWERTY_L1________________, __________________QWERTY_R1________________, KC_EQL, + SFT_CAPS,__________________QWERTY_SACS_L2___________, __________________QWERTY_R2________________, KC_QUOT, + KC_LGUI, __________________QWERTY_L3________________, __________________QWERTY_HOME_R3___________, KC_BSLS, +// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯ + THUMB_L1,THUMB_L2, KC_LNG1,/* */THUMB_R3,THUMB_R2, + THUMB_L3, KC_LNG2,/* */THUMB_R1 +// ╰───────────────────────────╯ ╰──────────────────╯ +), + +[_IPC] = LAYOUT_charybdis_wrapper( +// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮ + ALT_F4, C(KC_F1),KC_P, KC_X, C(G(KC_C)),TO(_ONEHAND), KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, XXXXXXX, _______, + KC_LNG2, C(G(KC_C)), XXXXXXX, CLASS_E, CLASS_A, HWP_MACRO, KC_GRV, _________NUM_789_________, XXXXXXX, _______, + _______, IPC(A), IPC(S), IPC_MIN, IPC(F), KC_DOT, AT_IPC, _________NUM_456_________, KC_COLN, KC_DQUO, + G(C(KC_SPC)), IPC(Z), HWP_CITE,IPC(C), KC_EQL, KC_BSLS, XXXXXXX, _________NUM_123_________, _______, KC_PIPE, +// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯ + _______, _______, _______,/* */HWP_MACRO, LT(_NAV, KC_0), + QK_BOOT, _______,/* */G(C(KC_SPC)) +// ╰───────────────────────────╯ ╰──────────────────╯ +), +[_NAV] = LAYOUT_charybdis_wrapper( +// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮ + _______, CTRL_F1, KC_F2, KC_F3, ALT_F4, KC_F5, XXXXXXX, A(KC_7), A(KC_5), A(KC_9), A(KC_0), XXXXXXX, + ALT_TAB, NAV_NS,LCA(KC_J),LCA(KC_K),LCA(KC_L), KC_F6, S(A(KC_3)), A(KC_4), A(KC_8), A(KC_6), KC_NO, KC_NO, + KC_LGUI, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_F7, KC_INS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, DPI_MOD, + G(C(KC_D)), NAV(Z), C(KC_X), C(KC_C), C(KC_V), C(KC_B), KC_APP, KC_HOME, KC_PGDN, KC_PGUP, KC_END, DPI_RMOD, +// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯ + _______, KC_BSPC, KC_DEL,/* */_______, _______, + _______, _______,/* */_______ +// ╰───────────────────────────╯ ╰──────────────────╯ +), +[_MOUSE] = LAYOUT_charybdis_wrapper( +// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮ + _______, CTRL_F1, KC_F2, KC_F3, ALT_F4, KC_F5, KC_F8, KC_F7, KC_F8, KC_F9, KC_F10, QK_BOOT, + KC_U, KC_BTN4, KC_WH_D, KC_MS_U, KC_WH_U, KC_F6, KC_F9, KC_WH_L, XXXXXXX, XXXXXXX, XXXXXXX, QK_MAKE, + KC_P, KC_LSFT, KC_MS_L, KC_MS_D, KC_MS_R, KC_F7, KC_F10, KC_ACL0, KC_BTN1, KC_BTN2, KC_BTN3, KC_ENT, + KC_X, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, BOLDFACE, KC_APP, KC_ACL0, KC_BTN1, KC_BTN2, KC_BTN3, XXXXXXX, +// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯ + _______, KC_BSPC, KC_DEL,/* */_______, _______, + _______, _______,/* */QK_BOOT +// ╰───────────────────────────╯ ╰──────────────────╯ +), + +[_FUNC] = LAYOUT_charybdis_wrapper( +// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮ + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F12, KC_F7, KC_F8, KC_F9, XXXXXXX, XXXXXXX, + XXXXXXX, KC_LSFT, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_F11, KC_F4, KC_F5, KC_F6, XXXXXXX, XXXXXXX, + XXXXXXX, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F10, KC_F1, KC_F2, KC_F3, XXXXXXX, XXXXXXX, +// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯ + _______, _______, _______,/* */_______, _______, + _______, _______,/* */_______ +// ╰───────────────────────────╯ ╰──────────────────╯ +), + +[_ONEHAND] = LAYOUT_charybdis_wrapper( +// ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮ + XXXXXXX, CTRL_F1, KC_F2, KC_F3, ALT_F4, KC_F5, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, + XXXXXXX, XXXXXXX, KC_WH_D, XXXXXXX, KC_WH_U, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_MAKE, + S_D_MOD, KC_LCTL, KC_BTN2, KC_LSFT, KC_BTN1, DPI_MOD, C(KC_TAB), KC_BTN1, KC_BTN2, KC_BTN3, XXXXXXX, XXXXXXX, + S_D_RMOD,KC_BTN3, KC_X, KC_C, KC_V, DPI_RMOD, C(KC_W), KC_BTN4, KC_BTN5, DRGSCRL, SNIPING, XXXXXXX, +// ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯ + KC_LCTL, DRGSCRL, SNIPING,/* */THUMB_R3,THUMB_R2, + _______, _______,/* */TO(_BASE) +// ╰───────────────────────────╯ ╰──────────────────╯ +), +}; +// in keymap.c: +void pointing_device_init_user(void) { + set_auto_mouse_layer(_ONEHAND); // only required if AUTO_MOUSE_DEFAULT_LAYER is not set to index of + set_auto_mouse_enable(true); // always required before the auto mouse feature will work +} + +layer_state_t layer_state_set_user(layer_state_t state) { + // checks highest layer other than target layer + switch(get_highest_layer(remove_auto_mouse_layer(state, true))) { + case _MOUSE: + case _NAV: + // remove_auto_mouse_target must be called to adjust state *before* setting enable + state = remove_auto_mouse_layer(state, false); + set_auto_mouse_enable(false); + break; + default: + set_auto_mouse_enable(true); + break; + } + // recommend that any code that makes adjustment based on auto mouse layer state would go here + return state; +} + +bool is_mouse_record_kb(uint16_t keycode, keyrecord_t* record) { + switch(keycode) { + case DRGSCRL: + case SNIPING: + case KC_LCTL: + case KC_LALT: + case KC_LSFT: + return true; + default: + return false; + } + return is_mouse_record_user(keycode, record); +} + +char chordal_hold_handedness(keypos_t key) { + if (key.col == 0 || key.col == MATRIX_COLS - 1) { + return '*'; // Exempt the outer columns. + } + // On split keyboards, typically, the first half of the rows are on the + // left, and the other half are on the right. + return key.row < MATRIX_ROWS / 2 ? 'L' : 'R'; +} diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/oco9oco/readme.md b/keyboards/bastardkb/charybdis/4x6/keymaps/oco9oco/readme.md new file mode 100644 index 00000000..23a85e54 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/keymaps/oco9oco/readme.md @@ -0,0 +1,7 @@ +# Charybdis (4x6) default keymap + +> :bulb: Have a look at the [`via` keymap](../via) for a more feature-rich layout. + +The Charydbis (4x6) default keymap is inspired from the original [Dactyl Manuform](../../../../../handwired/dactyl_manuform) default keymap. + +This layout supports RGB matrix. However, due to space constraints on the MCU, only a limited number of effect can be enabled at once. Look at the `config.h` file and enable your favorite effect. diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/oco9oco/rules.mk b/keyboards/bastardkb/charybdis/4x6/keymaps/oco9oco/rules.mk new file mode 100644 index 00000000..596c1009 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/keymaps/oco9oco/rules.mk @@ -0,0 +1,3 @@ +AUTO_SHIFT_ENABLE= yes +POINTING_DEVICE_ENABLE= yes + diff --git a/keyboards/bastardkb/charybdis/4x6/readme.md b/keyboards/bastardkb/charybdis/4x6/readme.md new file mode 100644 index 00000000..af2396cd --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/readme.md @@ -0,0 +1,15 @@ +# Charybdis (4x6) + +An ergonomic keyboard with integrated trackball. + +The Charybdis is available in 4x6 and 3x5 form factor at [bastardkb.com](https://bastardkb.com). + +## Keymaps + +### [`default`](keymaps/default) + +A simple QWERTY layout with 3 layers. + +### [`via`](keymaps/via) + +Same as the [default](keymaps/default) keymap, but with VIA support. diff --git a/keyboards/bastardkb/charybdis/4x6/v1/elitec/config.h b/keyboards/bastardkb/charybdis/4x6/v1/elitec/config.h new file mode 100644 index 00000000..dc0c6e4e --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v1/elitec/config.h @@ -0,0 +1,25 @@ +/* + * Copyright 2020 Christopher Courtney (@drashna) + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +/* PMW3360 settings. */ +#define POINTING_DEVICE_CS_PIN B0 diff --git a/keyboards/bastardkb/charybdis/4x6/v1/elitec/keyboard.json b/keyboards/bastardkb/charybdis/4x6/v1/elitec/keyboard.json new file mode 100644 index 00000000..b90b144c --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v1/elitec/keyboard.json @@ -0,0 +1,39 @@ +{ + "keyboard_name": "Charybdis (4x6) Elite-C", + "usb": { + "device_version": "1.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": false, + "extrakey": true, + "rgb_matrix": true, + "pointing_device": true + }, + "build": { + "lto": true + }, + "ws2812": { + "pin": "D3" + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["D5", "C7", "F0", "D7", "E6", "B4"], + "rows": ["F1", "B7", "C6", "D4", "B5"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "D2", + "matrix_pins": { + "right": { + "cols": ["F1", "C7", "B7", "D7", "E6", "B4"], + "rows": ["D5", "F0", "C6", "D4", "B5"] + } + } + }, + "processor": "atmega32u4", + "bootloader": "atmel-dfu" +} diff --git a/keyboards/bastardkb/charybdis/4x6/v1/elitec/rules.mk b/keyboards/bastardkb/charybdis/4x6/v1/elitec/rules.mk new file mode 100644 index 00000000..0e4d15d5 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v1/elitec/rules.mk @@ -0,0 +1,4 @@ +AUDIO_SUPPORTED = no # Audio is not supported. + +POINTING_DEVICE_DRIVER = pmw3360 +MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint diff --git a/keyboards/bastardkb/charybdis/4x6/v2/elitec/config.h b/keyboards/bastardkb/charybdis/4x6/v2/elitec/config.h new file mode 100644 index 00000000..3b913222 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v2/elitec/config.h @@ -0,0 +1,24 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +/* PMW3360 settings. */ +#define POINTING_DEVICE_CS_PIN F0 diff --git a/keyboards/bastardkb/charybdis/4x6/v2/elitec/keyboard.json b/keyboards/bastardkb/charybdis/4x6/v2/elitec/keyboard.json new file mode 100644 index 00000000..8ae66d08 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v2/elitec/keyboard.json @@ -0,0 +1,33 @@ +{ + "keyboard_name": "Charybdis (4x6) Elite-C", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": false, + "extrakey": true, + "rgb_matrix": true, + "pointing_device": true + }, + "build": { + "lto": true + }, + "ws2812": { + "pin": "D3" + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["F6", "F5", "B6", "D7", "E6", "B4"], + "rows": ["F4", "F7", "C6", "D4", "B5"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "D2" + }, + "processor": "atmega32u4", + "bootloader": "atmel-dfu" +} diff --git a/keyboards/bastardkb/charybdis/4x6/v2/elitec/rules.mk b/keyboards/bastardkb/charybdis/4x6/v2/elitec/rules.mk new file mode 100644 index 00000000..0e4d15d5 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v2/elitec/rules.mk @@ -0,0 +1,4 @@ +AUDIO_SUPPORTED = no # Audio is not supported. + +POINTING_DEVICE_DRIVER = pmw3360 +MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint diff --git a/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/config.h b/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/config.h new file mode 100644 index 00000000..e6e2a4f2 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/config.h @@ -0,0 +1,38 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +// To use the handedness pin, resistors need to be installed on the adapter PCB. +// If so, uncomment the following code, and undefine MASTER_RIGHT above. +// #define SPLIT_HAND_PIN GP13 +// #define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* SPI & PMW3360 settings. */ +#define SPI_DRIVER SPID0 +#define SPI_SCK_PIN GP18 +#define SPI_MISO_PIN GP20 +#define SPI_MOSI_PIN GP19 +#define POINTING_DEVICE_CS_PIN GP14 + +/* Reset. */ +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17 +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U diff --git a/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/keyboard.json b/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/keyboard.json new file mode 100644 index 00000000..b0c98389 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/keyboard.json @@ -0,0 +1,31 @@ +{ + "keyboard_name": "Charybdis (4x6) Splinky", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": false, + "extrakey": true, + "rgb_matrix": true, + "pointing_device": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["GP27", "GP28", "GP15", "GP6", "GP7", "GP8"], + "rows": ["GP29", "GP26", "GP5", "GP4", "GP9"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "GP1" + }, + "ws2812": { + "pin": "GP0", + "driver": "vendor" + }, + "processor": "RP2040", + "bootloader": "rp2040" +} diff --git a/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/mcuconf.h b/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/mcuconf.h new file mode 100644 index 00000000..6aaf3142 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/mcuconf.h @@ -0,0 +1,23 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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_next + +#undef RP_SPI_USE_SPI0 +#define RP_SPI_USE_SPI0 TRUE diff --git a/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/readme.md b/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/readme.md new file mode 100644 index 00000000..662eb582 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/readme.md @@ -0,0 +1,5 @@ +# Splinky controller + +The splinky is a Pro-Micro/Elite-C replacement with USB-C and RP2040. + +See [plut0nium/0xB2](https://github.com/plut0nium/0xB2/#releases) to figure out the right version for you (v2 or v3). diff --git a/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/rules.mk b/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/rules.mk new file mode 100644 index 00000000..db29cb67 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v2/splinky_2/rules.mk @@ -0,0 +1,5 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +POINTING_DEVICE_DRIVER = pmw3360 + +SERIAL_DRIVER = vendor diff --git a/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/config.h b/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/config.h new file mode 100644 index 00000000..ee7745d4 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/config.h @@ -0,0 +1,38 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +// To use the handedness pin, resistors need to be installed on the adapter PCB. +// If so, uncomment the following code, and undefine MASTER_RIGHT above. +// #define SPLIT_HAND_PIN GP15 +// #define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* SPI & PMW3360 settings. */ +#define SPI_DRIVER SPID0 +#define SPI_SCK_PIN GP22 +#define SPI_MISO_PIN GP20 +#define SPI_MOSI_PIN GP23 +#define POINTING_DEVICE_CS_PIN GP16 + +/* Reset. */ +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17 +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U diff --git a/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/keyboard.json b/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/keyboard.json new file mode 100644 index 00000000..1e072db8 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/keyboard.json @@ -0,0 +1,31 @@ +{ + "keyboard_name": "Charybdis (4x6) Splinky", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": false, + "extrakey": true, + "rgb_matrix": true, + "pointing_device": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["GP27", "GP28", "GP21", "GP6", "GP7", "GP8"], + "rows": ["GP29", "GP26", "GP5", "GP4", "GP9"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "GP1" + }, + "ws2812": { + "pin": "GP0", + "driver": "vendor" + }, + "processor": "RP2040", + "bootloader": "rp2040" +} diff --git a/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/mcuconf.h b/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/mcuconf.h new file mode 100644 index 00000000..6aaf3142 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/mcuconf.h @@ -0,0 +1,23 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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_next + +#undef RP_SPI_USE_SPI0 +#define RP_SPI_USE_SPI0 TRUE diff --git a/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/readme.md b/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/readme.md new file mode 100644 index 00000000..662eb582 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/readme.md @@ -0,0 +1,5 @@ +# Splinky controller + +The splinky is a Pro-Micro/Elite-C replacement with USB-C and RP2040. + +See [plut0nium/0xB2](https://github.com/plut0nium/0xB2/#releases) to figure out the right version for you (v2 or v3). diff --git a/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/rules.mk b/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/rules.mk new file mode 100644 index 00000000..db29cb67 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v2/splinky_3/rules.mk @@ -0,0 +1,5 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +POINTING_DEVICE_DRIVER = pmw3360 + +SERIAL_DRIVER = vendor diff --git a/keyboards/bastardkb/charybdis/4x6/v2/stemcell/config.h b/keyboards/bastardkb/charybdis/4x6/v2/stemcell/config.h new file mode 100644 index 00000000..3efb3233 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v2/stemcell/config.h @@ -0,0 +1,52 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +// To use the handedness pin, resistors need to be installed on the adapter PCB. +// If so, uncomment the following code, and undefine MASTER_RIGHT above. +// #define A0 PAL_LINE(GPIOA, 0) +// #define SPLIT_HAND_PIN A0 +// #define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* RGB settings. */ +#define WS2812_PWM_DRIVER PWMD2 +#define WS2812_PWM_CHANNEL 4 +#define WS2812_PWM_PAL_MODE 1 +#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM7 +#define WS2812_PWM_DMA_CHANNEL 3 + +/* CRC. */ +#define CRC8_USE_TABLE +#define CRC8_OPTIMIZE_SPEED + +/* SPI config for pmw3360 sensor. */ +#define SPI_DRIVER SPID1 +#define SPI_SCK_PIN A5 +#define SPI_SCK_PAL_MODE 5 +#define SPI_MOSI_PIN A7 +#define SPI_MOSI_PAL_MODE 5 +#define SPI_MISO_PIN A6 +#define SPI_MISO_PAL_MODE 5 + +/* PMW3360 settings. */ +#define POINTING_DEVICE_CS_PIN A1 +#define PMW3360_CS_MODE 3 +#define PMW3360_CS_DIVISOR 64 diff --git a/keyboards/bastardkb/charybdis/4x6/v2/stemcell/halconf.h b/keyboards/bastardkb/charybdis/4x6/v2/stemcell/halconf.h new file mode 100644 index 00000000..0397de50 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v2/stemcell/halconf.h @@ -0,0 +1,24 @@ +/* + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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 + +#define HAL_USE_PWM TRUE +#define HAL_USE_SERIAL TRUE +#define HAL_USE_SPI TRUE + +#include_next diff --git a/keyboards/bastardkb/charybdis/4x6/v2/stemcell/keyboard.json b/keyboards/bastardkb/charybdis/4x6/v2/stemcell/keyboard.json new file mode 100644 index 00000000..ab145e0f --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v2/stemcell/keyboard.json @@ -0,0 +1,36 @@ +{ + "keyboard_name": "Charybdis (4x6) STeMCell", + "usb": { + "device_version": "2.0.0", + "shared_endpoint": { + "keyboard": true + } + }, + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "rgb_matrix": true, + "pointing_device": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "ws2812": { + "pin": "A2", + "driver": "pwm" + }, + "build": { + "debounce_type": "asym_eager_defer_pk" + }, + "matrix_pins": { + "cols": ["B1", "B2", "A4", "B4", "B5", "B8"], + "rows": ["B10", "B0", "B3", "A15", "B9"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "A3" + }, + "development_board": "stemcell" +} diff --git a/keyboards/bastardkb/charybdis/4x6/v2/stemcell/mcuconf.h b/keyboards/bastardkb/charybdis/4x6/v2/stemcell/mcuconf.h new file mode 100644 index 00000000..17a46d8f --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v2/stemcell/mcuconf.h @@ -0,0 +1,32 @@ +/* + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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_next + +#undef STM32_SPI_USE_SPI1 +#define STM32_SPI_USE_SPI1 TRUE + +#undef STM32_SERIAL_USE_USART1 +#define STM32_SERIAL_USE_USART1 FALSE + +#undef STM32_PWM_USE_TIM2 +#define STM32_PWM_USE_TIM2 TRUE + +#undef STM32_ST_USE_TIMER +#define STM32_ST_USE_TIMER 5 diff --git a/keyboards/bastardkb/charybdis/4x6/v2/stemcell/rules.mk b/keyboards/bastardkb/charybdis/4x6/v2/stemcell/rules.mk new file mode 100644 index 00000000..4373b9c3 --- /dev/null +++ b/keyboards/bastardkb/charybdis/4x6/v2/stemcell/rules.mk @@ -0,0 +1,6 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +POINTING_DEVICE_DRIVER = pmw3360 +MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint + +SERIAL_DRIVER = usart diff --git a/keyboards/bastardkb/charybdis/charybdis.c b/keyboards/bastardkb/charybdis/charybdis.c new file mode 100644 index 00000000..2251b247 --- /dev/null +++ b/keyboards/bastardkb/charybdis/charybdis.c @@ -0,0 +1,400 @@ +/* + * Copyright 2020 Christopher Courtney (@drashna) + * Copyright 2021 Quentin LEBASTARD + * Copyright 2021 Charly Delay (@0xcharly) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Publicw 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 "charybdis.h" +#include "transactions.h" +#include + +#ifdef CONSOLE_ENABLE +# include "print.h" +#endif // CONSOLE_ENABLE + +#ifdef POINTING_DEVICE_ENABLE +# ifndef CHARYBDIS_MINIMUM_DEFAULT_DPI +# define CHARYBDIS_MINIMUM_DEFAULT_DPI 400 +# endif // CHARYBDIS_MINIMUM_DEFAULT_DPI + +# ifndef CHARYBDIS_DEFAULT_DPI_CONFIG_STEP +# define CHARYBDIS_DEFAULT_DPI_CONFIG_STEP 200 +# endif // CHARYBDIS_DEFAULT_DPI_CONFIG_STEP + +# ifndef CHARYBDIS_MINIMUM_SNIPING_DPI +# define CHARYBDIS_MINIMUM_SNIPING_DPI 200 +# endif // CHARYBDIS_MINIMUM_SNIPER_MODE_DPI + +# ifndef CHARYBDIS_SNIPING_DPI_CONFIG_STEP +# define CHARYBDIS_SNIPING_DPI_CONFIG_STEP 100 +# endif // CHARYBDIS_SNIPING_DPI_CONFIG_STEP + +// Fixed DPI for drag-scroll. +# ifndef CHARYBDIS_DRAGSCROLL_DPI +# define CHARYBDIS_DRAGSCROLL_DPI 100 +# endif // CHARYBDIS_DRAGSCROLL_DPI + +# ifndef CHARYBDIS_DRAGSCROLL_BUFFER_SIZE +# define CHARYBDIS_DRAGSCROLL_BUFFER_SIZE 6 +# endif // !CHARYBDIS_DRAGSCROLL_BUFFER_SIZE + +typedef union { + uint8_t raw; + struct { + uint8_t pointer_default_dpi : 4; // 16 steps available. + uint8_t pointer_sniping_dpi : 2; // 4 steps available. + bool is_dragscroll_enabled : 1; + bool is_sniping_enabled : 1; + } __attribute__((packed)); +} charybdis_config_t; + +static charybdis_config_t g_charybdis_config = {0}; + +/** + * \brief Set the value of `config` from EEPROM. + * + * Note that `is_dragscroll_enabled` and `is_sniping_enabled` are purposefully + * ignored since we do not want to persist this state to memory. In practice, + * this state is always written to maximize write-performances. Therefore, we + * explicitly set them to `false` in this function. + */ +static void read_charybdis_config_from_eeprom(charybdis_config_t* config) { + config->raw = eeconfig_read_kb() & 0xff; + config->is_dragscroll_enabled = false; + config->is_sniping_enabled = false; +} + +/** + * \brief Save the value of `config` to eeprom. + * + * Note that all values are written verbatim, including whether drag-scroll + * and/or sniper mode are enabled. `read_charybdis_config_from_eeprom(…)` + * resets these 2 values to `false` since it does not make sense to persist + * these across reboots of the board. + */ +static void write_charybdis_config_to_eeprom(charybdis_config_t* config) { + eeconfig_update_kb(config->raw); +} + +/** \brief Return the current value of the pointer's default DPI. */ +static uint16_t get_pointer_default_dpi(charybdis_config_t* config) { + return (uint16_t)config->pointer_default_dpi * CHARYBDIS_DEFAULT_DPI_CONFIG_STEP + CHARYBDIS_MINIMUM_DEFAULT_DPI; +} + +/** \brief Return the current value of the pointer's sniper-mode DPI. */ +static uint16_t get_pointer_sniping_dpi(charybdis_config_t* config) { + return (uint16_t)config->pointer_sniping_dpi * CHARYBDIS_SNIPING_DPI_CONFIG_STEP + CHARYBDIS_MINIMUM_SNIPING_DPI; +} + +/** \brief Set the appropriate DPI for the input config. */ +static void maybe_update_pointing_device_cpi(charybdis_config_t* config) { + if (config->is_dragscroll_enabled) { + pointing_device_set_cpi(CHARYBDIS_DRAGSCROLL_DPI); + } else if (config->is_sniping_enabled) { + pointing_device_set_cpi(get_pointer_sniping_dpi(config)); + } else { + pointing_device_set_cpi(get_pointer_default_dpi(config)); + } +} + +/** + * \brief Update the pointer's default DPI to the next or previous step. + * + * Increases the DPI value if `forward` is `true`, decreases it otherwise. + * The increment/decrement steps are equal to CHARYBDIS_DEFAULT_DPI_CONFIG_STEP. + */ +static void step_pointer_default_dpi(charybdis_config_t* config, bool forward) { + config->pointer_default_dpi += forward ? 1 : -1; + maybe_update_pointing_device_cpi(config); +} + +/** + * \brief Update the pointer's sniper-mode DPI to the next or previous step. + * + * Increases the DPI value if `forward` is `true`, decreases it otherwise. + * The increment/decrement steps are equal to CHARYBDIS_SNIPING_DPI_CONFIG_STEP. + */ +static void step_pointer_sniping_dpi(charybdis_config_t* config, bool forward) { + config->pointer_sniping_dpi += forward ? 1 : -1; + maybe_update_pointing_device_cpi(config); +} + +uint16_t charybdis_get_pointer_default_dpi(void) { + return get_pointer_default_dpi(&g_charybdis_config); +} + +uint16_t charybdis_get_pointer_sniping_dpi(void) { + return get_pointer_sniping_dpi(&g_charybdis_config); +} + +void charybdis_cycle_pointer_default_dpi_noeeprom(bool forward) { + step_pointer_default_dpi(&g_charybdis_config, forward); +} + +void charybdis_cycle_pointer_default_dpi(bool forward) { + step_pointer_default_dpi(&g_charybdis_config, forward); + write_charybdis_config_to_eeprom(&g_charybdis_config); +} + +void charybdis_cycle_pointer_sniping_dpi_noeeprom(bool forward) { + step_pointer_sniping_dpi(&g_charybdis_config, forward); +} + +void charybdis_cycle_pointer_sniping_dpi(bool forward) { + step_pointer_sniping_dpi(&g_charybdis_config, forward); + write_charybdis_config_to_eeprom(&g_charybdis_config); +} + +bool charybdis_get_pointer_sniping_enabled(void) { + return g_charybdis_config.is_sniping_enabled; +} + +void charybdis_set_pointer_sniping_enabled(bool enable) { + g_charybdis_config.is_sniping_enabled = enable; + maybe_update_pointing_device_cpi(&g_charybdis_config); +} + +bool charybdis_get_pointer_dragscroll_enabled(void) { + return g_charybdis_config.is_dragscroll_enabled; +} + +void charybdis_set_pointer_dragscroll_enabled(bool enable) { + g_charybdis_config.is_dragscroll_enabled = enable; + maybe_update_pointing_device_cpi(&g_charybdis_config); +} + +/** + * \brief Augment the pointing device behavior. + * + * Implement drag-scroll. + */ +static void pointing_device_task_charybdis(report_mouse_t* mouse_report) { + static int16_t scroll_buffer_x = 0; + static int16_t scroll_buffer_y = 0; + if (g_charybdis_config.is_dragscroll_enabled) { +# ifdef CHARYBDIS_DRAGSCROLL_REVERSE_X + scroll_buffer_x -= mouse_report->x; +# else + scroll_buffer_x += mouse_report->x; +# endif // CHARYBDIS_DRAGSCROLL_REVERSE_X +# ifdef CHARYBDIS_DRAGSCROLL_REVERSE_Y + scroll_buffer_y -= mouse_report->y; +# else + scroll_buffer_y += mouse_report->y; +# endif // CHARYBDIS_DRAGSCROLL_REVERSE_Y + mouse_report->x = 0; + mouse_report->y = 0; + if (abs(scroll_buffer_x) > CHARYBDIS_DRAGSCROLL_BUFFER_SIZE) { + mouse_report->h = scroll_buffer_x > 0 ? 1 : -1; + scroll_buffer_x = 0; + } + if (abs(scroll_buffer_y) > CHARYBDIS_DRAGSCROLL_BUFFER_SIZE) { + mouse_report->v = scroll_buffer_y > 0 ? 1 : -1; + scroll_buffer_y = 0; + } + } +} + +report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) { + if (is_keyboard_master()) { + pointing_device_task_charybdis(&mouse_report); + mouse_report = pointing_device_task_user(mouse_report); + } + return mouse_report; +} + +# if defined(POINTING_DEVICE_ENABLE) && !defined(NO_CHARYBDIS_KEYCODES) +/** \brief Whether SHIFT mod is enabled. */ +static bool has_shift_mod(void) { +# ifdef NO_ACTION_ONESHOT + return mod_config(get_mods()) & MOD_MASK_SHIFT; +# else + return mod_config(get_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT; +# endif // NO_ACTION_ONESHOT +} +# endif // POINTING_DEVICE_ENABLE && !NO_CHARYBDIS_KEYCODES + +/** + * \brief Outputs the Charybdis configuration to console. + * + * Prints the in-memory configuration structure to console, for debugging. + * Includes: + * - raw value + * - drag-scroll: on/off + * - sniping: on/off + * - default DPI: internal table index/actual DPI + * - sniping DPI: internal table index/actual DPI + */ +static void debug_charybdis_config_to_console(charybdis_config_t* config) { +# ifdef CONSOLE_ENABLE + dprintf("(charybdis) process_record_kb: config = {\n" + "\traw = 0x%X,\n" + "\t{\n" + "\t\tis_dragscroll_enabled=%u\n" + "\t\tis_sniping_enabled=%u\n" + "\t\tdefault_dpi=0x%X (%u)\n" + "\t\tsniping_dpi=0x%X (%u)\n" + "\t}\n" + "}\n", + config->raw, config->is_dragscroll_enabled, config->is_sniping_enabled, config->pointer_default_dpi, get_pointer_default_dpi(config), config->pointer_sniping_dpi, get_pointer_sniping_dpi(config)); +# endif // CONSOLE_ENABLE +} + +bool process_record_kb(uint16_t keycode, keyrecord_t* record) { + if (!process_record_user(keycode, record)) { + debug_charybdis_config_to_console(&g_charybdis_config); + return false; + } +# ifdef POINTING_DEVICE_ENABLE +# ifndef NO_CHARYBDIS_KEYCODES + switch (keycode) { + case POINTER_DEFAULT_DPI_FORWARD: + if (record->event.pressed) { + // Step backward if shifted, forward otherwise. + charybdis_cycle_pointer_default_dpi(/* forward= */ !has_shift_mod()); + } + break; + case POINTER_DEFAULT_DPI_REVERSE: + if (record->event.pressed) { + // Step forward if shifted, backward otherwise. + charybdis_cycle_pointer_default_dpi(/* forward= */ has_shift_mod()); + } + break; + case POINTER_SNIPING_DPI_FORWARD: + if (record->event.pressed) { + // Step backward if shifted, forward otherwise. + charybdis_cycle_pointer_sniping_dpi(/* forward= */ !has_shift_mod()); + } + break; + case POINTER_SNIPING_DPI_REVERSE: + if (record->event.pressed) { + // Step forward if shifted, backward otherwise. + charybdis_cycle_pointer_sniping_dpi(/* forward= */ has_shift_mod()); + } + break; + case SNIPING_MODE: + charybdis_set_pointer_sniping_enabled(record->event.pressed); + break; + case SNIPING_MODE_TOGGLE: + if (record->event.pressed) { + charybdis_set_pointer_sniping_enabled(!charybdis_get_pointer_sniping_enabled()); + } + break; + case DRAGSCROLL_MODE: + charybdis_set_pointer_dragscroll_enabled(record->event.pressed); + break; + case DRAGSCROLL_MODE_TOGGLE: + if (record->event.pressed) { + charybdis_set_pointer_dragscroll_enabled(!charybdis_get_pointer_dragscroll_enabled()); + } + break; + } +# endif // !NO_CHARYBDIS_KEYCODES +# endif // POINTING_DEVICE_ENABLE + if (IS_QK_KB(keycode) || IS_MOUSEKEY(keycode)) { + debug_charybdis_config_to_console(&g_charybdis_config); + } + return true; +} + +void eeconfig_init_kb(void) { + g_charybdis_config.raw = 0; + write_charybdis_config_to_eeprom(&g_charybdis_config); + maybe_update_pointing_device_cpi(&g_charybdis_config); + eeconfig_init_user(); +} + +void matrix_init_kb(void) { + read_charybdis_config_from_eeprom(&g_charybdis_config); + matrix_init_user(); +} + +# ifdef CHARYBDIS_CONFIG_SYNC +void charybdis_config_sync_handler(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) { + if (initiator2target_buffer_size == sizeof(g_charybdis_config)) { + memcpy(&g_charybdis_config, initiator2target_buffer, sizeof(g_charybdis_config)); + } +} +# endif + +void keyboard_post_init_kb(void) { + maybe_update_pointing_device_cpi(&g_charybdis_config); +# ifdef CHARYBDIS_CONFIG_SYNC + transaction_register_rpc(RPC_ID_KB_CONFIG_SYNC, charybdis_config_sync_handler); +# endif + keyboard_post_init_user(); +} + +# ifdef CHARYBDIS_CONFIG_SYNC +void housekeeping_task_kb(void) { + if (is_keyboard_master()) { + // Keep track of the last state, so that we can tell if we need to propagate to slave. + static charybdis_config_t last_charybdis_config = {0}; + static uint32_t last_sync = 0; + bool needs_sync = false; + + // Check if the state values are different. + if (memcmp(&g_charybdis_config, &last_charybdis_config, sizeof(g_charybdis_config))) { + needs_sync = true; + memcpy(&last_charybdis_config, &g_charybdis_config, sizeof(g_charybdis_config)); + } + // Send to slave every 500ms regardless of state change. + if (timer_elapsed32(last_sync) > 500) { + needs_sync = true; + } + + // Perform the sync if requested. + if (needs_sync) { + if (transaction_rpc_send(RPC_ID_KB_CONFIG_SYNC, sizeof(g_charybdis_config), &g_charybdis_config)) { + last_sync = timer_read32(); + } + } + } + // No need to invoke the user-specific callback, as it's been called + // already. +} +# endif // CHARYBDIS_CONFIG_SYNC +#endif // POINTING_DEVICE_ENABLE + +#if defined(KEYBOARD_bastardkb_charybdis_3x5_blackpill) || defined(KEYBOARD_bastardkb_charybdis_4x6_blackpill) +void keyboard_pre_init_kb(void) { + gpio_set_pin_input_high(A0); + keyboard_pre_init_user(); +} + +void matrix_scan_kb(void) { + if (!gpio_read_pin(A0)) { + reset_keyboard(); + } + matrix_scan_user(); +} +#endif // KEYBOARD_bastardkb_charybdis_3x5_blackpill || KEYBOARD_bastardkb_charybdis_4x6_blackpill + +bool shutdown_kb(bool jump_to_bootloader) { + if (!shutdown_user(jump_to_bootloader)) { + return false; + } +#ifdef RGBLIGHT_ENABLE + rgblight_enable_noeeprom(); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); + rgblight_setrgb(RGB_RED); +#endif // RGBLIGHT_ENABLE +#ifdef RGB_MATRIX_ENABLE + rgb_matrix_set_color_all(RGB_RED); + rgb_matrix_update_pwm_buffers(); +#endif // RGB_MATRIX_ENABLE + return true; +} diff --git a/keyboards/bastardkb/charybdis/charybdis.h b/keyboards/bastardkb/charybdis/charybdis.h new file mode 100644 index 00000000..a8ee639d --- /dev/null +++ b/keyboards/bastardkb/charybdis/charybdis.h @@ -0,0 +1,111 @@ +/* + * Copyright 2021 Quentin LEBASTARD + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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 POINTING_DEVICE_ENABLE +# ifndef NO_CHARYBDIS_KEYCODES +enum charybdis_keycodes { + POINTER_DEFAULT_DPI_FORWARD = QK_KB_0, + POINTER_DEFAULT_DPI_REVERSE, + POINTER_SNIPING_DPI_FORWARD, + POINTER_SNIPING_DPI_REVERSE, + SNIPING_MODE, + SNIPING_MODE_TOGGLE, + DRAGSCROLL_MODE, + DRAGSCROLL_MODE_TOGGLE, +}; + +# define DPI_MOD POINTER_DEFAULT_DPI_FORWARD +# define DPI_RMOD POINTER_DEFAULT_DPI_REVERSE +# define S_D_MOD POINTER_SNIPING_DPI_FORWARD +# define S_D_RMOD POINTER_SNIPING_DPI_REVERSE +# define SNIPING SNIPING_MODE +# define SNP_TOG SNIPING_MODE_TOGGLE +# define DRGSCRL DRAGSCROLL_MODE +# define DRG_TOG DRAGSCROLL_MODE_TOGGLE +# endif // !NO_CHARYBDIS_KEYCODES + +/** \brief Return the current DPI value for the pointer's default mode. */ +uint16_t charybdis_get_pointer_default_dpi(void); + +/** + * \brief Update the pointer's default DPI to the next or previous step. + * + * Increases the DPI value if `forward` is `true`, decreases it otherwise. + * The increment/decrement steps are equal to CHARYBDIS_DEFAULT_DPI_CONFIG_STEP. + * + * The new value is persisted in EEPROM. + */ +void charybdis_cycle_pointer_default_dpi(bool forward); + +/** + * \brief Same as `charybdis_cycle_pointer_default_dpi`, but do not write to + * EEPROM. + * + * This means that reseting the board will revert the value to the last + * persisted one. + */ +void charybdis_cycle_pointer_default_dpi_noeeprom(bool forward); + +/** \brief Return the current DPI value for the pointer's sniper-mode. */ +uint16_t charybdis_get_pointer_sniping_dpi(void); + +/** + * \brief Update the pointer's sniper-mode DPI to the next or previous step. + * + * Increases the DPI value if `forward` is `true`, decreases it otherwise. + * The increment/decrement steps are equal to CHARYBDIS_SNIPING_DPI_CONFIG_STEP. + * + * The new value is persisted in EEPROM. + */ +void charybdis_cycle_pointer_sniping_dpi(bool forward); + +/** + * \brief Same as `charybdis_cycle_pointer_sniping_dpi`, but do not write to + * EEPROM. + * + * This means that reseting the board will revert the value to the last + * persisted one. + */ +void charybdis_cycle_pointer_sniping_dpi_noeeprom(bool forward); + +/** \brief Whether sniper-mode is enabled. */ +bool charybdis_get_pointer_sniping_enabled(void); + +/** + * \brief Enable/disable sniper mode. + * + * When sniper mode is enabled the dpi is reduced to slow down the pointer for + * more accurate movements. + */ +void charybdis_set_pointer_sniping_enabled(bool enable); + +/** \brief Whether drag-scroll is enabled. */ +bool charybdis_get_pointer_dragscroll_enabled(void); + +/** + * \brief Enable/disable drag-scroll mode. + * + * When drag-scroll mode is enabled, horizontal and vertical pointer movements + * are translated into horizontal and vertical scroll movements. + */ +void charybdis_set_pointer_dragscroll_enabled(bool enable); +#endif // POINTING_DEVICE_ENABLE diff --git a/keyboards/bastardkb/charybdis/config.h b/keyboards/bastardkb/charybdis/config.h new file mode 100644 index 00000000..ebbddecf --- /dev/null +++ b/keyboards/bastardkb/charybdis/config.h @@ -0,0 +1,77 @@ +/* + * Copyright 2021 Quentin LEBASTARD + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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 + +/* Pointing device configuration. */ + +// Enable use of pointing device on slave split. +#define SPLIT_POINTING_ENABLE + +// Pointing device is on the right split. +#define POINTING_DEVICE_RIGHT + +// Limits the frequency that the sensor is polled for motion. +#define POINTING_DEVICE_TASK_THROTTLE_MS 1 + +// Invert X axis on mouse reports. +#define POINTING_DEVICE_INVERT_X + +/* RGB matrix support. */ +#ifdef RGB_MATRIX_ENABLE +# define ENABLE_RGB_MATRIX_ALPHAS_MODS +# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +# define ENABLE_RGB_MATRIX_BREATHING +# define ENABLE_RGB_MATRIX_BAND_SAT +# define ENABLE_RGB_MATRIX_BAND_VAL +# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +# define ENABLE_RGB_MATRIX_CYCLE_ALL +# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN +# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +# define ENABLE_RGB_MATRIX_DUAL_BEACON +# define ENABLE_RGB_MATRIX_RAINBOW_BEACON +# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +# define ENABLE_RGB_MATRIX_RAINDROPS +# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +# define ENABLE_RGB_MATRIX_HUE_BREATHING +# define ENABLE_RGB_MATRIX_HUE_PENDULUM +# define ENABLE_RGB_MATRIX_HUE_WAVE +# define ENABLE_RGB_MATRIX_TYPING_HEATMAP +# define ENABLE_RGB_MATRIX_DIGITAL_RAIN +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +# define ENABLE_RGB_MATRIX_SPLASH +# define ENABLE_RGB_MATRIX_MULTISPLASH +# define ENABLE_RGB_MATRIX_SOLID_SPLASH +# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH +#endif diff --git a/keyboards/bastardkb/charybdis/info.json b/keyboards/bastardkb/charybdis/info.json new file mode 100644 index 00000000..6a4ed7c9 --- /dev/null +++ b/keyboards/bastardkb/charybdis/info.json @@ -0,0 +1,19 @@ +{ + "rgb_matrix": { + "animations": { + "cycle_left_right": true + }, + "default": { + "speed": 32, + "val": 64 + }, + "sleep": true + }, + "split": { + "transport": { + "sync": { + "matrix_state": true + } + } + } +} \ No newline at end of file diff --git a/keyboards/bastardkb/charybdis/post_config.h b/keyboards/bastardkb/charybdis/post_config.h new file mode 100644 index 00000000..4cfd24c4 --- /dev/null +++ b/keyboards/bastardkb/charybdis/post_config.h @@ -0,0 +1,114 @@ +/* + * Copyright 2012 Jun Wako + * Copyright 2015 Jack Humbert + * Copyright 2021 Quentin LEBASTARD + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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 + +// Enable syncing of charybdis config +#ifdef CHARYBDIS_CONFIG_SYNC +# define SPLIT_TRANSACTION_IDS_KB RPC_ID_KB_CONFIG_SYNC +#endif + +/* Mouse config. */ + +#ifndef MOUSEKEY_MOVE_DELTA +# ifndef MK_KINETIC_SPEED +# define MOUSEKEY_MOVE_DELTA 5 +# else // MK_KINETIC_SPEED +# define MOUSEKEY_MOVE_DELTA 25 +# endif // !MK_KINETIC_SPEED +#endif // !MOUSEKEY_MOVE_DELTA + +#ifndef MOUSEKEY_DELAY +# ifndef MK_KINETIC_SPEED +# define MOUSEKEY_DELAY 300 +# else // MK_KINETIC_SPEED +# define MOUSEKEY_DELAY 8 +# endif // !MK_KINETIC_SPEED +#endif // !MOUSEKEY_DELAY + +#ifndef MOUSEKEY_INTERVAL +# ifndef MK_KINETIC_SPEED +# define MOUSEKEY_INTERVAL 50 +# else // MK_KINETIC_SPEED +# define MOUSEKEY_INTERVAL 20 +# endif // !MK_KINETIC_SPEED +#endif // !MOUSEKEY_INTERNAL + +#ifndef MOUSEKEY_MAX_SPEED +# define MOUSEKEY_MAX_SPEED 7 +#endif // !MOUSEKEY_MAX_SPEED + +#ifndef MOUSEKEY_TIME_TO_MAX +# define MOUSEKEY_TIME_TO_MAX 60 +#endif // !MOUSEKEY_TIME_TO_MAX + +#ifndef MOUSEKEY_INITIAL_SPEED +# define MOUSEKEY_INITIAL_SPEED 100 +#endif // !MOUSEKEY_INITIAL_SPEED + +#ifndef MOUSEKEY_BASE_SPEED +# define MOUSEKEY_BASE_SPEED 1000 +#endif // !MOUSEKEY_BASE_SPEED + +#ifndef MOUSEKEY_DECELERATED_SPEED +# define MOUSEKEY_DECELERATED_SPEED 400 +#endif // !MOUSEKEY_DECELERATED_SPEED + +#ifndef MOUSEKEY_ACCELERATED_SPEED +# define MOUSEKEY_ACCELERATED_SPEED 3000 +#endif // !MOUSEKEY_ACCELERATED_SPEED + +/* Mouse scroll config. */ + +#ifndef MOUSEKEY_WHEEL_DELAY +# define MOUSEKEY_WHEEL_DELAY 15 +#endif // !MOUSEKEY_WHEEL_DELAY + +#ifndef MOUSEKEY_WHEEL_DELTA +# define MOUSEKEY_WHEEL_DELTA 1 +#endif // !MOUSEKEY_WHEEL_DELTA + +#ifndef MOUSEKEY_WHEEL_INTERVAL +# define MOUSEKEY_WHEEL_INTERVAL 50 +#endif // !MOUSEKEY_WHEEL_INTERVAL + +#ifndef MOUSEKEY_WHEEL_MAX_SPEED +# define MOUSEKEY_WHEEL_MAX_SPEED 8 +#endif // !MOUSEKEY_WHEEL_MAX_SPEED + +#ifndef MOUSEKEY_WHEEL_TIME_TO_MAX +# define MOUSEKEY_WHEEL_TIME_TO_MAX 80 +#endif // !MOUSEKEY_WHEEL_TIME_TO_MAX + +#ifndef MOUSEKEY_WHEEL_INITIAL_MOVEMENTS +# define MOUSEKEY_WHEEL_INITIAL_MOVEMENTS 8 +#endif // !MOUSEKEY_WHEEL_INITIAL_MOVEMENTS + +#ifndef MOUSEKEY_WHEEL_BASE_MOVEMENTS +# define MOUSEKEY_WHEEL_BASE_MOVEMENTS 48 +#endif // !MOUSEKEY_WHEEL_BASE_MOVEMENTS + +#ifndef MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS +# define MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS 48 +#endif // !MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS + +#ifndef MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS +# define MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS 8 +#endif // !MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS diff --git a/keyboards/bastardkb/charybdis/readme.md b/keyboards/bastardkb/charybdis/readme.md new file mode 100644 index 00000000..01eef250 --- /dev/null +++ b/keyboards/bastardkb/charybdis/readme.md @@ -0,0 +1,169 @@ +# Charybdis (6x4, 5x3 "Nano") + +An ergonomic keyboard with integrated trackball. + +Engineered to be a full mouse replacement solution with high-quality, custom-developed components. + +There are 6x4 and 5x3 "Nano" versions. + +- Keyboard Maintainer: [Bastard Keyboards](https://github.com/Bastardkb) +- Hardware Supported: elite-C V4 +- Hardware Availability: [Bastard Keyboards](https://bastardkb.com) + +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 the [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +Check out the [keyboard build guides](https://docs.bastardkb.com) for the Charybdis and other ergonomic keyboards. + +## Building the firmware + +**You must specify the shield version when compiling/flashing the firmware.** + +The template is: + +```shell +qmk compile -kb bastardkb/charybdis/{LAYOUT}/{VERSION}/elitec -km {KEYMAP} +``` + +See below for populated commands per layout + +The `default` keymap is inspired from the original [Dactyl Manuform](../../handwired/dactyl_manuform) layout. + +Check out the `via` layout if you're looking for VIA support. + +### Charybdis (4x6) + +| Shield Version | default | via | +| -------------- | --------------------------------------------------------------- | ----------------------------------------------------------- | +| v1 | `qmk compile -kb bastardkb/charybdis/4x6/v1/elitec -km default` | `qmk compile -kb bastardkb/charybdis/4x6/v1/elitec -km via` | +| v2 | `qmk compile -kb bastardkb/charybdis/4x6/v2/elitec -km default` | `qmk compile -kb bastardkb/charybdis/4x6/v2/elitec -km via` | + +### Charybdis (3x5) + +| Shield Version | default | via | +| -------------- | --------------------------------------------------------------- | ----------------------------------------------------------- | +| v1 | `qmk compile -kb bastardkb/charybdis/3x5/v1/elitec -km default` | `qmk compile -kb bastardkb/charybdis/3x5/v1/elitec -km via` | +| v2 | `qmk compile -kb bastardkb/charybdis/3x5/v2/elitec -km default` | `qmk compile -kb bastardkb/charybdis/3x5/v2/elitec -km via` | + +## Customizing the firmware + +### Dynamic DPI scaling + +The pointer's DPI can be changed at runtime. + +By default, the DPI is set to `400`. The Charybdis supports up to 16 different DPI values. By default, it cycles between `400` and `3400`, with a step of `200` (_ie._ `400`, `600`, `800`, …, `3400`). + +Calling `charybdis_cycle_pointer_default_dpi(bool forward)` will cycle forward or backward the possible values. + +Use `charybdis_cycle_pointer_default_dpi_noeeprom(bool forward)` to change the DPI value without persisting the change to EEPROM (_ie._ resetting the board will revert to the last saved value). + +`charybdis_get_pointer_default_dpi()` returns the current DPI value. + +This behavior can be further customized with the following defines: + +```c +#define CHARYBDIS_MINIMUM_DEFAULT_DPI 400 +#define CHARYBDIS_DEFAULT_DPI_CONFIG_STEP 200 +``` + +### Drag-scroll + +Drag-scroll enables scrolling with the trackball. When drag-scroll is enabled, the trackball's `x` and `y` movements are converted into `h` (horizontal) and `v` (vertical) movement, effectively sending scroll instructions to the host system. + +Call `charybdis_set_pointer_dragscroll_enabled(bool enable)` to enable/disable drag-scroll. + +`charybdis_get_pointer_dragscroll_enabled()` returns whether drag-scroll mode is currently enabled. + +To invert the horizontal scrolling direction, define `CHARYBDIS_DRAGSCROLL_REVERSE_X`: + +```c +#define CHARYBDIS_DRAGSCROLL_REVERSE_X +``` + +To invert the vertical scrolling direction (_ie._ mimic macOS "natural" scroll direction), define `CHARYBDIS_DRAGSCROLL_REVERSE_Y`: + +```c +#define CHARYBDIS_DRAGSCROLL_REVERSE_Y +``` + +This only affects the vertical scroll direction. + +### Sniping mode + +Sniping mode slows down the pointer for more precise gestures. It is useful when combined with a higher default DPI. + +Call `charybdis_set_pointer_sniping_enabled(bool enable)` to enable/disable sniping mode. + +`charybdis_get_pointer_sniping_enabled()` returns whether sniping mode is currently enabled. + +Like the default pointer's DPI, the sniper mode DPI can be changed at runtime. + +By default, sniping mode lowers the DPI to `200`. This can be changed at runtime: the Charybdis supports up to 4 different DPI values for sniping mode. By default, it cycles between `200`, `300`, `400` and `500`. + +Calling `charybdis_cycle_pointer_sniping_dpi(bool forward)` will cycle forward or backward the possible values. + +Use `charybdis_cycle_pointer_sniping_dpi_noeeprom(bool forward)` to change the sniping mode DPI value without persisting the change to EEPROM (_ie._ resetting the board will revert to the last saved value). + +`charybdis_get_pointer_sniping_dpi()` returns the current sniping mode DPI value. + +This behavior can be further customized with the following defines: + +```c +#define CHARYBDIS_MINIMUM_SNIPING_DPI 200 +#define CHARYBDIS_SNIPING_DPI_CONFIG_STEP 100 +``` + +### Custom keycodes + +The Charybdis firmware defines a number of keycodes to leverage its features, namely: + +``` +#ifndef NO_CHARYBDIS_KEYCODES +enum charybdis_keycodes { + POINTER_DEFAULT_DPI_FORWARD = QK_KB_0, + POINTER_DEFAULT_DPI_REVERSE, + POINTER_SNIPING_DPI_FORWARD, + POINTER_SNIPING_DPI_REVERSE, + SNIPING_MODE, + SNIPING_MODE_TOGGLE, + DRAGSCROLL_MODE, + DRAGSCROLL_MODE_TOGGLE, +}; + +#define DPI_MOD POINTER_DEFAULT_DPI_FORWARD +#define DPI_RMOD POINTER_DEFAULT_DPI_REVERSE +#define S_D_MOD POINTER_SNIPING_DPI_FORWARD +#define S_D_RMOD POINTER_SNIPING_DPI_REVERSE +#define SNIPING SNIPING_MODE +#define SNP_TOG SNIPING_MODE_TOGGLE +#define DRGSCRL DRAGSCROLL_MODE +#define DRG_TOG DRAGSCROLL_MODE_TOGGLE +#endif // !NO_CHARYBDIS_KEYCODES +``` + +To disable the custom keycodes, and reduce binary size, simply add a definition in `config.h`: + +```c +#define NO_CHARYBDIS_KEYCODES +``` + +### Configuration Syncing + +If you want/need to enable syncing of the charybdis config, such as to read the sniping or drag scroll modes on the other half (such as for displaying the status via rgb matrix, or added on screens, or what not), you can enabled this. To do so, add this to your `config.h`: + +```c +#define CHARYBDIS_CONFIG_SYNC +``` + +Note that you will need to reflash both sides when enabling this. + +### Enable Large Mouse Reports + +By default, the X and Y motion for the pointing device/mouse reports is -127 to 127. You can definitely hit the limit for that with the sensors. You can enable support for -32767 to 32767 by adding this to your `config.h`: + +```c +#define MOUSE_EXTENDED_REPORT +``` + +Note that you will need to reflash both sides when enabling this. diff --git a/keyboards/bastardkb/dilemma/3x5_2/assembled/config.h b/keyboards/bastardkb/dilemma/3x5_2/assembled/config.h new file mode 100644 index 00000000..4366a8a3 --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_2/assembled/config.h @@ -0,0 +1,37 @@ +/** + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define SPLIT_HAND_PIN GP29 +#define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* CRC. */ +#define CRC8_USE_TABLE +#define CRC8_OPTIMIZE_SPEED + +/* Cirque trackpad. */ +#define SPI_SCK_PIN GP22 +#define SPI_MOSI_PIN GP23 +#define SPI_MISO_PIN GP20 +#define POINTING_DEVICE_CS_PIN GP21 + +/* Reset. */ +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17 +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U diff --git a/keyboards/bastardkb/dilemma/3x5_2/assembled/halconf.h b/keyboards/bastardkb/dilemma/3x5_2/assembled/halconf.h new file mode 100644 index 00000000..57d15376 --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_2/assembled/halconf.h @@ -0,0 +1,22 @@ +/** + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +#define HAL_USE_SPI TRUE + +#include_next diff --git a/keyboards/bastardkb/dilemma/3x5_2/assembled/keyboard.json b/keyboards/bastardkb/dilemma/3x5_2/assembled/keyboard.json new file mode 100644 index 00000000..ac52a86e --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_2/assembled/keyboard.json @@ -0,0 +1,20 @@ +{ + "keyboard_name": "Dilemma (3x5+2) Assembled", + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "pointing_device": true + }, + "matrix_pins": { + "cols": ["GP8", "GP9", "GP7", "GP6", "GP27"], + "rows": ["GP4", "GP5", "GP28", "GP26"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "GP1" + }, + "processor": "RP2040", + "bootloader": "rp2040" +} diff --git a/keyboards/bastardkb/dilemma/3x5_2/assembled/mcuconf.h b/keyboards/bastardkb/dilemma/3x5_2/assembled/mcuconf.h new file mode 100644 index 00000000..81821c15 --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_2/assembled/mcuconf.h @@ -0,0 +1,23 @@ +/** + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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_next + +#undef RP_SPI_USE_SPI1 +#define RP_SPI_USE_SPI1 TRUE diff --git a/keyboards/bastardkb/dilemma/3x5_2/assembled/rules.mk b/keyboards/bastardkb/dilemma/3x5_2/assembled/rules.mk new file mode 100644 index 00000000..48216ee8 --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_2/assembled/rules.mk @@ -0,0 +1,7 @@ +AUDIO_SUPPORTED = no # Audio is not supported +RGB_MATRIX_SUPPORTED = no # RGB matrix is supported and enabled by default +RGBLIGHT_SUPPORTED = no # RGB underglow is supported, but not enabled by default + +SERIAL_DRIVER = vendor + +POINTING_DEVICE_DRIVER = cirque_pinnacle_spi # Assembled version uses SPI. diff --git a/keyboards/bastardkb/dilemma/3x5_2/info.json b/keyboards/bastardkb/dilemma/3x5_2/info.json new file mode 100644 index 00000000..bfd12e81 --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_2/info.json @@ -0,0 +1,54 @@ +{ + "usb": { + "device_version": "1.0.0", + "pid": "0x1835" + }, + "community_layouts": ["split_3x5_2"], + "layouts": { + "LAYOUT_split_3x5_2": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 4], "x": 4, "y": 0}, + + {"matrix": [4, 4], "x": 11, "y": 0}, + {"matrix": [4, 3], "x": 12, "y": 0}, + {"matrix": [4, 2], "x": 13, "y": 0}, + {"matrix": [4, 1], "x": 14, "y": 0}, + {"matrix": [4, 0], "x": 15, "y": 0}, + + {"matrix": [1, 0], "x": 0, "y": 1}, + {"matrix": [1, 1], "x": 1, "y": 1}, + {"matrix": [1, 2], "x": 2, "y": 1}, + {"matrix": [1, 3], "x": 3, "y": 1}, + {"matrix": [1, 4], "x": 4, "y": 1}, + + {"matrix": [5, 4], "x": 11, "y": 1}, + {"matrix": [5, 3], "x": 12, "y": 1}, + {"matrix": [5, 2], "x": 13, "y": 1}, + {"matrix": [5, 1], "x": 14, "y": 1}, + {"matrix": [5, 0], "x": 15, "y": 1}, + + {"matrix": [2, 0], "x": 0, "y": 2}, + {"matrix": [2, 1], "x": 1, "y": 2}, + {"matrix": [2, 2], "x": 2, "y": 2}, + {"matrix": [2, 3], "x": 3, "y": 2}, + {"matrix": [2, 4], "x": 4, "y": 2}, + + {"matrix": [6, 4], "x": 11, "y": 2}, + {"matrix": [6, 3], "x": 12, "y": 2}, + {"matrix": [6, 2], "x": 13, "y": 2}, + {"matrix": [6, 1], "x": 14, "y": 2}, + {"matrix": [6, 0], "x": 15, "y": 2}, + + {"matrix": [3, 0], "x": 4, "y": 3}, + {"matrix": [3, 2], "x": 5, "y": 3}, + + {"matrix": [7, 2], "x": 10, "y": 3}, + {"matrix": [7, 0], "x": 11, "y": 3} + ] + } + } +} diff --git a/keyboards/bastardkb/dilemma/3x5_2/keymaps/default/keymap.c b/keyboards/bastardkb/dilemma/3x5_2/keymaps/default/keymap.c new file mode 100644 index 00000000..0f9aff0a --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_2/keymaps/default/keymap.c @@ -0,0 +1,84 @@ +/** + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 charybdis_keymap_layers { + LAYER_BASE = 0, + LAYER_NAV, + LAYER_SYM, + LAYER_NUM, +}; + +#define NAV MO(LAYER_NAV) +#define SYM MO(LAYER_SYM) + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [LAYER_BASE] = LAYOUT_split_3x5_2( + // ╭─────────────────────────────────────────────╮ ╭─────────────────────────────────────────────╮ + 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, + // ╰─────────────────────────────────────────────┤ ├─────────────────────────────────────────────╯ + NAV, CW_TOGG, KC_SPC, SYM + // ╰──────────────────╯ ╰──────────────────╯ + ), + + [LAYER_NAV] = LAYOUT_split_3x5_2( + // ╭─────────────────────────────────────────────╮ ╭─────────────────────────────────────────────╮ + KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, XXXXXXX, KC_HOME, KC_UP, KC_END, KC_DEL, + // ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤ + KC_LSFT, KC_LCTL, KC_LALT, KC_RGUI, KC_VOLD, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC, + // ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤ + QK_BOOT, EE_CLR, KC_MPRV, KC_MNXT, KC_MPLY, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, KC_ENT, + // ╰─────────────────────────────────────────────┤ ├─────────────────────────────────────────────╯ + _______, KC_LSFT, KC_SPC, _______ + // ╰──────────────────╯ ╰──────────────────╯ + ), + + [LAYER_SYM] = LAYOUT_split_3x5_2( + // ╭─────────────────────────────────────────────╮ ╭─────────────────────────────────────────────╮ + KC_ESC, KC_LBRC, KC_LCBR, KC_LPRN, KC_TILD, KC_CIRC, KC_RPRN, KC_RCBR, KC_RBRC, KC_GRV, + // ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤ + KC_MINS, KC_ASTR, KC_EQL, KC_UNDS, KC_DLR, KC_HASH, KC_RGUI, KC_RALT, KC_RCTL, KC_RSFT, + // ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤ + KC_PLUS, KC_PIPE, KC_AT, KC_SLSH, KC_PERC, _______, KC_BSLS, KC_AMPR, KC_QUES, KC_EXLM, + // ╰─────────────────────────────────────────────┤ ├─────────────────────────────────────────────╯ + _______, KC_LSFT, KC_SPC, _______ + // ╰──────────────────╯ ╰──────────────────╯ + ), + + [LAYER_NUM] = LAYOUT_split_3x5_2( + // ╭─────────────────────────────────────────────╮ ╭─────────────────────────────────────────────╮ + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, + // ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤ + KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, KC_F11, KC_F12, KC_RGUI, KC_RALT, KC_RCTL, KC_RSFT, + // ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤ + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, + // ╰─────────────────────────────────────────────┤ ├─────────────────────────────────────────────╯ + _______, KC_LSFT, KC_SPC, _______ + // ╰──────────────────╯ ╰──────────────────╯ + ), +}; +// clang-format on + +layer_state_t layer_state_set_user(layer_state_t state) { + return update_tri_layer_state(state, LAYER_NAV, LAYER_SYM, LAYER_NUM); +} diff --git a/keyboards/bastardkb/dilemma/3x5_2/splinky/config.h b/keyboards/bastardkb/dilemma/3x5_2/splinky/config.h new file mode 100644 index 00000000..fd7bb0f1 --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_2/splinky/config.h @@ -0,0 +1,37 @@ +/** + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +// To use the handedness pin, resistors need to be installed on the PCB. +// If so, uncomment the following code, and undefine MASTER_RIGHT above. +//#define SPLIT_HAND_PIN GP29 +// If you've soldered the handedness pull-up on the upper side instead of the +// left one, uncomment the following line. +//#define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* CRC. */ +#define CRC8_USE_TABLE +#define CRC8_OPTIMIZE_SPEED + +/* Reset. */ +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17 +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U diff --git a/keyboards/bastardkb/dilemma/3x5_2/splinky/halconf.h b/keyboards/bastardkb/dilemma/3x5_2/splinky/halconf.h new file mode 100644 index 00000000..2e098f51 --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_2/splinky/halconf.h @@ -0,0 +1,21 @@ +/* Copyright 2022 QMK + * + * 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 + +#define HAL_USE_I2C TRUE + +#include_next diff --git a/keyboards/bastardkb/dilemma/3x5_2/splinky/keyboard.json b/keyboards/bastardkb/dilemma/3x5_2/splinky/keyboard.json new file mode 100644 index 00000000..3c4c559c --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_2/splinky/keyboard.json @@ -0,0 +1,20 @@ +{ + "keyboard_name": "Dilemma (3x5+2) Splinky", + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "pointing_device": true + }, + "matrix_pins": { + "cols": ["GP8", "GP9", "GP7", "GP6", "GP27"], + "rows": ["GP4", "GP5", "GP28", "GP26"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "GP1" + }, + "processor": "RP2040", + "bootloader": "rp2040" +} diff --git a/keyboards/bastardkb/dilemma/3x5_2/splinky/mcuconf.h b/keyboards/bastardkb/dilemma/3x5_2/splinky/mcuconf.h new file mode 100644 index 00000000..c748d941 --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_2/splinky/mcuconf.h @@ -0,0 +1,23 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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_next + +#undef RP_I2C_USE_I2C1 +#define RP_I2C_USE_I2C1 TRUE diff --git a/keyboards/bastardkb/dilemma/3x5_2/splinky/rules.mk b/keyboards/bastardkb/dilemma/3x5_2/splinky/rules.mk new file mode 100644 index 00000000..942028da --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_2/splinky/rules.mk @@ -0,0 +1,7 @@ +AUDIO_SUPPORTED = no # Audio is not supported +RGB_MATRIX_SUPPORTED = no # RGB matrix is supported and enabled by default +RGBLIGHT_SUPPORTED = no # RGB underglow is supported, but not enabled by default + +SERIAL_DRIVER = vendor + +POINTING_DEVICE_DRIVER = cirque_pinnacle_i2c # DIY version uses I2C. diff --git a/keyboards/bastardkb/dilemma/3x5_3/3x5_3.c b/keyboards/bastardkb/dilemma/3x5_3/3x5_3.c new file mode 100644 index 00000000..a1861398 --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_3/3x5_3.c @@ -0,0 +1,93 @@ +/** + * Copyright 2020 Christopher Courtney (@drashna) + * Copyright 2021 Quentin LEBASTARD + * Copyright 2022 Charly Delay (@0xcharly) + * Copyright 2023 casuanoob (@casuanoob) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Publicw 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 "dilemma.h" + +#ifdef ENCODER_ENABLE +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { + return false; + } + switch (index) { + case 0: // Left-half encoder, mouse scroll. + tap_code(clockwise ? KC_MS_WH_UP : KC_MS_WH_DOWN); + break; + case 1: // Right-half encoder, volume control. + tap_code(clockwise ? KC_AUDIO_VOL_UP : KC_AUDIO_VOL_DOWN); + break; + } + return true; +} +#endif // ENCODER_ENABLE + +#ifdef RGB_MATRIX_ENABLE +// Layer state indicator +bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) { + if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) { return false; } + if (host_keyboard_led_state().caps_lock) { + for (int i = led_min; i <= led_max; i++) { + if (HAS_FLAGS(g_led_config.flags[i], LED_FLAG_MODIFIER)) { + rgb_matrix_set_color(i, MIN(rgb_matrix_get_val() + 76, 255), 0x00, 0x00); + } + } + } + + uint8_t layer = get_highest_layer(layer_state); + if (layer > 0) { + hsv_t hsv = rgb_matrix_get_hsv(); + switch (get_highest_layer(layer_state)) { + case 1: + hsv = (hsv_t){HSV_BLUE}; + break; + case 2: + hsv = (hsv_t){HSV_AZURE}; + break; + case 3: + hsv = (hsv_t){HSV_ORANGE}; + break; + case 4: + hsv = (hsv_t){HSV_GREEN}; + break; + case 5: + hsv = (hsv_t){HSV_TEAL}; + break; + case 6: + hsv = (hsv_t){HSV_PURPLE}; + break; + case 7: + default: + hsv = (hsv_t){HSV_RED}; + break; + }; + + if (hsv.v > rgb_matrix_get_val()) { + hsv.v = MIN(rgb_matrix_get_val() + 22, 255); + } + rgb_t rgb = hsv_to_rgb(hsv); + + for (uint8_t i = led_min; i < led_max; i++) { + if (HAS_FLAGS(g_led_config.flags[i], LED_FLAG_UNDERGLOW)) { + rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); + } + } + } + return false; +}; +#endif // RGB_MATRIX_ENABLE diff --git a/keyboards/bastardkb/dilemma/3x5_3/config.h b/keyboards/bastardkb/dilemma/3x5_3/config.h new file mode 100644 index 00000000..7276c618 --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_3/config.h @@ -0,0 +1,44 @@ +/** + * Copyright 2022 Charly Delay (@0xcharly) + * Copyright 2023 casuanoob (@casuanoob) + * + * 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 + +/* Handedness. */ +#define SPLIT_HAND_PIN GP29 +#define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* VBUS detection. */ +#define USB_VBUS_PIN GP19 + +/* CRC. */ +#define CRC8_USE_TABLE +#define CRC8_OPTIMIZE_SPEED + +/* Cirque trackpad over SPI. */ +#define SPI_DRIVER SPID0 +#define SPI_SCK_PIN GP22 +#define SPI_MOSI_PIN GP23 +#define SPI_MISO_PIN GP20 +#define POINTING_DEVICE_CS_PIN GP21 +#undef CIRQUE_PINNACLE_DIAMETER_MM +#define CIRQUE_PINNACLE_DIAMETER_MM 40 + +/* Reset. */ +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17 +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U diff --git a/keyboards/bastardkb/dilemma/3x5_3/halconf.h b/keyboards/bastardkb/dilemma/3x5_3/halconf.h new file mode 100644 index 00000000..57d15376 --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_3/halconf.h @@ -0,0 +1,22 @@ +/** + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +#define HAL_USE_SPI TRUE + +#include_next diff --git a/keyboards/bastardkb/dilemma/3x5_3/keyboard.json b/keyboards/bastardkb/dilemma/3x5_3/keyboard.json new file mode 100644 index 00000000..12e336f0 --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_3/keyboard.json @@ -0,0 +1,245 @@ +{ + "keyboard_name": "Dilemma (3x5+3) Assembled", + "usb": { + "device_version": "2.0.0", + "pid": "0x1836" + }, + "processor": "RP2040", + "bootloader": "rp2040", + "board": "GENERIC_RP_RP2040", + "matrix_pins": { + "cols": ["GP8", "GP9", "GP7", "GP6", "GP28"], + "rows": ["GP4", "GP5", "GP27", "GP26"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "GP1", + "bootmagic": { + "matrix": [4, 0] + }, + "transport":{ + "sync": { + "matrix_state": true + } + } + }, + "encoder": { + "enabled" : true, + "rotary" : [ + {"pin_a": "GP25", "pin_b": "GP24"} + ] + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgb_matrix": true, + "pointing_device": true, + "caps_word": true, + "tri_layer": true + }, + "ws2812": { + "pin": "GP10", + "driver": "vendor" + }, + "rgb_matrix": { + "driver": "ws2812", + "split_count": [36, 36], + "max_brightness": 176, + "animations": { + "alphas_mods": true, + "gradient_up_down": true, + "gradient_left_right": true, + "breathing": true, + "band_sat": true, + "band_val": true, + "band_pinwheel_sat": true, + "band_pinwheel_val": true, + "band_spiral_sat": true, + "band_spiral_val": true, + "cycle_all": true, + "cycle_left_right": true, + "cycle_up_down": true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "rainbow_moving_chevron": true, + "cycle_pinwheel": true, + "cycle_spiral": true, + "dual_beacon": true, + "rainbow_beacon": true, + "rainbow_pinwheels": true, + "raindrops": true, + "jellybean_raindrops": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": true, + "pixel_fractal": true, + "pixel_flow": true, + "pixel_rain": true, + "typing_heatmap": true, + "digital_rain": true, + "solid_reactive_simple": true, + "solid_reactive": true, + "solid_reactive_wide": true, + "solid_reactive_multiwide": true, + "solid_reactive_cross": true, + "solid_reactive_multicross": true, + "solid_reactive_nexus": true, + "solid_reactive_multinexus": true, + "splash": true, + "multisplash": true, + "solid_splash": true, + "solid_multisplash": true + }, + "default": { + "speed": 32, + "val": 128 + }, + "layout": [ + {"x": 82, "y": 0, "flags": 2}, + {"x": 60, "y": 0, "flags": 2}, + {"x": 22, "y": 0, "flags": 2}, + {"x": 15, "y": 0, "flags": 2}, + + {"x": 0, "y": 25, "flags": 2}, + {"x": 0, "y": 40, "flags": 2}, + {"x": 0, "y": 55, "flags": 2}, + + {"x": 15, "y": 45, "flags": 2}, + {"x": 30, "y": 45, "flags": 2}, + {"x": 35, "y": 60, "flags": 2}, + {"x": 55, "y": 62, "flags": 2}, + + {"x": 72, "y": 64, "flags": 2}, + {"x": 90, "y": 64, "flags": 2}, + {"x": 98, "y": 47, "flags": 2}, + {"x": 107, "y": 40, "flags": 2}, + + {"x": 110, "y": 33, "flags": 2}, + {"x": 110, "y": 19, "flags": 2}, + {"x": 110, "y": 5, "flags": 2}, + + {"matrix": [0, 4], "x": 73, "y": 11, "flags": 4}, + {"matrix": [0, 3], "x": 56, "y": 9, "flags": 4}, + {"matrix": [0, 2], "x": 39, "y": 5, "flags": 4}, + {"matrix": [0, 1], "x": 22, "y": 10, "flags": 4}, + {"matrix": [0, 0], "x": 5, "y": 15, "flags": 1}, + + {"matrix": [1, 0], "x": 5, "y": 30, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 25, "flags": 4}, + {"matrix": [1, 2], "x": 39, "y": 20, "flags": 4}, + {"matrix": [1, 3], "x": 56, "y": 24, "flags": 4}, + {"matrix": [1, 4], "x": 73, "y": 26, "flags": 4}, + + {"matrix": [2, 4], "x": 73, "y": 41, "flags": 4}, + {"matrix": [2, 3], "x": 56, "y": 39, "flags": 4}, + {"matrix": [2, 2], "x": 39, "y": 35, "flags": 4}, + {"matrix": [2, 1], "x": 22, "y": 40, "flags": 4}, + {"matrix": [2, 0], "x": 5, "y": 45, "flags": 1}, + + {"matrix": [3, 2], "x": 45, "y": 51, "flags": 4}, + {"matrix": [3, 0], "x": 64, "y": 53, "flags": 4}, + {"matrix": [3, 1], "x": 81, "y": 60, "flags": 4}, + + {"x": 142, "y": 0, "flags": 2}, + {"x": 164, "y": 0, "flags": 2}, + {"x": 202, "y": 0, "flags": 2}, + {"x": 209, "y": 0, "flags": 2}, + + {"x": 224, "y": 25, "flags": 2}, + {"x": 224, "y": 40, "flags": 2}, + {"x": 224, "y": 55, "flags": 2}, + + {"x": 209, "y": 45, "flags": 2}, + {"x": 194, "y": 45, "flags": 2}, + {"x": 189, "y": 60, "flags": 2}, + {"x": 169, "y": 62, "flags": 2}, + + {"x": 152, "y": 64, "flags": 2}, + {"x": 134, "y": 64, "flags": 2}, + {"x": 126, "y": 47, "flags": 2}, + {"x": 117, "y": 40, "flags": 2}, + + {"x": 114, "y": 33, "flags": 2}, + {"x": 114, "y": 19, "flags": 2}, + {"x": 114, "y": 5, "flags": 2}, + + {"matrix": [4, 4], "x": 151, "y": 11, "flags": 4}, + {"matrix": [4, 3], "x": 168, "y": 9, "flags": 4}, + {"matrix": [4, 2], "x": 185, "y": 5, "flags": 4}, + {"matrix": [4, 1], "x": 202, "y": 10, "flags": 4}, + {"matrix": [4, 0], "x": 219, "y": 15, "flags": 1}, + + {"matrix": [5, 0], "x": 219, "y": 30, "flags": 1}, + {"matrix": [5, 1], "x": 202, "y": 25, "flags": 4}, + {"matrix": [5, 2], "x": 185, "y": 20, "flags": 4}, + {"matrix": [5, 3], "x": 168, "y": 24, "flags": 4}, + {"matrix": [5, 4], "x": 151, "y": 26, "flags": 4}, + + {"matrix": [6, 4], "x": 151, "y": 41, "flags": 4}, + {"matrix": [6, 3], "x": 168, "y": 39, "flags": 4}, + {"matrix": [6, 2], "x": 185, "y": 35, "flags": 4}, + {"matrix": [6, 1], "x": 202, "y": 40, "flags": 4}, + {"matrix": [6, 0], "x": 219, "y": 45, "flags": 1}, + + {"matrix": [7, 2], "x": 179, "y": 51, "flags": 4}, + {"matrix": [7, 0], "x": 160, "y": 53, "flags": 4}, + {"matrix": [7, 1], "x": 143, "y": 60, "flags": 4} + ], + "sleep": true + }, + "community_layouts": ["split_3x5_3"], + "layouts": { + "LAYOUT_split_3x5_3": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 4], "x": 4, "y": 0}, + + {"matrix": [4, 4], "x": 11, "y": 0}, + {"matrix": [4, 3], "x": 12, "y": 0}, + {"matrix": [4, 2], "x": 13, "y": 0}, + {"matrix": [4, 1], "x": 14, "y": 0}, + {"matrix": [4, 0], "x": 15, "y": 0}, + + {"matrix": [1, 0], "x": 0, "y": 1}, + {"matrix": [1, 1], "x": 1, "y": 1}, + {"matrix": [1, 2], "x": 2, "y": 1}, + {"matrix": [1, 3], "x": 3, "y": 1}, + {"matrix": [1, 4], "x": 4, "y": 1}, + + {"matrix": [5, 4], "x": 11, "y": 1}, + {"matrix": [5, 3], "x": 12, "y": 1}, + {"matrix": [5, 2], "x": 13, "y": 1}, + {"matrix": [5, 1], "x": 14, "y": 1}, + {"matrix": [5, 0], "x": 15, "y": 1}, + + {"matrix": [2, 0], "x": 0, "y": 2}, + {"matrix": [2, 1], "x": 1, "y": 2}, + {"matrix": [2, 2], "x": 2, "y": 2}, + {"matrix": [2, 3], "x": 3, "y": 2}, + {"matrix": [2, 4], "x": 4, "y": 2}, + + {"matrix": [6, 4], "x": 11, "y": 2}, + {"matrix": [6, 3], "x": 12, "y": 2}, + {"matrix": [6, 2], "x": 13, "y": 2}, + {"matrix": [6, 1], "x": 14, "y": 2}, + {"matrix": [6, 0], "x": 15, "y": 2}, + + {"matrix": [3, 2], "x": 4, "y": 3}, + {"matrix": [3, 0], "x": 5, "y": 3}, + {"matrix": [3, 1], "x": 6, "y": 3}, + + {"matrix": [7, 1], "x": 11, "y": 3}, + {"matrix": [7, 0], "x": 10, "y": 3}, + {"matrix": [7, 2], "x": 9, "y": 3} + ] + } + } +} diff --git a/keyboards/bastardkb/dilemma/3x5_3/keymaps/default/keymap.c b/keyboards/bastardkb/dilemma/3x5_3/keymaps/default/keymap.c new file mode 100644 index 00000000..a86d0bb7 --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_3/keymaps/default/keymap.c @@ -0,0 +1,80 @@ +/** + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 dilemma_keymap_layers { + LAYER_BASE = 0, + LAYER_NAV, + LAYER_SYM, + LAYER_NUM, +}; + +#define NAV QK_TRI_LAYER_LOWER +#define SYM QK_TRI_LAYER_UPPER + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [LAYER_BASE] = LAYOUT_split_3x5_3( + // ╭─────────────────────────────────────────────╮ ╭─────────────────────────────────────────────╮ + 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_QUOT, + // ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤ + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, + // ╰─────────────────────────────────────────────┤ ├─────────────────────────────────────────────╯ + KC_LCTL, NAV, KC_LGUI, KC_SPC, SYM, KC_A + // ╰───────────────────────────╯ ╰──────────────────────────╯ + ), + + [LAYER_NAV] = LAYOUT_split_3x5_3( + // ╭─────────────────────────────────────────────╮ ╭─────────────────────────────────────────────╮ + KC_TAB, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, XXXXXXX, KC_HOME, KC_UP, KC_END, KC_DEL, + // ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤ + KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, KC_VOLD, XXXXXXX, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC, + // ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤ + QK_BOOT, EE_CLR, KC_MPRV, KC_MNXT, KC_MPLY, XXXXXXX, KC_PGDN, KC_PGUP, XXXXXXX, KC_ENT, + // ╰─────────────────────────────────────────────┤ ├─────────────────────────────────────────────╯ + XXXXXXX, _______, KC_LSFT, KC_SPC, _______, KC_ESC + // ╰───────────────────────────╯ ╰──────────────────────────╯ + ), + + [LAYER_SYM] = LAYOUT_split_3x5_3( + // ╭─────────────────────────────────────────────╮ ╭─────────────────────────────────────────────╮ + KC_ESC, KC_LBRC, KC_LCBR, KC_LPRN, KC_TILD, KC_CIRC, KC_RPRN, KC_RCBR, KC_RBRC, KC_GRV, + // ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤ + KC_MINS, KC_ASTR, KC_EQL, KC_UNDS, KC_DLR, KC_HASH, KC_RGUI, KC_RALT, KC_RCTL, KC_RSFT, + // ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤ + KC_PLUS, KC_PIPE, KC_AT, KC_SLSH, KC_PERC, KC_SCLN, KC_BSLS, KC_AMPR, KC_QUES, KC_EXLM, + // ╰─────────────────────────────────────────────┤ ├─────────────────────────────────────────────╯ + KC_ESC, _______, KC_LSFT, KC_SPC, _______, XXXXXXX + // ╰───────────────────────────╯ ╰──────────────────────────╯ + ), + + [LAYER_NUM] = LAYOUT_split_3x5_3( + // ╭─────────────────────────────────────────────╮ ╭─────────────────────────────────────────────╮ + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, + // ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤ + KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, KC_F11, KC_F12, KC_RGUI, KC_RALT, KC_RCTL, KC_RSFT, + // ├─────────────────────────────────────────────┤ ├─────────────────────────────────────────────┤ + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, + // ╰─────────────────────────────────────────────┤ ├─────────────────────────────────────────────╯ + XXXXXXX, _______, KC_LSFT, KC_SPC, _______, XXXXXXX + // ╰───────────────────────────╯ ╰──────────────────────────╯ + ), +}; +// clang-format on diff --git a/keyboards/bastardkb/dilemma/3x5_3/mcuconf.h b/keyboards/bastardkb/dilemma/3x5_3/mcuconf.h new file mode 100644 index 00000000..52b726a5 --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_3/mcuconf.h @@ -0,0 +1,23 @@ +/** + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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_next + +#undef RP_SPI_USE_SPI0 +#define RP_SPI_USE_SPI0 TRUE diff --git a/keyboards/bastardkb/dilemma/3x5_3/readme.md b/keyboards/bastardkb/dilemma/3x5_3/readme.md new file mode 100644 index 00000000..b57df909 --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_3/readme.md @@ -0,0 +1,5 @@ +# Dilemma v2 (3x5+3 assembled) + +This keyboard is an updated version of the [3x5+2 Dilemma](../3x5_2/). + +The Dilemma v2 is available at [bastardkb.com](https://bastardkb.com). diff --git a/keyboards/bastardkb/dilemma/3x5_3/rules.mk b/keyboards/bastardkb/dilemma/3x5_3/rules.mk new file mode 100644 index 00000000..60776009 --- /dev/null +++ b/keyboards/bastardkb/dilemma/3x5_3/rules.mk @@ -0,0 +1,3 @@ +SERIAL_DRIVER = vendor + +POINTING_DEVICE_DRIVER = cirque_pinnacle_spi diff --git a/keyboards/bastardkb/dilemma/4x6_4/4x6_4.c b/keyboards/bastardkb/dilemma/4x6_4/4x6_4.c new file mode 100644 index 00000000..49b24fbd --- /dev/null +++ b/keyboards/bastardkb/dilemma/4x6_4/4x6_4.c @@ -0,0 +1,59 @@ +/** + * Copyright 2020 Christopher Courtney (@drashna) + * Copyright 2021 Quentin LEBASTARD + * Copyright 2022 Charly Delay (@0xcharly) + * Copyright 2023 casuanoob (@casuanoob) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Publicw 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 "dilemma.h" + +#ifdef SWAP_HANDS_ENABLE +const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + /* Left hand, matrix positions */ + {{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}}, + {{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}}, + {{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}}, + {{0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 8}, {5, 8}}, + {{0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 9}, {5, 9}}, + /* Right hand, matrix positions */ + {{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}}, + {{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}}, + {{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}}, + {{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}}, + {{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}} +}; + +# ifdef ENCODER_MAP_ENABLE +const uint8_t PROGMEM encoder_hand_swap_config[NUM_ENCODERS] = {1, 0}; +# endif +#endif + +#ifdef ENCODER_ENABLE +bool encoder_update_kb(uint8_t index, bool clockwise) { + if (!encoder_update_user(index, clockwise)) { + return false; + } + switch (index) { + case 0: // Left-half encoder, mouse scroll. + tap_code(clockwise ? KC_MS_WH_DOWN : KC_MS_WH_UP); + break; + case 1: // Right-half encoder, volume control. + tap_code(clockwise ? KC_AUDIO_VOL_UP : KC_AUDIO_VOL_DOWN); + break; + } + return true; +} +#endif // ENCODER_ENABLE diff --git a/keyboards/bastardkb/dilemma/4x6_4/config.h b/keyboards/bastardkb/dilemma/4x6_4/config.h new file mode 100644 index 00000000..7276c618 --- /dev/null +++ b/keyboards/bastardkb/dilemma/4x6_4/config.h @@ -0,0 +1,44 @@ +/** + * Copyright 2022 Charly Delay (@0xcharly) + * Copyright 2023 casuanoob (@casuanoob) + * + * 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 + +/* Handedness. */ +#define SPLIT_HAND_PIN GP29 +#define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* VBUS detection. */ +#define USB_VBUS_PIN GP19 + +/* CRC. */ +#define CRC8_USE_TABLE +#define CRC8_OPTIMIZE_SPEED + +/* Cirque trackpad over SPI. */ +#define SPI_DRIVER SPID0 +#define SPI_SCK_PIN GP22 +#define SPI_MOSI_PIN GP23 +#define SPI_MISO_PIN GP20 +#define POINTING_DEVICE_CS_PIN GP21 +#undef CIRQUE_PINNACLE_DIAMETER_MM +#define CIRQUE_PINNACLE_DIAMETER_MM 40 + +/* Reset. */ +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17 +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U diff --git a/keyboards/bastardkb/dilemma/4x6_4/halconf.h b/keyboards/bastardkb/dilemma/4x6_4/halconf.h new file mode 100644 index 00000000..57d15376 --- /dev/null +++ b/keyboards/bastardkb/dilemma/4x6_4/halconf.h @@ -0,0 +1,22 @@ +/** + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +#define HAL_USE_SPI TRUE + +#include_next diff --git a/keyboards/bastardkb/dilemma/4x6_4/keyboard.json b/keyboards/bastardkb/dilemma/4x6_4/keyboard.json new file mode 100644 index 00000000..7e40208a --- /dev/null +++ b/keyboards/bastardkb/dilemma/4x6_4/keyboard.json @@ -0,0 +1,276 @@ +{ + "keyboard_name": "Dilemma Max", + "usb": { + "device_version": "1.0.0", + "pid": "0x1837" + }, + "processor": "RP2040", + "bootloader": "rp2040", + "board": "GENERIC_RP_RP2040", + "matrix_pins": { + "cols": ["GP14", "GP8", "GP9", "GP7", "GP6", "GP28"], + "rows": ["GP15", "GP4", "GP5", "GP27", "GP26"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "GP1", + "bootmagic": { + "matrix": [5, 0] + }, + "transport":{ + "sync": { + "matrix_state": true + } + } + }, + "encoder": { + "enabled" : true, + "rotary" : [ + {"pin_a": "GP25", "pin_b": "GP24"} + ] + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "rgb_matrix": true, + "pointing_device": true, + "caps_word": true, + "tri_layer": true + }, + "ws2812": { + "pin": "GP10", + "driver": "vendor" + }, + "rgb_matrix": { + "driver": "ws2812", + "split_count": [52, 52], + "max_brightness": 176, + "center_point": [112, 28], + "animations": { + "alphas_mods": true, + "gradient_up_down": true, + "gradient_left_right": true, + "breathing": true, + "band_sat": true, + "band_val": true, + "band_pinwheel_sat": true, + "band_pinwheel_val": true, + "band_spiral_sat": true, + "band_spiral_val": true, + "cycle_all": true, + "cycle_left_right": true, + "cycle_up_down": true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "rainbow_moving_chevron": true, + "cycle_pinwheel": true, + "cycle_spiral": true, + "dual_beacon": true, + "rainbow_beacon": true, + "rainbow_pinwheels": true, + "raindrops": true, + "jellybean_raindrops": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": true, + "pixel_fractal": true, + "pixel_flow": true, + "pixel_rain": true, + "typing_heatmap": true, + "digital_rain": true, + "solid_reactive_simple": true, + "solid_reactive": true, + "solid_reactive_wide": true, + "solid_reactive_multiwide": true, + "solid_reactive_cross": true, + "solid_reactive_multicross": true, + "solid_reactive_nexus": true, + "solid_reactive_multinexus": true, + "splash": true, + "multisplash": true, + "solid_splash": true, + "solid_multisplash": true + }, + "default": { + "speed": 32, + "val": 128 + }, + "layout": [ + {"x": 81, "y": 4, "flags": 2}, + {"x": 65, "y": 2, "flags": 2}, + {"x": 40, "y": 0, "flags": 2}, + {"x": 29, "y": 9, "flags": 2}, + {"x": 16, "y": 9, "flags": 2}, + {"x": 0, "y": 16, "flags": 2}, + {"x": 0, "y": 29, "flags": 2}, + {"x": 0, "y": 40, "flags": 2}, + {"x": 5, "y": 50, "flags": 2}, + {"x": 17, "y": 49, "flags": 2}, + {"x": 28, "y": 44, "flags": 2}, + {"x": 40, "y": 43, "flags": 2}, + {"x": 49, "y": 51, "flags": 2}, + {"x": 62, "y": 53, "flags": 2}, + {"x": 73, "y": 56, "flags": 2}, + {"x": 85, "y": 59, "flags": 2}, + {"x": 100, "y": 64, "flags": 2}, + {"x": 106, "y": 55, "flags": 2}, + {"x": 107, "y": 45, "flags": 2}, + {"x": 91, "y": 51, "flags": 2}, + {"x": 94, "y": 40, "flags": 2}, + {"x": 108, "y": 33, "flags": 2}, + {"x": 106, "y": 25, "flags": 2}, + {"x": 108, "y": 16, "flags": 2}, + + {"matrix": [0, 5], "x": 75, "y": 10, "flags": 4}, + {"matrix": [0, 4], "x": 62, "y": 9, "flags": 4}, + {"matrix": [0, 3], "x": 49, "y": 6, "flags": 4}, + {"matrix": [0, 2], "x": 35, "y": 10, "flags": 4}, + {"matrix": [0, 1], "x": 22, "y": 16, "flags": 4}, + {"matrix": [0, 0], "x": 9, "y": 16, "flags": 1}, + {"matrix": [1, 0], "x": 9, "y": 27, "flags": 1}, + {"matrix": [1, 1], "x": 22, "y": 27, "flags": 4}, + {"matrix": [1, 2], "x": 35, "y": 20, "flags": 4}, + {"matrix": [1, 3], "x": 49, "y": 17, "flags": 4}, + {"matrix": [1, 4], "x": 62, "y": 19, "flags": 4}, + {"matrix": [1, 5], "x": 75, "y": 21, "flags": 4}, + {"matrix": [2, 5], "x": 75, "y": 31, "flags": 4}, + {"matrix": [2, 4], "x": 62, "y": 30, "flags": 4}, + {"matrix": [2, 3], "x": 49, "y": 27, "flags": 4}, + {"matrix": [2, 2], "x": 35, "y": 31, "flags": 4}, + {"matrix": [2, 1], "x": 22, "y": 37, "flags": 4}, + {"matrix": [2, 0], "x": 9, "y": 37, "flags": 1}, + {"matrix": [3, 0], "x": 9, "y": 48, "flags": 1}, + {"matrix": [3, 1], "x": 22, "y": 48, "flags": 4}, + {"matrix": [3, 2], "x": 35, "y": 41, "flags": 4}, + {"matrix": [3, 3], "x": 49, "y": 38, "flags": 4}, + {"matrix": [3, 4], "x": 62, "y": 40, "flags": 4}, + {"matrix": [3, 5], "x": 75, "y": 42, "flags": 4}, + {"matrix": [4, 3], "x": 54, "y": 51, "flags": 4}, + {"matrix": [4, 1], "x": 68, "y": 53, "flags": 4}, + {"matrix": [4, 2], "x": 81, "y": 57, "flags": 4}, + {"matrix": [4, 4], "x": 92, "y": 64, "flags": 4}, + + {"x": 143, "y": 4, "flags": 2}, + {"x": 159, "y": 2, "flags": 2}, + {"x": 184, "y": 0, "flags": 2}, + {"x": 195, "y": 9, "flags": 2}, + {"x": 208, "y": 9, "flags": 2}, + {"x": 224, "y": 16, "flags": 2}, + {"x": 224, "y": 29, "flags": 2}, + {"x": 224, "y": 40, "flags": 2}, + {"x": 219, "y": 50, "flags": 2}, + {"x": 207, "y": 49, "flags": 2}, + {"x": 196, "y": 44, "flags": 2}, + {"x": 184, "y": 43, "flags": 2}, + {"x": 176, "y": 51, "flags": 2}, + {"x": 162, "y": 53, "flags": 2}, + {"x": 151, "y": 56, "flags": 2}, + {"x": 139, "y": 59, "flags": 2}, + {"x": 124, "y": 64, "flags": 2}, + {"x": 118, "y": 55, "flags": 2}, + {"x": 117, "y": 45, "flags": 2}, + {"x": 133, "y": 51, "flags": 2}, + {"x": 130, "y": 40, "flags": 2}, + {"x": 116, "y": 33, "flags": 2}, + {"x": 118, "y": 25, "flags": 2}, + {"x": 116, "y": 16, "flags": 2}, + + {"matrix": [5, 5], "x": 149, "y": 10, "flags": 4}, + {"matrix": [5, 4], "x": 162, "y": 9, "flags": 4}, + {"matrix": [5, 3], "x": 175, "y": 6, "flags": 4}, + {"matrix": [5, 2], "x": 189, "y": 10, "flags": 4}, + {"matrix": [5, 1], "x": 202, "y": 16, "flags": 4}, + {"matrix": [5, 0], "x": 215, "y": 16, "flags": 1}, + {"matrix": [6, 0], "x": 215, "y": 27, "flags": 1}, + {"matrix": [6, 1], "x": 202, "y": 27, "flags": 4}, + {"matrix": [6, 2], "x": 189, "y": 20, "flags": 4}, + {"matrix": [6, 3], "x": 175, "y": 17, "flags": 4}, + {"matrix": [6, 4], "x": 162, "y": 19, "flags": 4}, + {"matrix": [6, 5], "x": 149, "y": 21, "flags": 4}, + {"matrix": [7, 5], "x": 149, "y": 31, "flags": 4}, + {"matrix": [7, 4], "x": 162, "y": 30, "flags": 4}, + {"matrix": [7, 3], "x": 175, "y": 27, "flags": 4}, + {"matrix": [7, 2], "x": 189, "y": 31, "flags": 4}, + {"matrix": [7, 1], "x": 202, "y": 37, "flags": 4}, + {"matrix": [7, 0], "x": 215, "y": 37, "flags": 1}, + {"matrix": [8, 0], "x": 215, "y": 48, "flags": 1}, + {"matrix": [8, 1], "x": 202, "y": 48, "flags": 4}, + {"matrix": [8, 2], "x": 189, "y": 41, "flags": 4}, + {"matrix": [8, 3], "x": 175, "y": 38, "flags": 4}, + {"matrix": [8, 4], "x": 162, "y": 40, "flags": 4}, + {"matrix": [8, 5], "x": 149, "y": 42, "flags": 4}, + {"matrix": [9, 4], "x": 170, "y": 51, "flags": 4}, + {"matrix": [9, 2], "x": 156, "y": 53, "flags": 4}, + {"matrix": [9, 1], "x": 143, "y": 57, "flags": 4}, + {"matrix": [9, 3], "x": 132, "y": 64, "flags": 4} + ], + "sleep": true + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"label":"L00", "matrix": [0, 0], "x":0, "y":0}, + {"label":"L01", "matrix": [0, 1], "x":1, "y":0}, + {"label":"L02", "matrix": [0, 2], "x":2, "y":0}, + {"label":"L03", "matrix": [0, 3], "x":3, "y":0}, + {"label":"L04", "matrix": [0, 4], "x":4, "y":0}, + {"label":"L05", "matrix": [0, 5], "x":5, "y":0}, + {"label":"R05", "matrix": [5, 5], "x":8, "y":0}, + {"label":"R04", "matrix": [5, 4], "x":9, "y":0}, + {"label":"R03", "matrix": [5, 3], "x":10, "y":0}, + {"label":"R02", "matrix": [5, 2], "x":11, "y":0}, + {"label":"R01", "matrix": [5, 1], "x":12, "y":0}, + {"label":"R00", "matrix": [5, 0], "x":13, "y":0}, + {"label":"L10", "matrix": [1, 0], "x":0, "y":1}, + {"label":"L11", "matrix": [1, 1], "x":1, "y":1}, + {"label":"L12", "matrix": [1, 2], "x":2, "y":1}, + {"label":"L13", "matrix": [1, 3], "x":3, "y":1}, + {"label":"L14", "matrix": [1, 4], "x":4, "y":1}, + {"label":"L15", "matrix": [1, 5], "x":5, "y":1}, + {"label":"R15", "matrix": [6, 5], "x":8, "y":1}, + {"label":"R14", "matrix": [6, 4], "x":9, "y":1}, + {"label":"R13", "matrix": [6, 3], "x":10, "y":1}, + {"label":"R12", "matrix": [6, 2], "x":11, "y":1}, + {"label":"R11", "matrix": [6, 1], "x":12, "y":1}, + {"label":"R10", "matrix": [6, 0], "x":13, "y":1}, + {"label":"L20", "matrix": [2, 0], "x":0, "y":2}, + {"label":"L21", "matrix": [2, 1], "x":1, "y":2}, + {"label":"L22", "matrix": [2, 2], "x":2, "y":2}, + {"label":"L23", "matrix": [2, 3], "x":3, "y":2}, + {"label":"L24", "matrix": [2, 4], "x":4, "y":2}, + {"label":"L25", "matrix": [2, 5], "x":5, "y":2}, + {"label":"R25", "matrix": [7, 5], "x":8, "y":2}, + {"label":"R24", "matrix": [7, 4], "x":9, "y":2}, + {"label":"R23", "matrix": [7, 3], "x":10, "y":2}, + {"label":"R22", "matrix": [7, 2], "x":11, "y":2}, + {"label":"R21", "matrix": [7, 1], "x":12, "y":2}, + {"label":"R20", "matrix": [7, 0], "x":13, "y":2}, + {"label":"L30", "matrix": [3, 0], "x":0, "y":3}, + {"label":"L31", "matrix": [3, 1], "x":1, "y":3}, + {"label":"L32", "matrix": [3, 2], "x":2, "y":3}, + {"label":"L33", "matrix": [3, 3], "x":3, "y":3}, + {"label":"L34", "matrix": [3, 4], "x":4, "y":3}, + {"label":"L35", "matrix": [3, 5], "x":5, "y":3}, + {"label":"R35", "matrix": [8, 5], "x":8, "y":3}, + {"label":"R34", "matrix": [8, 4], "x":9, "y":3}, + {"label":"R33", "matrix": [8, 3], "x":10, "y":3}, + {"label":"R32", "matrix": [8, 2], "x":11, "y":3}, + {"label":"R31", "matrix": [8, 1], "x":12, "y":3}, + {"label":"R30", "matrix": [8, 0], "x":13, "y":3}, + {"label":"L43", "matrix": [4, 3], "x":2.5, "y":4}, + {"label":"L41", "matrix": [4, 1], "x":3.5, "y":4}, + {"label":"L42", "matrix": [4, 2], "x":4.5, "y":4}, + {"label":"L44", "matrix": [4, 4], "x":5.5, "y":4}, + {"label":"R44", "matrix": [9, 4], "x":7.5, "y":4}, + {"label":"R42", "matrix": [9, 2], "x":8.5, "y":4}, + {"label":"R41", "matrix": [9, 1], "x":9.5, "y":4}, + {"label":"R43", "matrix": [9, 3], "x":10.5, "y":4} + ] + } + } +} diff --git a/keyboards/bastardkb/dilemma/4x6_4/keymaps/default/keymap.c b/keyboards/bastardkb/dilemma/4x6_4/keymaps/default/keymap.c new file mode 100644 index 00000000..4ac52309 --- /dev/null +++ b/keyboards/bastardkb/dilemma/4x6_4/keymaps/default/keymap.c @@ -0,0 +1,73 @@ +/** + * Copyright 2021 Charly Delay (@0xcharly) + * Copyright 2023 casuanoob (@casuanoob) + * + * 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 dilemma_keymap_layers { + LAYER_BASE = 0, + LAYER_LOWER, + LAYER_RAISE, +}; + +#define LOWER MO(LAYER_LOWER) +#define RAISE MO(LAYER_RAISE) + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [LAYER_BASE] = LAYOUT( + // ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮ + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LALT, + // ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯ + KC_LALT, KC_BSPC, KC_SPC, LOWER, RAISE, KC_ENT, KC_DEL, KC_LGUI + // ╰───────────────────────────────────╯ ╰───────────────────────────────────╯ + ), + + [LAYER_LOWER] = LAYOUT( + // ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮ + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_UNDS, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + RM_NEXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LBRC, KC_P7, KC_P8, KC_P9, KC_RBRC, XXXXXXX, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + RM_TOGG, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_PPLS, KC_P4, KC_P5, KC_P6, KC_PMNS, KC_PEQL, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + RM_PREV, XXXXXXX, XXXXXXX, XXXXXXX, EE_CLR, QK_BOOT, KC_PAST, KC_P1, KC_P2, KC_P3, KC_PSLS, KC_PDOT, + // ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯ + XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______ + // ╰───────────────────────────────────╯ ╰───────────────────────────────────╯ + ), + + [LAYER_RAISE] = LAYOUT( + // ╭──────────────────────────────────────────────────────╮ ╭──────────────────────────────────────────────────────╮ + KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLU, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + KC_MPLY, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, KC_RSFT, KC_RCTL, KC_RALT, KC_RGUI, KC_MUTE, + // ├──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────┤ + KC_MPRV, KC_HOME, KC_PGUP, KC_PGDN, KC_END, XXXXXXX, QK_BOOT, EE_CLR, XXXXXXX, XXXXXXX, XXXXXXX, KC_VOLD, + // ╰──────────────────────────────────────────────────────┤ ├──────────────────────────────────────────────────────╯ + _______, _______, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX + // ╰───────────────────────────────────╯ ╰───────────────────────────────────╯ + ), +}; +// clang-format on diff --git a/keyboards/bastardkb/dilemma/4x6_4/mcuconf.h b/keyboards/bastardkb/dilemma/4x6_4/mcuconf.h new file mode 100644 index 00000000..52b726a5 --- /dev/null +++ b/keyboards/bastardkb/dilemma/4x6_4/mcuconf.h @@ -0,0 +1,23 @@ +/** + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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_next + +#undef RP_SPI_USE_SPI0 +#define RP_SPI_USE_SPI0 TRUE diff --git a/keyboards/bastardkb/dilemma/4x6_4/readme.md b/keyboards/bastardkb/dilemma/4x6_4/readme.md new file mode 100644 index 00000000..30dd2a99 --- /dev/null +++ b/keyboards/bastardkb/dilemma/4x6_4/readme.md @@ -0,0 +1,5 @@ +# Dilemma Max (4x6+4) + +This keyboard is an upsized version of the [3x5+3 Dilemma](../3x5_3/). + +The Dilemma Max is available at [bastardkb.com](https://bastardkb.com). diff --git a/keyboards/bastardkb/dilemma/4x6_4/rules.mk b/keyboards/bastardkb/dilemma/4x6_4/rules.mk new file mode 100644 index 00000000..60776009 --- /dev/null +++ b/keyboards/bastardkb/dilemma/4x6_4/rules.mk @@ -0,0 +1,3 @@ +SERIAL_DRIVER = vendor + +POINTING_DEVICE_DRIVER = cirque_pinnacle_spi diff --git a/keyboards/bastardkb/dilemma/config.h b/keyboards/bastardkb/dilemma/config.h new file mode 100644 index 00000000..0da85ec9 --- /dev/null +++ b/keyboards/bastardkb/dilemma/config.h @@ -0,0 +1,41 @@ +/* + * Copyright 2021 Quentin LEBASTARD + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Pointing device configuration. */ + +// Enable use of pointing device on slave split. +#define SPLIT_POINTING_ENABLE + +// Pointing device is on the right split. +#define POINTING_DEVICE_RIGHT + +// Enables support for extended i16 mouse reports (instead of i8). +#define MOUSE_EXTENDED_REPORT + +// Limits the frequency that the sensor is polled for motion. +#define POINTING_DEVICE_TASK_THROTTLE_MS 10 + +// Adjust trackpad rotation. +#define POINTING_DEVICE_ROTATION_90 + +// Configure for the Cirque model used on the Dilemma. +#define CIRQUE_PINNACLE_DIAMETER_MM 35 +#define CIRQUE_PINNACLE_CURVED_OVERLAY +#define POINTING_DEVICE_GESTURES_SCROLL_ENABLE // Circular scroll. diff --git a/keyboards/bastardkb/dilemma/dilemma.c b/keyboards/bastardkb/dilemma/dilemma.c new file mode 100644 index 00000000..b406e265 --- /dev/null +++ b/keyboards/bastardkb/dilemma/dilemma.c @@ -0,0 +1,361 @@ +/** + * Copyright 2020 Christopher Courtney (@drashna) + * Copyright 2021 Quentin LEBASTARD + * Copyright 2022 Charly Delay (@0xcharly) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Publicw 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 "dilemma.h" + +#ifdef CONSOLE_ENABLE +# include "print.h" +#endif // CONSOLE_ENABLE + +#ifdef POINTING_DEVICE_ENABLE +# ifndef DILEMMA_MINIMUM_DEFAULT_DPI +# define DILEMMA_MINIMUM_DEFAULT_DPI 400 +# endif // DILEMMA_MINIMUM_DEFAULT_DPI + +# ifndef DILEMMA_DEFAULT_DPI_CONFIG_STEP +# define DILEMMA_DEFAULT_DPI_CONFIG_STEP 200 +# endif // DILEMMA_DEFAULT_DPI_CONFIG_STEP + +# ifndef DILEMMA_MINIMUM_SNIPING_DPI +# define DILEMMA_MINIMUM_SNIPING_DPI 200 +# endif // DILEMMA_MINIMUM_SNIPING_DPI + +# ifndef DILEMMA_SNIPING_DPI_CONFIG_STEP +# define DILEMMA_SNIPING_DPI_CONFIG_STEP 100 +# endif // DILEMMA_SNIPING_DPI_CONFIG_STEP + +// Fixed DPI for drag-scroll. +# ifndef DILEMMA_DRAGSCROLL_DPI +# define DILEMMA_DRAGSCROLL_DPI 100 +# endif // DILEMMA_DRAGSCROLL_DPI + +# ifndef DILEMMA_DRAGSCROLL_BUFFER_SIZE +# define DILEMMA_DRAGSCROLL_BUFFER_SIZE 6 +# endif // !DILEMMA_DRAGSCROLL_BUFFER_SIZE + +typedef union { + uint8_t raw; + struct { + uint8_t pointer_default_dpi : 4; // 16 steps available. + uint8_t pointer_sniping_dpi : 2; // 4 steps available. + bool is_dragscroll_enabled : 1; + bool is_sniping_enabled : 1; + } __attribute__((packed)); +} dilemma_config_t; + +static dilemma_config_t g_dilemma_config = {0}; + +/** + * \brief Set the value of `config` from EEPROM. + * + * Note that `is_dragscroll_enabled` and `is_sniping_enabled` are purposefully + * ignored since we do not want to persist this state to memory. In practice, + * this state is always written to maximize write-performances. Therefore, we + * explicitly set them to `false` in this function. + */ +static void read_dilemma_config_from_eeprom(dilemma_config_t* config) { + config->raw = eeconfig_read_kb() & 0xff; + config->is_dragscroll_enabled = false; + config->is_sniping_enabled = false; +} + +/** + * \brief Save the value of `config` to eeprom. + * + * Note that all values are written verbatim, including whether drag-scroll + * and/or sniper mode are enabled. `read_dilemma_config_from_eeprom(…)` + * resets these 2 values to `false` since it does not make sense to persist + * these across reboots of the board. + */ +static void write_dilemma_config_to_eeprom(dilemma_config_t* config) { + eeconfig_update_kb(config->raw); +} + +/** \brief Return the current value of the pointer's default DPI. */ +static uint16_t get_pointer_default_dpi(dilemma_config_t* config) { + return (uint16_t)config->pointer_default_dpi * DILEMMA_DEFAULT_DPI_CONFIG_STEP + DILEMMA_MINIMUM_DEFAULT_DPI; +} + +/** \brief Return the current value of the pointer's sniper-mode DPI. */ +static uint16_t get_pointer_sniping_dpi(dilemma_config_t* config) { + return (uint16_t)config->pointer_sniping_dpi * DILEMMA_SNIPING_DPI_CONFIG_STEP + DILEMMA_MINIMUM_SNIPING_DPI; +} + +/** \brief Set the appropriate DPI for the input config. */ +static void maybe_update_pointing_device_cpi(dilemma_config_t* config) { + if (config->is_dragscroll_enabled) { + pointing_device_set_cpi(DILEMMA_DRAGSCROLL_DPI); + } else if (config->is_sniping_enabled) { + pointing_device_set_cpi(get_pointer_sniping_dpi(config)); + } else { + pointing_device_set_cpi(get_pointer_default_dpi(config)); + } +} + +/** + * \brief Update the pointer's default DPI to the next or previous step. + * + * Increases the DPI value if `forward` is `true`, decreases it otherwise. + * The increment/decrement steps are equal to DILEMMA_DEFAULT_DPI_CONFIG_STEP. + */ +static void step_pointer_default_dpi(dilemma_config_t* config, bool forward) { + config->pointer_default_dpi += forward ? 1 : -1; + maybe_update_pointing_device_cpi(config); +} + +/** + * \brief Update the pointer's sniper-mode DPI to the next or previous step. + * + * Increases the DPI value if `forward` is `true`, decreases it otherwise. + * The increment/decrement steps are equal to DILEMMA_SNIPING_DPI_CONFIG_STEP. + */ +static void step_pointer_sniping_dpi(dilemma_config_t* config, bool forward) { + config->pointer_sniping_dpi += forward ? 1 : -1; + maybe_update_pointing_device_cpi(config); +} + +uint16_t dilemma_get_pointer_default_dpi(void) { + return get_pointer_default_dpi(&g_dilemma_config); +} + +uint16_t dilemma_get_pointer_sniping_dpi(void) { + return get_pointer_sniping_dpi(&g_dilemma_config); +} + +void dilemma_cycle_pointer_default_dpi_noeeprom(bool forward) { + step_pointer_default_dpi(&g_dilemma_config, forward); +} + +void dilemma_cycle_pointer_default_dpi(bool forward) { + step_pointer_default_dpi(&g_dilemma_config, forward); + write_dilemma_config_to_eeprom(&g_dilemma_config); +} + +void dilemma_cycle_pointer_sniping_dpi_noeeprom(bool forward) { + step_pointer_sniping_dpi(&g_dilemma_config, forward); +} + +void dilemma_cycle_pointer_sniping_dpi(bool forward) { + step_pointer_sniping_dpi(&g_dilemma_config, forward); + write_dilemma_config_to_eeprom(&g_dilemma_config); +} + +bool dilemma_get_pointer_sniping_enabled(void) { + return g_dilemma_config.is_sniping_enabled; +} + +void dilemma_set_pointer_sniping_enabled(bool enable) { + g_dilemma_config.is_sniping_enabled = enable; + maybe_update_pointing_device_cpi(&g_dilemma_config); +} + +bool dilemma_get_pointer_dragscroll_enabled(void) { + return g_dilemma_config.is_dragscroll_enabled; +} + +void dilemma_set_pointer_dragscroll_enabled(bool enable) { + g_dilemma_config.is_dragscroll_enabled = enable; + maybe_update_pointing_device_cpi(&g_dilemma_config); +} + +void pointing_device_init_kb(void) { + maybe_update_pointing_device_cpi(&g_dilemma_config); + pointing_device_init_user(); +} + +/** + * \brief Augment the pointing device behavior. + * + * Implement drag-scroll. + */ +static void pointing_device_task_dilemma(report_mouse_t* mouse_report) { + static int16_t scroll_buffer_x = 0; + static int16_t scroll_buffer_y = 0; + if (g_dilemma_config.is_dragscroll_enabled) { +# ifdef DILEMMA_DRAGSCROLL_REVERSE_X + scroll_buffer_x -= mouse_report->x; +# else + scroll_buffer_x += mouse_report->x; +# endif // DILEMMA_DRAGSCROLL_REVERSE_X +# ifdef DILEMMA_DRAGSCROLL_REVERSE_Y + scroll_buffer_y -= mouse_report->y; +# else + scroll_buffer_y += mouse_report->y; +# endif // DILEMMA_DRAGSCROLL_REVERSE_Y + mouse_report->x = 0; + mouse_report->y = 0; + if (abs(scroll_buffer_x) > DILEMMA_DRAGSCROLL_BUFFER_SIZE) { + mouse_report->h = scroll_buffer_x > 0 ? 1 : -1; + scroll_buffer_x = 0; + } + if (abs(scroll_buffer_y) > DILEMMA_DRAGSCROLL_BUFFER_SIZE) { + mouse_report->v = scroll_buffer_y > 0 ? 1 : -1; + scroll_buffer_y = 0; + } + } +} + +report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) { + if (is_keyboard_master()) { + pointing_device_task_dilemma(&mouse_report); + mouse_report = pointing_device_task_user(mouse_report); + } + return mouse_report; +} + +# if defined(POINTING_DEVICE_ENABLE) && !defined(NO_DILEMMA_KEYCODES) +/** \brief Whether SHIFT mod is enabled. */ +static bool has_shift_mod(void) { +# ifdef NO_ACTION_ONESHOT + return mod_config(get_mods()) & MOD_MASK_SHIFT; +# else + return mod_config(get_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT; +# endif // NO_ACTION_ONESHOT +} +# endif // POINTING_DEVICE_ENABLE && !NO_DILEMMA_KEYCODES + +/** + * \brief Outputs the Dilemma configuration to console. + * + * Prints the in-memory configuration structure to console, for debugging. + * Includes: + * - raw value + * - drag-scroll: on/off + * - sniping: on/off + * - default DPI: internal table index/actual DPI + * - sniping DPI: internal table index/actual DPI + */ +static void debug_dilemma_config_to_console(dilemma_config_t* config) { +# ifdef CONSOLE_ENABLE + dprintf("(dilemma) process_record_kb: config = {\n" + "\traw = 0x%X,\n" + "\t{\n" + "\t\tis_dragscroll_enabled=%u\n" + "\t\tis_sniping_enabled=%u\n" + "\t\tdefault_dpi=0x%X (%u)\n" + "\t\tsniping_dpi=0x%X (%u)\n" + "\t}\n" + "}\n", + config->raw, config->is_dragscroll_enabled, config->is_sniping_enabled, config->pointer_default_dpi, get_pointer_default_dpi(config), config->pointer_sniping_dpi, get_pointer_sniping_dpi(config)); +# endif // CONSOLE_ENABLE +} + +bool process_record_kb(uint16_t keycode, keyrecord_t* record) { + if (!process_record_user(keycode, record)) { + debug_dilemma_config_to_console(&g_dilemma_config); + return false; + } +# ifdef POINTING_DEVICE_ENABLE +# ifndef NO_DILEMMA_KEYCODES + switch (keycode) { + case POINTER_DEFAULT_DPI_FORWARD: + if (record->event.pressed) { + // Step backward if shifted, forward otherwise. + dilemma_cycle_pointer_default_dpi(/* forward= */ !has_shift_mod()); + } + break; + case POINTER_DEFAULT_DPI_REVERSE: + if (record->event.pressed) { + // Step forward if shifted, backward otherwise. + dilemma_cycle_pointer_default_dpi(/* forward= */ has_shift_mod()); + } + break; + case POINTER_SNIPING_DPI_FORWARD: + if (record->event.pressed) { + // Step backward if shifted, forward otherwise. + dilemma_cycle_pointer_sniping_dpi(/* forward= */ !has_shift_mod()); + } + break; + case POINTER_SNIPING_DPI_REVERSE: + if (record->event.pressed) { + // Step forward if shifted, backward otherwise. + dilemma_cycle_pointer_sniping_dpi(/* forward= */ has_shift_mod()); + } + break; + case SNIPING_MODE: + dilemma_set_pointer_sniping_enabled(record->event.pressed); + break; + case SNIPING_MODE_TOGGLE: + if (record->event.pressed) { + dilemma_set_pointer_sniping_enabled(!dilemma_get_pointer_sniping_enabled()); + } + break; + case DRAGSCROLL_MODE: + dilemma_set_pointer_dragscroll_enabled(record->event.pressed); + break; + case DRAGSCROLL_MODE_TOGGLE: + if (record->event.pressed) { + dilemma_set_pointer_dragscroll_enabled(!dilemma_get_pointer_dragscroll_enabled()); + } + break; + } +# endif // !NO_DILEMMA_KEYCODES +# endif // POINTING_DEVICE_ENABLE + debug_dilemma_config_to_console(&g_dilemma_config); + if (IS_QK_KB(keycode) || IS_MOUSEKEY(keycode)) { + debug_dilemma_config_to_console(&g_dilemma_config); + } + return true; +} + +void eeconfig_init_kb(void) { + g_dilemma_config.raw = 0; + g_dilemma_config.pointer_default_dpi = 3; // DPI=1000 + write_dilemma_config_to_eeprom(&g_dilemma_config); + maybe_update_pointing_device_cpi(&g_dilemma_config); + eeconfig_init_user(); +} + +void matrix_init_kb(void) { + read_dilemma_config_from_eeprom(&g_dilemma_config); + matrix_init_user(); +} +#endif // POINTING_DEVICE_ENABLE + +// Forward declare RP2040 SDK declaration. +void gpio_init(uint gpio); + +void keyboard_pre_init_kb(void) { + // Ensures that GP26 through GP29 are initialized as digital inputs (as + // opposed to analog inputs). These GPIOs are shared with A0 through A3, + // respectively. On RP2040-B2 and later, the digital inputs are disabled by + // default (see RP2040-E6). + gpio_init(GP26); + gpio_init(GP27); + gpio_init(GP28); + gpio_init(GP29); + + keyboard_pre_init_user(); +} + +bool shutdown_kb(bool jump_to_bootloader) { + if (!shutdown_user(jump_to_bootloader)) { + return false; + } +#ifdef RGBLIGHT_ENABLE + rgblight_enable_noeeprom(); + rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); + rgblight_setrgb(RGB_RED); +#endif // RGBLIGHT_ENABLE +#ifdef RGB_MATRIX_ENABLE + rgb_matrix_set_color_all(RGB_RED); + rgb_matrix_update_pwm_buffers(); +#endif // RGB_MATRIX_ENABLE + return true; +} diff --git a/keyboards/bastardkb/dilemma/dilemma.h b/keyboards/bastardkb/dilemma/dilemma.h new file mode 100644 index 00000000..eefdd5ba --- /dev/null +++ b/keyboards/bastardkb/dilemma/dilemma.h @@ -0,0 +1,110 @@ +/** + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 POINTING_DEVICE_ENABLE +# ifndef NO_DILEMMA_KEYCODES +enum dilemma_keycodes { + POINTER_DEFAULT_DPI_FORWARD = QK_KB_0, + POINTER_DEFAULT_DPI_REVERSE, + POINTER_SNIPING_DPI_FORWARD, + POINTER_SNIPING_DPI_REVERSE, + SNIPING_MODE, + SNIPING_MODE_TOGGLE, + DRAGSCROLL_MODE, + DRAGSCROLL_MODE_TOGGLE, +}; + +# define DPI_MOD POINTER_DEFAULT_DPI_FORWARD +# define DPI_RMOD POINTER_DEFAULT_DPI_REVERSE +# define S_D_MOD POINTER_SNIPING_DPI_FORWARD +# define S_D_RMOD POINTER_SNIPING_DPI_REVERSE +# define SNIPING SNIPING_MODE +# define SNP_TOG SNIPING_MODE_TOGGLE +# define DRGSCRL DRAGSCROLL_MODE +# define DRG_TOG DRAGSCROLL_MODE_TOGGLE +# endif // !NO_DILEMMA_KEYCODES + +/** \brief Return the current DPI value for the pointer's default mode. */ +uint16_t dilemma_get_pointer_default_dpi(void); + +/** + * \brief Update the pointer's default DPI to the next or previous step. + * + * Increases the DPI value if `forward` is `true`, decreases it otherwise. + * The increment/decrement steps are equal to DILEMMA_DEFAULT_DPI_CONFIG_STEP. + * + * The new value is persisted in EEPROM. + */ +void dilemma_cycle_pointer_default_dpi(bool forward); + +/** + * \brief Same as `dilemma_cycle_pointer_default_dpi`, but do not write to + * EEPROM. + * + * This means that reseting the board will revert the value to the last + * persisted one. + */ +void dilemma_cycle_pointer_default_dpi_noeeprom(bool forward); + +/** \brief Return the current DPI value for the pointer's sniper-mode. */ +uint16_t dilemma_get_pointer_sniping_dpi(void); + +/** + * \brief Update the pointer's sniper-mode DPI to the next or previous step. + * + * Increases the DPI value if `forward` is `true`, decreases it otherwise. + * The increment/decrement steps are equal to DILEMMA_SNIPING_DPI_CONFIG_STEP. + * + * The new value is persisted in EEPROM. + */ +void dilemma_cycle_pointer_sniping_dpi(bool forward); + +/** + * \brief Same as `dilemma_cycle_pointer_sniping_dpi`, but do not write to + * EEPROM. + * + * This means that reseting the board will revert the value to the last + * persisted one. + */ +void dilemma_cycle_pointer_sniping_dpi_noeeprom(bool forward); + +/** \brief Whether sniper-mode is enabled. */ +bool dilemma_get_pointer_sniping_enabled(void); + +/** + * \brief Enable/disable sniper mode. + * + * When sniper mode is enabled the dpi is reduced to slow down the pointer for + * more accurate movements. + */ +void dilemma_set_pointer_sniping_enabled(bool enable); + +/** \brief Whether drag-scroll is enabled. */ +bool dilemma_get_pointer_dragscroll_enabled(void); + +/** + * \brief Enable/disable drag-scroll mode. + * + * When drag-scroll mode is enabled, horizontal and vertical pointer movements + * are translated into horizontal and vertical scroll movements. + */ +void dilemma_set_pointer_dragscroll_enabled(bool enable); +#endif // POINTING_DEVICE_ENABLE diff --git a/keyboards/bastardkb/dilemma/info.json b/keyboards/bastardkb/dilemma/info.json new file mode 100644 index 00000000..ef6a5dd4 --- /dev/null +++ b/keyboards/bastardkb/dilemma/info.json @@ -0,0 +1,3 @@ +{ + "url": "https://bastardkb.com/dilemma" +} diff --git a/keyboards/bastardkb/dilemma/readme.md b/keyboards/bastardkb/dilemma/readme.md new file mode 100644 index 00000000..876400ae --- /dev/null +++ b/keyboards/bastardkb/dilemma/readme.md @@ -0,0 +1,21 @@ +# Dilemma + +A family of split keyboards with embedded RP2040 controllers, support for Cirque GlidePoint circle trackpads, and SPI + I2C breakouts for other peripherals + +- Keyboard Maintainer: [Bastard Keyboards](https://github.com/Bastardkb/) +- Hardware Supported: [Bastardkb Dilemma](https://github.com/Bastardkb/Dilemma) +- Hardware Availability: [Bastardkb.com](https://bastardkb.com/) + +A DIY version of the 3x5_2 PCB with promicro compatible footprint is also available. + +Make example for this keyboard (after setting up your build environment): + + make bastardkb/dilemma/3x5_3:default + make bastardkb/dilemma/4x6_4:default + +Flashing example for this keyboard: + + make bastardkb/dilemma/3x5_3:default:flash + make bastardkb/dilemma/4x6_4:default:flash + +See the [keyboard build instructions](http://docs.bastardkb.com/) diff --git a/keyboards/bastardkb/info.json b/keyboards/bastardkb/info.json new file mode 100644 index 00000000..0a9cb94f --- /dev/null +++ b/keyboards/bastardkb/info.json @@ -0,0 +1,8 @@ +{ + "manufacturer": "Bastard Keyboards", + "maintainer": "Quentin Lebastard", + "url": "https://bastardkb.com", + "usb": { + "vid": "0xA8F8" + } +} diff --git a/keyboards/bastardkb/scylla/blackpill/config.h b/keyboards/bastardkb/scylla/blackpill/config.h new file mode 100644 index 00000000..bf7879ed --- /dev/null +++ b/keyboards/bastardkb/scylla/blackpill/config.h @@ -0,0 +1,50 @@ +/* + * Copyright 2020 Christopher Courtney (@drashna) + * Copyright 2021 Stefan Kerkmann (@KarlK90) + * Copyright 2022 Charly Delay (@0xcharly) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Publicw 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 + +/* Handedness. */ +#define SPLIT_HAND_PIN A3 // High -> left, Low -> right. + +/* RGB settings. */ +#define WS2812_PWM_DRIVER PWMD2 +#define WS2812_PWM_CHANNEL 2 +#define WS2812_PWM_PAL_MODE 1 +#define WS2812_EXTERNAL_PULLUP +#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM1 +#define WS2812_PWM_DMA_CHANNEL 3 + +/* Serial configuration for split keyboard. */ +#define SERIAL_USART_TX_PIN A9 + +/* CRC. */ +#define CRC8_USE_TABLE +#define CRC8_OPTIMIZE_SPEED + +/* SPI config for EEPROM. */ +#define SPI_DRIVER SPID1 +#define SPI_SCK_PIN A5 +#define SPI_SCK_PAL_MODE 5 +#define SPI_MOSI_PIN A7 +#define SPI_MOSI_PAL_MODE 5 +#define SPI_MISO_PIN A6 +#define SPI_MISO_PAL_MODE 5 + +/* EEPROM config. */ +#define EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN A4 diff --git a/keyboards/bastardkb/scylla/blackpill/halconf.h b/keyboards/bastardkb/scylla/blackpill/halconf.h new file mode 100644 index 00000000..1ba700a8 --- /dev/null +++ b/keyboards/bastardkb/scylla/blackpill/halconf.h @@ -0,0 +1,27 @@ +/** + * Copyright 2020 Nick Brassel (tzarc) + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +#define HAL_USE_PWM TRUE +#define HAL_USE_SERIAL TRUE +#define HAL_USE_SPI TRUE +#define SPI_USE_WAIT TRUE +#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD + +#include_next diff --git a/keyboards/bastardkb/scylla/blackpill/keyboard.json b/keyboards/bastardkb/scylla/blackpill/keyboard.json new file mode 100644 index 00000000..5294976f --- /dev/null +++ b/keyboards/bastardkb/scylla/blackpill/keyboard.json @@ -0,0 +1,37 @@ +{ + "keyboard_name": "Scylla Blackpill", + "usb": { + "device_version": "1.0.0", + "shared_endpoint": { + "keyboard": true + } + }, + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "rgb_matrix": true + }, + "eeprom": { + "driver": "spi" + }, + "split": { + "enabled": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "ws2812": { + "pin": "A1", + "driver": "pwm" + }, + "build": { + "debounce_type": "asym_eager_defer_pk" + }, + "matrix_pins": { + "cols": ["B0", "B1", "B10", "B3", "B4", "B5"], + "rows": ["B15", "A2", "B8", "A8", "B9"] + }, + "diode_direction": "ROW2COL", + "development_board": "blackpill_f411" +} diff --git a/keyboards/bastardkb/scylla/blackpill/mcuconf.h b/keyboards/bastardkb/scylla/blackpill/mcuconf.h new file mode 100644 index 00000000..2b3f30cb --- /dev/null +++ b/keyboards/bastardkb/scylla/blackpill/mcuconf.h @@ -0,0 +1,37 @@ +/* + * Copyright 2020 Nick Brassel (tzarc) + * Copyright 2021 Stefan Kerkmann (@KarlK90) + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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_next + +#undef STM32_SPI_USE_SPI1 +#define STM32_SPI_USE_SPI1 TRUE + +#undef STM32_PWM_USE_TIM2 +#define STM32_PWM_USE_TIM2 TRUE + +#undef STM32_SERIAL_USE_USART1 +#define STM32_SERIAL_USE_USART1 TRUE + +#undef STM32_GPT_USE_TIM3 +#define STM32_GPT_USE_TIM3 TRUE + +#undef STM32_ST_USE_TIMER +#define STM32_ST_USE_TIMER 5 diff --git a/keyboards/bastardkb/scylla/blackpill/rules.mk b/keyboards/bastardkb/scylla/blackpill/rules.mk new file mode 100644 index 00000000..48c904dd --- /dev/null +++ b/keyboards/bastardkb/scylla/blackpill/rules.mk @@ -0,0 +1,5 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint + +SERIAL_DRIVER = usart diff --git a/keyboards/bastardkb/scylla/info.json b/keyboards/bastardkb/scylla/info.json new file mode 100644 index 00000000..6508c15b --- /dev/null +++ b/keyboards/bastardkb/scylla/info.json @@ -0,0 +1,97 @@ +{ + "url": "https://bastardkb.com/scylla", + "usb": { + "pid": "0x1829" + }, + "rgb_matrix": { + "max_brightness": 50, + "sleep": true, + "split_count": [29, 29] + }, + "rgblight": { + "led_count": 58, + "split_count": [29, 29] + }, + "split": { + "transport": { + "sync": { + "matrix_state": true + } + } + }, + "layouts": { + "LAYOUT_split_4x6_5": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 4], "x": 4, "y": 0}, + {"matrix": [0, 5], "x": 5, "y": 0}, + + {"matrix": [5, 5], "x": 11, "y": 0}, + {"matrix": [5, 4], "x": 12, "y": 0}, + {"matrix": [5, 3], "x": 13, "y": 0}, + {"matrix": [5, 2], "x": 14, "y": 0}, + {"matrix": [5, 1], "x": 15, "y": 0}, + {"matrix": [5, 0], "x": 16, "y": 0}, + + {"matrix": [1, 0], "x": 0, "y": 1}, + {"matrix": [1, 1], "x": 1, "y": 1}, + {"matrix": [1, 2], "x": 2, "y": 1}, + {"matrix": [1, 3], "x": 3, "y": 1}, + {"matrix": [1, 4], "x": 4, "y": 1}, + {"matrix": [1, 5], "x": 5, "y": 1}, + + {"matrix": [6, 5], "x": 11, "y": 1}, + {"matrix": [6, 4], "x": 12, "y": 1}, + {"matrix": [6, 3], "x": 13, "y": 1}, + {"matrix": [6, 2], "x": 14, "y": 1}, + {"matrix": [6, 1], "x": 15, "y": 1}, + {"matrix": [6, 0], "x": 16, "y": 1}, + + {"matrix": [2, 0], "x": 0, "y": 2}, + {"matrix": [2, 1], "x": 1, "y": 2}, + {"matrix": [2, 2], "x": 2, "y": 2}, + {"matrix": [2, 3], "x": 3, "y": 2}, + {"matrix": [2, 4], "x": 4, "y": 2}, + {"matrix": [2, 5], "x": 5, "y": 2}, + + {"matrix": [7, 5], "x": 11, "y": 2}, + {"matrix": [7, 4], "x": 12, "y": 2}, + {"matrix": [7, 3], "x": 13, "y": 2}, + {"matrix": [7, 2], "x": 14, "y": 2}, + {"matrix": [7, 1], "x": 15, "y": 2}, + {"matrix": [7, 0], "x": 16, "y": 2}, + + {"matrix": [3, 0], "x": 0, "y": 3}, + {"matrix": [3, 1], "x": 1, "y": 3}, + {"matrix": [3, 2], "x": 2, "y": 3}, + {"matrix": [3, 3], "x": 3, "y": 3}, + {"matrix": [3, 4], "x": 4, "y": 3}, + {"matrix": [3, 5], "x": 5, "y": 3}, + + {"matrix": [8, 5], "x": 11, "y": 3}, + {"matrix": [8, 4], "x": 12, "y": 3}, + {"matrix": [8, 3], "x": 13, "y": 3}, + {"matrix": [8, 2], "x": 14, "y": 3}, + {"matrix": [8, 1], "x": 15, "y": 3}, + {"matrix": [8, 0], "x": 16, "y": 3}, + + {"matrix": [4, 3], "x": 5, "y": 4}, + {"matrix": [4, 4], "x": 6, "y": 4}, + {"matrix": [4, 1], "x": 7, "y": 4}, + + {"matrix": [9, 1], "x": 9, "y": 4}, + {"matrix": [9, 4], "x": 10, "y": 4}, + {"matrix": [9, 3], "x": 11, "y": 4}, + + {"matrix": [4, 5], "x": 6, "y": 5}, + {"matrix": [4, 2], "x": 7, "y": 5}, + + {"matrix": [9, 2], "x": 9, "y": 5}, + {"matrix": [9, 5], "x": 10, "y": 5} + ] + } + } +} diff --git a/keyboards/bastardkb/scylla/keymaps/default/keymap.c b/keyboards/bastardkb/scylla/keymaps/default/keymap.c new file mode 100644 index 00000000..8e9b0190 --- /dev/null +++ b/keyboards/bastardkb/scylla/keymaps/default/keymap.c @@ -0,0 +1,51 @@ +/* + * Copyright 2021 Quentin LEBASTARD + * + * 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 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT_split_4x6_5(KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + //-------------------------------------------------//-----------------------------------------------------------// + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, + //-------------------------------------------------//-----------------------------------------------------------// + KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + //-------------------------------------------------//-----------------------------------------------------------// + KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS, + //-------------------------------------------------//-----------------------------------------------------------// + KC_LCTL, KC_SPC, MO(1), MO(2), KC_ENT, KC_RGUI, KC_HOME, KC_BSPC, KC_DEL, KC_RALT), + + [1] = LAYOUT_split_4x6_5(KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_DEL, + //---------------------------------------------------------//-----------------------------------------------------------// + QK_BOOT, _______, _______, _______, _______, KC_LBRC, KC_RBRC, KC_P7, KC_P8, KC_P9, _______, KC_PLUS, + //---------------------------------------------------------//-----------------------------------------------------------// + _______, KC_HOME, KC_PGUP, KC_PGDN, KC_END, KC_LPRN, KC_RPRN, KC_P4, KC_P5, KC_P6, KC_MINS, KC_PIPE, + //---------------------------------------------------------//-----------------------------------------------------------// + _______, _______, _______, _______, _______, _______, _______, KC_P1, KC_P2, KC_P3, KC_EQL, KC_UNDS, + //---------------------------------------------------------//-----------------------------------------------------------// + KC_LCTL, KC_HOME, KC_TRNS, KC_TRNS, KC_RALT, KC_RGUI, KC_SPC, KC_BSPC, KC_RCTL, KC_ENT), + + [2] = LAYOUT_split_4x6_5(KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + //---------------------------------------------------------//--------------------------------------------------------------// + _______, _______, RM_PREV, RM_TOGG, RM_NEXT, KC_LBRC, KC_RBRC, _______, KC_NUM, KC_INS, KC_SCRL, KC_MUTE, + //---------------------------------------------------------//--------------------------------------------------------------// + _______, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_LPRN, KC_RPRN, KC_MPRV, KC_MPLY, KC_MNXT, _______, KC_VOLU, + //---------------------------------------------------------//--------------------------------------------------------------// + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLD, + //---------------------------------------------------------//--------------------------------------------------------------// + KC_LCTL, KC_HOME, KC_TRNS, KC_TRNS, KC_RALT, QK_BOOT, KC_SPC, KC_BSPC, KC_RCTL, KC_ENT), +}; diff --git a/keyboards/bastardkb/scylla/readme.md b/keyboards/bastardkb/scylla/readme.md new file mode 100644 index 00000000..830b8eac --- /dev/null +++ b/keyboards/bastardkb/scylla/readme.md @@ -0,0 +1,29 @@ +# Scylla + +A modern, low-profile split ergonomic keyboard + +* Keyboard Maintainer: [Bastard Keyboards](https://github.com/Bastardkb/) +* Hardware Supported: elite-C V4 +* Hardware Availability: [Bastard Keyboards](https://bastardkb.com/) + +## Building the firmware + +**You must specify the shield version when compiling/flashing the firmware.** + +The template is: + +```shell +qmk compile -kb bastardkb/scylla/{VERSION}/elitec -km {KEYMAP} +``` + +| Shield Version | default | via | +| --------------- | ------------------------------------------------------------- | --------------------------------------------------------- | +| v1 (Elite-C) | `qmk compile -kb bastardkb/scylla/v1/elitec -km default` | `qmk compile -kb bastardkb/scylla/v1/elitec -km via` | +| v2 (Elite-C) | `qmk compile -kb bastardkb/scylla/v2/elitec -km default` | `qmk compile -kb bastardkb/scylla/v2/elitec -km via` | +| v2 (Splinky v2) | `qmk compile -kb bastardkb/scylla/v2/splinky/v2 -km default` | `qmk compile -kb bastardkb/scylla/v2/splinky/v2 -km via` | +| v2 (Splinky v3) | `qmk compile -kb bastardkb/scylla/v2/splinky/v3 -km default` | `qmk compile -kb bastardkb/scylla/v2/splinky/v3 -km via` | +| v2 (STeMCell) | `qmk compile -kb bastardkb/scylla/v2/stemcell -km default` | `qmk compile -kb bastardkb/scylla/v2/stemcell -km via` | + +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). + +See the [keyboard build instructions](https://docs.bastardkb.com) diff --git a/keyboards/bastardkb/scylla/scylla.c b/keyboards/bastardkb/scylla/scylla.c new file mode 100644 index 00000000..7aaa0fc1 --- /dev/null +++ b/keyboards/bastardkb/scylla/scylla.c @@ -0,0 +1,63 @@ +/** + * Copyright 2021 Quentin LEBASTARD + * + * 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" + +// clang-format off +#ifdef RGB_MATRIX_ENABLE +led_config_t g_led_config = { { + // left + { 0, 7, 8, 15, 16, 20 }, + { 1, 6, 9, 14, 17, 21 }, + { 2, 5, 10, 13, 18, 22 }, + { 3, 4, 11, 12, 19, 23 }, + { NO_LED, 28, 24, 26, 27, 25 }, + // right + { 29, 36, 37, 44, 45, 49 }, + { 30, 35, 38, 43, 46, 50 }, + { 31, 34, 39, 42, 47, 51 }, + { 32, 33, 40, 41, 48, 52 }, + { NO_LED, 57, 53, 55, 56, 54 } +}, { + // left + { 0, 0 }, { 0, 16 }, { 0, 32 }, { 0, 48 }, // col 1 + { 20, 48 }, { 20, 32 }, { 20, 16 }, { 20, 0 }, // col 2 + { 41, 0 }, { 41, 16 }, { 41, 32 }, { 41, 48 }, + { 61, 48 }, { 61, 32 }, { 61, 16 }, { 61, 0 }, + { 81, 0 }, { 81, 16 }, { 81, 32 }, { 81, 48 }, + { 102, 0 }, { 102, 16 }, { 102, 32 }, { 102, 48 }, + { 102, 64 }, { 81, 64 }, { 61, 56 }, { 81, 56 }, { 102, 56 }, // left thumb cluster + // right + { 224, 0 }, { 224, 16 }, { 224, 32 }, { 224, 48 }, // col 12 + { 204, 48 }, { 204, 32 }, { 204, 16 }, { 204, 0 }, // col 11 + { 183, 0 }, { 183, 16 }, { 183, 32 }, { 183, 48 }, + { 163, 48 }, { 163, 32 }, { 163, 16 }, { 163, 0 }, + { 142, 0 }, { 142, 16 }, { 142, 32 }, { 142, 48 }, + { 122, 0 }, { 122, 16 }, { 122, 32 }, { 122, 48 }, + { 122, 64 }, { 142, 64 }, { 163, 56 }, { 142, 56 }, { 122, 56 } // right thumb cluster +}, { + // left + 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 2, 2, 2, 2, 2, + // right + 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 2, 2, 2, 2, 2 +} }; +#endif +// clang-format on diff --git a/keyboards/bastardkb/scylla/v1/elitec/config.h b/keyboards/bastardkb/scylla/v1/elitec/config.h new file mode 100644 index 00000000..41b5aa1c --- /dev/null +++ b/keyboards/bastardkb/scylla/v1/elitec/config.h @@ -0,0 +1,22 @@ +/* + * Copyright 2021 Quentin LEBASTARD + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT diff --git a/keyboards/bastardkb/scylla/v1/elitec/keyboard.json b/keyboards/bastardkb/scylla/v1/elitec/keyboard.json new file mode 100644 index 00000000..17b6b7fc --- /dev/null +++ b/keyboards/bastardkb/scylla/v1/elitec/keyboard.json @@ -0,0 +1,29 @@ +{ + "keyboard_name": "Scylla Elite-C", + "usb": { + "device_version": "1.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "rgb_matrix": true + }, + "ws2812": { + "pin": "D2" + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["B4", "E6", "C6", "B1", "B3", "B2"], + "rows": ["D7", "B5", "F7", "F6", "B6"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "D0" + }, + "processor": "atmega32u4", + "bootloader": "atmel-dfu" +} diff --git a/keyboards/bastardkb/scylla/v1/elitec/rules.mk b/keyboards/bastardkb/scylla/v1/elitec/rules.mk new file mode 100644 index 00000000..1868c4bb --- /dev/null +++ b/keyboards/bastardkb/scylla/v1/elitec/rules.mk @@ -0,0 +1 @@ +AUDIO_SUPPORTED = no # Audio is not supported diff --git a/keyboards/bastardkb/scylla/v2/elitec/config.h b/keyboards/bastardkb/scylla/v2/elitec/config.h new file mode 100644 index 00000000..e6b7fefa --- /dev/null +++ b/keyboards/bastardkb/scylla/v2/elitec/config.h @@ -0,0 +1,21 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT diff --git a/keyboards/bastardkb/scylla/v2/elitec/keyboard.json b/keyboards/bastardkb/scylla/v2/elitec/keyboard.json new file mode 100644 index 00000000..7bfb7ff5 --- /dev/null +++ b/keyboards/bastardkb/scylla/v2/elitec/keyboard.json @@ -0,0 +1,29 @@ +{ + "keyboard_name": "Scylla Elite-C", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "rgb_matrix": true + }, + "ws2812": { + "pin": "D3" + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["F6", "F5", "B6", "D7", "E6", "B4"], + "rows": ["F4", "F7", "C6", "D4", "B5"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "D2" + }, + "processor": "atmega32u4", + "bootloader": "atmel-dfu" +} diff --git a/keyboards/bastardkb/scylla/v2/elitec/rules.mk b/keyboards/bastardkb/scylla/v2/elitec/rules.mk new file mode 100644 index 00000000..1868c4bb --- /dev/null +++ b/keyboards/bastardkb/scylla/v2/elitec/rules.mk @@ -0,0 +1 @@ +AUDIO_SUPPORTED = no # Audio is not supported diff --git a/keyboards/bastardkb/scylla/v2/splinky_2/config.h b/keyboards/bastardkb/scylla/v2/splinky_2/config.h new file mode 100644 index 00000000..977fb0a6 --- /dev/null +++ b/keyboards/bastardkb/scylla/v2/splinky_2/config.h @@ -0,0 +1,31 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +// To use the handedness pin, resistors need to be installed on the adapter PCB. +// If so, uncomment the following code, and undefine MASTER_RIGHT above. +// #define SPLIT_HAND_PIN GP13 +// #define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* Reset. */ +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17 +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U diff --git a/keyboards/bastardkb/scylla/v2/splinky_2/keyboard.json b/keyboards/bastardkb/scylla/v2/splinky_2/keyboard.json new file mode 100644 index 00000000..2b9022d2 --- /dev/null +++ b/keyboards/bastardkb/scylla/v2/splinky_2/keyboard.json @@ -0,0 +1,30 @@ +{ + "keyboard_name": "Scylla Splinky", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": false, + "extrakey": true, + "rgb_matrix": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["GP27", "GP28", "GP15", "GP6", "GP7", "GP8"], + "rows": ["GP29", "GP26", "GP5", "GP4", "GP9"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "GP1" + }, + "ws2812": { + "pin": "GP0", + "driver": "vendor" + }, + "processor": "RP2040", + "bootloader": "rp2040" +} diff --git a/keyboards/bastardkb/scylla/v2/splinky_2/readme.md b/keyboards/bastardkb/scylla/v2/splinky_2/readme.md new file mode 100644 index 00000000..662eb582 --- /dev/null +++ b/keyboards/bastardkb/scylla/v2/splinky_2/readme.md @@ -0,0 +1,5 @@ +# Splinky controller + +The splinky is a Pro-Micro/Elite-C replacement with USB-C and RP2040. + +See [plut0nium/0xB2](https://github.com/plut0nium/0xB2/#releases) to figure out the right version for you (v2 or v3). diff --git a/keyboards/bastardkb/scylla/v2/splinky_2/rules.mk b/keyboards/bastardkb/scylla/v2/splinky_2/rules.mk new file mode 100644 index 00000000..077573eb --- /dev/null +++ b/keyboards/bastardkb/scylla/v2/splinky_2/rules.mk @@ -0,0 +1,3 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +SERIAL_DRIVER = vendor diff --git a/keyboards/bastardkb/scylla/v2/splinky_3/config.h b/keyboards/bastardkb/scylla/v2/splinky_3/config.h new file mode 100644 index 00000000..e4960236 --- /dev/null +++ b/keyboards/bastardkb/scylla/v2/splinky_3/config.h @@ -0,0 +1,31 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +// To use the handedness pin, resistors need to be installed on the adapter PCB. +// If so, uncomment the following code, and undefine MASTER_RIGHT above. +// #define SPLIT_HAND_PIN GP15 +// #define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* Reset. */ +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17 +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U diff --git a/keyboards/bastardkb/scylla/v2/splinky_3/keyboard.json b/keyboards/bastardkb/scylla/v2/splinky_3/keyboard.json new file mode 100644 index 00000000..cd4da3ac --- /dev/null +++ b/keyboards/bastardkb/scylla/v2/splinky_3/keyboard.json @@ -0,0 +1,30 @@ +{ + "keyboard_name": "Scylla Splinky", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": false, + "extrakey": true, + "rgb_matrix": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["GP27", "GP28", "GP21", "GP6", "GP7", "GP8"], + "rows": ["GP29", "GP26", "GP5", "GP4", "GP9"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "GP1" + }, + "ws2812": { + "pin": "GP0", + "driver": "vendor" + }, + "processor": "RP2040", + "bootloader": "rp2040" +} diff --git a/keyboards/bastardkb/scylla/v2/splinky_3/readme.md b/keyboards/bastardkb/scylla/v2/splinky_3/readme.md new file mode 100644 index 00000000..662eb582 --- /dev/null +++ b/keyboards/bastardkb/scylla/v2/splinky_3/readme.md @@ -0,0 +1,5 @@ +# Splinky controller + +The splinky is a Pro-Micro/Elite-C replacement with USB-C and RP2040. + +See [plut0nium/0xB2](https://github.com/plut0nium/0xB2/#releases) to figure out the right version for you (v2 or v3). diff --git a/keyboards/bastardkb/scylla/v2/splinky_3/rules.mk b/keyboards/bastardkb/scylla/v2/splinky_3/rules.mk new file mode 100644 index 00000000..077573eb --- /dev/null +++ b/keyboards/bastardkb/scylla/v2/splinky_3/rules.mk @@ -0,0 +1,3 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +SERIAL_DRIVER = vendor diff --git a/keyboards/bastardkb/scylla/v2/stemcell/config.h b/keyboards/bastardkb/scylla/v2/stemcell/config.h new file mode 100644 index 00000000..ca1cc0f7 --- /dev/null +++ b/keyboards/bastardkb/scylla/v2/stemcell/config.h @@ -0,0 +1,38 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +// To use the handedness pin, resistors need to be installed on the adapter PCB. +// If so, uncomment the following code, and undefine MASTER_RIGHT above. +// #define A0 PAL_LINE(GPIOA, 0) +// #define SPLIT_HAND_PIN A0 +// #define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* RGB settings. */ +#define WS2812_PWM_DRIVER PWMD2 +#define WS2812_PWM_CHANNEL 4 +#define WS2812_PWM_PAL_MODE 1 +#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM7 +#define WS2812_PWM_DMA_CHANNEL 3 + +/* CRC. */ +#define CRC8_USE_TABLE +#define CRC8_OPTIMIZE_SPEED diff --git a/keyboards/bastardkb/scylla/v2/stemcell/halconf.h b/keyboards/bastardkb/scylla/v2/stemcell/halconf.h new file mode 100644 index 00000000..dbeb6aea --- /dev/null +++ b/keyboards/bastardkb/scylla/v2/stemcell/halconf.h @@ -0,0 +1,23 @@ +/* + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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 + +#define HAL_USE_PWM TRUE +#define HAL_USE_SERIAL TRUE + +#include_next diff --git a/keyboards/bastardkb/scylla/v2/stemcell/keyboard.json b/keyboards/bastardkb/scylla/v2/stemcell/keyboard.json new file mode 100644 index 00000000..06bfeda7 --- /dev/null +++ b/keyboards/bastardkb/scylla/v2/stemcell/keyboard.json @@ -0,0 +1,32 @@ +{ + "keyboard_name": "Scylla STeMCell", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "rgb_matrix": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "ws2812": { + "pin": "A2", + "driver": "pwm" + }, + "build": { + "debounce_type": "asym_eager_defer_pk" + }, + "matrix_pins": { + "cols": ["B1", "B2", "A4", "B4", "B5", "B8"], + "rows": ["B10", "B0", "B3", "A15", "B9"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "A3" + }, + "development_board": "stemcell" +} diff --git a/keyboards/bastardkb/scylla/v2/stemcell/mcuconf.h b/keyboards/bastardkb/scylla/v2/stemcell/mcuconf.h new file mode 100644 index 00000000..6afebade --- /dev/null +++ b/keyboards/bastardkb/scylla/v2/stemcell/mcuconf.h @@ -0,0 +1,29 @@ +/* + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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_next + +#undef STM32_SERIAL_USE_USART1 +#define STM32_SERIAL_USE_USART1 FALSE + +#undef STM32_PWM_USE_TIM2 +#define STM32_PWM_USE_TIM2 TRUE + +#undef STM32_ST_USE_TIMER +#define STM32_ST_USE_TIMER 5 diff --git a/keyboards/bastardkb/scylla/v2/stemcell/rules.mk b/keyboards/bastardkb/scylla/v2/stemcell/rules.mk new file mode 100644 index 00000000..3fe3e4ff --- /dev/null +++ b/keyboards/bastardkb/scylla/v2/stemcell/rules.mk @@ -0,0 +1,3 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +SERIAL_DRIVER = usart diff --git a/keyboards/bastardkb/skeletyl/blackpill/config.h b/keyboards/bastardkb/skeletyl/blackpill/config.h new file mode 100644 index 00000000..bf7879ed --- /dev/null +++ b/keyboards/bastardkb/skeletyl/blackpill/config.h @@ -0,0 +1,50 @@ +/* + * Copyright 2020 Christopher Courtney (@drashna) + * Copyright 2021 Stefan Kerkmann (@KarlK90) + * Copyright 2022 Charly Delay (@0xcharly) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Publicw 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 + +/* Handedness. */ +#define SPLIT_HAND_PIN A3 // High -> left, Low -> right. + +/* RGB settings. */ +#define WS2812_PWM_DRIVER PWMD2 +#define WS2812_PWM_CHANNEL 2 +#define WS2812_PWM_PAL_MODE 1 +#define WS2812_EXTERNAL_PULLUP +#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM1 +#define WS2812_PWM_DMA_CHANNEL 3 + +/* Serial configuration for split keyboard. */ +#define SERIAL_USART_TX_PIN A9 + +/* CRC. */ +#define CRC8_USE_TABLE +#define CRC8_OPTIMIZE_SPEED + +/* SPI config for EEPROM. */ +#define SPI_DRIVER SPID1 +#define SPI_SCK_PIN A5 +#define SPI_SCK_PAL_MODE 5 +#define SPI_MOSI_PIN A7 +#define SPI_MOSI_PAL_MODE 5 +#define SPI_MISO_PIN A6 +#define SPI_MISO_PAL_MODE 5 + +/* EEPROM config. */ +#define EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN A4 diff --git a/keyboards/bastardkb/skeletyl/blackpill/halconf.h b/keyboards/bastardkb/skeletyl/blackpill/halconf.h new file mode 100644 index 00000000..1ba700a8 --- /dev/null +++ b/keyboards/bastardkb/skeletyl/blackpill/halconf.h @@ -0,0 +1,27 @@ +/** + * Copyright 2020 Nick Brassel (tzarc) + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +#define HAL_USE_PWM TRUE +#define HAL_USE_SERIAL TRUE +#define HAL_USE_SPI TRUE +#define SPI_USE_WAIT TRUE +#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD + +#include_next diff --git a/keyboards/bastardkb/skeletyl/blackpill/keyboard.json b/keyboards/bastardkb/skeletyl/blackpill/keyboard.json new file mode 100644 index 00000000..16fa2b24 --- /dev/null +++ b/keyboards/bastardkb/skeletyl/blackpill/keyboard.json @@ -0,0 +1,37 @@ +{ + "keyboard_name": "Skeletyl Blackpill", + "usb": { + "device_version": "1.0.0", + "shared_endpoint": { + "keyboard": true + } + }, + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "rgb_matrix": true + }, + "eeprom": { + "driver": "spi" + }, + "split": { + "enabled": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "ws2812": { + "pin": "A1", + "driver": "pwm" + }, + "build": { + "debounce_type": "asym_eager_defer_pk" + }, + "matrix_pins": { + "cols": ["B1", "B10", "B3", "B4", "B5"], + "rows": ["A2", "B8", "A8", "B9"] + }, + "diode_direction": "ROW2COL", + "development_board": "blackpill_f411" +} diff --git a/keyboards/bastardkb/skeletyl/blackpill/mcuconf.h b/keyboards/bastardkb/skeletyl/blackpill/mcuconf.h new file mode 100644 index 00000000..2b3f30cb --- /dev/null +++ b/keyboards/bastardkb/skeletyl/blackpill/mcuconf.h @@ -0,0 +1,37 @@ +/* + * Copyright 2020 Nick Brassel (tzarc) + * Copyright 2021 Stefan Kerkmann (@KarlK90) + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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_next + +#undef STM32_SPI_USE_SPI1 +#define STM32_SPI_USE_SPI1 TRUE + +#undef STM32_PWM_USE_TIM2 +#define STM32_PWM_USE_TIM2 TRUE + +#undef STM32_SERIAL_USE_USART1 +#define STM32_SERIAL_USE_USART1 TRUE + +#undef STM32_GPT_USE_TIM3 +#define STM32_GPT_USE_TIM3 TRUE + +#undef STM32_ST_USE_TIMER +#define STM32_ST_USE_TIMER 5 diff --git a/keyboards/bastardkb/skeletyl/blackpill/rules.mk b/keyboards/bastardkb/skeletyl/blackpill/rules.mk new file mode 100644 index 00000000..48c904dd --- /dev/null +++ b/keyboards/bastardkb/skeletyl/blackpill/rules.mk @@ -0,0 +1,5 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint + +SERIAL_DRIVER = usart diff --git a/keyboards/bastardkb/skeletyl/info.json b/keyboards/bastardkb/skeletyl/info.json new file mode 100644 index 00000000..e4ac2920 --- /dev/null +++ b/keyboards/bastardkb/skeletyl/info.json @@ -0,0 +1,72 @@ +{ + "url": "https://www.bastardkb.com/skeletyl", + "usb": { + "pid": "0x1830" + }, + "rgb_matrix": { + "max_brightness": 50, + "sleep": true, + "split_count": [18, 18] + }, + "rgblight": { + "led_count": 36, + "split_count": [18, 18] + }, + "split": { + "transport": { + "sync": { + "matrix_state": true + } + } + }, + "community_layouts": ["split_3x5_3"], + "layouts": { + "LAYOUT_split_3x5_3": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 4], "x": 4, "y": 0}, + + {"matrix": [4, 4], "x": 11, "y": 0}, + {"matrix": [4, 3], "x": 12, "y": 0}, + {"matrix": [4, 2], "x": 13, "y": 0}, + {"matrix": [4, 1], "x": 14, "y": 0}, + {"matrix": [4, 0], "x": 15, "y": 0}, + + {"matrix": [1, 0], "x": 0, "y": 1}, + {"matrix": [1, 1], "x": 1, "y": 1}, + {"matrix": [1, 2], "x": 2, "y": 1}, + {"matrix": [1, 3], "x": 3, "y": 1}, + {"matrix": [1, 4], "x": 4, "y": 1}, + + {"matrix": [5, 4], "x": 11, "y": 1}, + {"matrix": [5, 3], "x": 12, "y": 1}, + {"matrix": [5, 2], "x": 13, "y": 1}, + {"matrix": [5, 1], "x": 14, "y": 1}, + {"matrix": [5, 0], "x": 15, "y": 1}, + + {"matrix": [2, 0], "x": 0, "y": 2}, + {"matrix": [2, 1], "x": 1, "y": 2}, + {"matrix": [2, 2], "x": 2, "y": 2}, + {"matrix": [2, 3], "x": 3, "y": 2}, + {"matrix": [2, 4], "x": 4, "y": 2}, + + {"matrix": [6, 4], "x": 11, "y": 2}, + {"matrix": [6, 3], "x": 12, "y": 2}, + {"matrix": [6, 2], "x": 13, "y": 2}, + {"matrix": [6, 1], "x": 14, "y": 2}, + {"matrix": [6, 0], "x": 15, "y": 2}, + + {"matrix": [3, 2], "x": 4, "y": 3}, + {"matrix": [3, 3], "x": 5, "y": 3}, + {"matrix": [3, 0], "x": 6, "y": 3}, + + {"matrix": [7, 0], "x": 9, "y": 3}, + {"matrix": [7, 3], "x": 10, "y": 3}, + {"matrix": [7, 2], "x": 11, "y": 3} + ] + } + } +} diff --git a/keyboards/bastardkb/skeletyl/keymaps/default/keymap.c b/keyboards/bastardkb/skeletyl/keymaps/default/keymap.c new file mode 100644 index 00000000..1f49629c --- /dev/null +++ b/keyboards/bastardkb/skeletyl/keymaps/default/keymap.c @@ -0,0 +1,70 @@ +/* + * Copyright 2021 Quentin LEBASTARD + * + * 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 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT_split_3x5_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + 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_LGUI, KC_SPC , MO(1), MO(2), KC_ENT , KC_RALT + //`--------------------------' `--------------------------' + + ), + + [1] = LAYOUT_split_3x5_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, XXXXXXX, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + KC_LGUI, KC_SPC, _______, MO(3), KC_ENT, KC_RALT + //`--------------------------' `--------------------------' + ), + + [2] = LAYOUT_split_3x5_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + KC_LGUI, KC_SPC, MO(3), _______, KC_ENT, KC_RALT + //`--------------------------' `--------------------------' + ), + + [3] = LAYOUT_split_3x5_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + RM_HUEU, RM_SATU, RM_VALU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + RM_HUED, RM_SATD, RM_VALD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + KC_LGUI, KC_SPC, _______, _______, KC_ENT, KC_RALT + //`--------------------------' `--------------------------' + ) +}; diff --git a/keyboards/bastardkb/skeletyl/readme.md b/keyboards/bastardkb/skeletyl/readme.md new file mode 100644 index 00000000..bd05820d --- /dev/null +++ b/keyboards/bastardkb/skeletyl/readme.md @@ -0,0 +1,31 @@ +# Skeletyl + +A very small keyboard made for ergonomic enthusiasts. + +* Keyboard Maintainer: [Bastard Keyboards](https://github.com/Bastardkb/) +* Hardware Supported: elite-C V4 +* Hardware Availability: [Bastardkb.com](https://bastardkb.com/) + +## Building the firmware + +**You must specify the shield version when compiling/flashing the firmware.** + +The template is: + +```shell +qmk compile -kb bastardkb/skeletyl/{VERSION}/elitec -km {KEYMAP} +``` + +| Shield Version | default | via | +| --------------- | --------------------------------------------------------------- | ----------------------------------------------------------- | +| v1 (Elite-C) | `qmk compile -kb bastardkb/skeletyl/v1/elitec -km default` | `qmk compile -kb bastardkb/skeletyl/v1/elitec -km via` | +| v2 (Elite-C) | `qmk compile -kb bastardkb/skeletyl/v2/elitec -km default` | `qmk compile -kb bastardkb/skeletyl/v2/elitec -km via` | +| v2 (Splinky v2) | `qmk compile -kb bastardkb/skeletyl/v2/splinky_2 -km default` | `qmk compile -kb bastardkb/skeletyl/v2/splinky_2 -km via` | +| v2 (Splinky v3) | `qmk compile -kb bastardkb/skeletyl/v2/splinky_3 -km default` | `qmk compile -kb bastardkb/skeletyl/v2/splinky_3 -km via` | +| v2 (STeMCell) | `qmk compile -kb bastardkb/skeletyl/v2/stemcell -km default` | `qmk compile -kb bastardkb/skeletyl/v2/stemcell -km via` | + +This keyboard is made to be used with the Miryoku layout, do not use the default keymap. + +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). + +See the [keyboard build instructions](http://docs.bastardkb.com/) diff --git a/keyboards/bastardkb/skeletyl/skeletyl.c b/keyboards/bastardkb/skeletyl/skeletyl.c new file mode 100644 index 00000000..6c65c3fa --- /dev/null +++ b/keyboards/bastardkb/skeletyl/skeletyl.c @@ -0,0 +1,81 @@ +/* + * Copyright 2021 Quentin LEBASTARD + * + * 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" + +/** + * LEDs index. + * + * ╭────────────────────╮ ╭────────────────────╮ + * 2 3 8 9 12 30 27 26 21 20 + * ├────────────────────┤ ├────────────────────┤ + * 1 4 7 10 13 31 28 25 22 19 + * ├────────────────────┤ ├────────────────────┤ + * 0 5 6 11 14 32 29 24 23 18 + * ╰────────────────────╯ ╰────────────────────╯ + * 15 16 17 35 34 33 + * ╰────────────╯ ╰────────────╯ + */ +// clang-format off +#ifdef RGB_MATRIX_ENABLE +led_config_t g_led_config = { { + /* Key Matrix to LED index. */ + // Left split. + { 2, 3, 8, 9, 12 }, // Top row + { 1, 4, 7, 10, 13 }, // Middle row + { 0, 5, 6, 11, 14 }, // Bottom row + { 17, NO_LED, 15, 16, NO_LED }, // Thumb cluster + // Right split. + { 20, 21, 26, 27, 30 }, // Top row + { 19, 22, 25, 28, 31 }, // Middle row + { 18, 23, 24, 29, 32 }, // Bottom row + { 35, NO_LED, 33, 34, NO_LED }, // Thumb cluster +}, { + /* LED index to physical position. */ + // Left split. + /* index=0 */ { 0, 42 }, { 0, 21 }, { 0, 0 }, // col 1 (left most) + /* index=3 */ { 18, 0 }, { 18, 21 }, { 18, 42 }, // col 2 + /* index=6 */ { 36, 42 }, { 36, 21 }, { 36, 0 }, + /* index=9 */ { 54, 0 }, { 54, 21 }, { 54, 42 }, + /* index=12 */ { 72, 0 }, { 72, 21 }, { 72, 42 }, + /* index=15 */ { 72, 64 }, { 90, 64 }, { 108, 64 }, // Thumb cluster + // Right split. + /* index=18 */ { 224, 42 }, { 224, 21 }, { 224, 0 }, // col 10 (right most) + /* index=21 */ { 206, 0 }, { 206, 21 }, { 206, 42 }, // col 9 + /* index=24 */ { 188, 42 }, { 188, 21 }, { 188, 0 }, + /* index=27 */ { 170, 0 }, { 170, 21 }, { 170, 42 }, + /* index=30 */ { 152, 0 }, { 152, 21 }, { 152, 42 }, + /* index=33 */ { 152, 64 }, { 134, 64 }, { 116, 64 }, // Thumb cluster +}, { + /* LED index to flag. */ + // Left split. + /* index=0 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 1 + /* index=3 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 2 + /* index=6 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=9 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=12 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=15 */ LED_FLAG_MODIFIER, LED_FLAG_MODIFIER, LED_FLAG_MODIFIER, // Thumb cluster + // Right split. + /* index=18 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 10 + /* index=21 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, // col 9 + /* index=24 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=27 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=30 */ LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, + /* index=33 */ LED_FLAG_MODIFIER, LED_FLAG_MODIFIER, LED_FLAG_MODIFIER, // Thumb cluster +} }; +#endif +// clang-format on diff --git a/keyboards/bastardkb/skeletyl/v1/elitec/config.h b/keyboards/bastardkb/skeletyl/v1/elitec/config.h new file mode 100644 index 00000000..41b5aa1c --- /dev/null +++ b/keyboards/bastardkb/skeletyl/v1/elitec/config.h @@ -0,0 +1,22 @@ +/* + * Copyright 2021 Quentin LEBASTARD + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT diff --git a/keyboards/bastardkb/skeletyl/v1/elitec/keyboard.json b/keyboards/bastardkb/skeletyl/v1/elitec/keyboard.json new file mode 100644 index 00000000..2910d80b --- /dev/null +++ b/keyboards/bastardkb/skeletyl/v1/elitec/keyboard.json @@ -0,0 +1,29 @@ +{ + "keyboard_name": "Skeletyl Elite-C", + "usb": { + "device_version": "1.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "rgb_matrix": true + }, + "ws2812": { + "pin": "D2" + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["E6", "C6", "B1", "B3", "B2"], + "rows": ["B5", "F7", "F6", "B6"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "D0" + }, + "processor": "atmega32u4", + "bootloader": "atmel-dfu" +} diff --git a/keyboards/bastardkb/skeletyl/v1/elitec/rules.mk b/keyboards/bastardkb/skeletyl/v1/elitec/rules.mk new file mode 100644 index 00000000..1868c4bb --- /dev/null +++ b/keyboards/bastardkb/skeletyl/v1/elitec/rules.mk @@ -0,0 +1 @@ +AUDIO_SUPPORTED = no # Audio is not supported diff --git a/keyboards/bastardkb/skeletyl/v2/elitec/config.h b/keyboards/bastardkb/skeletyl/v2/elitec/config.h new file mode 100644 index 00000000..e6b7fefa --- /dev/null +++ b/keyboards/bastardkb/skeletyl/v2/elitec/config.h @@ -0,0 +1,21 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT diff --git a/keyboards/bastardkb/skeletyl/v2/elitec/keyboard.json b/keyboards/bastardkb/skeletyl/v2/elitec/keyboard.json new file mode 100644 index 00000000..dec2537b --- /dev/null +++ b/keyboards/bastardkb/skeletyl/v2/elitec/keyboard.json @@ -0,0 +1,29 @@ +{ + "keyboard_name": "Skeletyl Elite-C", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "rgb_matrix": true + }, + "ws2812": { + "pin": "D3" + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["F5", "B6", "D7", "E6", "B4"], + "rows": ["F7", "C6", "D4", "B5"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "D2" + }, + "processor": "atmega32u4", + "bootloader": "atmel-dfu" +} diff --git a/keyboards/bastardkb/skeletyl/v2/elitec/rules.mk b/keyboards/bastardkb/skeletyl/v2/elitec/rules.mk new file mode 100644 index 00000000..1868c4bb --- /dev/null +++ b/keyboards/bastardkb/skeletyl/v2/elitec/rules.mk @@ -0,0 +1 @@ +AUDIO_SUPPORTED = no # Audio is not supported diff --git a/keyboards/bastardkb/skeletyl/v2/splinky_2/config.h b/keyboards/bastardkb/skeletyl/v2/splinky_2/config.h new file mode 100644 index 00000000..977fb0a6 --- /dev/null +++ b/keyboards/bastardkb/skeletyl/v2/splinky_2/config.h @@ -0,0 +1,31 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +// To use the handedness pin, resistors need to be installed on the adapter PCB. +// If so, uncomment the following code, and undefine MASTER_RIGHT above. +// #define SPLIT_HAND_PIN GP13 +// #define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* Reset. */ +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17 +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U diff --git a/keyboards/bastardkb/skeletyl/v2/splinky_2/keyboard.json b/keyboards/bastardkb/skeletyl/v2/splinky_2/keyboard.json new file mode 100644 index 00000000..897f195a --- /dev/null +++ b/keyboards/bastardkb/skeletyl/v2/splinky_2/keyboard.json @@ -0,0 +1,30 @@ +{ + "keyboard_name": "Skeletyl Splinky", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": false, + "extrakey": true, + "rgb_matrix": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["GP28", "GP15", "GP6", "GP7", "GP8"], + "rows": ["GP26", "GP5", "GP4", "GP9"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "GP1" + }, + "ws2812": { + "pin": "GP0", + "driver": "vendor" + }, + "processor": "RP2040", + "bootloader": "rp2040" +} diff --git a/keyboards/bastardkb/skeletyl/v2/splinky_2/readme.md b/keyboards/bastardkb/skeletyl/v2/splinky_2/readme.md new file mode 100644 index 00000000..662eb582 --- /dev/null +++ b/keyboards/bastardkb/skeletyl/v2/splinky_2/readme.md @@ -0,0 +1,5 @@ +# Splinky controller + +The splinky is a Pro-Micro/Elite-C replacement with USB-C and RP2040. + +See [plut0nium/0xB2](https://github.com/plut0nium/0xB2/#releases) to figure out the right version for you (v2 or v3). diff --git a/keyboards/bastardkb/skeletyl/v2/splinky_2/rules.mk b/keyboards/bastardkb/skeletyl/v2/splinky_2/rules.mk new file mode 100644 index 00000000..077573eb --- /dev/null +++ b/keyboards/bastardkb/skeletyl/v2/splinky_2/rules.mk @@ -0,0 +1,3 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +SERIAL_DRIVER = vendor diff --git a/keyboards/bastardkb/skeletyl/v2/splinky_3/config.h b/keyboards/bastardkb/skeletyl/v2/splinky_3/config.h new file mode 100644 index 00000000..e4960236 --- /dev/null +++ b/keyboards/bastardkb/skeletyl/v2/splinky_3/config.h @@ -0,0 +1,31 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +// To use the handedness pin, resistors need to be installed on the adapter PCB. +// If so, uncomment the following code, and undefine MASTER_RIGHT above. +// #define SPLIT_HAND_PIN GP15 +// #define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* Reset. */ +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17 +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U diff --git a/keyboards/bastardkb/skeletyl/v2/splinky_3/keyboard.json b/keyboards/bastardkb/skeletyl/v2/splinky_3/keyboard.json new file mode 100644 index 00000000..06a93dfb --- /dev/null +++ b/keyboards/bastardkb/skeletyl/v2/splinky_3/keyboard.json @@ -0,0 +1,30 @@ +{ + "keyboard_name": "Skeletyl Splinky", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": false, + "extrakey": true, + "rgb_matrix": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["GP28", "GP21", "GP6", "GP7", "GP8"], + "rows": ["GP26", "GP5", "GP4", "GP9"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "GP1" + }, + "ws2812": { + "pin": "GP0", + "driver": "vendor" + }, + "processor": "RP2040", + "bootloader": "rp2040" +} diff --git a/keyboards/bastardkb/skeletyl/v2/splinky_3/readme.md b/keyboards/bastardkb/skeletyl/v2/splinky_3/readme.md new file mode 100644 index 00000000..662eb582 --- /dev/null +++ b/keyboards/bastardkb/skeletyl/v2/splinky_3/readme.md @@ -0,0 +1,5 @@ +# Splinky controller + +The splinky is a Pro-Micro/Elite-C replacement with USB-C and RP2040. + +See [plut0nium/0xB2](https://github.com/plut0nium/0xB2/#releases) to figure out the right version for you (v2 or v3). diff --git a/keyboards/bastardkb/skeletyl/v2/splinky_3/rules.mk b/keyboards/bastardkb/skeletyl/v2/splinky_3/rules.mk new file mode 100644 index 00000000..077573eb --- /dev/null +++ b/keyboards/bastardkb/skeletyl/v2/splinky_3/rules.mk @@ -0,0 +1,3 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +SERIAL_DRIVER = vendor diff --git a/keyboards/bastardkb/skeletyl/v2/stemcell/config.h b/keyboards/bastardkb/skeletyl/v2/stemcell/config.h new file mode 100644 index 00000000..ca1cc0f7 --- /dev/null +++ b/keyboards/bastardkb/skeletyl/v2/stemcell/config.h @@ -0,0 +1,38 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +// To use the handedness pin, resistors need to be installed on the adapter PCB. +// If so, uncomment the following code, and undefine MASTER_RIGHT above. +// #define A0 PAL_LINE(GPIOA, 0) +// #define SPLIT_HAND_PIN A0 +// #define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* RGB settings. */ +#define WS2812_PWM_DRIVER PWMD2 +#define WS2812_PWM_CHANNEL 4 +#define WS2812_PWM_PAL_MODE 1 +#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM7 +#define WS2812_PWM_DMA_CHANNEL 3 + +/* CRC. */ +#define CRC8_USE_TABLE +#define CRC8_OPTIMIZE_SPEED diff --git a/keyboards/bastardkb/skeletyl/v2/stemcell/halconf.h b/keyboards/bastardkb/skeletyl/v2/stemcell/halconf.h new file mode 100644 index 00000000..dbeb6aea --- /dev/null +++ b/keyboards/bastardkb/skeletyl/v2/stemcell/halconf.h @@ -0,0 +1,23 @@ +/* + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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 + +#define HAL_USE_PWM TRUE +#define HAL_USE_SERIAL TRUE + +#include_next diff --git a/keyboards/bastardkb/skeletyl/v2/stemcell/keyboard.json b/keyboards/bastardkb/skeletyl/v2/stemcell/keyboard.json new file mode 100644 index 00000000..6dd86bcc --- /dev/null +++ b/keyboards/bastardkb/skeletyl/v2/stemcell/keyboard.json @@ -0,0 +1,32 @@ +{ + "keyboard_name": "Skeletyl STeMCell", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "rgb_matrix": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "ws2812": { + "pin": "A2", + "driver": "pwm" + }, + "build": { + "debounce_type": "asym_eager_defer_pk" + }, + "matrix_pins": { + "cols": ["B2", "A4", "B4", "B5", "B8"], + "rows": ["B0", "B3", "A15", "B9"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "A3" + }, + "development_board": "stemcell" +} diff --git a/keyboards/bastardkb/skeletyl/v2/stemcell/mcuconf.h b/keyboards/bastardkb/skeletyl/v2/stemcell/mcuconf.h new file mode 100644 index 00000000..6afebade --- /dev/null +++ b/keyboards/bastardkb/skeletyl/v2/stemcell/mcuconf.h @@ -0,0 +1,29 @@ +/* + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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_next + +#undef STM32_SERIAL_USE_USART1 +#define STM32_SERIAL_USE_USART1 FALSE + +#undef STM32_PWM_USE_TIM2 +#define STM32_PWM_USE_TIM2 TRUE + +#undef STM32_ST_USE_TIMER +#define STM32_ST_USE_TIMER 5 diff --git a/keyboards/bastardkb/skeletyl/v2/stemcell/rules.mk b/keyboards/bastardkb/skeletyl/v2/stemcell/rules.mk new file mode 100644 index 00000000..3fe3e4ff --- /dev/null +++ b/keyboards/bastardkb/skeletyl/v2/stemcell/rules.mk @@ -0,0 +1,3 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +SERIAL_DRIVER = usart diff --git a/keyboards/bastardkb/tbkmini/blackpill/config.h b/keyboards/bastardkb/tbkmini/blackpill/config.h new file mode 100644 index 00000000..bf7879ed --- /dev/null +++ b/keyboards/bastardkb/tbkmini/blackpill/config.h @@ -0,0 +1,50 @@ +/* + * Copyright 2020 Christopher Courtney (@drashna) + * Copyright 2021 Stefan Kerkmann (@KarlK90) + * Copyright 2022 Charly Delay (@0xcharly) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Publicw 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 + +/* Handedness. */ +#define SPLIT_HAND_PIN A3 // High -> left, Low -> right. + +/* RGB settings. */ +#define WS2812_PWM_DRIVER PWMD2 +#define WS2812_PWM_CHANNEL 2 +#define WS2812_PWM_PAL_MODE 1 +#define WS2812_EXTERNAL_PULLUP +#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM1 +#define WS2812_PWM_DMA_CHANNEL 3 + +/* Serial configuration for split keyboard. */ +#define SERIAL_USART_TX_PIN A9 + +/* CRC. */ +#define CRC8_USE_TABLE +#define CRC8_OPTIMIZE_SPEED + +/* SPI config for EEPROM. */ +#define SPI_DRIVER SPID1 +#define SPI_SCK_PIN A5 +#define SPI_SCK_PAL_MODE 5 +#define SPI_MOSI_PIN A7 +#define SPI_MOSI_PAL_MODE 5 +#define SPI_MISO_PIN A6 +#define SPI_MISO_PAL_MODE 5 + +/* EEPROM config. */ +#define EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN A4 diff --git a/keyboards/bastardkb/tbkmini/blackpill/halconf.h b/keyboards/bastardkb/tbkmini/blackpill/halconf.h new file mode 100644 index 00000000..1ba700a8 --- /dev/null +++ b/keyboards/bastardkb/tbkmini/blackpill/halconf.h @@ -0,0 +1,27 @@ +/** + * Copyright 2020 Nick Brassel (tzarc) + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +#define HAL_USE_PWM TRUE +#define HAL_USE_SERIAL TRUE +#define HAL_USE_SPI TRUE +#define SPI_USE_WAIT TRUE +#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD + +#include_next diff --git a/keyboards/bastardkb/tbkmini/blackpill/keyboard.json b/keyboards/bastardkb/tbkmini/blackpill/keyboard.json new file mode 100644 index 00000000..61d0e741 --- /dev/null +++ b/keyboards/bastardkb/tbkmini/blackpill/keyboard.json @@ -0,0 +1,37 @@ +{ + "keyboard_name": "TBK Mini Blackpill", + "usb": { + "device_version": "1.0.0", + "shared_endpoint": { + "keyboard": true + } + }, + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "rgb_matrix": true + }, + "eeprom": { + "driver": "spi" + }, + "split": { + "enabled": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "ws2812": { + "pin": "A1", + "driver": "pwm" + }, + "build": { + "debounce_type": "asym_eager_defer_pk" + }, + "matrix_pins": { + "cols": ["B0", "B1", "B10", "B3", "B4", "B5"], + "rows": ["A2", "B8", "A8", "B9"] + }, + "diode_direction": "ROW2COL", + "development_board": "blackpill_f411" +} diff --git a/keyboards/bastardkb/tbkmini/blackpill/mcuconf.h b/keyboards/bastardkb/tbkmini/blackpill/mcuconf.h new file mode 100644 index 00000000..2b3f30cb --- /dev/null +++ b/keyboards/bastardkb/tbkmini/blackpill/mcuconf.h @@ -0,0 +1,37 @@ +/* + * Copyright 2020 Nick Brassel (tzarc) + * Copyright 2021 Stefan Kerkmann (@KarlK90) + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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_next + +#undef STM32_SPI_USE_SPI1 +#define STM32_SPI_USE_SPI1 TRUE + +#undef STM32_PWM_USE_TIM2 +#define STM32_PWM_USE_TIM2 TRUE + +#undef STM32_SERIAL_USE_USART1 +#define STM32_SERIAL_USE_USART1 TRUE + +#undef STM32_GPT_USE_TIM3 +#define STM32_GPT_USE_TIM3 TRUE + +#undef STM32_ST_USE_TIMER +#define STM32_ST_USE_TIMER 5 diff --git a/keyboards/bastardkb/tbkmini/blackpill/rules.mk b/keyboards/bastardkb/tbkmini/blackpill/rules.mk new file mode 100644 index 00000000..48c904dd --- /dev/null +++ b/keyboards/bastardkb/tbkmini/blackpill/rules.mk @@ -0,0 +1,5 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +MOUSE_SHARED_EP = no # Unify multiple HID interfaces into a single Endpoint + +SERIAL_DRIVER = usart diff --git a/keyboards/bastardkb/tbkmini/info.json b/keyboards/bastardkb/tbkmini/info.json new file mode 100644 index 00000000..ff2df9cd --- /dev/null +++ b/keyboards/bastardkb/tbkmini/info.json @@ -0,0 +1,78 @@ +{ + "url": "https://www.bastardkb.com/tbk-mini", + "usb": { + "pid": "0x1828" + }, + "rgb_matrix": { + "max_brightness": 50, + "sleep": true, + "split_count": [21, 21] + }, + "rgblight": { + "led_count": 42, + "split_count": [21, 21] + }, + "split": { + "transport": { + "sync": { + "matrix_state": true + } + } + }, + "community_layouts": ["split_3x6_3"], + "layouts": { + "LAYOUT_split_3x6_3": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 4], "x": 4, "y": 0}, + {"matrix": [0, 5], "x": 5, "y": 0}, + + {"matrix": [4, 5], "x": 11, "y": 0}, + {"matrix": [4, 4], "x": 12, "y": 0}, + {"matrix": [4, 3], "x": 13, "y": 0}, + {"matrix": [4, 2], "x": 14, "y": 0}, + {"matrix": [4, 1], "x": 15, "y": 0}, + {"matrix": [4, 0], "x": 16, "y": 0}, + + {"matrix": [1, 0], "x": 0, "y": 1}, + {"matrix": [1, 1], "x": 1, "y": 1}, + {"matrix": [1, 2], "x": 2, "y": 1}, + {"matrix": [1, 3], "x": 3, "y": 1}, + {"matrix": [1, 4], "x": 4, "y": 1}, + {"matrix": [1, 5], "x": 5, "y": 1}, + + {"matrix": [5, 5], "x": 11, "y": 1}, + {"matrix": [5, 4], "x": 12, "y": 1}, + {"matrix": [5, 3], "x": 13, "y": 1}, + {"matrix": [5, 2], "x": 14, "y": 1}, + {"matrix": [5, 1], "x": 15, "y": 1}, + {"matrix": [5, 0], "x": 16, "y": 1}, + + {"matrix": [2, 0], "x": 0, "y": 2}, + {"matrix": [2, 1], "x": 1, "y": 2}, + {"matrix": [2, 2], "x": 2, "y": 2}, + {"matrix": [2, 3], "x": 3, "y": 2}, + {"matrix": [2, 4], "x": 4, "y": 2}, + {"matrix": [2, 5], "x": 5, "y": 2}, + + {"matrix": [6, 5], "x": 11, "y": 2}, + {"matrix": [6, 4], "x": 12, "y": 2}, + {"matrix": [6, 3], "x": 13, "y": 2}, + {"matrix": [6, 2], "x": 14, "y": 2}, + {"matrix": [6, 1], "x": 15, "y": 2}, + {"matrix": [6, 0], "x": 16, "y": 2}, + + {"matrix": [3, 3], "x": 5, "y": 3}, + {"matrix": [3, 4], "x": 6, "y": 3}, + {"matrix": [3, 1], "x": 7, "y": 3}, + + {"matrix": [7, 1], "x": 9, "y": 3}, + {"matrix": [7, 4], "x": 10, "y": 3}, + {"matrix": [7, 3], "x": 11, "y": 3} + ] + } + } +} diff --git a/keyboards/bastardkb/tbkmini/keymaps/default/keymap.c b/keyboards/bastardkb/tbkmini/keymaps/default/keymap.c new file mode 100644 index 00000000..d87e9c2a --- /dev/null +++ b/keyboards/bastardkb/tbkmini/keymaps/default/keymap.c @@ -0,0 +1,69 @@ +/* + * Copyright 2021 Quentin LEBASTARD + * + * 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 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [0] = LAYOUT_split_3x6_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ESC, + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + KC_LGUI, KC_SPC, MO(1), MO(2), KC_ENT, KC_RALT + //`--------------------------' `--------------------------' + + ), + + [1] = LAYOUT_split_3x6_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + KC_LGUI, KC_SPC, _______, MO(3), KC_ENT, KC_RALT + //`--------------------------' `--------------------------' + ), + + [2] = LAYOUT_split_3x6_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TILD, + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + KC_LGUI, KC_SPC, MO(3), _______, KC_ENT, KC_RALT + //`--------------------------' `--------------------------' + ), + + [3] = LAYOUT_split_3x6_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + RM_TOGG, RM_HUEU, RM_SATU, RM_VALU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + RM_NEXT, RM_HUED, RM_SATD, RM_VALD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + KC_LGUI, KC_SPC, _______, _______, KC_ENT, KC_RALT + //`--------------------------' `--------------------------' + )}; diff --git a/keyboards/bastardkb/tbkmini/keymaps/oco9oco/keymap.c b/keyboards/bastardkb/tbkmini/keymaps/oco9oco/keymap.c new file mode 100644 index 00000000..50c2443e --- /dev/null +++ b/keyboards/bastardkb/tbkmini/keymaps/oco9oco/keymap.c @@ -0,0 +1,102 @@ +#include "oco9oco.h" //look for users/oco9oco/ +//clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_BASE] = LAYOUT_crkbd_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + KC_ESC, __________________QWERTY_L1________________, __________________QWERTY_R1________________, KC_LNG1, + SFT_CAPS,__________________QWERTY_SACS_L2___________, __________________QWERTY_R2________________, KC_QUOT, + KC_LGUI, __________________QWERTY_L3________________, __________________QWERTY_HOME_R3___________, KC_BSLS, + THUMB_L1, THUMB_L2, THUMB_L3, THUMB_R1, THUMB_R3, THUMB_R2 + ), + [_BASE_SWAP] = LAYOUT_crkbd_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + _______, __________________QWERTY_L1________________, __________________QWERTY_R1________________, _______, + _______, __________________QWERTY_SACS_L2___________, __________________QWERTY_R2________________, _______, + _______, __________________QWERTY_L3________________, __________________QWERTY_HOME_R3___________, _______, + _______, _______, _______, THUMB_R3, THUMB_R2, THUMB_R1 + ), + + [_BASE_NOMOD] = LAYOUT_crkbd_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + KC_ESC, __________________QWERTY_L1________________, __________________QWERTY_R1________________, _______, + SFT_CAPS,__________________QWERTY_L2________________, __________________QWERTY_R2________________, KC_QUOT, + _______, __________________QWERTY_L3________________, __________________QWERTY_HOME_R3___________, KC_BSLS, + THUMB_L1, THUMB_L2, THUMB_L3, TH_BK_R1, THUMB_R3, THUMB_R2 +), + [_DOOM] = LAYOUT_crkbd_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + KC_ESC, KC_ENT, KC_Q,KC_W, KC_E, KC_R, TO(_BASE),XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, TO(_BASE), + KC_TAB, KC_LSFT,KC_A, KC_S, KC_D, KC_G, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, + XXXXXXX, KC_Z, KC_X, KC_4, KC_V, KC_B, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX, XXXXXXX, + KC_F, KC_SPC, KC_C, KC_ENT, THUMB_R3, THUMB_R2 +), + [_IPC] = LAYOUT_crkbd_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + A(KC_F4), C(KC_F1), SCRNSHOT, G(KC_E), CLASS_A, HWP_MACRO, KC_GRV, _________NUM_789_________, _______, KC_PLUS, + TO(_DOOM), IPC(A), IPC(S), IPC_MIN, IPC(F), KC_DOT, AT_IPC, _________NUM_456_________, KC_COLN, KC_DQUO, + TO(_BASE_NOMOD), IPC(Z), HWP_CITE, IPC(C), KC_EQL, KC_BSLS, XXXXXXX, _________NUM_123_________, _______, KC_PIPE, + TO(_BASE_NOMOD), _______, TO(_BASE), KC_LPRN, KC_RPRN, LT(_NAV,KC_0) +), + [_NUM] = LAYOUT_crkbd_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + _______, KC_P, KC_O, KC_I, KC_U, KC_Y, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_EQL, + _______, XXXXXXX, KC_L, KC_K, KC_J, KC_H, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_COLN, KC_DQUO, + _______, XXXXXXX, XXXXXXX, XXXXXXX, KC_M, KC_N, KC_B, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PIPE, + _______, _______, _______, _______, _______, _______ + ), + [_NAV] = LAYOUT_split_3x6_3( //Navigations +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + KC_ESC, NAV_NS, LCA(KC_J),LCA(KC_K),LCA(KC_L),KC_F5, A(KC_4), A(KC_7), A(KC_8), A(KC_4), A(S(KC_8)), S(KC_F8), + ALT_TAB, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_F6, KC_INS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, + _______, NAV(Z), C(KC_X), C(KC_C), C(KC_V), C(KC_B), KC_APP, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX, + KC_LNG1, KC_BSPC, KC_DEL, _______, _______, _______ + ), + [_FUNC] = LAYOUT_crkbd_wrapper( //Functions +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + XXXXXXX, C(KC_F1),KC_F2, KC_F3, A(KC_F4),KC_F5, _____________FUNC_2789____________, XXXXXXX, XXXXXXX, + XXXXXXX, KC_LSFT, KC_LALT, KC_LCTL, KC_LSFT, KC_F6, _____________FUNC_1456____________, XXXXXXX, XXXXXXX, + QK_COMBO_TOGGLE, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _____________FUNC_0123____________, XXXXXXX, XXXXXXX, + _______, _______, _______, _______, _______, _______ + ), + [_MOUSE] = LAYOUT_split_3x6_3( //Mouse keys +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + A(KC_F4), C(KC_F1), KC_WH_D, KC_MS_U, KC_WH_U, KC_F5, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, QK_BOOT, + KC_LNG1, KC_LSFT, KC_MS_L, KC_MS_D, KC_MS_R, KC_F6, XXXXXXX, KC_ACL0, KC_BTN1, KC_BTN2, KC_BTN3, QK_MAKE, + KC_LNG2, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_F7, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, + KC_LCTL, KC_LNG1, KC_LSFT, _______, _______, _______ + ), + [_ONEHAND] = LAYOUT_split_3x6_3( //Trackball Manipulation +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + KC_ESC, C(KC_F1), KC_F2, KC_F3, ALT_F4, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TO_BASE, + KC_TAB, KC_WH_U, KC_BTN2, KC_UP, KC_BTN1, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + G(KC_R), KC_WH_D, KC_LEFT, KC_DOWN, KC_RGHT, KC_SPC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_LCTL, KC_BSPC, KC_ENT, TO_BASE, XXXXXXX, XXXXXXX + ) +}; +//clang-format on + +// COMBOS +// enum combos { +// COMBO_B, +// COMBO_P, +// COMBO_LNG1, +// COMBO_LNG2 +// // COMBO_OS, +// // COMBO_ONEHAND_HOME, +// // //ZB_STENO, +// }; + +// const uint16_t PROGMEM JK_combo[] = {KC_J, KC_K, COMBO_END}; +// const uint16_t PROGMEM KL_combo[] = {KC_K, KC_L, COMBO_END}; +// const uint16_t PROGMEM JL_combo[] = {KC_J, KC_L, COMBO_END}; +// const uint16_t PROGMEM NM_combo[] = {KC_N, KC_M, COMBO_END}; + +// combo_t key_combos[] = { +// [COMBO_B] = COMBO(JK_combo, KC_B), +// [COMBO_P] = COMBO(KL_combo, KC_P), +// [COMBO_LNG1] = COMBO(JL_combo, KC_LNG1), +// [COMBO_LNG2] = COMBO(NM_combo, G(KC_SPC)), +// }; + + diff --git a/keyboards/bastardkb/tbkmini/keymaps/oco9oco/rules.mk b/keyboards/bastardkb/tbkmini/keymaps/oco9oco/rules.mk new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/bastardkb/tbkmini/readme.md b/keyboards/bastardkb/tbkmini/readme.md new file mode 100644 index 00000000..74e24ff5 --- /dev/null +++ b/keyboards/bastardkb/tbkmini/readme.md @@ -0,0 +1,29 @@ +# TBK Mini + +A split, compact ergonomic keyboard. + +* Keyboard Maintainer: [Bastard Keyboards](https://github.com/Bastardkb/) +* Hardware Supported: elite-C V4 +* Hardware Availability: [Bastardkb.com](https://bastardkb.com/) + +## Building the firmware + +**You must specify the shield version when compiling/flashing the firmware.** + +The template is: + +```shell +qmk compile -kb bastardkb/tbkmini/{VERSION}/elitec -km {KEYMAP} +``` + +| Shield Version | default | via | +| --------------- | -------------------------------------------------------------- | ---------------------------------------------------------- | +| v1 (Elite-C) | `qmk compile -kb bastardkb/tbkmini/v1/elitec -km default` | `qmk compile -kb bastardkb/tbkmini/v1/elitec -km via` | +| v2 (Elite-C) | `qmk compile -kb bastardkb/tbkmini/v2/elitec -km default` | `qmk compile -kb bastardkb/tbkmini/v2/elitec -km via` | +| v2 (Splinky v2) | `qmk compile -kb bastardkb/tbkmini/v2/splinky/v2 -km default` | `qmk compile -kb bastardkb/tbkmini/v2/splinky/v2 -km via` | +| v2 (Splinky v3) | `qmk compile -kb bastardkb/tbkmini/v2/splinky/v3 -km default` | `qmk compile -kb bastardkb/tbkmini/v2/splinky/v3 -km via` | +| v2 (STeMCell) | `qmk compile -kb bastardkb/tbkmini/v2/stemcell -km default` | `qmk compile -kb bastardkb/tbkmini/v2/stemcell -km via` | + +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). + +See the [keyboard build instructions](http://docs.bastardkb.com/) diff --git a/keyboards/bastardkb/tbkmini/tbkmini.c b/keyboards/bastardkb/tbkmini/tbkmini.c new file mode 100644 index 00000000..51baefb7 --- /dev/null +++ b/keyboards/bastardkb/tbkmini/tbkmini.c @@ -0,0 +1,61 @@ +/** + * Copyright 2021 Quentin LEBASTARD + * + * 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" + +// clang-format off +#ifdef RGB_MATRIX_ENABLE +led_config_t g_led_config = { { + // left + { 0, 5, 6, 11, 12, 15 }, + { 1, 4, 7, 10, 13, 16 }, + { 2, 3, 8, 9, 14, 17 }, + { NO_LED, 18, NO_LED, 19, 20, NO_LED }, + // right + { 21, 26, 27, 32, 33, 36 }, + { 22, 25, 28, 31, 34, 37 }, + { 23, 24, 29, 30, 35, 38 }, + { NO_LED, 39, NO_LED, 40, 41, NO_LED } +}, { + // left + { 0, 0 }, { 0, 21 }, { 0, 42 }, // col 1 + { 20, 42 }, { 20, 21 }, { 20, 0 }, // col 2 + { 41, 0 }, { 41, 21 }, { 41, 42 }, + { 61, 42 }, { 61, 21 }, { 61, 0 }, + { 81, 0 }, { 81, 21 }, { 81, 42 }, + { 102, 0 }, { 102, 21 }, { 102, 42 }, + { 61, 64 }, { 81, 64 }, { 102, 64 }, // left thumb cluster + // right + { 224, 0 }, { 224, 21 }, { 224, 42 }, // col 12 + { 204, 42 }, { 204, 21 }, { 204, 0 }, // col 11 + { 183, 0 }, { 183, 21 }, { 183, 42 }, + { 163, 42 }, { 163, 21 }, { 163, 0 }, + { 142, 0 }, { 142, 21 }, { 142, 42 }, + { 122, 0 }, { 122, 21 }, { 122, 42 }, + { 163, 64 }, { 142, 64 }, { 122, 64 } // right thumb cluster +}, { + // left + 2, 2, 2, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, + 2, 2, 2, + // right + 2, 2, 2, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, + 2, 2, 2 +} }; +#endif +// clang-format on diff --git a/keyboards/bastardkb/tbkmini/v1/elitec/config.h b/keyboards/bastardkb/tbkmini/v1/elitec/config.h new file mode 100644 index 00000000..41b5aa1c --- /dev/null +++ b/keyboards/bastardkb/tbkmini/v1/elitec/config.h @@ -0,0 +1,22 @@ +/* + * Copyright 2021 Quentin LEBASTARD + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT diff --git a/keyboards/bastardkb/tbkmini/v1/elitec/keyboard.json b/keyboards/bastardkb/tbkmini/v1/elitec/keyboard.json new file mode 100644 index 00000000..59988074 --- /dev/null +++ b/keyboards/bastardkb/tbkmini/v1/elitec/keyboard.json @@ -0,0 +1,29 @@ +{ + "keyboard_name": "TBK Mini Elite-C", + "usb": { + "device_version": "1.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "rgb_matrix": true + }, + "ws2812": { + "pin": "D2" + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["B4", "E6", "C6", "B1", "B3", "B2"], + "rows": ["B5", "F7", "F6", "B6"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "D0" + }, + "processor": "atmega32u4", + "bootloader": "atmel-dfu" +} diff --git a/keyboards/bastardkb/tbkmini/v1/elitec/rules.mk b/keyboards/bastardkb/tbkmini/v1/elitec/rules.mk new file mode 100644 index 00000000..1868c4bb --- /dev/null +++ b/keyboards/bastardkb/tbkmini/v1/elitec/rules.mk @@ -0,0 +1 @@ +AUDIO_SUPPORTED = no # Audio is not supported diff --git a/keyboards/bastardkb/tbkmini/v2/elitec/config.h b/keyboards/bastardkb/tbkmini/v2/elitec/config.h new file mode 100644 index 00000000..e6b7fefa --- /dev/null +++ b/keyboards/bastardkb/tbkmini/v2/elitec/config.h @@ -0,0 +1,21 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT diff --git a/keyboards/bastardkb/tbkmini/v2/elitec/keyboard.json b/keyboards/bastardkb/tbkmini/v2/elitec/keyboard.json new file mode 100644 index 00000000..01679bcf --- /dev/null +++ b/keyboards/bastardkb/tbkmini/v2/elitec/keyboard.json @@ -0,0 +1,29 @@ +{ + "keyboard_name": "TBK Mini Elite-C", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "rgb_matrix": true + }, + "ws2812": { + "pin": "D3" + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["F6", "F5", "B6", "D7", "E6", "B4"], + "rows": ["F7", "C6", "D4", "B5"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "D2" + }, + "processor": "atmega32u4", + "bootloader": "atmel-dfu" +} diff --git a/keyboards/bastardkb/tbkmini/v2/elitec/rules.mk b/keyboards/bastardkb/tbkmini/v2/elitec/rules.mk new file mode 100644 index 00000000..1868c4bb --- /dev/null +++ b/keyboards/bastardkb/tbkmini/v2/elitec/rules.mk @@ -0,0 +1 @@ +AUDIO_SUPPORTED = no # Audio is not supported diff --git a/keyboards/bastardkb/tbkmini/v2/splinky_2/config.h b/keyboards/bastardkb/tbkmini/v2/splinky_2/config.h new file mode 100644 index 00000000..977fb0a6 --- /dev/null +++ b/keyboards/bastardkb/tbkmini/v2/splinky_2/config.h @@ -0,0 +1,31 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +// To use the handedness pin, resistors need to be installed on the adapter PCB. +// If so, uncomment the following code, and undefine MASTER_RIGHT above. +// #define SPLIT_HAND_PIN GP13 +// #define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* Reset. */ +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17 +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U diff --git a/keyboards/bastardkb/tbkmini/v2/splinky_2/keyboard.json b/keyboards/bastardkb/tbkmini/v2/splinky_2/keyboard.json new file mode 100644 index 00000000..2048db62 --- /dev/null +++ b/keyboards/bastardkb/tbkmini/v2/splinky_2/keyboard.json @@ -0,0 +1,30 @@ +{ + "keyboard_name": "TBK Mini Splinky", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": false, + "extrakey": true, + "rgb_matrix": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["GP27", "GP28", "GP15", "GP6", "GP7", "GP8"], + "rows": ["GP26", "GP5", "GP4", "GP9"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "GP1" + }, + "ws2812": { + "pin": "GP0", + "driver": "vendor" + }, + "processor": "RP2040", + "bootloader": "rp2040" +} diff --git a/keyboards/bastardkb/tbkmini/v2/splinky_2/readme.md b/keyboards/bastardkb/tbkmini/v2/splinky_2/readme.md new file mode 100644 index 00000000..662eb582 --- /dev/null +++ b/keyboards/bastardkb/tbkmini/v2/splinky_2/readme.md @@ -0,0 +1,5 @@ +# Splinky controller + +The splinky is a Pro-Micro/Elite-C replacement with USB-C and RP2040. + +See [plut0nium/0xB2](https://github.com/plut0nium/0xB2/#releases) to figure out the right version for you (v2 or v3). diff --git a/keyboards/bastardkb/tbkmini/v2/splinky_2/rules.mk b/keyboards/bastardkb/tbkmini/v2/splinky_2/rules.mk new file mode 100644 index 00000000..077573eb --- /dev/null +++ b/keyboards/bastardkb/tbkmini/v2/splinky_2/rules.mk @@ -0,0 +1,3 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +SERIAL_DRIVER = vendor diff --git a/keyboards/bastardkb/tbkmini/v2/splinky_3/config.h b/keyboards/bastardkb/tbkmini/v2/splinky_3/config.h new file mode 100644 index 00000000..e4960236 --- /dev/null +++ b/keyboards/bastardkb/tbkmini/v2/splinky_3/config.h @@ -0,0 +1,31 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +// To use the handedness pin, resistors need to be installed on the adapter PCB. +// If so, uncomment the following code, and undefine MASTER_RIGHT above. +// #define SPLIT_HAND_PIN GP15 +// #define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* Reset. */ +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP17 +#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U diff --git a/keyboards/bastardkb/tbkmini/v2/splinky_3/keyboard.json b/keyboards/bastardkb/tbkmini/v2/splinky_3/keyboard.json new file mode 100644 index 00000000..8dd21b75 --- /dev/null +++ b/keyboards/bastardkb/tbkmini/v2/splinky_3/keyboard.json @@ -0,0 +1,30 @@ +{ + "keyboard_name": "TBK Mini Splinky", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": false, + "extrakey": true, + "rgb_matrix": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "matrix_pins": { + "cols": ["GP27", "GP28", "GP21", "GP6", "GP7", "GP8"], + "rows": ["GP26", "GP5", "GP4", "GP9"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "GP1" + }, + "ws2812": { + "pin": "GP0", + "driver": "vendor" + }, + "processor": "RP2040", + "bootloader": "rp2040" +} diff --git a/keyboards/bastardkb/tbkmini/v2/splinky_3/readme.md b/keyboards/bastardkb/tbkmini/v2/splinky_3/readme.md new file mode 100644 index 00000000..662eb582 --- /dev/null +++ b/keyboards/bastardkb/tbkmini/v2/splinky_3/readme.md @@ -0,0 +1,5 @@ +# Splinky controller + +The splinky is a Pro-Micro/Elite-C replacement with USB-C and RP2040. + +See [plut0nium/0xB2](https://github.com/plut0nium/0xB2/#releases) to figure out the right version for you (v2 or v3). diff --git a/keyboards/bastardkb/tbkmini/v2/splinky_3/rules.mk b/keyboards/bastardkb/tbkmini/v2/splinky_3/rules.mk new file mode 100644 index 00000000..077573eb --- /dev/null +++ b/keyboards/bastardkb/tbkmini/v2/splinky_3/rules.mk @@ -0,0 +1,3 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +SERIAL_DRIVER = vendor diff --git a/keyboards/bastardkb/tbkmini/v2/stemcell/config.h b/keyboards/bastardkb/tbkmini/v2/stemcell/config.h new file mode 100644 index 00000000..ca1cc0f7 --- /dev/null +++ b/keyboards/bastardkb/tbkmini/v2/stemcell/config.h @@ -0,0 +1,38 @@ +/* + * Copyright 2022 Charly Delay (@0xcharly) + * + * 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 + +/* Handedness. */ +#define MASTER_RIGHT + +// To use the handedness pin, resistors need to be installed on the adapter PCB. +// If so, uncomment the following code, and undefine MASTER_RIGHT above. +// #define A0 PAL_LINE(GPIOA, 0) +// #define SPLIT_HAND_PIN A0 +// #define SPLIT_HAND_PIN_LOW_IS_LEFT // High -> right, Low -> left. + +/* RGB settings. */ +#define WS2812_PWM_DRIVER PWMD2 +#define WS2812_PWM_CHANNEL 4 +#define WS2812_PWM_PAL_MODE 1 +#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM7 +#define WS2812_PWM_DMA_CHANNEL 3 + +/* CRC. */ +#define CRC8_USE_TABLE +#define CRC8_OPTIMIZE_SPEED diff --git a/keyboards/bastardkb/tbkmini/v2/stemcell/halconf.h b/keyboards/bastardkb/tbkmini/v2/stemcell/halconf.h new file mode 100644 index 00000000..dbeb6aea --- /dev/null +++ b/keyboards/bastardkb/tbkmini/v2/stemcell/halconf.h @@ -0,0 +1,23 @@ +/* + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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 + +#define HAL_USE_PWM TRUE +#define HAL_USE_SERIAL TRUE + +#include_next diff --git a/keyboards/bastardkb/tbkmini/v2/stemcell/keyboard.json b/keyboards/bastardkb/tbkmini/v2/stemcell/keyboard.json new file mode 100644 index 00000000..41abba96 --- /dev/null +++ b/keyboards/bastardkb/tbkmini/v2/stemcell/keyboard.json @@ -0,0 +1,32 @@ +{ + "keyboard_name": "TBK Mini STeMCell", + "usb": { + "device_version": "2.0.0" + }, + "features": { + "bootmagic": true, + "mousekey": true, + "extrakey": true, + "rgb_matrix": true + }, + "rgb_matrix": { + "driver": "ws2812" + }, + "ws2812": { + "pin": "A2", + "driver": "pwm" + }, + "build": { + "debounce_type": "asym_eager_defer_pk" + }, + "matrix_pins": { + "cols": ["B1", "B2", "A4", "B4", "B5", "B8"], + "rows": ["B0", "B3", "A15", "B9"] + }, + "diode_direction": "ROW2COL", + "split": { + "enabled": true, + "soft_serial_pin": "A3" + }, + "development_board": "stemcell" +} diff --git a/keyboards/bastardkb/tbkmini/v2/stemcell/mcuconf.h b/keyboards/bastardkb/tbkmini/v2/stemcell/mcuconf.h new file mode 100644 index 00000000..6afebade --- /dev/null +++ b/keyboards/bastardkb/tbkmini/v2/stemcell/mcuconf.h @@ -0,0 +1,29 @@ +/* + * Copyright 2021 Charly Delay (@0xcharly) + * + * 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_next + +#undef STM32_SERIAL_USE_USART1 +#define STM32_SERIAL_USE_USART1 FALSE + +#undef STM32_PWM_USE_TIM2 +#define STM32_PWM_USE_TIM2 TRUE + +#undef STM32_ST_USE_TIMER +#define STM32_ST_USE_TIMER 5 diff --git a/keyboards/bastardkb/tbkmini/v2/stemcell/rules.mk b/keyboards/bastardkb/tbkmini/v2/stemcell/rules.mk new file mode 100644 index 00000000..3fe3e4ff --- /dev/null +++ b/keyboards/bastardkb/tbkmini/v2/stemcell/rules.mk @@ -0,0 +1,3 @@ +AUDIO_SUPPORTED = no # Audio is not supported + +SERIAL_DRIVER = usart diff --git a/keyboards/crkbd/keymaps/default/config.h b/keyboards/crkbd/keymaps/default/config.h new file mode 100644 index 00000000..aae511b0 --- /dev/null +++ b/keyboards/crkbd/keymaps/default/config.h @@ -0,0 +1,43 @@ +/* +This is the c configuration file for the keymap + +Copyright 2012 Jun Wako +Copyright 2015 Jack Humbert + +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 + +//#define USE_MATRIX_I2C + +//#define QUICK_TAP_TERM 0 +//#define TAPPING_TERM 100 + +#ifdef RGBLIGHT_ENABLE + #define RGBLIGHT_EFFECT_BREATHING + #define RGBLIGHT_EFFECT_RAINBOW_MOOD + #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + #define RGBLIGHT_EFFECT_SNAKE + #define RGBLIGHT_EFFECT_KNIGHT + #define RGBLIGHT_EFFECT_CHRISTMAS + #define RGBLIGHT_EFFECT_STATIC_GRADIENT + #define RGBLIGHT_EFFECT_RGB_TEST + #define RGBLIGHT_EFFECT_ALTERNATING + #define RGBLIGHT_EFFECT_TWINKLE + #define RGBLIGHT_LIMIT_VAL 120 + #define RGBLIGHT_HUE_STEP 10 + #define RGBLIGHT_SAT_STEP 17 + #define RGBLIGHT_VAL_STEP 17 +#endif diff --git a/keyboards/crkbd/keymaps/default/keymap.c b/keyboards/crkbd/keymaps/default/keymap.c new file mode 100644 index 00000000..6d8d5b7f --- /dev/null +++ b/keyboards/crkbd/keymaps/default/keymap.c @@ -0,0 +1,79 @@ +/* +Copyright 2019 @foostan +Copyright 2020 Drashna Jaelre <@drashna> + +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 + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_split_3x6_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ESC, + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + KC_LGUI, MO(1), KC_SPC, KC_ENT, MO(2), KC_RALT + //`--------------------------' `--------------------------' + + ), + + [1] = LAYOUT_split_3x6_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP,KC_RIGHT, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + KC_LGUI, _______, KC_SPC, KC_ENT, MO(3), KC_RALT + //`--------------------------' `--------------------------' + ), + + [2] = LAYOUT_split_3x6_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + KC_TAB, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LCTL, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_GRV, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, KC_TILD, + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + KC_LGUI, MO(3), KC_SPC, KC_ENT, _______, KC_RALT + //`--------------------------' `--------------------------' + ), + + [3] = LAYOUT_split_3x6_3( + //,-----------------------------------------------------. ,-----------------------------------------------------. + QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + RM_TOGG, RM_HUEU, RM_SATU, RM_VALU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------| + RM_NEXT, RM_HUED, RM_SATD, RM_VALD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + //|--------+--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------| + KC_LGUI, _______, KC_SPC, KC_ENT, _______, KC_RALT + //`--------------------------' `--------------------------' + ) +}; + +#ifdef ENCODER_MAP_ENABLE +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(RM_VALD, RM_VALU), ENCODER_CCW_CW(KC_RGHT, KC_LEFT), }, + [1] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(RM_VALD, RM_VALU), ENCODER_CCW_CW(KC_RGHT, KC_LEFT), }, + [2] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(RM_VALD, RM_VALU), ENCODER_CCW_CW(KC_RGHT, KC_LEFT), }, + [3] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT), ENCODER_CCW_CW(RM_VALD, RM_VALU), ENCODER_CCW_CW(KC_RGHT, KC_LEFT), }, +}; +#endif diff --git a/keyboards/crkbd/keymaps/oco9oco/config.h b/keyboards/crkbd/keymaps/oco9oco/config.h new file mode 100644 index 00000000..1c7298b7 --- /dev/null +++ b/keyboards/crkbd/keymaps/oco9oco/config.h @@ -0,0 +1,27 @@ +/* +Copyright 2022 Sungsoo Ryu + +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 . +*/ + + +//#define USE_MATRIX_I2C + +/* Select hand configuration */ + +#define MASTER_LEFT +// #define MASTER_RIGHT +// #define EE_HANDS + + diff --git a/keyboards/crkbd/keymaps/oco9oco/keymap.c b/keyboards/crkbd/keymaps/oco9oco/keymap.c new file mode 100644 index 00000000..1c1c8a37 --- /dev/null +++ b/keyboards/crkbd/keymaps/oco9oco/keymap.c @@ -0,0 +1,115 @@ +/* +Copyright 2022 oco9oco + +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 "oco9oco.h" //look for users/oco9oco/ +//clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_BASE] = LAYOUT_crkbd_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + KC_ESC, __________________QWERTY_L1________________, __________________QWERTY_R1________________, KC_EQL, + KC_CAPS, __________________QWERTY_SACS_L2___________, __________________QWERTY_HOME_R2___________, KC_QUOT, + KC_LSFT, __________________QWERTY_GUIZ_L3___________, __________________QWERTY_R3________________, KC_BSLS, + THUMB_L1, THUMB_L2, KC_DEL, THUMB_R3, THUMB_R2, THUMB_R1 + ), + [_BASE_NOMOD] = LAYOUT_crkbd_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + KC_ESC, __________________QWERTY_L1________________, __________________QWERTY_R1________________, KC_EQL, + KC_CAPS, __________________QWERTY_L2_SFTA___________, __________________QWERTY_R2________________, KC_QUOT, + KC_LSFT, __________________QWERTY_L3________________, __________________QWERTY_R3________________, KC_BSLS, + THUMB_L1, THUMB_L2, KC_DEL, THUMB_R3, THUMB_R2, THUMB_R1 +), + [_IPC] = LAYOUT_crkbd_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + PDF_HL, HAEN_B, HAEN_C, CLASS_E, CLASS_A, KC_SLSH, KC_GRV, _________NUM_789_________, KC_RBRC, KC_PLUS, + _______, IPC(A), IPC(S), IPC_MIN, IPC_COMM,KC_DOT, KC_LBRC, _________NUM_456_________, KC_COLN, KC_DQUO, + KC_LANG1,IPC(Z), HWP_CITE,IPC(C), KC_EQL, KC_BSLS, KC_RBRC, _________NUM_123_________, _______, KC_PIPE, + _______, _______, _______, _______, LT(_NAV,KC_0), _______ + ), + [_NUM] = LAYOUT_crkbd_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_EQL, + _______, KC_LGUI, KC_LALT, _NUM_MIN,KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_COLN, KC_DQUO, + _______, KC_SPC, BULLET_U,KC_COMM, BULLET_D,KC_DOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PIPE, + _______, _______, _______, A(KC_1), LT(_NAV,KC_0),KC_SPC + ), + [_NAV] = LAYOUT_split_3x6_3( //Navigations +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + ALT_F4, LCA(KC_H),LCA(KC_J),LCA(KC_K),LCA(KC_L),KC_F6, XXXXXXX, A(KC_4), A(KC_6), A(KC_7), A(KC_8), XXXXXXX, + KC_F2, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_F7, KC_INS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, + C(KC_F1),C(KC_Z), C(KC_X), C(KC_C), C(KC_V), C(KC_B), KC_APP, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX, + _______, KC_BSPC, KC_DEL, _______, _______, _______ + ), + [_FUNC] = LAYOUT_crkbd_wrapper( //Functions +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + XXXXXXX, C(KC_F1),KC_F2, KC_F3, A(KC_F4),KC_F5, _____________FUNC_2789____________, XXXXXXX, KC_BSPC, + XXXXXXX, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_F6, _____________FUNC_1456____________, XXXXXXX, KC_DEL, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _____________FUNC_0123____________, XXXXXXX, XXXXXXX, + _______, _______, _______, _______, _______, _______ + ), + [_MOUSE] = LAYOUT_split_3x6_3( //Mouse keys +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + KC_U, C(KC_F1), KC_WH_D, KC_MS_U, KC_WH_U, XXXXXXX, XXXXXXX,KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, RESET, + KC_P, KC_H, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, KC_INS, KC_ACL0, KC_BTN1, KC_BTN2, KC_BTN3, KC_ENT, + KC_X, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_APP, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_DEL, + _______, _______, _______, _______, _______, _______ + ), + [_ONEHAND] = LAYOUT_split_3x6_3( //Trackball Manipulation +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + KC_ESC, KC_WH_U, KC_BTN2, KC_UP, KC_BTN1, ALT_F4, XXXXXXX, G(KC_7), G(KC_8), G(KC_9), XXXXXXX, XXXXXXX, + XXXXXXX, KC_WH_D, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, G(KC_4), G(KC_5), G(KC_6), XXXXXXX, XXXXXXX, + KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, G(KC_1), G(KC_2), G(KC_3), XXXXXXX, XXXXXXX, + KC_DEL, KC_SPC, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX + ) +}; +//clang-format on + +// COMBOS +enum combos { + COMBO_ONEHAND, + COMBO_NOMOD, + COMBO_HOME, + COMBO_OS, + COMBO_ONEHAND_HOME, + //ZB_STENO, + COMBO_LENGTH +}; +uint16_t COMBO_LEN = COMBO_LENGTH; +const uint16_t PROGMEM qw_combo[] = {KC_W, KC_E, COMBO_END}; +const uint16_t PROGMEM pe_combo[] = {KC_P, KC_EQL, COMBO_END}; +const uint16_t PROGMEM sq_combo[] = {KC_SCLN, KC_QUOT, COMBO_END}; +const uint16_t PROGMEM os_combo[] = {KC_BSLS, KC_SLSH, COMBO_END}; +const uint16_t PROGMEM oh_combo[] = {KC_BTN2, KC_UP, COMBO_END}; + +combo_t key_combos[] = { + [COMBO_ONEHAND] = COMBO(qw_combo, TO(_ONEHAND)), + [COMBO_NOMOD] = COMBO(pe_combo, TO(_BASE_NOMOD)), + [COMBO_HOME] = COMBO(sq_combo, TO(_BASE)), + [COMBO_OS] = COMBO(os_combo, CG_TOGG), + [COMBO_ONEHAND_HOME] = COMBO(oh_combo, TO(_BASE)), +}; + +// Key overrides + +const key_override_t DEL_override = ko_make_basic(MOD_MASK_SHIFT, KC_DEL, KC_BSPC); // Shift + del = bspc +// // shift + caps lock = toggle control - gui + +const key_override_t **key_overrides = (const key_override_t *[]){ // This globally defines all key overrides to be used + &DEL_override, //&OS_override, + NULL // Null terminate the array of overrides! +}; + diff --git a/keyboards/crkbd/keymaps/oco9oco/readme.md b/keyboards/crkbd/keymaps/oco9oco/readme.md new file mode 100644 index 00000000..e2221941 --- /dev/null +++ b/keyboards/crkbd/keymaps/oco9oco/readme.md @@ -0,0 +1,7 @@ +# crkbd oco9oco Keymap +## QWERTY Base / Home row mods +A standard qwerty layout. +All layers except Home row mod switching and Trackball assist layer can be accessed only with holding key. +Most of the modifiers are on the left side. +Based on Miryoku's home row mods, This keymap uses GACS Tap-mods for right hand. For Korean typing experience, home row mods on the left hand side have an order of SACS, which is mainly for the double consonant on the 1st alpha row(QWERT). + diff --git a/keyboards/crkbd/keymaps/oco9oco/rules.mk b/keyboards/crkbd/keymaps/oco9oco/rules.mk new file mode 100644 index 00000000..0945e0cb --- /dev/null +++ b/keyboards/crkbd/keymaps/oco9oco/rules.mk @@ -0,0 +1,2 @@ +LTO_ENABLE = yes +BOOTLOADER=caterina diff --git a/keyboards/idobao/id75/keymaps/oco9oco/keymap.c b/keyboards/idobao/id75/keymaps/oco9oco/keymap.c new file mode 100644 index 00000000..106347d2 --- /dev/null +++ b/keyboards/idobao/id75/keymaps/oco9oco/keymap.c @@ -0,0 +1,138 @@ +/* Copyright 2022 oco9oco + * + * 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 "oco9oco.h" //look for users/oco9oco/ +// Keyboard Layers +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +//clang-format off +[_BASE] = LAYOUT_ID75_wrapper( /* QWERTY */ + KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_MINS, KC_GRV, KC_EQL, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL, + KC_TAB, __________________QWERTY_L1________________, KC_HOME, BRKT, KC_PGUP, __________________QWERTY_R1________________, KC_BSPC, + KC_CAPS, __________________QWERTY_SACS_L2___________, KC_END, KC_UP, KC_PGDN, __________________QWERTY_HOME_R2___________, KC_QUOT, + KC_LSFT, __________________QWERTY_GUIZ_L3___________, KC_LEFT, KC_DOWN, KC_RGHT, __________________QWERTY_R3________________, KC_BSLS, + KC_LCTL, KC_LGUI, KC_LALT, KC_SLSH, THUMB_L1,THUMB_L2,THUMB_L3,TG(_ALT),THUMB_R3, THUMB_R2,THUMB_R1,KC_LANG1,KC_LANG2, XXXXXXX, _ +), +[_ALT] = LAYOUT_ID75_wrapper( /* QWERTY */ + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, __________________QWERTY_L1________________, _______, _______, _______, __________________QWERTY_R1________________, _______, + _______, __________________QWERTY_L1________________, _______, _______, _______, __________________QWERTY_R2________________, _______, + _______, __________________QWERTY_L3________________, _______, _______, KC_B, __________________QWERTY_R3________________, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), +[_SORIZAVA_3BEOL] = LAYOUT_ID75_wrapper( /* MACRO */ + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, KC_U, KC_P, KC_X, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, XXXXXXX, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, _______ +), + + +[_NAV] = LAYOUT_ID75_wrapper( /* QWERTY */ + _______, C(KC_F1),_______, _______, A(KC_F4),KC_F5, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F6, _______, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______, + _______, KC_LSFT, KC_LALT, KC_LCTL, KC_LSFT, KC_F7, _______, _______, _______, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, + _______, NAV(Z), C(KC_X),C(KC_C), C(KC_V), C(KC_B), _______, _______, _______, KC_APP, KC_HOME, KC_PGDN, KC_PGUP, KC_END, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), +[_IPC] = LAYOUT_ID75_wrapper( + _______, PDF_HL, KC_P, KC_X, XXXXXXX, XXXXXXX, _______, _______, _______, KC_LT, KC_LPRN, KC_GRV, KC_RPRN, KC_GT, _______, + _______, A(KC_1), A(KC_2), A(KC_3), A(KC_7), A(KC_8), _______, _______, _______, KC_LBRC, _________NUM_789_________, KC_RBRC, _______, + _______, IPC(A), IPC(S), IPC_MIN, IPC(F), KC_DOT, _______, _______, _______, KC_GRV, _________NUM_456_________, KC_COLN, KC_DQUO, + _______, IPC(Z), BRKT, IPC(C), KC_EQL, KC_COLN, _______, _______, _______, A(KC_2), _________NUM_123_________, _______, KC_PIPE, + _______, _______, _______, _______, _______, _______, _______, _______, _______, LT(_NAV, KC_0),_______, _______, _______, _______,_______ +), +[_MOUSE] = LAYOUT_ID75_wrapper( + _______, C(KC_F1),_______, _______, A(KC_F4),KC_F5, _______, _______, _______, _______, _______, _______, _______, _______, RESET, + KC_U, XXXXXXX, KC_WH_D, KC_MS_U, KC_WH_U, XXXXXXX, _______, _______, _______, XXXXXXX, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_P, KC_LSFT, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, _______, _______, _______, KC_INS, KC_ACL0, KC_BTN1, KC_BTN2, KC_BTN3, XXXXXXX, + KC_X, UNDO, CUT, COPY, PASTE, BOLDFACE,_______, _______, _______, KC_APP, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, + _______, _______, _______, KC_LCTL, KC_SPC, KC_ENT, _______, _______, _______, KC_TRNS, _______, _______, _______, _______, _______ +), +}; +//clang-format on + +// COMBOS +enum combos { + COMBO_ONEHAND, + //ZB_STENO, + COMBO_LENGTH +}; +uint16_t COMBO_LEN = COMBO_LENGTH; +const uint16_t PROGMEM onehand_combo[] = {KC_Q, KC_W, COMBO_END}; +//const uint16_t PROGMEM STENO_combo[] = {SFTT_Z, KC_B, COMBO_END}; +combo_t key_combos[] = { + [COMBO_ONEHAND] = COMBO(onehand_combo, TO(_ONEHAND)), +// [ZB_STENO] = COMBO(STENO_combo, TO(_SORIZAVA_3BEOL)), +}; + +// // Tapping term +// uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { +// switch (keycode) { +// case THUMB_L2: +// return TAPPING_TERM - 100; +// case LGUI_T(KC_F): +// case LGUI_T(KC_Z): +// return TAPPING_TERM + 200; +// case SFTT_F: +// case SFTT_J: +// case GUIT_A: +// case GUIT_SCL: +// return TAPPING_TERM + 50; +// case SFTT_A: +// case SFTT_Z: +// return TAPPING_TERM + 100; +// default: +// return TAPPING_TERM; +// } +// } +// //Get hold on other key press +// bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) { +// switch (keycode) { +// case THUMB_L2: +// return true; +// case SFTT_A: +// case SFTT_Z: +// return true;// KEY_ROW, KEY_COL: look for oco9oco.h +// default: +// return false; +// } +// } +// // Ignore mod tap interrupt +// bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) { +// switch (keycode) { +// case THUMB_L2: +// case THUMB_R1: +// case THUMB_R2: +// case THUMB_R3: +// case LGUI_T(KC_F): +// case SFTT_A: +// case SFTT_Z: +// case SFTT_F: +// case SFTT_J: +// case ALTT_S: +// case CTLT_D: +// case GUIT_SCL: +// case ALTT_L: +// case CTLT_K: +// case GUIT_A: +// case LGUI_T(KC_Z): +// case LT(_NAV, KC_0): +// return true; +// default: +// return false; +// } +// } diff --git a/keyboards/idobao/id75/keymaps/oco9oco/readme.md b/keyboards/idobao/id75/keymaps/oco9oco/readme.md new file mode 100644 index 00000000..a1c0236e --- /dev/null +++ b/keyboards/idobao/id75/keymaps/oco9oco/readme.md @@ -0,0 +1 @@ +# The default keymap for xd75, with led controls \ No newline at end of file diff --git a/keyboards/idobao/id75/keymaps/oco9oco/rules.mk b/keyboards/idobao/id75/keymaps/oco9oco/rules.mk new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/keycapsss/kimiko/glcdfont.c b/keyboards/keycapsss/kimiko/glcdfont.c new file mode 100644 index 00000000..ff2f3bdc --- /dev/null +++ b/keyboards/keycapsss/kimiko/glcdfont.c @@ -0,0 +1,251 @@ +/* Copyright 2019 MechMerlin + * Copyright 2020 @ben_roe (keycapsss.com) + * Copyright 2022 @oriaj3 + * + * 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 "progmem.h" + +// Corne 8x6 font +// Online editor: https://helixfonteditor.netlify.com +// or https://joric.github.io/qle/ +// See also: https://github.com/soundmonster/glcdfont_converter + +const unsigned char font[] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, + 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, + 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, + 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, + 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, + 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, + 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, + 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, + 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, + 0x26, 0x29, 0x79, 0x29, 0x26, 0x00, + 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, + 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, + 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, + 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, + 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, + 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, + 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, + 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, + 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, + 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, + 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, + 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, + 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, + 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, + 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, + 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, + 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, + 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, + 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, + 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, + 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, + 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, + 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, + 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, + 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, + 0x00, 0x80, 0x70, 0x30, 0x00, 0x00, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, + 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, + 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, + 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, + 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, + 0x72, 0x49, 0x49, 0x49, 0x46, 0x00, + 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, + 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, + 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, + 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, + 0x41, 0x21, 0x11, 0x09, 0x07, 0x00, + 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, + 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, + 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, + 0x00, 0x41, 0x22, 0x14, 0x08, 0x00, + 0x02, 0x01, 0x59, 0x09, 0x06, 0x00, + 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, + 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, + 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, + 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, + 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, + 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, + 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, + 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, + 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, + 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, + 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, + 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, + 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, + 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, + 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, + 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, + 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, + 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, + 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, + 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, + 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, + 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, + 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, + 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, + 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, + 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, + 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, + 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, + 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, + 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x00, 0x13, 0x07, 0x08, 0x00, 0x00, + 0x20, 0x54, 0x54, 0x78, 0x40, 0x00, + 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, + 0x38, 0x44, 0x44, 0x44, 0x28, 0x00, + 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, + 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, + 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, + 0x18, 0x24, 0x24, 0x1C, 0x78, 0x00, + 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, + 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, + 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, + 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, + 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, + 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, + 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, + 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, + 0x7C, 0x18, 0x24, 0x24, 0x18, 0x00, + 0x18, 0x24, 0x24, 0x18, 0x7C, 0x00, + 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, + 0x48, 0x54, 0x54, 0x54, 0x24, 0x00, + 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, + 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, + 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, + 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, + 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, + 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00, + 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, + 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, + 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, + 0x00, 0x41, 0x36, 0x08, 0x00, 0x00, + 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, + 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF8, 0x04, 0x22, 0x52, 0xE2, + 0x42, 0x42, 0x42, 0xE2, 0x52, 0x22, + 0x22, 0x22, 0x42, 0x82, 0x02, 0x02, + 0x22, 0x22, 0x02, 0x04, 0xF8, 0x00, + 0x00, 0xF8, 0x04, 0x02, 0x02, 0x82, + 0x42, 0x22, 0x42, 0x82, 0x02, 0x02, + 0x02, 0x82, 0x42, 0x22, 0x12, 0x22, + 0x42, 0x82, 0x02, 0x04, 0xF8, 0x00, + 0x00, 0xF8, 0xFC, 0xDE, 0xAE, 0x1E, + 0xBE, 0xBE, 0xBE, 0x1E, 0xAE, 0xDE, + 0xDE, 0xDE, 0xBE, 0x7E, 0xFE, 0xFE, + 0xDE, 0xDE, 0xFE, 0xFC, 0xF8, 0x00, + 0x00, 0xF8, 0xFC, 0xFE, 0xFE, 0x7E, + 0xBE, 0xDE, 0xBE, 0x7E, 0xFE, 0xFE, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, + 0x10, 0x10, 0x08, 0x08, 0x10, 0x10, + 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, + 0x80, 0x80, 0xC0, 0xC0, 0xE0, 0xE0, + 0xF0, 0xF0, 0xF8, 0xF8, 0xF0, 0xF0, + 0xE0, 0xE0, 0xC0, 0xC0, 0x80, 0x80, + 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, + 0x10, 0x10, 0x08, 0x08, 0x10, 0x10, + 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, + 0x80, 0x80, 0x40, 0xC0, 0x60, 0xA0, + 0x50, 0xB0, 0x58, 0xA8, 0x50, 0xB0, + 0x60, 0xA0, 0x40, 0xC0, 0x80, 0x80, + 0x1F, 0x1F, 0x0E, 0x1B, 0x11, 0xC0, + 0x1F, 0x1F, 0x00, 0x1F, 0x1F, 0x06, + 0x0C, 0xC6, 0x1F, 0x1F, 0x80, 0x5F, + 0x1F, 0x00, 0x1F, 0x1F, 0x8E, 0x9B, + 0x91, 0x80, 0x9F, 0x9F, 0x91, 0x1F, + 0x00, 0x1F, 0x20, 0x44, 0x4A, 0x47, + 0x42, 0x42, 0x42, 0x47, 0x4A, 0x44, + 0x40, 0x40, 0x40, 0x40, 0x41, 0x42, + 0x44, 0x44, 0x40, 0x20, 0x1F, 0x00, + 0x00, 0x1F, 0x20, 0x40, 0x41, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x41, 0x40, + 0x41, 0x41, 0x4F, 0x48, 0x48, 0x48, + 0x4F, 0x41, 0x41, 0x20, 0x1F, 0x00, + 0x00, 0x1F, 0x3F, 0x7B, 0x75, 0x78, + 0x7D, 0x7D, 0x7D, 0x78, 0x75, 0x7B, + 0x7F, 0x7F, 0x7F, 0x7F, 0x7E, 0x7D, + 0x7B, 0x7B, 0x7F, 0x3F, 0x1F, 0x00, + 0x00, 0x1F, 0x3F, 0x7F, 0x7E, 0x7F, + 0x7F, 0x7F, 0x7F, 0x7F, 0x7E, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x88, 0x5D, 0x5D, 0x3E, 0x3E, + 0x7C, 0x7C, 0xF8, 0xF8, 0x7C, 0x7C, + 0x3E, 0x3E, 0x5D, 0x5D, 0x88, 0x88, + 0x88, 0x88, 0x55, 0x55, 0x23, 0x23, + 0x47, 0x47, 0x8F, 0x8F, 0x47, 0x47, + 0x23, 0x23, 0x55, 0x55, 0x88, 0x88, + 0x88, 0x88, 0xD5, 0xD5, 0xE2, 0xE2, + 0xC4, 0xC4, 0x88, 0x88, 0xC4, 0xC4, + 0xE2, 0xE2, 0xD5, 0xD5, 0x88, 0x88, + 0x88, 0x88, 0x5D, 0xD5, 0x6B, 0xB6, + 0x6D, 0xD6, 0xAD, 0xDA, 0x6D, 0xD6, + 0x6B, 0xB6, 0x5D, 0xD5, 0x88, 0x88, + 0x00, 0x84, 0x87, 0x7D, 0x55, 0x57, + 0x55, 0x7D, 0x87, 0x84, 0x00, 0x91, + 0x95, 0x55, 0x55, 0x3F, 0x55, 0x55, + 0x95, 0x91, 0x00, 0x08, 0x08, 0x08, + 0x88, 0xFC, 0x0A, 0x09, 0x08, 0x08, + 0x04, 0xF8, 0x00, 0x00, 0xF8, 0x04, + 0x20, 0x1F, 0x00, 0x00, 0x1F, 0x20, + 0xFC, 0xF8, 0x00, 0x00, 0xF8, 0x04, + 0x3F, 0x1F, 0x00, 0x00, 0x1F, 0x20, + 0x04, 0xF8, 0x00, 0x00, 0xF8, 0xFC, + 0x20, 0x1F, 0x00, 0x00, 0x1F, 0x3F, + 0xFC, 0xF8, 0x00, 0x00, 0xF8, 0xFC, + 0x3F, 0x1F, 0x00, 0x00, 0x1F, 0x3F, + 0xFE, 0x7E, 0xBE, 0xDE, 0xEE, 0xDE, + 0xBE, 0x7E, 0xFE, 0xFC, 0xF8, 0x00, + 0x7E, 0x7E, 0x70, 0x77, 0x77, 0x77, + 0x70, 0x7E, 0x7E, 0x3F, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, + 0x04, 0x04, 0x08, 0x08, 0x04, 0x04, + 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, + 0x04, 0x04, 0x08, 0x08, 0x04, 0x04, + 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, + 0x07, 0x07, 0x0F, 0x0F, 0x07, 0x07, + 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x03, 0x02, + 0x05, 0x06, 0x0D, 0x0A, 0x05, 0x06, + 0x03, 0x02, 0x01, 0x01, 0x00, 0x00, +}; diff --git a/keyboards/keycapsss/kimiko/glcdfont.c:Zone.Identifier b/keyboards/keycapsss/kimiko/glcdfont.c:Zone.Identifier new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/keycapsss/kimiko/info.json b/keyboards/keycapsss/kimiko/info.json new file mode 100644 index 00000000..a962104c --- /dev/null +++ b/keyboards/keycapsss/kimiko/info.json @@ -0,0 +1,9 @@ +{ + "features": { + "mousekey": true, + "extrakey": true + }, + "split": { + "enabled": true + } +} diff --git a/keyboards/keycapsss/kimiko/info.json:Zone.Identifier b/keyboards/keycapsss/kimiko/info.json:Zone.Identifier new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/keycapsss/kimiko/keymaps/default/config.h b/keyboards/keycapsss/kimiko/keymaps/default/config.h new file mode 100644 index 00000000..8be15d96 --- /dev/null +++ b/keyboards/keycapsss/kimiko/keymaps/default/config.h @@ -0,0 +1,43 @@ +/* Copyright 2019 MechMerlin + * Copyright 2020 @ben_roe (keycapsss.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 . + */ + +#pragma once + +#define OLED_FONT_H "keyboards/keycapsss/kimiko/keymaps/default/glcdfont.c" +// #define OLED_FONT_WIDTH 5 +// #define OLED_FONT_HEIGHT 7 + +#ifdef RGBLIGHT_ENABLE +# define RGBLIGHT_HUE_STEP 8 +# define RGBLIGHT_SAT_STEP 8 +# define RGBLIGHT_VAL_STEP 8 +# define RGBLIGHT_SLEEP /* the RGB lighting will be switched off when the host goes to sleep */ +# define RGBLIGHT_EFFECT_BREATHING +# define RGBLIGHT_EFFECT_RAINBOW_MOOD +# define RGBLIGHT_EFFECT_RAINBOW_SWIRL +# define RGBLIGHT_EFFECT_SNAKE +# define RGBLIGHT_EFFECT_KNIGHT +# define RGBLIGHT_EFFECT_CHRISTMAS +# define RGBLIGHT_EFFECT_STATIC_GRADIENT +# define RGBLIGHT_EFFECT_RGB_TEST +# define RGBLIGHT_EFFECT_ALTERNATING +# define RGBLIGHT_EFFECT_TWINKLE +#endif + +// If you are using an Elite C rev3 on the slave side, uncomment the lines below: +// #define SPLIT_USB_DETECT +// #define NO_USB_STARTUP_CHECK diff --git a/keyboards/keycapsss/kimiko/keymaps/default/config.h:Zone.Identifier b/keyboards/keycapsss/kimiko/keymaps/default/config.h:Zone.Identifier new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/keycapsss/kimiko/keymaps/default/glcdfont.c b/keyboards/keycapsss/kimiko/keymaps/default/glcdfont.c new file mode 100644 index 00000000..c3c79d76 --- /dev/null +++ b/keyboards/keycapsss/kimiko/keymaps/default/glcdfont.c @@ -0,0 +1,237 @@ +// Copyright 2019 MechMerlin +// Copyright 2020 @ben_roe (keycapsss.com) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "progmem.h" + +// Corne 8x6 font +// Online editor: https://helixfonteditor.netlify.com +// or https://joric.github.io/qle/ +// See also: https://github.com/soundmonster/glcdfont_converter + +const unsigned char font[] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, + 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, + 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, + 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, + 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, + 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, + 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, + 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, + 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, + 0x26, 0x29, 0x79, 0x29, 0x26, 0x00, + 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, + 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, + 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, + 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, + 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, + 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, + 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, + 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, + 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, + 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, + 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, + 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, + 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, + 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, + 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, + 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, + 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, + 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, + 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, + 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, + 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, + 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, + 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, + 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, + 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, + 0x00, 0x80, 0x70, 0x30, 0x00, 0x00, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, + 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, + 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, + 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, + 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, + 0x72, 0x49, 0x49, 0x49, 0x46, 0x00, + 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, + 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, + 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, + 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, + 0x41, 0x21, 0x11, 0x09, 0x07, 0x00, + 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, + 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, + 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, + 0x00, 0x41, 0x22, 0x14, 0x08, 0x00, + 0x02, 0x01, 0x59, 0x09, 0x06, 0x00, + 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, + 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, + 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, + 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, + 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, + 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, + 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, + 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, + 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, + 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, + 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, + 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, + 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, + 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, + 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, + 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, + 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, + 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, + 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, + 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, + 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, + 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, + 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, + 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, + 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, + 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, + 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, + 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, + 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, + 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x00, 0x13, 0x07, 0x08, 0x00, 0x00, + 0x20, 0x54, 0x54, 0x78, 0x40, 0x00, + 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, + 0x38, 0x44, 0x44, 0x44, 0x28, 0x00, + 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, + 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, + 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, + 0x18, 0x24, 0x24, 0x1C, 0x78, 0x00, + 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, + 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, + 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, + 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, + 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, + 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, + 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, + 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, + 0x7C, 0x18, 0x24, 0x24, 0x18, 0x00, + 0x18, 0x24, 0x24, 0x18, 0x7C, 0x00, + 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, + 0x48, 0x54, 0x54, 0x54, 0x24, 0x00, + 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, + 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, + 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, + 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, + 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, + 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00, + 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, + 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, + 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, + 0x00, 0x41, 0x36, 0x08, 0x00, 0x00, + 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, + 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF8, 0x04, 0x22, 0x52, 0xE2, + 0x42, 0x42, 0x42, 0xE2, 0x52, 0x22, + 0x22, 0x22, 0x42, 0x82, 0x02, 0x02, + 0x22, 0x22, 0x02, 0x04, 0xF8, 0x00, + 0x00, 0xF8, 0x04, 0x02, 0x02, 0x82, + 0x42, 0x22, 0x42, 0x82, 0x02, 0x02, + 0x02, 0x82, 0x42, 0x22, 0x12, 0x22, + 0x42, 0x82, 0x02, 0x04, 0xF8, 0x00, + 0x00, 0xF8, 0xFC, 0xDE, 0xAE, 0x1E, + 0xBE, 0xBE, 0xBE, 0x1E, 0xAE, 0xDE, + 0xDE, 0xDE, 0xBE, 0x7E, 0xFE, 0xFE, + 0xDE, 0xDE, 0xFE, 0xFC, 0xF8, 0x00, + 0x00, 0xF8, 0xFC, 0xFE, 0xFE, 0x7E, + 0xBE, 0xDE, 0xBE, 0x7E, 0xFE, 0xFE, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, + 0x10, 0x10, 0x08, 0x08, 0x10, 0x10, + 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, + 0x80, 0x80, 0xC0, 0xC0, 0xE0, 0xE0, + 0xF0, 0xF0, 0xF8, 0xF8, 0xF0, 0xF0, + 0xE0, 0xE0, 0xC0, 0xC0, 0x80, 0x80, + 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, + 0x10, 0x10, 0x08, 0x08, 0x10, 0x10, + 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, + 0x80, 0x80, 0x40, 0xC0, 0x60, 0xA0, + 0x50, 0xB0, 0x58, 0xA8, 0x50, 0xB0, + 0x60, 0xA0, 0x40, 0xC0, 0x80, 0x80, + 0x1F, 0x1F, 0x0E, 0x1B, 0x11, 0xC0, + 0x1F, 0x1F, 0x00, 0x1F, 0x1F, 0x06, + 0x0C, 0xC6, 0x1F, 0x1F, 0x80, 0x5F, + 0x1F, 0x00, 0x1F, 0x1F, 0x8E, 0x9B, + 0x91, 0x80, 0x9F, 0x9F, 0x91, 0x1F, + 0x00, 0x1F, 0x20, 0x44, 0x4A, 0x47, + 0x42, 0x42, 0x42, 0x47, 0x4A, 0x44, + 0x40, 0x40, 0x40, 0x40, 0x41, 0x42, + 0x44, 0x44, 0x40, 0x20, 0x1F, 0x00, + 0x00, 0x1F, 0x20, 0x40, 0x41, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x41, 0x40, + 0x41, 0x41, 0x4F, 0x48, 0x48, 0x48, + 0x4F, 0x41, 0x41, 0x20, 0x1F, 0x00, + 0x00, 0x1F, 0x3F, 0x7B, 0x75, 0x78, + 0x7D, 0x7D, 0x7D, 0x78, 0x75, 0x7B, + 0x7F, 0x7F, 0x7F, 0x7F, 0x7E, 0x7D, + 0x7B, 0x7B, 0x7F, 0x3F, 0x1F, 0x00, + 0x00, 0x1F, 0x3F, 0x7F, 0x7E, 0x7F, + 0x7F, 0x7F, 0x7F, 0x7F, 0x7E, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x88, 0x5D, 0x5D, 0x3E, 0x3E, + 0x7C, 0x7C, 0xF8, 0xF8, 0x7C, 0x7C, + 0x3E, 0x3E, 0x5D, 0x5D, 0x88, 0x88, + 0x88, 0x88, 0x55, 0x55, 0x23, 0x23, + 0x47, 0x47, 0x8F, 0x8F, 0x47, 0x47, + 0x23, 0x23, 0x55, 0x55, 0x88, 0x88, + 0x88, 0x88, 0xD5, 0xD5, 0xE2, 0xE2, + 0xC4, 0xC4, 0x88, 0x88, 0xC4, 0xC4, + 0xE2, 0xE2, 0xD5, 0xD5, 0x88, 0x88, + 0x88, 0x88, 0x5D, 0xD5, 0x6B, 0xB6, + 0x6D, 0xD6, 0xAD, 0xDA, 0x6D, 0xD6, + 0x6B, 0xB6, 0x5D, 0xD5, 0x88, 0x88, + 0x00, 0x84, 0x87, 0x7D, 0x55, 0x57, + 0x55, 0x7D, 0x87, 0x84, 0x00, 0x91, + 0x95, 0x55, 0x55, 0x3F, 0x55, 0x55, + 0x95, 0x91, 0x00, 0x08, 0x08, 0x08, + 0x88, 0xFC, 0x0A, 0x09, 0x08, 0x08, + 0x04, 0xF8, 0x00, 0x00, 0xF8, 0x04, + 0x20, 0x1F, 0x00, 0x00, 0x1F, 0x20, + 0xFC, 0xF8, 0x00, 0x00, 0xF8, 0x04, + 0x3F, 0x1F, 0x00, 0x00, 0x1F, 0x20, + 0x04, 0xF8, 0x00, 0x00, 0xF8, 0xFC, + 0x20, 0x1F, 0x00, 0x00, 0x1F, 0x3F, + 0xFC, 0xF8, 0x00, 0x00, 0xF8, 0xFC, + 0x3F, 0x1F, 0x00, 0x00, 0x1F, 0x3F, + 0xFE, 0x7E, 0xBE, 0xDE, 0xEE, 0xDE, + 0xBE, 0x7E, 0xFE, 0xFC, 0xF8, 0x00, + 0x7E, 0x7E, 0x70, 0x77, 0x77, 0x77, + 0x70, 0x7E, 0x7E, 0x3F, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, + 0x04, 0x04, 0x08, 0x08, 0x04, 0x04, + 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, + 0x04, 0x04, 0x08, 0x08, 0x04, 0x04, + 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, + 0x07, 0x07, 0x0F, 0x0F, 0x07, 0x07, + 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x03, 0x02, + 0x05, 0x06, 0x0D, 0x0A, 0x05, 0x06, + 0x03, 0x02, 0x01, 0x01, 0x00, 0x00, +}; diff --git a/keyboards/keycapsss/kimiko/keymaps/default/glcdfont.c:Zone.Identifier b/keyboards/keycapsss/kimiko/keymaps/default/glcdfont.c:Zone.Identifier new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/keycapsss/kimiko/keymaps/default/keymap.c b/keyboards/keycapsss/kimiko/keymaps/default/keymap.c new file mode 100644 index 00000000..c61fdfc0 --- /dev/null +++ b/keyboards/keycapsss/kimiko/keymaps/default/keymap.c @@ -0,0 +1,132 @@ +/* Copyright 2019 Leo Batyuk + * Copyright 2020 Drashna Jaelre <@drashna> + * Copyright 2020 @ben_roe (keycapsss.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 . + */ + +#include QMK_KEYBOARD_H + +enum layers { + _QWERTY, + _LOWER, + _RAISE, + _ADJUST, +}; + +#define RAISE MO(_RAISE) +#define LOWER MO(_LOWER) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +/* QWERTY + * ,--------------------------------------------. ,----------------------------------------------. + * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | + * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| + * | Tab | Q | W | E | R | T | | Y | U | I | O | P | - | + * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| + * | LShift | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' | + * |---------+------+------+------+------+------| [ | | ] |------+------+------+------+------+-----------| + * | LCTRL | Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift/Enter| + * `-------------------------------------------| / \ \-----------------------------------------------' + * | LCTRL| LGUI | LALT |LOWER| Space / \Enter \ |RAISE |BackSP| RGUI | RALT | + * `----------------------------------' '------------------------------------' + */ + + [_QWERTY] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, + KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LBRC, KC_RBRC, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_ENT), + KC_LCTL, KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_BSPC, KC_RGUI, KC_RALT +), +/* LOWER + * ,-------------------------------------------. ,-----------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | + * |--------+------+------+------+------+------| |------+------+------+------+------+------| + * | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 | + * |--------+------+------+------+------+------| |------+------+------+------+------+------| + * | ` | ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | ~ | + * |--------+------+------+------+------+------| | | |------+------+------+------+------+------| + * | | | | | | |-------| |-------| | _ | + | { | } | \ | + * `-------------------------------------------| / \ \-----------------------------------------------' + * | LCTRL| LGUI | LALT |LOWER| Space / \Enter \ |RAISE |BackSP| RGUI | RALT | + * `----------------------------------' '------------------------------------' + */ + +[_LOWER] = LAYOUT( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F12, + KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TILD, + _______, _______, _______, _______, _______, _______, _______, _______, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_BSLS, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), +/* RAISE + * ,-----------------------------------------. ,-----------------------------------------. + * | | | | | | | | | | | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | F1 | F2 | F3 | F4 | F5 | F6 |-------. ,-------| | Left | Down | Up |Right | | + * |------+------+------+------+------+------| [ | | ] |------+------+------+------+------+------| + * | F7 | F8 | F9 | F10 | F11 | F12 |-------| |-------| + | - | = | [ | ] | \ | + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LCTRL| LGUI | LALT |LOWER| Space / \Enter \ |RAISE |BackSP| RGUI | RALT | + * `----------------------------------' '------------------------------------' + */ + +[_RAISE] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, KC_PLUS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), +/* ADJUST (Press LOWER and RAISE together) + * ,-----------------------------------------. ,-----------------------------------------. + * |QK_BOOT | | | | | | | | | | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * |RGB ON| HUE+ | SAT+ | VAL+ | | | | PREV | PLAY | NEXT | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | MODE | HUE- | SAT- | VAL- | | |-------. ,-------| VOL+ | MUTE | VOL- | | | | + * |------+------+------+------+------+------| | | |------+------+------+------+------+------| + * | | | | | | |-------| |-------| | | | | | | + * `-----------------------------------------/ / \ \-----------------------------------------' + * |LCTRL| LGUI | LALT |LOWER| Space / \Enter \ |RAISE |BackSP| RGUI | RALT | + * `----------------------------------' '------------------------------------' + */ + +[_ADJUST] = LAYOUT( + QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + UG_TOGG, UG_HUEU, UG_SATU, UG_VALU, XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, + UG_NEXT, UG_HUED, UG_SATD, UG_VALD, XXXXXXX, XXXXXXX, KC_VOLU, KC_MUTE, KC_VOLD, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; + + +layer_state_t layer_state_set_user(layer_state_t state) { + state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST); + return state; +} + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [_QWERTY] = { ENCODER_CCW_CW(KC_DOWN, KC_UP), ENCODER_CCW_CW(KC_LEFT, KC_RGHT) }, + [_LOWER] = { ENCODER_CCW_CW(UG_HUEU, KC_TAB), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_RAISE] = { ENCODER_CCW_CW(UG_VALD, UG_VALU), ENCODER_CCW_CW(UG_SPDD, UG_SPDU) }, + [_ADJUST] = { ENCODER_CCW_CW(UG_PREV, UG_NEXT), ENCODER_CCW_CW(UG_SATD, UG_SATU) }, +}; +#endif // ENCODER_MAP_ENABLE diff --git a/keyboards/keycapsss/kimiko/keymaps/default/keymap.c:Zone.Identifier b/keyboards/keycapsss/kimiko/keymaps/default/keymap.c:Zone.Identifier new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/keycapsss/kimiko/keymaps/default/rules.mk b/keyboards/keycapsss/kimiko/keymaps/default/rules.mk new file mode 100644 index 00000000..ef4f0c0b --- /dev/null +++ b/keyboards/keycapsss/kimiko/keymaps/default/rules.mk @@ -0,0 +1,9 @@ +OLED_ENABLE = yes +ENCODER_ENABLE = yes # ENables the use of one or more encoders +RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow + +# LTO: Link Time Optimizations. +# Reduce compiled size, but will automatically disable the legacy TMK Macros and Functions features. +# This does not affect QMK Macros and Layers +LTO_ENABLE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/keycapsss/kimiko/keymaps/default/rules.mk:Zone.Identifier b/keyboards/keycapsss/kimiko/keymaps/default/rules.mk:Zone.Identifier new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/keycapsss/kimiko/keymaps/oco9oco/config.h b/keyboards/keycapsss/kimiko/keymaps/oco9oco/config.h new file mode 100644 index 00000000..6393c235 --- /dev/null +++ b/keyboards/keycapsss/kimiko/keymaps/oco9oco/config.h @@ -0,0 +1,105 @@ +/* Copyright 2019 MechMerlin + * Copyright 2020 @ben_roe (keycapsss.com) + * Copyright 2022 @oco9oco + * + * 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 . + */ + +// #undef RGBLIGHT_ANIMATIONS +// #undef RGBLIGHT_EFFECT_BREATHING +// #undef RGBLIGHT_EFFECT_RAINBOW_MOOD +// #undef RGBLIGHT_EFFECT_RAINBOW_SWIRL +// #undef RGBLIGHT_EFFECT_SNAKE +// #undef RGBLIGHT_EFFECT_KNIGHT +// #undef RGBLIGHT_EFFECT_CHRISTMAS +// #undef RGBLIGHT_EFFECT_STATIC_GRADIENT +// #undef RGBLIGHT_EFFECT_RGB_TEST +// #undef RGBLIGHT_EFFECT_ALTERNATING +// #undef RGBLIGHT_EFFECT_TWINKLE + +// #undef ENABLE_RGB_MATRIX_ALPHAS_MODS +// #undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +// #undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +// #undef ENABLE_RGB_MATRIX_BREATHING +// #undef ENABLE_RGB_MATRIX_BAND_SAT +// #undef ENABLE_RGB_MATRIX_BAND_VAL +// #undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +// #undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +// #undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +// #undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +// #undef ENABLE_RGB_MATRIX_CYCLE_ALL +// #undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +// #undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +// #undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +// #undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN +// #undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +// #undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +// #undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL +// #undef ENABLE_RGB_MATRIX_DUAL_BEACON +// #undef ENABLE_RGB_MATRIX_RAINBOW_BEACON +// #undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +// #undef ENABLE_RGB_MATRIX_RAINDROPS +// #undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +// #undef ENABLE_RGB_MATRIX_HUE_BREATHING +// #undef ENABLE_RGB_MATRIX_HUE_PENDULUM +// #undef ENABLE_RGB_MATRIX_HUE_WAVE +// #undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL +// #undef ENABLE_RGB_MATRIX_PIXEL_RAIN + +// #undef ENABLE_RGB_MATRIX_TYPING_HEATMAP +// #undef ENABLE_RGB_MATRIX_DIGITAL_RAIN + +// #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +// #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE +// #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +// #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +// #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +// #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +// #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +// #undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +// #undef ENABLE_RGB_MATRIX_SPLASH +// #undef ENABLE_RGB_MATRIX_MULTISPLASH +// #undef ENABLE_RGB_MATRIX_SOLID_SPLASH +// #undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH + + +#ifdef RGBLIGHT_ENABLE +# define RGBLIGHT_HUE_STEP 8 +# define RGBLIGHT_SAT_STEP 8 +# define RGBLIGHT_VAL_STEP 8 +# define RGBLIGHT_SLEEP /* the RGB lighting will be switched off when the host goes to sleep */ +// # define RGBLIGHT_SPLIT +# define RGBLIGHT_LAYERS +/*== all animations enable ==*/ +//# define RGBLIGHT_ANIMATIONS +/*== or choose animations to save space ==*/ +# define RGBLIGHT_EFFECT_BREATHING +//# define RGBLIGHT_EFFECT_RAINBOW_MOOD +// # define RGBLIGHT_EFFECT_RAINBOW_SWIRL +// # define RGBLIGHT_EFFECT_SNAKE +// # define RGBLIGHT_EFFECT_KNIGHT +// # define RGBLIGHT_EFFECT_CHRISTMAS +// # define RGBLIGHT_EFFECT_STATIC_GRADIENT +// # define RGBLIGHT_EFFECT_RGB_TEST +// # define RGBLIGHT_EFFECT_ALTERNATING +#endif +#ifdef RGB_MATRIX_ENABLE +// # define RGB_MATRIX_KEYPRESSES +// # ifdef RGB_MATRIX_KEYPRESSES +// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +// # endif +#endif +// If you are using an Elite C rev3 on the slave side, uncomment the lines below: +// #define SPLIT_USB_DETECT +// #define NO_USB_STARTUP_CHECK diff --git a/keyboards/keycapsss/kimiko/keymaps/oco9oco/glcdfont.c b/keyboards/keycapsss/kimiko/keymaps/oco9oco/glcdfont.c new file mode 100644 index 00000000..5dfcc7cb --- /dev/null +++ b/keyboards/keycapsss/kimiko/keymaps/oco9oco/glcdfont.c @@ -0,0 +1,259 @@ +/* Software License Agreement (BSD License) + * + * Copyright (c) 2012 Adafruit Industries. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include "progmem.h" + +// Corne 8x6 font +// Online editor: https://helixfonteditor.netlify.com +// or https://joric.github.io/qle/ +// See also: https://github.com/soundmonster/glcdfont_converter + +const unsigned char font[] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, + 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, + 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, + 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, + 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, + 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, + 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, + 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, + 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, + 0x26, 0x29, 0x79, 0x29, 0x26, 0x00, + 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, + 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, + 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, + 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, + 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, + 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, + 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, + 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, + 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, + 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, + 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, + 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, + 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, + 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, + 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, + 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, + 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, + 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, + 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, + 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, + 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, + 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, + 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, + 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, + 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, + 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, + 0x00, 0x80, 0x70, 0x30, 0x00, 0x00, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, + 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, + 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, + 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, + 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00, + 0x72, 0x49, 0x49, 0x49, 0x46, 0x00, + 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, + 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, + 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, + 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, + 0x41, 0x21, 0x11, 0x09, 0x07, 0x00, + 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, + 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, + 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, + 0x00, 0x41, 0x22, 0x14, 0x08, 0x00, + 0x02, 0x01, 0x59, 0x09, 0x06, 0x00, + 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, + 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, + 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, + 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, + 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, + 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, + 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, + 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, + 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, + 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, + 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00, + 0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, + 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, + 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, + 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, + 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, + 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, + 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, + 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, + 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, + 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, + 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, + 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, + 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, + 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, + 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, + 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, + 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, + 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, + 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x00, 0x13, 0x07, 0x08, 0x00, 0x00, + 0x20, 0x54, 0x54, 0x78, 0x40, 0x00, + 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, + 0x38, 0x44, 0x44, 0x44, 0x28, 0x00, + 0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, + 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, + 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, + 0x18, 0x24, 0x24, 0x1C, 0x78, 0x00, + 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, + 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, + 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, + 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, + 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, + 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, + 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, + 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, + 0x7C, 0x18, 0x24, 0x24, 0x18, 0x00, + 0x18, 0x24, 0x24, 0x18, 0x7C, 0x00, + 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, + 0x48, 0x54, 0x54, 0x54, 0x24, 0x00, + 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, + 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, + 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, + 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, + 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, + 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00, + 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, + 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, + 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, + 0x00, 0x41, 0x36, 0x08, 0x00, 0x00, + 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, + 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xF8, 0x04, 0x22, 0x52, 0xE2, + 0x42, 0x42, 0x42, 0xE2, 0x52, 0x22, + 0x22, 0x22, 0x42, 0x82, 0x02, 0x02, + 0x22, 0x22, 0x02, 0x04, 0xF8, 0x00, + 0x00, 0xF8, 0x04, 0x02, 0x02, 0x82, + 0x42, 0x22, 0x42, 0x82, 0x02, 0x02, + 0x02, 0x82, 0x42, 0x22, 0x12, 0x22, + 0x42, 0x82, 0x02, 0x04, 0xF8, 0x00, + 0x00, 0xF8, 0xFC, 0xDE, 0xAE, 0x1E, + 0xBE, 0xBE, 0xBE, 0x1E, 0xAE, 0xDE, + 0xDE, 0xDE, 0xBE, 0x7E, 0xFE, 0xFE, + 0xDE, 0xDE, 0xFE, 0xFC, 0xF8, 0x00, + 0x00, 0xF8, 0xFC, 0xFE, 0xFE, 0x7E, + 0xBE, 0xDE, 0xBE, 0x7E, 0xFE, 0xFE, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, + 0x10, 0x10, 0x08, 0x08, 0x10, 0x10, + 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, + 0x80, 0x80, 0xC0, 0xC0, 0xE0, 0xE0, + 0xF0, 0xF0, 0xF8, 0xF8, 0xF0, 0xF0, + 0xE0, 0xE0, 0xC0, 0xC0, 0x80, 0x80, + 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, + 0x10, 0x10, 0x08, 0x08, 0x10, 0x10, + 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, + 0x80, 0x80, 0x40, 0xC0, 0x60, 0xA0, + 0x50, 0xB0, 0x58, 0xA8, 0x50, 0xB0, + 0x60, 0xA0, 0x40, 0xC0, 0x80, 0x80, + 0x1F, 0x1F, 0x0E, 0x1B, 0x11, 0xC0, + 0x1F, 0x1F, 0x00, 0x1F, 0x1F, 0x06, + 0x0C, 0xC6, 0x1F, 0x1F, 0x80, 0x5F, + 0x1F, 0x00, 0x1F, 0x1F, 0x8E, 0x9B, + 0x91, 0x80, 0x9F, 0x9F, 0x91, 0x1F, + 0x00, 0x1F, 0x20, 0x44, 0x4A, 0x47, + 0x42, 0x42, 0x42, 0x47, 0x4A, 0x44, + 0x40, 0x40, 0x40, 0x40, 0x41, 0x42, + 0x44, 0x44, 0x40, 0x20, 0x1F, 0x00, + 0x00, 0x1F, 0x20, 0x40, 0x41, 0x40, + 0x40, 0x40, 0x40, 0x40, 0x41, 0x40, + 0x41, 0x41, 0x4F, 0x48, 0x48, 0x48, + 0x4F, 0x41, 0x41, 0x20, 0x1F, 0x00, + 0x00, 0x1F, 0x3F, 0x7B, 0x75, 0x78, + 0x7D, 0x7D, 0x7D, 0x78, 0x75, 0x7B, + 0x7F, 0x7F, 0x7F, 0x7F, 0x7E, 0x7D, + 0x7B, 0x7B, 0x7F, 0x3F, 0x1F, 0x00, + 0x00, 0x1F, 0x3F, 0x7F, 0x7E, 0x7F, + 0x7F, 0x7F, 0x7F, 0x7F, 0x7E, 0x7F, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x88, 0x88, 0x5D, 0x5D, 0x3E, 0x3E, + 0x7C, 0x7C, 0xF8, 0xF8, 0x7C, 0x7C, + 0x3E, 0x3E, 0x5D, 0x5D, 0x88, 0x88, + 0x88, 0x88, 0x55, 0x55, 0x23, 0x23, + 0x47, 0x47, 0x8F, 0x8F, 0x47, 0x47, + 0x23, 0x23, 0x55, 0x55, 0x88, 0x88, + 0x88, 0x88, 0xD5, 0xD5, 0xE2, 0xE2, + 0xC4, 0xC4, 0x88, 0x88, 0xC4, 0xC4, + 0xE2, 0xE2, 0xD5, 0xD5, 0x88, 0x88, + 0x88, 0x88, 0x5D, 0xD5, 0x6B, 0xB6, + 0x6D, 0xD6, 0xAD, 0xDA, 0x6D, 0xD6, + 0x6B, 0xB6, 0x5D, 0xD5, 0x88, 0x88, + 0x00, 0x84, 0x87, 0x7D, 0x55, 0x57, + 0x55, 0x7D, 0x87, 0x84, 0x00, 0x91, + 0x95, 0x55, 0x55, 0x3F, 0x55, 0x55, + 0x95, 0x91, 0x00, 0x08, 0x08, 0x08, + 0x88, 0xFC, 0x0A, 0x09, 0x08, 0x08, + 0x04, 0xF8, 0x00, 0x00, 0xF8, 0x04, + 0x20, 0x1F, 0x00, 0x00, 0x1F, 0x20, + 0xFC, 0xF8, 0x00, 0x00, 0xF8, 0x04, + 0x3F, 0x1F, 0x00, 0x00, 0x1F, 0x20, + 0x04, 0xF8, 0x00, 0x00, 0xF8, 0xFC, + 0x20, 0x1F, 0x00, 0x00, 0x1F, 0x3F, + 0xFC, 0xF8, 0x00, 0x00, 0xF8, 0xFC, + 0x3F, 0x1F, 0x00, 0x00, 0x1F, 0x3F, + 0xFE, 0x7E, 0xBE, 0xDE, 0xEE, 0xDE, + 0xBE, 0x7E, 0xFE, 0xFC, 0xF8, 0x00, + 0x7E, 0x7E, 0x70, 0x77, 0x77, 0x77, + 0x70, 0x7E, 0x7E, 0x3F, 0x1F, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, + 0x04, 0x04, 0x08, 0x08, 0x04, 0x04, + 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, + 0x04, 0x04, 0x08, 0x08, 0x04, 0x04, + 0x02, 0x02, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, + 0x07, 0x07, 0x0F, 0x0F, 0x07, 0x07, + 0x03, 0x03, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x01, 0x03, 0x02, + 0x05, 0x06, 0x0D, 0x0A, 0x05, 0x06, + 0x03, 0x02, 0x01, 0x01, 0x00, 0x00, +}; diff --git a/keyboards/keycapsss/kimiko/keymaps/oco9oco/keymap.c b/keyboards/keycapsss/kimiko/keymaps/oco9oco/keymap.c new file mode 100644 index 00000000..7940b8c0 --- /dev/null +++ b/keyboards/keycapsss/kimiko/keymaps/oco9oco/keymap.c @@ -0,0 +1,196 @@ +/* +Copyright 2022 oco9oco + +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 "oco9oco.h" //look for users/oco9oco/ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +//clang-format off + +[_BASE] = LAYOUT_kimiko_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + KC_ESC, __________________NUMROW_L_________________, __________________NUMROW_R_________________, KC_MINS, + KC_TAB, __________________QWERTY_L1________________, __________________QWERTY_R1________________, KC_EQL, + SFT_CAPS,__________________QWERTY_SACS_L2___________, __________________QWERTY_R2________________, KC_QUOT, + KC_LSFT, __________________QWERTY_GUIZ_L3___________, TG(_BASE_NOMOD), KC_B, __________________QWERTY_HOME_R3___________, RSFT_T(KC_BSLS), +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + XXXXXXX, XXXXXXX, THUMB_L1,THUMB_L2,THUMB_L3, THUMB_R3,THUMB_R2,THUMB_R1,KC_LBRC, KC_RBRC +), + +[_BASE_NOMOD] = LAYOUT_kimiko_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + KC_ESC, __________________NUMROW_L_________________, __________________NUMROW_R_________________, _______, + KC_TAB, __________________QWERTY_L1________________, __________________QWERTY_R1________________, _______, + SFT_CAPS,__________________QWERTY_L2_SFTA___________, __________________QWERTY_R2________________, _______, + KC_LSFT, __________________QWERTY_L3________________, _______, KC_B, __________________QWERTY_HOME_R3___________, _______, +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + XXXXXXX, KC_LALT, THUMB_L1,THUMB_L2,THUMB_L3, _______, _______, _______, _______, _______ +), + +[_IPC] = LAYOUT_kimiko_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + _______, PDF_HL, KC_P, KC_X, ALT_F4, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, + _______, HAEN_B, HAEN_C, CLASS_E, CLASS_A, KC_SLSH, KC_GRV, _________NUM_789_________, KC_RBRC, KC_PLUS, + _______, IPC(A), IPC(S), IPC_MIN, IPC_COMM,KC_DOT, XXXXXXX, _________NUM_456_________, KC_COLN, KC_DQUO, + _______, IPC(Z), HWP_CITE,IPC(C), KC_EQL, KC_BSLS, XXXXXXX, KC_LBRC, KC_RBRC, _________NUM_123_________, _______, KC_PIPE, +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + _______, _______, _______, _______, _______, _______, LT(_NAV, KC_0), _______, KC_LPRN, KC_RPRN +), + +[_NUM] = LAYOUT_kimiko_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + TO_BASE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, C(KC_7), C(KC_8), C(KC_9), XXXXXXX, XXXXXXX, + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, C(KC_4), C(KC_5), C(KC_6), XXXXXXX, XXXXXXX, + _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TO_BASE, TO_BASE, XXXXXXX, C(KC_1), C(KC_2), C(KC_3), XXXXXXX, XXXXXXX, +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + KC_TRNS, KC_TRNS, _______, _______, _______, ENT_HOME, C(KC_0), C(KC_0), KC_LPRN, KC_RPRN +), + +[_NAV] = LAYOUT_kimiko_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + _______, CTRL_F1, KC_F2, KC_F3, ALT_F4, KC_F5, XXXXXXX, A(KC_7), A(KC_8), A(KC_9), A(KC_0), XXXXXXX, + _______, LCA(KC_H),LCA(KC_J),LCA(KC_K),LCA(KC_L), KC_F6, XXXXXXX, A(KC_4), A(KC_5), A(KC_6), XXXXXXX, XXXXXXX, + _______, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_F7, KC_INS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, + _______, C(KC_Z), C(KC_X), C(KC_C), C(KC_V), C(KC_B), TO_BASE, CG_TOGG, KC_APP, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX, +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + _______, _______, BRKT, KC_BSPC, KC_DEL, _______, KC_TRNS, _______, _______, _______ +), + +[_MOUSE] = LAYOUT_kimiko_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + _______, CTRL_F1, KC_F2, KC_F3, ALT_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, RESET, + KC_U, XXXXXXX, KC_WH_D, KC_MS_U, KC_WH_U, XXXXXXX, XXXXXXX, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_P, KC_LSFT, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, XXXXXXX, KC_ACL0, KC_BTN1, KC_BTN2, KC_BTN3, KC_ENT, + KC_X, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, BOLDFACE,TO_BASE, TO(_ONEHAND), KC_APP, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + _______, _______, KC_LCTL, KC_SPC, KC_ENT, KC_TRNS, _______, _______, _______, _______ +), + +[_FUNC] = LAYOUT_kimiko_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + _______, RGB_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, KC_F12, KC_F7, KC_F8, KC_F9, XXXXXXX, XXXXXXX, + XXXXXXX, KC_LSFT, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_F11, KC_F4, KC_F5, KC_F6, XXXXXXX, XXXXXXX, + XXXXXXX, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F10, KC_F1, KC_F2, KC_F3, XXXXXXX, XXXXXXX, +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + _______, _______, _______, _______, _______, _______, _______, KC_TRNS, KC_GT, KC_LT +), + +[_ONEHAND] = LAYOUT_kimiko_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + KC_ESC, C(KC_F1),XXXXXXX, XXXXXXX, A(KC_F4),XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_TAB, KC_WH_U, KC_BTN2, KC_UP, KC_BTN1, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, KC_WH_D, KC_LEFT, KC_DOWN, KC_RGHT, KC_BSPC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL, TO_BASE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + KC_LGUI, KC_LALT, KC_LCTL, KC_SPC, KC_ENT, TO(_MOUSE),_______, _______, _______, _______ +), + +[_SETTINGS] = LAYOUT( +//|-------------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + _______, C(KC_WH_D), XXXXXXX, A(KC_0), A(KC_F4),XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET, + KC_TAB,/*|*/ C(KC_WH_U), A(KC_4), A(KC_5), A(KC_6), KC_X, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_ENT,/*|*/ SCRNSHOT,A(KC_1), A(KC_2), A(KC_3), PDF_HL, RGB_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_SPC,/*|*/ XXXXXXX, A(KC_7), A(KC_8), A(KC_9), KC_P, TO_BASE, TO_BASE, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, KC_LSFT, XXXXXXX, +//|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + _______, KC_LALT, _______, _______, KC_TRNS, _______, _______, _______, KC_GT, KC_LT +) + +}; + + +//clang-format on +//keyboard-specific process +// COMBOS +enum combos { + COMBO_ONEHAND, + COMBO_ONEHAND_END, + COMBO_LENGTH +}; +uint16_t COMBO_LEN = COMBO_LENGTH; +const uint16_t PROGMEM onehand_combo[] = {KC_W, KC_E, COMBO_END}; +const uint16_t PROGMEM onehand_end_combo[] = {KC_BTN2, KC_UP, COMBO_END}; +// const uint16_t PROGMEM shift_T[] = {KC_A, KC_T, COMBO_END}; + +combo_t key_combos[] = { + [COMBO_ONEHAND] = COMBO(onehand_combo, TO(_ONEHAND)), + [COMBO_ONEHAND_END] = COMBO(onehand_end_combo,TO(_BASE)), + // [SHIFT_T] = COMBO(shift_T,S(KC_T)), +}; +// COMBO_TERM + +// Key overrides +const key_override_t GRV_override = ko_make_basic(MOD_MASK_SHIFT, KC_ESC, KC_TILD); +const key_override_t TLD_override = ko_make_basic(MOD_MASK_CTRL, KC_ESC, KC_GRV); +const key_override_t DLR_0_override = ko_make_basic(MOD_MASK_SHIFT, KC_DLR, KC_0); +const key_override_t DEL_override = ko_make_basic(MOD_MASK_SHIFT, KC_DEL, KC_BSPC); + +const key_override_t **key_overrides = (const key_override_t *[]){ // This globally defines all key overrides to be used + &GRV_override, + &TLD_override, + &DLR_0_override, + &DEL_override, + NULL // Null terminate the array of overrides! + }; + +// //RGBLIGHT LAYERS +// // Light LEDs 6 to 9 and 12 to 15 red when caps lock is active. Hard to ignore! +// const rgblight_segment_t PROGMEM my_capslock_layer[] = RGBLIGHT_LAYER_SEGMENTS( +// {6, 4, HSV_RED}, // Light 4 LEDs, starting with LED 6 +// {12, 4, HSV_RED} // Light 4 LEDs, starting with LED 12 +// ); +// // Light LEDs 9 & 10 in cyan when keyboard layer 1 is active +// const rgblight_segment_t PROGMEM my_layer1_layer[] = RGBLIGHT_LAYER_SEGMENTS( +// {9, 2, HSV_OFF} +// ); +// // Light LEDs 11 & 12 in purple when keyboard layer 2 is active +// const rgblight_segment_t PROGMEM my_layer2_layer[] = RGBLIGHT_LAYER_SEGMENTS( +// {11, 2, HSV_PURPLE} +// ); +// // Light LEDs 13 & 14 in green when keyboard layer 3 is active +// const rgblight_segment_t PROGMEM my_layer3_layer[] = RGBLIGHT_LAYER_SEGMENTS( +// {13, 2, HSV_GREEN} +// ); +// // Now define the array of layers. Later layers take precedence +// const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST( +// my_capslock_layer, +// my_layer1_layer, // Overrides caps lock layer +// my_layer2_layer, // Overrides other layers +// my_layer3_layer // Overrides other layers +// ); + +// void keyboard_post_init_user(void) { +// // Enable the LED layers +// rgblight_layers = my_rgb_layers; +// } + + +// bool led_update_user(led_t led_state) { +// rgblight_set_layer_state(0, led_state.caps_lock); +// return true; +// } + +// layer_state_t default_layer_state_set_user(layer_state_t state) { +// rgblight_set_layer_state(1, layer_state_cmp(state, _BASE)); +// return state; +// } + +// layer_state_t layer_state_set_user(layer_state_t state) { +// rgblight_set_layer_state(2, layer_state_cmp(state, _BASE_NOMOD)); +// rgblight_set_layer_state(3, layer_state_cmp(state, _ONEHAND)); +// return state; + diff --git a/keyboards/keycapsss/kimiko/keymaps/oco9oco/rules.mk b/keyboards/keycapsss/kimiko/keymaps/oco9oco/rules.mk new file mode 100644 index 00000000..bbd52c3b --- /dev/null +++ b/keyboards/keycapsss/kimiko/keymaps/oco9oco/rules.mk @@ -0,0 +1,7 @@ +OLED_ENABLE = no +ENCODER_ENABLE = no # ENables the use of one or more encoders +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +RGB_MATRIX_ENABLE = no +AUTO_SHIFT_ENABLE= yes +CAPS_WORD_ENABLE = no +LTO_ENABLE = yes diff --git a/keyboards/keycapsss/kimiko/kimiko.c b/keyboards/keycapsss/kimiko/kimiko.c new file mode 100644 index 00000000..c99a9666 --- /dev/null +++ b/keyboards/keycapsss/kimiko/kimiko.c @@ -0,0 +1,83 @@ +/* Copyright 2023 @BenRoe (keycapsss.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 . + */ + + #include "quantum.h" + +#ifdef KEYBOARD_keycapsss_kimiko_rev1 +#ifdef RGB_MATRIX_ENABLE + +//Thanks to Ben (keycapsss) for helpipng me to create g_led_config + +// Physical LED position +// X 0 16 32 48 64 80 96 112 128 144 160 176 208 224 +// -----------------------------------------------------------| Y +// 5 4 3 2 1 0 0 1 2 3 4 5 | 0 +// 6 7 8 9 10 11 11 10 9 8 7 6 | 16 +// 17 16 15 14 13 12 12 13 14 15 16 17 | 32 +// 18 19 20 21 22 23 24 24 23 22 21 20 19 18 | 48 +// 29 28 27 26 25 25 26 27 28 29 | 64 + +led_config_t g_led_config = { { + // Key Matrix to LED Index + { 5, 4, 3, 2, 1, 0 }, + { 6, 7, 8, 9, 10, 11 }, + { 17, 16, 15, 14, 13, 12 }, + { 18, 19, 20, 21, 22, 23 }, + { 29, 28, 27, 26, 25, 24 }, + { 35, 34, 33, 32, 31, 30 }, + { 36, 37, 38, 39, 40, 41 }, + { 47, 46, 45, 44, 43, 42 }, + { 48, 49, 50, 51, 52, 53 }, + { 59, 58, 57, 56, 55, 54 } +}, { + // LED Index to Physical Position + // Left half + { 80, 0 }, { 64, 0 }, { 48, 0 }, { 32, 0 }, { 16, 0 }, { 0, 0 }, + { 0, 16 }, { 16, 16 }, { 32, 16 }, { 48, 16 }, { 64, 16 }, { 80, 16 }, + { 80, 32 }, { 64, 32 }, { 48, 32 }, { 32, 32 }, { 16, 32 }, { 0, 32 }, + { 0, 48 }, { 16, 48 }, { 32, 48 }, { 48, 48 }, { 64, 48 }, { 80, 48 }, + { 96, 48 }, { 96, 64 }, { 80, 64 }, { 64, 64 }, { 48, 64 }, { 32, 64 }, + // Right half + { 128, 0 }, { 144, 0 }, { 160, 0 }, { 176, 0 }, { 208, 0 }, { 224, 0 }, + { 224, 16 }, { 208, 16 }, { 176, 16 }, { 160, 16 }, { 144, 16 }, { 128, 16 }, + { 128, 32 }, { 144, 32 }, { 160, 32 }, { 176, 32 }, { 208, 32 }, { 224, 32 }, + { 224, 48 }, { 208, 48 }, { 176, 48 }, { 160, 48 }, { 144, 48 }, { 128, 48 }, + { 112, 48 }, { 112, 64 }, { 128, 64 }, { 144, 64 }, { 160, 64 }, { 176, 64 } + +}, { + // LED Index to Flag + // 0x01 = 1 = modifier key + // 0x02 = 2 = underglow + // 0x04 = 4 = key backlight + // 0x08 = 8 = keyboard state indication + // Left half + 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 1, + 4, 4, 4, 4, 4, 1, + 4, 4, 1, 1, 1, 1, + // Right half + 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, + 1, 4, 4, 4, 4, 4, + 4, 4, 1, 1, 1, 1 +} }; + +#endif // RGB_MATRIX_ENABLE +#endif // KEYBOARD_keycapsss_kimiko_rev1 + + diff --git a/keyboards/keycapsss/kimiko/kimiko.c:Zone.Identifier b/keyboards/keycapsss/kimiko/kimiko.c:Zone.Identifier new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/keycapsss/kimiko/post_config.h b/keyboards/keycapsss/kimiko/post_config.h new file mode 100644 index 00000000..31be5898 --- /dev/null +++ b/keyboards/keycapsss/kimiko/post_config.h @@ -0,0 +1,25 @@ +/* Copyright 2019 MechMerlin + * Copyright 2023 @Ex3c4Def + * Copyright 2023 @BenRoe (keycapsss.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 . + */ + +#pragma once + +// OLED definitions +#ifndef OLED_FONT_H +# define OLED_FONT_H "keyboards/keycapsss/kimiko/glcdfont.c" +#endif + diff --git a/keyboards/keycapsss/kimiko/post_config.h:Zone.Identifier b/keyboards/keycapsss/kimiko/post_config.h:Zone.Identifier new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/keycapsss/kimiko/readme.md b/keyboards/keycapsss/kimiko/readme.md new file mode 100644 index 00000000..32c64010 --- /dev/null +++ b/keyboards/keycapsss/kimiko/readme.md @@ -0,0 +1,59 @@ +# Kimiko + +## Rev2 + +A split keyboard with 4x6 vertically staggered keys and a Kyria style thumb thumb cluster. + +![Kimiko Rev2](https://i.imgur.com/TBP8Bcrh.jpg) + +- Keyboard Maintainer: [BenRoe](https://github.com/BenRoe/) [@keycapsss](https://twitter.com/keycapsss) +- Hardware Supported: Pro Micro 5V/16Mhz and compatible +- Hardware Availability: [Keycapsss.com](https://keycapsss.com) + +### Features (Rev2) + +- 62 Per key RGB led's (SK6812 Mini-E) + - RGB Matrix is enabled as default in rules.mk + - The effects can be configured in config.h +- Support for 1 rotary encoder per side (two possible positions) +- Support for 1 OLED display per side + - 128x32 (SSD1306) or Nice!View are supported + - With 1 OLED on each side, they have to be the same + - Default configuration for 128x32 OLED + + +Make firmware .hex for this keyboard (after setting up your build environment): + +```bash +qmk compile -kb keycapsss/kimiko/rev2 -km default +``` + +Use [QMK Toolbox](https://github.com/qmk/qmk_toolbox) to flash the firmware hex file to the keyboard controller. + +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). + +## Rev1 + +A split keyboard with 4x6 vertically staggered keys and thumb keys. + +![Kimiko Rev1](https://i.imgur.com/md6V6Eoh.jpg) + +- Keyboard Maintainer: [BenRoe](https://github.com/BenRoe/) [@keycapsss](https://twitter.com/keycapsss) +- Hardware Supported: Pro Micro 5V/16Mhz and compatible +- Hardware Availability: [Keycapsss.com](https://keycapsss.com) + +### Features (Rev1) + +- Per key RGB led's (SK6812 Mini-E) +- 6 underglow RGB led's per side (SK6812 Mini) +- Support for 1 rotary encoder per side (two possible positions) + +Make firmware .hex for this keyboard (after setting up your build environment): + +```bash +qmk compile -kb keycapsss/kimiko/rev1 -km default +``` + +Use [QMK Toolbox](https://github.com/qmk/qmk_toolbox) to flash the firmware hex file to the keyboard controller. + +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/keycapsss/kimiko/readme.md:Zone.Identifier b/keyboards/keycapsss/kimiko/readme.md:Zone.Identifier new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/keycapsss/kimiko/rev1/config.h b/keyboards/keycapsss/kimiko/rev1/config.h new file mode 100644 index 00000000..54441ebf --- /dev/null +++ b/keyboards/keycapsss/kimiko/rev1/config.h @@ -0,0 +1,24 @@ +/* Copyright 2020 @ben_roe (keycapsss.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 . + */ + +#pragma once + +// Limit the power draw +#ifdef IOS_DEVICE_ENABLE + #define RGBLIGHT_LIMIT_VAL 40 +#else + #define RGBLIGHT_LIMIT_VAL 80 +#endif diff --git a/keyboards/keycapsss/kimiko/rev1/config.h:Zone.Identifier b/keyboards/keycapsss/kimiko/rev1/config.h:Zone.Identifier new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/keycapsss/kimiko/rev1/keyboard.json b/keyboards/keycapsss/kimiko/rev1/keyboard.json new file mode 100644 index 00000000..ae09eb83 --- /dev/null +++ b/keyboards/keycapsss/kimiko/rev1/keyboard.json @@ -0,0 +1,123 @@ +{ + "keyboard_name": "Kimiko", + "manufacturer": "Keycapsss", + "url": "https://keycapsss.com", + "maintainer": "@ben_roe Keycapsss", + "usb": { + "vid": "0x7983", + "pid": "0x4B69", + "device_version": "0.0.1" + }, + "matrix_pins": { + "cols": ["F6", "F7", "B1", "B3", "B2", "B6"], + "rows": ["C6", "D7", "E6", "B4", "B5"] + }, + "qmk": { + "locking": { + "enabled": true, + "resync": true + } + }, + "diode_direction": "COL2ROW", + "encoder": { + "rotary": [ + {"pin_a": "F5", "pin_b": "F4"} + ] + }, + "split": { + "encoder": { + "right": { + "rotary": [ + {"pin_a": "F4", "pin_b": "F5"} + ] + } + }, + "serial": { + "pin": "D2" + } + }, + "rgblight": { + "led_count": 60, + "split_count": [30, 30] + }, + "ws2812": { + "pin": "D3" + }, + "processor": "atmega32u4", + "bootloader": "atmel-dfu", + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0.8}, + {"matrix": [0, 1], "x": 1, "y": 0.8}, + {"matrix": [0, 2], "x": 2, "y": 0.15}, + {"matrix": [0, 3], "x": 3, "y": 0}, + {"matrix": [0, 4], "x": 4, "y": 0.15}, + {"matrix": [0, 5], "x": 5, "y": 0.3}, + + {"matrix": [5, 5], "x": 9, "y": 0.3}, + {"matrix": [5, 4], "x": 10, "y": 0.15}, + {"matrix": [5, 3], "x": 11, "y": 0}, + {"matrix": [5, 2], "x": 12, "y": 0.15}, + {"matrix": [5, 1], "x": 13, "y": 0.8}, + {"matrix": [5, 0], "x": 14, "y": 0.8}, + + {"matrix": [1, 0], "x": 0, "y": 1.8}, + {"matrix": [1, 1], "x": 1, "y": 1.8}, + {"matrix": [1, 2], "x": 2, "y": 1.15}, + {"matrix": [1, 3], "x": 3, "y": 1}, + {"matrix": [1, 4], "x": 4, "y": 1.15}, + {"matrix": [1, 5], "x": 5, "y": 1.3}, + + {"matrix": [6, 5], "x": 9, "y": 1.3}, + {"matrix": [6, 4], "x": 10, "y": 1.15}, + {"matrix": [6, 3], "x": 11, "y": 1}, + {"matrix": [6, 2], "x": 12, "y": 1.15}, + {"matrix": [6, 1], "x": 13, "y": 1.8}, + {"matrix": [6, 0], "x": 14, "y": 1.8}, + + {"matrix": [2, 0], "x": 0, "y": 2.8}, + {"matrix": [2, 1], "x": 1, "y": 2.8}, + {"matrix": [2, 2], "x": 2, "y": 2.15}, + {"matrix": [2, 3], "x": 3, "y": 2}, + {"matrix": [2, 4], "x": 4, "y": 2.15}, + {"matrix": [2, 5], "x": 5, "y": 2.3}, + + {"matrix": [7, 5], "x": 9, "y": 2.3}, + {"matrix": [7, 4], "x": 10, "y": 2.15}, + {"matrix": [7, 3], "x": 11, "y": 2}, + {"matrix": [7, 2], "x": 12, "y": 2.15}, + {"matrix": [7, 1], "x": 13, "y": 2.8}, + {"matrix": [7, 0], "x": 14, "y": 2.8}, + + {"matrix": [3, 0], "x": 0, "y": 3.8}, + {"matrix": [3, 1], "x": 1, "y": 3.8}, + {"matrix": [3, 2], "x": 2, "y": 3.15}, + {"matrix": [3, 3], "x": 3, "y": 3}, + {"matrix": [3, 4], "x": 4, "y": 3.15}, + {"matrix": [3, 5], "x": 5, "y": 3.3}, + {"matrix": [4, 5], "x": 6.25, "y": 3.3}, + + {"matrix": [9, 5], "x": 7.75, "y": 3.3}, + {"matrix": [8, 5], "x": 9, "y": 3.3}, + {"matrix": [8, 4], "x": 10, "y": 3.15}, + {"matrix": [8, 3], "x": 11, "y": 3}, + {"matrix": [8, 2], "x": 12, "y": 3.15}, + {"matrix": [8, 1], "x": 13, "y": 3.8}, + {"matrix": [8, 0], "x": 14, "y": 3.8}, + + {"matrix": [4, 0], "x": 2, "y": 4.15}, + {"matrix": [4, 1], "x": 3, "y": 4}, + {"matrix": [4, 2], "x": 4, "y": 4.15}, + {"matrix": [4, 3], "x": 5.25, "y": 4.3}, + {"matrix": [4, 4], "x": 6.25, "y": 4.25, "h": 1.5}, + + {"matrix": [9, 4], "x": 7.75, "y": 4.25, "h": 1.5}, + {"matrix": [9, 3], "x": 8.75, "y": 4.3}, + {"matrix": [9, 2], "x": 10, "y": 4.15}, + {"matrix": [9, 1], "x": 11, "y": 4}, + {"matrix": [9, 0], "x": 12, "y": 4.15} + ] + } + } +} diff --git a/keyboards/keycapsss/kimiko/rev1/keyboard.json:Zone.Identifier b/keyboards/keycapsss/kimiko/rev1/keyboard.json:Zone.Identifier new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/keycapsss/kimiko/rev2/keyboard.json b/keyboards/keycapsss/kimiko/rev2/keyboard.json new file mode 100644 index 00000000..12a7a2c7 --- /dev/null +++ b/keyboards/keycapsss/kimiko/rev2/keyboard.json @@ -0,0 +1,201 @@ +{ + "manufacturer": "Keycapsss", + "keyboard_name": "Kimiko Rev2", + "maintainer": "BenRoe", + "build": { + "lto": true + }, + "development_board": "promicro", + "diode_direction": "COL2ROW", + "encoder": { + "rotary": [ + {"pin_a": "F5", "pin_b": "F4"} + ] + }, + "features": { + "encoder": true, + "nkro": true, + "oled": true + }, + "matrix_pins": { + "cols": ["F6", "F7", "B1", "B3", "B2", "B6"], + "rows": ["D4", "C6", "D7", "E6", "B4", "B5"] + }, + "qmk": { + "locking": { + "enabled": true, + "resync": true + } + }, + "rgb_matrix": { + "driver": "ws2812", + "layout": [ + { "matrix": [0, 5], "x": 66, "y": 5, "flags": 4 }, + { "matrix": [0, 4], "x": 53, "y": 4, "flags": 4 }, + { "matrix": [0, 3], "x": 40, "y": 0, "flags": 4 }, + { "matrix": [0, 2], "x": 26, "y": 4, "flags": 4 }, + { "matrix": [0, 1], "x": 13, "y": 11, "flags": 4 }, + { "matrix": [0, 0], "x": 0, "y": 11, "flags": 4 }, + { "matrix": [1, 0], "x": 0, "y": 23, "flags": 4 }, + { "matrix": [1, 1], "x": 13, "y": 23, "flags": 4 }, + { "matrix": [1, 2], "x": 26, "y": 15, "flags": 4 }, + { "matrix": [1, 3], "x": 40, "y": 12, "flags": 4 }, + { "matrix": [1, 4], "x": 53, "y": 15, "flags": 4 }, + { "matrix": [1, 5], "x": 66, "y": 17, "flags": 4 }, + { "matrix": [2, 5], "x": 66, "y": 29, "flags": 4 }, + { "matrix": [2, 4], "x": 53, "y": 27, "flags": 4 }, + { "matrix": [2, 3], "x": 40, "y": 24, "flags": 4 }, + { "matrix": [2, 2], "x": 26, "y": 27, "flags": 4 }, + { "matrix": [2, 1], "x": 13, "y": 35, "flags": 4 }, + { "matrix": [2, 0], "x": 0, "y": 35, "flags": 1 }, + { "matrix": [3, 0], "x": 0, "y": 47, "flags": 1 }, + { "matrix": [3, 1], "x": 13, "y": 47, "flags": 4 }, + { "matrix": [3, 2], "x": 26, "y": 39, "flags": 4 }, + { "matrix": [3, 3], "x": 40, "y": 36, "flags": 4 }, + { "matrix": [3, 4], "x": 53, "y": 39, "flags": 4 }, + { "matrix": [3, 5], "x": 66, "y": 41, "flags": 4 }, + { "matrix": [5, 5], "x": 80, "y": 48, "flags": 4 }, + { "matrix": [4, 5], "x": 94, "y": 52, "flags": 4 }, + { "matrix": [4, 4], "x": 87, "y": 64, "flags": 4 }, + { "matrix": [4, 3], "x": 73, "y": 60, "flags": 1 }, + { "matrix": [4, 2], "x": 53, "y": 51, "flags": 1 }, + { "matrix": [4, 1], "x": 40, "y": 47, "flags": 1 }, + { "matrix": [4, 0], "x": 26, "y": 51, "flags": 1 }, + { "matrix": [6, 5], "x": 158, "y": 5, "flags": 4 }, + { "matrix": [6, 4], "x": 171, "y": 4, "flags": 4 }, + { "matrix": [6, 3], "x": 184, "y": 0, "flags": 4 }, + { "matrix": [6, 2], "x": 198, "y": 4, "flags": 4 }, + { "matrix": [6, 1], "x": 211, "y": 11, "flags": 4 }, + { "matrix": [6, 0], "x": 224, "y": 11, "flags": 4 }, + { "matrix": [7, 0], "x": 224, "y": 23, "flags": 4 }, + { "matrix": [7, 1], "x": 211, "y": 23, "flags": 4 }, + { "matrix": [7, 2], "x": 198, "y": 15, "flags": 4 }, + { "matrix": [7, 3], "x": 184, "y": 12, "flags": 4 }, + { "matrix": [7, 4], "x": 171, "y": 15, "flags": 4 }, + { "matrix": [7, 5], "x": 158, "y": 17, "flags": 4 }, + { "matrix": [8, 5], "x": 158, "y": 29, "flags": 4 }, + { "matrix": [8, 4], "x": 171, "y": 27, "flags": 4 }, + { "matrix": [8, 3], "x": 184, "y": 24, "flags": 4 }, + { "matrix": [8, 2], "x": 198, "y": 27, "flags": 4 }, + { "matrix": [8, 1], "x": 211, "y": 35, "flags": 4 }, + { "matrix": [8, 0], "x": 224, "y": 35, "flags": 4 }, + { "matrix": [9, 0], "x": 224, "y": 47, "flags": 1 }, + { "matrix": [9, 1], "x": 211, "y": 47, "flags": 4 }, + { "matrix": [9, 2], "x": 198, "y": 39, "flags": 4 }, + { "matrix": [9, 3], "x": 184, "y": 36, "flags": 4 }, + { "matrix": [9, 4], "x": 171, "y": 39, "flags": 4 }, + { "matrix": [9, 5], "x": 158, "y": 41, "flags": 4 }, + { "matrix": [11, 5], "x": 144, "y": 48, "flags": 4 }, + { "matrix": [10, 5], "x": 130, "y": 52, "flags": 4 }, + { "matrix": [10, 4], "x": 137, "y": 64, "flags": 4 }, + { "matrix": [10, 3], "x": 151, "y": 60, "flags": 1 }, + { "matrix": [10, 2], "x": 171, "y": 51, "flags": 4 }, + { "matrix": [10, 1], "x": 184, "y": 47, "flags": 1 }, + { "matrix": [10, 0], "x": 198, "y": 51, "flags": 1 } + ], + "led_count": 62, + "max_brightness": 80, + "split_count": [31, 31] + }, + "rgblight": { + "led_count": 62, + "max_brightness": 80, + "split": true, + "split_count": [31, 31] + }, + "split": { + "encoder": { + "right": { + "rotary": [ + {"pin_a": "F5", "pin_b": "F4"} + ] + } + }, + "matrix_pins": { + "right": { + "cols": ["F6", "F7", "B1", "B3", "B2", "B6"], + "rows": ["D4", "C6", "D7", "E6", "B4", "B5"] + } + }, + "serial": { + "pin": "D2" + } + }, + "url": "https://keycapsss.com", + "usb": { + "device_version": "2.0.0", + "pid": "0x4B69", + "vid": "0x7983" + }, + "ws2812": { + "pin": "D3" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"label": "L00", "matrix": [0, 0], "x": 0, "y": 0.96}, + {"label": "L01", "matrix": [0, 1], "x": 1, "y": 0.96}, + {"label": "L02", "matrix": [0, 2], "x": 2, "y": 0.31}, + {"label": "L03", "matrix": [0, 3], "x": 3, "y": 0}, + {"label": "L04", "matrix": [0, 4], "x": 4, "y": 0.31}, + {"label": "L05", "matrix": [0, 5], "x": 5, "y": 0.46}, + {"label": "R00", "matrix": [6, 5], "x": 12, "y": 0.45}, + {"label": "R01", "matrix": [6, 4], "x": 13, "y": 0.31}, + {"label": "R02", "matrix": [6, 3], "x": 14, "y": 0}, + {"label": "R03", "matrix": [6, 2], "x": 15, "y": 0.31}, + {"label": "R04", "matrix": [6, 1], "x": 16, "y": 0.96}, + {"label": "R05", "matrix": [6, 0], "x": 17, "y": 0.96}, + {"label": "L10", "matrix": [1, 0], "x": 0, "y": 1.96}, + {"label": "L11", "matrix": [1, 1], "x": 1, "y": 1.96}, + {"label": "L12", "matrix": [1, 2], "x": 2, "y": 1.31}, + {"label": "L13", "matrix": [1, 3], "x": 3, "y": 1}, + {"label": "L14", "matrix": [1, 4], "x": 4, "y": 1.31}, + {"label": "L15", "matrix": [1, 5], "x": 5, "y": 1.46}, + {"label": "R10", "matrix": [7, 5], "x": 12, "y": 1.46}, + {"label": "R11", "matrix": [7, 4], "x": 13, "y": 1.31}, + {"label": "R12", "matrix": [7, 3], "x": 14, "y": 1}, + {"label": "R13", "matrix": [7, 2], "x": 15, "y": 1.31}, + {"label": "R14", "matrix": [7, 1], "x": 16, "y": 1.96}, + {"label": "R15", "matrix": [7, 0], "x": 17, "y": 1.96}, + {"label": "L20", "matrix": [2, 0], "x": 0, "y": 2.96}, + {"label": "L21", "matrix": [2, 1], "x": 1, "y": 2.96}, + {"label": "L22", "matrix": [2, 2], "x": 2, "y": 2.31}, + {"label": "L23", "matrix": [2, 3], "x": 3, "y": 2}, + {"label": "L24", "matrix": [2, 4], "x": 4, "y": 2.31}, + {"label": "L25", "matrix": [2, 5], "x": 5, "y": 2.46}, + {"label": "R20", "matrix": [8, 5], "x": 12, "y": 2.46}, + {"label": "R21", "matrix": [8, 4], "x": 13, "y": 2.31}, + {"label": "R22", "matrix": [8, 3], "x": 14, "y": 2}, + {"label": "R23", "matrix": [8, 2], "x": 15, "y": 2.31}, + {"label": "R24", "matrix": [8, 1], "x": 16, "y": 2.96}, + {"label": "R25", "matrix": [8, 0], "x": 17, "y": 2.96}, + {"label": "L30", "matrix": [3, 0], "x": 0, "y": 3.96}, + {"label": "L31", "matrix": [3, 1], "x": 1, "y": 4}, + {"label": "L32", "matrix": [3, 2], "x": 2, "y": 3.31}, + {"label": "L33", "matrix": [3, 3], "x": 3, "y": 3}, + {"label": "L34", "matrix": [3, 4], "x": 4, "y": 3.31}, + {"label": "L35", "matrix": [3, 5], "x": 5, "y": 3.46}, + {"label": "L50", "matrix": [5, 5], "x": 5.75, "y": 4.51}, + {"label": "L40", "matrix": [4, 5], "x": 6.75, "y": 5}, + {"label": "R40", "matrix": [10, 5], "x": 10.25, "y": 5}, + {"label": "R50", "matrix": [11, 5], "x": 11.25, "y": 4.5}, + {"label": "R30", "matrix": [9, 5], "x": 12, "y": 3.46}, + {"label": "R31", "matrix": [9, 4], "x": 13, "y": 3.31}, + {"label": "R32", "matrix": [9, 3], "x": 14, "y": 3}, + {"label": "R33", "matrix": [9, 2], "x": 15, "y": 3.31}, + {"label": "R34", "matrix": [9, 1], "x": 16, "y": 3.96}, + {"label": "R35", "matrix": [9, 0], "x": 17, "y": 3.96}, + {"label": "L41", "matrix": [4, 0], "x": 2.5, "y": 4.5}, + {"label": "L42", "matrix": [4, 1], "x": 3.5, "y": 4.5}, + {"label": "L43", "matrix": [4, 2], "x": 4.5, "y": 4.95}, + {"label": "L44", "matrix": [4, 3], "x": 5.5, "y": 5.5}, + {"label": "L45", "matrix": [4, 4], "x": 6.5, "y": 6}, + {"label": "R41", "matrix": [10, 4], "x": 10.5, "y": 6}, + {"label": "R42", "matrix": [10, 3], "x": 11.5, "y": 5.5}, + {"label": "R43", "matrix": [10, 2], "x": 12.5, "y": 4.75}, + {"label": "R44", "matrix": [10, 1], "x": 13.5, "y": 4.5}, + {"label": "R45", "matrix": [10, 0], "x": 14.5, "y": 4.5} + ] + } + } +} diff --git a/keyboards/keycapsss/kimiko/rev2/keyboard.json:Zone.Identifier b/keyboards/keycapsss/kimiko/rev2/keyboard.json:Zone.Identifier new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/keycapsss/kimiko/rev2/keymaps/default/config.h b/keyboards/keycapsss/kimiko/rev2/keymaps/default/config.h new file mode 100644 index 00000000..34c2708e --- /dev/null +++ b/keyboards/keycapsss/kimiko/rev2/keymaps/default/config.h @@ -0,0 +1,37 @@ +/* Copyright 2019 MechMerlin + * Copyright 2020 @ben_roe (keycapsss.com) + * Copyright 2023 @Ex3c4Def + * + * 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 + +#define MASTER_RIGHT +#define ENABLE_RGB_MATRIX_ALPHAS_MODS // Static dual hue, speed is hue for secondary hue +#define ENABLE_RGB_MATRIX_RAINBOW_BEACON // Full tighter gradient spinning around center of keyboard + +// These modes also require the RGB_MATRIX_FRAMEBUFFER_EFFECTS define to be available. +#define ENABLE_RGB_MATRIX_TYPING_HEATMAP // How hot is your WPM! + +#define RGB_MATRIX_VAL_STEP 4 +#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_SOLID_COLOR +#define RGB_MATRIX_DEFAULT_HUE 0 // Sets the default hue value, if none has been set +#define RGB_MATRIX_DEFAULT_SAT 255 // Sets the default saturation value, if none has been set +#define RGB_MATRIX_DEFAULT_VAL 60 // RGB_MATRIX_MAXIMUM_BRIGHTNESS // Sets the default brightness value, if none has been set +#define RGB_MATRIX_DEFAULT_SPD 60 // Sets the default animation speed, if none has been set + +#if defined(POINTING_DEVICE_DRIVER_pimoroni_trackball) +# define POINTING_DEVICE_ROTATION_180 // may be used for trackball in 2nd position +#endif diff --git a/keyboards/keycapsss/kimiko/rev2/keymaps/default/config.h:Zone.Identifier b/keyboards/keycapsss/kimiko/rev2/keymaps/default/config.h:Zone.Identifier new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/keycapsss/kimiko/rev2/keymaps/default/keymap.c b/keyboards/keycapsss/kimiko/rev2/keymaps/default/keymap.c new file mode 100644 index 00000000..a569beed --- /dev/null +++ b/keyboards/keycapsss/kimiko/rev2/keymaps/default/keymap.c @@ -0,0 +1,122 @@ +/* Copyright 2019 Leo Batyuk + * Copyright 2020 Drashna Jaelre <@drashna> + * Copyright 2020 @ben_roe (keycapsss.com) + * Copyright 2023 @Ex3c4Def + * + * 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 { + _QWERTY, + _LOWER, + _RAISE, + _ADJUST, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* QWERTY + * ,--------------------------------------------. ,----------------------------------------------. + * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | + * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| + * | Tab | Q | W | E | R | T | | Y | U | I | O | P | - | + * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| + * | LShift | A | S | D | F | G |---------------. ,---------------| H | J | K | L | ; | ' | + * |---------+------+------+------+------+------| ( | [ | | ] | ) |------+------+------+------+------+-----------| + * | LCTRL | Z | X | C | V | B |------|--------| |-------|-------| N | M | , | . | / |RShift/Enter| + * `--------------------------------------------| / \ |----------------------------------------------' + * | LCTRL| LGUI |LALT |LOWER | Space / \Enter| RAISE |BackSP| RGUI | RALT | + * `----------------------------------' '---------------------------------' + */ + [_QWERTY] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, + KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LPRN, KC_LBRC, KC_RBRC, KC_RPRN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_ENT), + KC_LCTL, KC_LGUI, KC_LALT, TL_LOWR, KC_SPC, KC_ENT, TL_UPPR, KC_BSPC, KC_RGUI, KC_RALT +), +/* LOWER +* QWERTY + * ,--------------------------------------------. ,----------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | + * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| + * | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 | + * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| + * | ` | ! | @ | # | $ | % |---------------. ,---------------| ^ | & | * | ( | ) | ~ | + * |---------+------+------+------+------+------| | | | | |------+------+------+------+------+-----------| + * | | | | | | |------|--------| |-------|-------| | _ | + | { | } | \ | + * `--------------------------------------------| / \ |----------------------------------------------' + * | LCTRL| LGUI |LALT |LOWER | Space / \Enter| RAISE |BackSP| RGUI | RALT | + * `----------------------------------' '---------------------------------' + */ +[_LOWER] = LAYOUT( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F12, + KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TILD, + _______, _______, _______, _______, _______, _______, _______,_______, _______, _______, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_BSLS, + _______, _______, _______, _______,_______, _______, _______, _______, _______, _______ +), +/* RAISE + * ,--------------------------------------------. ,----------------------------------------------. + * | | | | | | | | | | | | | | + * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | + * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| + * | F1 | F2 | F3 | F4 | F5 | F6 |---------------. ,---------------| Left | Down | Up |Right | ; | | + * |---------+------+------+------+------+------| [ | [ | | [ | [ |------+------+------+------+------+-----------| + * | F7 | F8 | F9 | F10 | F11 | F12 |------|--------| |-------|-------| + | - | = | [ | ] | \ | + * `--------------------------------------------| / \ |----------------------------------------------' + * | LCTRL| LGUI |LALT |LOWER | Space / \Enter| RAISE |BackSP| RGUI | RALT | + * `----------------------------------' '---------------------------------' + */ + [_RAISE] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, KC_PLUS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), +/* ADJUST (Press LOWER and RAISE together) + * ,--------------------------------------------. ,----------------------------------------------. + * | QK_BOOT | | | | | | | | | | | | | + * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| + * | RGB ON | HUE+ | SAT+ | VAL+ | | | | PREV | PLAY | NEXT | | | | + * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| + * | MODE | HUE- | SAT- | VAL- | | |---------------. ,---------------| VOL+ | MUTE | VOL- | | | | + * |---------+------+------+------+------+------| | | | | |------+------+------+------+------+-----------| + * | | | | | | |------|--------| |-------|-------| | | | | | | + * `--------------------------------------------| / \ |----------------------------------------------' + * | LCTRL| LGUI |LALT |LOWER | Space / \Enter| RAISE |BackSP| RGUI | RALT | + * `----------------------------------' '---------------------------------' + */ +[_ADJUST] = LAYOUT( + QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + RM_TOGG, RM_HUEU, RM_SATU, RM_VALU, XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, + RM_NEXT, RM_HUED, RM_SATD, RM_VALD, XXXXXXX, XXXXXXX, KC_VOLU, KC_MUTE, KC_VOLD, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +) +}; + + + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [_QWERTY] = { ENCODER_CCW_CW(KC_DOWN, KC_UP), ENCODER_CCW_CW(KC_LEFT, KC_RGHT) }, + [_LOWER] = { ENCODER_CCW_CW(RM_HUEU, KC_TAB), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_RAISE] = { ENCODER_CCW_CW(RM_VALD, RM_VALU), ENCODER_CCW_CW(RM_SPDD, RM_SPDU) }, + [_ADJUST] = { ENCODER_CCW_CW(RM_PREV, RM_NEXT), ENCODER_CCW_CW(RM_SATD, RM_SATU) }, +}; +#endif // ENCODER_MAP_ENABLE diff --git a/keyboards/keycapsss/kimiko/rev2/keymaps/default/keymap.c:Zone.Identifier b/keyboards/keycapsss/kimiko/rev2/keymaps/default/keymap.c:Zone.Identifier new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/keycapsss/kimiko/rev2/keymaps/default/rules.mk b/keyboards/keycapsss/kimiko/rev2/keymaps/default/rules.mk new file mode 100644 index 00000000..420f29d8 --- /dev/null +++ b/keyboards/keycapsss/kimiko/rev2/keymaps/default/rules.mk @@ -0,0 +1,8 @@ +TRI_LAYER_ENABLE = yes +ENCODER_MAP_ENABLE = yes + +RGBLIGHT_ENABLE = no # Enable keyboard 'old' RGB lightning +RGB_MATRIX_ENABLE = yes # Enable keyboard RGB Matrix lightning + +# POINTING_DEVICE_ENABLE = yes +# POINTING_DEVICE_DRIVER = cirque_pinnacle_i2c diff --git a/keyboards/keycapsss/kimiko/rev2/keymaps/default/rules.mk:Zone.Identifier b/keyboards/keycapsss/kimiko/rev2/keymaps/default/rules.mk:Zone.Identifier new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/keycapsss/kimiko/rev2/keymaps/oco9oco/config.h b/keyboards/keycapsss/kimiko/rev2/keymaps/oco9oco/config.h new file mode 100644 index 00000000..34c2708e --- /dev/null +++ b/keyboards/keycapsss/kimiko/rev2/keymaps/oco9oco/config.h @@ -0,0 +1,37 @@ +/* Copyright 2019 MechMerlin + * Copyright 2020 @ben_roe (keycapsss.com) + * Copyright 2023 @Ex3c4Def + * + * 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 + +#define MASTER_RIGHT +#define ENABLE_RGB_MATRIX_ALPHAS_MODS // Static dual hue, speed is hue for secondary hue +#define ENABLE_RGB_MATRIX_RAINBOW_BEACON // Full tighter gradient spinning around center of keyboard + +// These modes also require the RGB_MATRIX_FRAMEBUFFER_EFFECTS define to be available. +#define ENABLE_RGB_MATRIX_TYPING_HEATMAP // How hot is your WPM! + +#define RGB_MATRIX_VAL_STEP 4 +#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_SOLID_COLOR +#define RGB_MATRIX_DEFAULT_HUE 0 // Sets the default hue value, if none has been set +#define RGB_MATRIX_DEFAULT_SAT 255 // Sets the default saturation value, if none has been set +#define RGB_MATRIX_DEFAULT_VAL 60 // RGB_MATRIX_MAXIMUM_BRIGHTNESS // Sets the default brightness value, if none has been set +#define RGB_MATRIX_DEFAULT_SPD 60 // Sets the default animation speed, if none has been set + +#if defined(POINTING_DEVICE_DRIVER_pimoroni_trackball) +# define POINTING_DEVICE_ROTATION_180 // may be used for trackball in 2nd position +#endif diff --git a/keyboards/keycapsss/kimiko/rev2/keymaps/oco9oco/keymap.c b/keyboards/keycapsss/kimiko/rev2/keymaps/oco9oco/keymap.c new file mode 100644 index 00000000..a569beed --- /dev/null +++ b/keyboards/keycapsss/kimiko/rev2/keymaps/oco9oco/keymap.c @@ -0,0 +1,122 @@ +/* Copyright 2019 Leo Batyuk + * Copyright 2020 Drashna Jaelre <@drashna> + * Copyright 2020 @ben_roe (keycapsss.com) + * Copyright 2023 @Ex3c4Def + * + * 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 { + _QWERTY, + _LOWER, + _RAISE, + _ADJUST, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* QWERTY + * ,--------------------------------------------. ,----------------------------------------------. + * | ESC | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | + * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| + * | Tab | Q | W | E | R | T | | Y | U | I | O | P | - | + * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| + * | LShift | A | S | D | F | G |---------------. ,---------------| H | J | K | L | ; | ' | + * |---------+------+------+------+------+------| ( | [ | | ] | ) |------+------+------+------+------+-----------| + * | LCTRL | Z | X | C | V | B |------|--------| |-------|-------| N | M | , | . | / |RShift/Enter| + * `--------------------------------------------| / \ |----------------------------------------------' + * | LCTRL| LGUI |LALT |LOWER | Space / \Enter| RAISE |BackSP| RGUI | RALT | + * `----------------------------------' '---------------------------------' + */ + [_QWERTY] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_MINS, + KC_LSFT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_LPRN, KC_LBRC, KC_RBRC, KC_RPRN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, RSFT_T(KC_ENT), + KC_LCTL, KC_LGUI, KC_LALT, TL_LOWR, KC_SPC, KC_ENT, TL_UPPR, KC_BSPC, KC_RGUI, KC_RALT +), +/* LOWER +* QWERTY + * ,--------------------------------------------. ,----------------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | + * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| + * | | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 | + * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| + * | ` | ! | @ | # | $ | % |---------------. ,---------------| ^ | & | * | ( | ) | ~ | + * |---------+------+------+------+------+------| | | | | |------+------+------+------+------+-----------| + * | | | | | | |------|--------| |-------|-------| | _ | + | { | } | \ | + * `--------------------------------------------| / \ |----------------------------------------------' + * | LCTRL| LGUI |LALT |LOWER | Space / \Enter| RAISE |BackSP| RGUI | RALT | + * `----------------------------------' '---------------------------------' + */ +[_LOWER] = LAYOUT( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + _______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F12, + KC_GRV, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TILD, + _______, _______, _______, _______, _______, _______, _______,_______, _______, _______, XXXXXXX, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_BSLS, + _______, _______, _______, _______,_______, _______, _______, _______, _______, _______ +), +/* RAISE + * ,--------------------------------------------. ,----------------------------------------------. + * | | | | | | | | | | | | | | + * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | + * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| + * | F1 | F2 | F3 | F4 | F5 | F6 |---------------. ,---------------| Left | Down | Up |Right | ; | | + * |---------+------+------+------+------+------| [ | [ | | [ | [ |------+------+------+------+------+-----------| + * | F7 | F8 | F9 | F10 | F11 | F12 |------|--------| |-------|-------| + | - | = | [ | ] | \ | + * `--------------------------------------------| / \ |----------------------------------------------' + * | LCTRL| LGUI |LALT |LOWER | Space / \Enter| RAISE |BackSP| RGUI | RALT | + * `----------------------------------' '---------------------------------' + */ + [_RAISE] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______, + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, + KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, _______, KC_PLUS, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), +/* ADJUST (Press LOWER and RAISE together) + * ,--------------------------------------------. ,----------------------------------------------. + * | QK_BOOT | | | | | | | | | | | | | + * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| + * | RGB ON | HUE+ | SAT+ | VAL+ | | | | PREV | PLAY | NEXT | | | | + * |---------+------+------+------+------+------| |------+------+------+------+------+-----------| + * | MODE | HUE- | SAT- | VAL- | | |---------------. ,---------------| VOL+ | MUTE | VOL- | | | | + * |---------+------+------+------+------+------| | | | | |------+------+------+------+------+-----------| + * | | | | | | |------|--------| |-------|-------| | | | | | | + * `--------------------------------------------| / \ |----------------------------------------------' + * | LCTRL| LGUI |LALT |LOWER | Space / \Enter| RAISE |BackSP| RGUI | RALT | + * `----------------------------------' '---------------------------------' + */ +[_ADJUST] = LAYOUT( + QK_BOOT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + RM_TOGG, RM_HUEU, RM_SATU, RM_VALU, XXXXXXX, XXXXXXX, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, + RM_NEXT, RM_HUED, RM_SATD, RM_VALD, XXXXXXX, XXXXXXX, KC_VOLU, KC_MUTE, KC_VOLD, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +) +}; + + + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [_QWERTY] = { ENCODER_CCW_CW(KC_DOWN, KC_UP), ENCODER_CCW_CW(KC_LEFT, KC_RGHT) }, + [_LOWER] = { ENCODER_CCW_CW(RM_HUEU, KC_TAB), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_RAISE] = { ENCODER_CCW_CW(RM_VALD, RM_VALU), ENCODER_CCW_CW(RM_SPDD, RM_SPDU) }, + [_ADJUST] = { ENCODER_CCW_CW(RM_PREV, RM_NEXT), ENCODER_CCW_CW(RM_SATD, RM_SATU) }, +}; +#endif // ENCODER_MAP_ENABLE diff --git a/keyboards/keycapsss/kimiko/rev2/keymaps/oco9oco/rules.mk b/keyboards/keycapsss/kimiko/rev2/keymaps/oco9oco/rules.mk new file mode 100644 index 00000000..420f29d8 --- /dev/null +++ b/keyboards/keycapsss/kimiko/rev2/keymaps/oco9oco/rules.mk @@ -0,0 +1,8 @@ +TRI_LAYER_ENABLE = yes +ENCODER_MAP_ENABLE = yes + +RGBLIGHT_ENABLE = no # Enable keyboard 'old' RGB lightning +RGB_MATRIX_ENABLE = yes # Enable keyboard RGB Matrix lightning + +# POINTING_DEVICE_ENABLE = yes +# POINTING_DEVICE_DRIVER = cirque_pinnacle_i2c diff --git a/keyboards/keycapsss/kimiko/rev2/rev2.c b/keyboards/keycapsss/kimiko/rev2/rev2.c new file mode 100644 index 00000000..a7031b7a --- /dev/null +++ b/keyboards/keycapsss/kimiko/rev2/rev2.c @@ -0,0 +1,209 @@ +/* Copyright 2023 @BenRoe (keycapsss.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 . + */ + +#include "quantum.h" + +enum layers { _QWERTY, _LOWER, _RAISE, _ADJUST }; + +# ifdef OLED_ENABLE + +oled_rotation_t oled_init_kb(oled_rotation_t rotation) { + return OLED_ROTATION_270; +} + +// NOTE: Most of the OLED code was originally written by Soundmonster for the Corne, +// and has been copied directly from `crkbd/soundmonster/keymap.c` + +void render_mod_status_gui_alt(uint8_t modifiers) { + static const char PROGMEM gui_off_1[] = {0x85, 0x86, 0}; + static const char PROGMEM gui_off_2[] = {0xa5, 0xa6, 0}; + static const char PROGMEM gui_on_1[] = {0x8d, 0x8e, 0}; + static const char PROGMEM gui_on_2[] = {0xad, 0xae, 0}; + + static const char PROGMEM alt_off_1[] = {0x87, 0x88, 0}; + static const char PROGMEM alt_off_2[] = {0xa7, 0xa8, 0}; + static const char PROGMEM alt_on_1[] = {0x8f, 0x90, 0}; + static const char PROGMEM alt_on_2[] = {0xaf, 0xb0, 0}; + + // fillers between the modifier icons bleed into the icon frames + static const char PROGMEM off_off_1[] = {0xc5, 0}; + static const char PROGMEM off_off_2[] = {0xc6, 0}; + static const char PROGMEM on_off_1[] = {0xc7, 0}; + static const char PROGMEM on_off_2[] = {0xc8, 0}; + static const char PROGMEM off_on_1[] = {0xc9, 0}; + static const char PROGMEM off_on_2[] = {0xca, 0}; + static const char PROGMEM on_on_1[] = {0xcb, 0}; + static const char PROGMEM on_on_2[] = {0xcc, 0}; + + if (modifiers & MOD_MASK_GUI) { + oled_write_P(gui_on_1, false); + } else { + oled_write_P(gui_off_1, false); + } + + if ((modifiers & MOD_MASK_GUI) && (modifiers & MOD_MASK_ALT)) { + oled_write_P(on_on_1, false); + } else if (modifiers & MOD_MASK_GUI) { + oled_write_P(on_off_1, false); + } else if (modifiers & MOD_MASK_ALT) { + oled_write_P(off_on_1, false); + } else { + oled_write_P(off_off_1, false); + } + + if (modifiers & MOD_MASK_ALT) { + oled_write_P(alt_on_1, false); + } else { + oled_write_P(alt_off_1, false); + } + + if (modifiers & MOD_MASK_GUI) { + oled_write_P(gui_on_2, false); + } else { + oled_write_P(gui_off_2, false); + } + + if ((modifiers & MOD_MASK_GUI) && (modifiers & MOD_MASK_ALT)) { + oled_write_P(on_on_2, false); + } else if (modifiers & MOD_MASK_GUI) { + oled_write_P(on_off_2, false); + } else if (modifiers & MOD_MASK_ALT) { + oled_write_P(off_on_2, false); + } else { + oled_write_P(off_off_2, false); + } + + if (modifiers & MOD_MASK_ALT) { + oled_write_P(alt_on_2, false); + } else { + oled_write_P(alt_off_2, false); + } +} + +void render_mod_status_ctrl_shift(uint8_t modifiers) { + static const char PROGMEM ctrl_off_1[] = {0x89, 0x8a, 0}; + static const char PROGMEM ctrl_off_2[] = {0xa9, 0xaa, 0}; + static const char PROGMEM ctrl_on_1[] = {0x91, 0x92, 0}; + static const char PROGMEM ctrl_on_2[] = {0xb1, 0xb2, 0}; + + static const char PROGMEM shift_off_1[] = {0x8b, 0x8c, 0}; + static const char PROGMEM shift_off_2[] = {0xab, 0xac, 0}; + static const char PROGMEM shift_on_1[] = {0xcd, 0xce, 0}; + static const char PROGMEM shift_on_2[] = {0xcf, 0xd0, 0}; + + // fillers between the modifier icons bleed into the icon frames + static const char PROGMEM off_off_1[] = {0xc5, 0}; + static const char PROGMEM off_off_2[] = {0xc6, 0}; + static const char PROGMEM on_off_1[] = {0xc7, 0}; + static const char PROGMEM on_off_2[] = {0xc8, 0}; + static const char PROGMEM off_on_1[] = {0xc9, 0}; + static const char PROGMEM off_on_2[] = {0xca, 0}; + static const char PROGMEM on_on_1[] = {0xcb, 0}; + static const char PROGMEM on_on_2[] = {0xcc, 0}; + + if (modifiers & MOD_MASK_CTRL) { + oled_write_P(ctrl_on_1, false); + } else { + oled_write_P(ctrl_off_1, false); + } + + if ((modifiers & MOD_MASK_CTRL) && (modifiers & MOD_MASK_SHIFT)) { + oled_write_P(on_on_1, false); + } else if (modifiers & MOD_MASK_CTRL) { + oled_write_P(on_off_1, false); + } else if (modifiers & MOD_MASK_SHIFT) { + oled_write_P(off_on_1, false); + } else { + oled_write_P(off_off_1, false); + } + + if (modifiers & MOD_MASK_SHIFT) { + oled_write_P(shift_on_1, false); + } else { + oled_write_P(shift_off_1, false); + } + + if (modifiers & MOD_MASK_CTRL) { + oled_write_P(ctrl_on_2, false); + } else { + oled_write_P(ctrl_off_2, false); + } + + if ((modifiers & MOD_MASK_CTRL) && (modifiers & MOD_MASK_SHIFT)) { + oled_write_P(on_on_2, false); + } else if (modifiers & MOD_MASK_CTRL) { + oled_write_P(on_off_2, false); + } else if (modifiers & MOD_MASK_SHIFT) { + oled_write_P(off_on_2, false); + } else { + oled_write_P(off_off_2, false); + } + + if (modifiers & MOD_MASK_SHIFT) { + oled_write_P(shift_on_2, false); + } else { + oled_write_P(shift_off_2, false); + } +} + +void render_logo(void) { + static const char PROGMEM kimiko_logo[] = {0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0}; + oled_advance_page(false); + oled_advance_page(false); + oled_write_P(kimiko_logo, false); + // oled_write_P(PSTR("Kimiko"), false); +} + +void render_layer_state(void) { + static const char PROGMEM default_layer[] = {0x20, 0x94, 0x95, 0x96, 0x20, 0x20, 0xb4, 0xb5, 0xb6, 0x20, 0x20, 0xd4, 0xd5, 0xd6, 0x20, 0}; + static const char PROGMEM raise_layer[] = {0x20, 0x97, 0x98, 0x99, 0x20, 0x20, 0xb7, 0xb8, 0xb9, 0x20, 0x20, 0xd7, 0xd8, 0xd9, 0x20, 0}; + static const char PROGMEM lower_layer[] = {0x20, 0x9a, 0x9b, 0x9c, 0x20, 0x20, 0xba, 0xbb, 0xbc, 0x20, 0x20, 0xda, 0xdb, 0xdc, 0x20, 0}; + static const char PROGMEM adjust_layer[] = {0x20, 0x9d, 0x9e, 0x9f, 0x20, 0x20, 0xbd, 0xbe, 0xbf, 0x20, 0x20, 0xdd, 0xde, 0xdf, 0x20, 0}; + + if (layer_state_is(_ADJUST)) { + oled_write_P(adjust_layer, false); + } else if (layer_state_is(_LOWER)) { + oled_write_P(lower_layer, false); + } else if (layer_state_is(_RAISE)) { + oled_write_P(raise_layer, false); + } else { + oled_write_P(default_layer, false); + } +} + +void render_status_main(void) { + render_logo(); + oled_advance_page(false); + render_layer_state(); + oled_advance_page(false); + render_mod_status_gui_alt(get_mods() | get_oneshot_mods()); + render_mod_status_ctrl_shift(get_mods() | get_oneshot_mods()); +} + +bool oled_task_kb(void) { + if (!oled_task_user()) { + return false; + } + + if (is_keyboard_master()) { + render_status_main(); // Renders the current keyboard state (layer, lock, caps, scroll, etc) + } else { + render_logo(); + } + + return true; +} +# endif // OLED_ENABLE diff --git a/keyboards/keycapsss/kimiko/rev2/rev2.c:Zone.Identifier b/keyboards/keycapsss/kimiko/rev2/rev2.c:Zone.Identifier new file mode 100644 index 00000000..e69de29b diff --git a/keyboards/moonlander/config.h b/keyboards/moonlander/config.h new file mode 100644 index 00000000..7db3a184 --- /dev/null +++ b/keyboards/moonlander/config.h @@ -0,0 +1,156 @@ +/* Copyright 2020 ZSA Technology Labs, Inc <@zsa> + * Copyright 2020 Jack Humbert + * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * + * 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" + +#define WEBUSB_LANDING_PAGE_URL u8"configure.ergodox-ez.com" + +/* key matrix size */ +#define MATRIX_ROWS 12 +#define MATRIX_COLS 7 + +/* PCB default pin-out */ +// #define MATRIX_ROW_PINS { B10, B11, B12, B13, B14, B15 } +// #define MATRIX_COL_PINS { A0, A1, A2, A3, A6, A7, B0 } + +// #define MCP23_ROW_PINS { GPB5, GBP4, GBP3, GBP2, GBP1, GBP0 } +// #define MCP23_COL_PINS { GPA0, GBA1, GBA2, GBA3, GBA4, GBA5, GBA6 } + +// #define MCP23_LED_R GPB7 +// #define MCP23_LED_G GPB6 +// #define MCP23_LED_B GPA7 + +#define EEPROM_I2C_24LC128 + +// Not needed, is default address: +// #define EXTERNAL_EEPROM_I2C_BASE_ADDRESS 0b10100000 + +/* COL2ROW or ROW2COL */ +#define DIODE_DIRECTION ROW2COL + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* 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 + +/* + * 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 DRIVER_ADDR_1 0b1110100 +#define DRIVER_ADDR_2 0b1110111 + +#define DRIVER_COUNT 2 +#define DRIVER_1_LED_TOTAL 36 +#define DRIVER_2_LED_TOTAL 36 +#define RGB_MATRIX_LED_COUNT (DRIVER_1_LED_TOTAL + DRIVER_2_LED_TOTAL) +#define RGB_MATRIX_CENTER { 125, 26 } +#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 175 +#define RGB_MATRIX_FRAMEBUFFER_EFFECTS +#define RGB_MATRIX_KEYPRESSES +#define RGB_DISABLE_WHEN_USB_SUSPENDED +// RGB Matrix Animation modes. Explicitly enabled +// For full list of effects, see: +// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects +# define ENABLE_RGB_MATRIX_ALPHAS_MODS +# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN +# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT +# define ENABLE_RGB_MATRIX_BREATHING +# define ENABLE_RGB_MATRIX_BAND_SAT +# define ENABLE_RGB_MATRIX_BAND_VAL +# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT +# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL +# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT +# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL +# define ENABLE_RGB_MATRIX_CYCLE_ALL +# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT +# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN +# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON +# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN +# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL +# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL +# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL +# define ENABLE_RGB_MATRIX_DUAL_BEACON +# define ENABLE_RGB_MATRIX_RAINBOW_BEACON +# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS +# define ENABLE_RGB_MATRIX_RAINDROPS +# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS +# define ENABLE_RGB_MATRIX_HUE_BREATHING +# define ENABLE_RGB_MATRIX_HUE_PENDULUM +# define ENABLE_RGB_MATRIX_HUE_WAVE +# define ENABLE_RGB_MATRIX_PIXEL_RAIN +# define ENABLE_RGB_MATRIX_PIXEL_FLOW +# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL +// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined +# define ENABLE_RGB_MATRIX_TYPING_HEATMAP +# define ENABLE_RGB_MATRIX_DIGITAL_RAIN +// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS +# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS +# define ENABLE_RGB_MATRIX_SPLASH +# define ENABLE_RGB_MATRIX_MULTISPLASH +# define ENABLE_RGB_MATRIX_SOLID_SPLASH +# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH + +// #define RGB_MATRIX_LED_PROCESS_LIMIT 5 +// #define RGB_MATRIX_LED_FLUSH_LIMIT 26 + +#define MOUSEKEY_INTERVAL 20 +#define MOUSEKEY_DELAY 0 +#define MOUSEKEY_TIME_TO_MAX 60 +#define MOUSEKEY_MAX_SPEED 7 +#define MOUSEKEY_WHEEL_DELAY 400 +#define MOUSEKEY_WHEEL_INTERVAL MOUSEKEY_INTERVAL +#define MOUSEKEY_WHEEL_MAX_SPEED MOUSEKEY_MAX_SPEED +#define MOUSEKEY_WHEEL_TIME_TO_MAX MOUSEKEY_TIME_TO_MAX + +#define MUSIC_MAP + +#define FIRMWARE_VERSION_SIZE 17 +#define DYNAMIC_KEYMAP_EEPROM_ADDR (EECONFIG_SIZE + FIRMWARE_VERSION_SIZE) +#ifdef EEPROM_I2C +# define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 16383 +# define DYNAMIC_KEYMAP_LAYER_COUNT 8 +#endif + +#define AUDIO_PIN A5 +#define AUDIO_PIN_ALT A4 +#define AUDIO_PIN_ALT_AS_NEGATIVE diff --git a/keyboards/moonlander/halconf.h b/keyboards/moonlander/halconf.h new file mode 100644 index 00000000..46b53b1a --- /dev/null +++ b/keyboards/moonlander/halconf.h @@ -0,0 +1,22 @@ +/* Copyright 2021 QMK + * + * 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 3 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 + +#define HAL_USE_I2C TRUE +#define HAL_USE_GPT TRUE +#define HAL_USE_DAC TRUE + +#include_next diff --git a/keyboards/moonlander/info.json b/keyboards/moonlander/info.json new file mode 100644 index 00000000..6322dccd --- /dev/null +++ b/keyboards/moonlander/info.json @@ -0,0 +1,33 @@ +{ + "keyboard_name": "Moonlander Mark I", + "manufacturer": "ZSA Technology Labs", + "url": "zsa.io/moonlander", + "maintainer": "ZSA via Drashna", + "usb": { + "vid": "0x3297", + "pid": "0x1969", + "device_version": "0.0.1" + }, + "layouts": { + "LAYOUT_moonlander": { + "layout": [ + {"x":0, "y":0.375}, {"x":1, "y":0.375}, {"x":2, "y":0.125}, {"x":3, "y":0}, {"x":4, "y":0.125}, {"x":5, "y":0.25}, {"x":6, "y":0.25}, + {"x":10, "y":0.25}, {"x":11, "y":0.25}, {"x":12, "y":0.125}, {"x":13, "y":0}, {"x":14, "y":0.125}, {"x":15, "y":0.375}, {"x":16, "y":0.375}, + + {"x":0, "y":1.375}, {"x":1, "y":1.375}, {"x":2, "y":1.125}, {"x":3, "y":1}, {"x":4, "y":1.125}, {"x":5, "y":1.25}, {"x":6, "y":1.25}, + {"x":10, "y":1.25}, {"x":11, "y":1.25}, {"x":12, "y":1.125}, {"x":13, "y":1}, {"x":14, "y":1.125}, {"x":15, "y":1.375}, {"x":16, "y":1.375}, + + {"x":0, "y":2.375}, {"x":1, "y":2.375}, {"x":2, "y":2.125}, {"x":3, "y":2}, {"x":4, "y":2.125}, {"x":5, "y":2.25}, {"x":6, "y":2.25}, + {"x":10, "y":2.25}, {"x":11, "y":2.25}, {"x":12, "y":2.125}, {"x":13, "y":2}, {"x":14, "y":2.125}, {"x":15, "y":2.375}, {"x":16, "y":2.375}, + + {"x":0, "y":3.375}, {"x":1, "y":3.375}, {"x":2, "y":3.125}, {"x":3, "y":3}, {"x":4, "y":3.125}, {"x":5, "y":3.25}, + {"x":11, "y":3.25}, {"x":12, "y":3.125}, {"x":13, "y":3}, {"x":14, "y":3.125}, {"x":15, "y":3.375}, {"x":16, "y":3.375}, + + {"x":0, "y":4.375}, {"x":1, "y":4.375}, {"x":2, "y":4.125}, {"x":3, "y":4}, {"x":4, "y":4.125}, {"x":5, "y":4.5, "w":2}, + {"x":10, "y":4.5, "w":2}, {"x":12, "y":4.125}, {"x":13, "y":4}, {"x":14, "y":4.125}, {"x":15, "y":4.375}, {"x":16, "y":4.375}, + + {"x":5, "y":5.5, "h":1.5}, {"x":6, "y":5.5, "h":1.5}, {"x":7, "y":5.5, "h":1.5}, {"x":9, "y":5.5, "h":1.5}, {"x":10, "y":5.5, "h":1.5}, {"x":11, "y":5.5, "h":1.5} + ] + } + } +} diff --git a/keyboards/moonlander/keymaps/default/config.h b/keyboards/moonlander/keymaps/default/config.h new file mode 100644 index 00000000..83ea2a1b --- /dev/null +++ b/keyboards/moonlander/keymaps/default/config.h @@ -0,0 +1,21 @@ +/* Copyright 2020 ZSA Technology Labs, Inc <@zsa> + * Copyright 2020 Jack Humbert + * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * + * 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 + +#define ORYX_CONFIGURATOR diff --git a/keyboards/moonlander/keymaps/default/keymap.c b/keyboards/moonlander/keymaps/default/keymap.c new file mode 100644 index 00000000..d747e9ea --- /dev/null +++ b/keyboards/moonlander/keymaps/default/keymap.c @@ -0,0 +1,73 @@ +/* Copyright 2020 ZSA Technology Labs, Inc <@zsa> + * Copyright 2020 Jack Humbert + * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * + * 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 +#include "version.h" + +enum layers { + BASE, // default layer + SYMB, // symbols + MDIA, // media keys +}; + +enum custom_keycodes { + VRSN = ML_SAFE_RANGE, +}; + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [BASE] = LAYOUT_moonlander( + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_DEL, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_HYPR, KC_MEH, KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), LGUI_T(KC_QUOT), + KC_LSFT, LCTL_T(KC_Z),KC_X,KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RCTL_T(KC_SLSH), KC_RSFT, + LT(SYMB,KC_GRV),WEBUSB_PAIR,A(KC_LSFT),KC_LEFT, KC_RGHT, LALT_T(KC_APP), RCTL_T(KC_ESC), KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, MO(SYMB), + KC_SPC, KC_BSPC, KC_LGUI, KC_LALT, KC_TAB, KC_ENT + ), + + [SYMB] = LAYOUT_moonlander( + VRSN, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + _______, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, _______, _______, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, + _______, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, _______, _______, KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, _______, + _______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, _______, + EE_CLR, _______, _______, _______, _______, RGB_VAI, RGB_TOG, _______, KC_DOT, KC_0, KC_EQL, _______, + RGB_HUD, RGB_VAD, RGB_HUI, TOGGLE_LAYER_COLOR,_______, _______ + ), + + [MDIA] = LAYOUT_moonlander( + LED_LEVEL,_______,_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, + _______, _______, _______, KC_MS_U, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, _______, _______, + _______, _______, _______, KC_BTN1, KC_BTN2, _______, _______, KC_VOLU, KC_VOLD, KC_MUTE, _______, _______, + _______, _______, _______, _______, _______, _______ + ), +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + switch (keycode) { + case VRSN: + SEND_STRING (QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + return false; + } + } + return true; +} diff --git a/keyboards/moonlander/keymaps/drashna/config.h b/keyboards/moonlander/keymaps/drashna/config.h new file mode 100644 index 00000000..153007eb --- /dev/null +++ b/keyboards/moonlander/keymaps/drashna/config.h @@ -0,0 +1,27 @@ +/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * + * 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 + +#define TAPPING_TERM_PER_KEY +// #define WAIT_FOR_USB +// #define NO_USB_STARTUP_CHECK + +#define SECURE_UNLOCK_SEQUENCE \ + { \ + { 2, 1 }, { 2, 2 }, { 2, 3 }, { 2, 4 } \ + } diff --git a/keyboards/moonlander/keymaps/drashna/keymap.c b/keyboards/moonlander/keymaps/drashna/keymap.c new file mode 100644 index 00000000..e38a2828 --- /dev/null +++ b/keyboards/moonlander/keymaps/drashna/keymap.c @@ -0,0 +1,196 @@ +/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * + * 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 "drashna.h" + +enum more_custom_keycodes { KC_SWAP_NUM = NEW_SAFE_RANGE }; + +// clang-format off +#define LAYOUT_moonlander_wrapper(...) LAYOUT_moonlander(__VA_ARGS__) + +#define LAYOUT_moonlander_base( \ + K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \ + K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \ + K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \ + ) \ + LAYOUT_moonlander_wrapper( \ + KC_ESC, ________________NUMBER_LEFT________________, UC_FLIP, UC_TABL, ________________NUMBER_RIGHT_______________, KC_MINS, \ + KC_TAB, K01, K02, K03, K04, K05, TG_DBLO, TG_DBLO, K06, K07, K08, K09, K0A, KC_BSLS, \ + KC_C1R3, K11, K12, K13, K14, K15, TG_GAME, TG_GAME, K16, K17, K18, K19, K1A, RALT_T(K1B), \ + KC_MLSF, CTL_T(K21), K22, K23, K24, K25, K26, K27, K28, K29, RCTL_T(K2A),KC_MRSF, \ + KC_GRV, OS_MEH, OS_HYPR, KC_LBRC, KC_RBRC, UC_CLUE, KC_DEL, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, UC_IRNY, \ + KC_SPC, BK_LWER, OS_LALT, OS_RGUI, DL_RAIS, KC_ENT \ + ) + +#define LAYOUT_base_wrapper(...) LAYOUT_moonlander_base(__VA_ARGS__) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_DEFAULT_LAYER_1] = LAYOUT_base_wrapper( + _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, + _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, + _________________QWERTY_L3_________________, _________________QWERTY_R3_________________ + ), + + [_DEFAULT_LAYER_2] = LAYOUT_base_wrapper( + ______________COLEMAK_MOD_DH_L1____________, ______________COLEMAK_MOD_DH_R1____________, + ______________COLEMAK_MOD_DH_L2____________, ______________COLEMAK_MOD_DH_R2____________, + ______________COLEMAK_MOD_DH_L3____________, ______________COLEMAK_MOD_DH_R3____________ + ), + [_DEFAULT_LAYER_3] = LAYOUT_base_wrapper( + _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, + _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, + _________________COLEMAK_L3________________, _________________COLEMAK_R3________________ + ), + + [_DEFAULT_LAYER_4] = LAYOUT_base_wrapper( + _________________DVORAK_L1_________________, _________________DVORAK_R1_________________, + _________________DVORAK_L2_________________, _________________DVORAK_R2_________________, + _________________DVORAK_L3_________________, _________________DVORAK_R3_________________ + ), + + + [_GAMEPAD] = LAYOUT_moonlander_wrapper( + KC_ESC, XXXXXXX, KC_1, KC_2, KC_3, KC_4, HYPR(KC_Q), _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, KC_NO, + KC_F1, KC_K, KC_Q, KC_W, KC_E, KC_R, KC_T, UC_SHRG, UC_DISA, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NO, + KC_TAB, KC_G, KC_A, KC_S, KC_D, KC_F, _______, TG_GAME, KC_I, KC_O, XXXXXXX, XXXXXXX, XXXXXXX, KC_NO, + KC_LCTL, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX, KC_NO, + KC_GRV, KC_U, KC_I, KC_Y, KC_T, KC_PSCR, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_NO, + KC_V, KC_SPC, KC_H, KC_NO, XXXXXXX,KC_SWAP_NUM + ), + [_DIABLO] = LAYOUT_moonlander_wrapper( + KC_ESC, KC_V, KC_D, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, KC_NO, + KC_TAB, KC_S, KC_I, KC_F, KC_M, KC_T, _______, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NO, + XXXXXXX, KC_1, KC_2, KC_3, KC_4, KC_G, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NO, + KC_LCTL, KC_D3_1, KC_D3_2, KC_D3_3, KC_D3_4, KC_Z, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX, KC_NO, + XXXXXXX, XXXXXXX, KC_L, KC_J, KC_F, KC_PSCR, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NO, + KC_DIABLO_CLEAR, SFT_T(KC_SPACE), ALT_T(KC_Q), KC_PGDN, KC_DEL, KC_ENT + ), + [_DIABLOII] = LAYOUT_moonlander_wrapper( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_GRV, XXXXXXX, _______, KC_F9, KC_F10, KC_F11, KC_F12, XXXXXXX, KC_NO, + KC_TAB, KC_A, KC_T, KC_Q, KC_I, KC_M, TG(_DIABLOII), _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NO, + KC_S, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, XXXXXXX, _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NO, + KC_LCTL, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_N, KC_M, XXXXXXX, XXXXXXX, XXXXXXX, KC_NO, + XXXXXXX, XXXXXXX, KC_G, KC_F, KC_L, KC_V, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_NO, + KC_G, KC_LSFT, KC_LCTL, KC_PGDN, KC_DEL, KC_ENT + ), + + [_LOWER] = LAYOUT_moonlander_wrapper( + KC_F12, _________________FUNC_LEFT_________________, _______, _______, _________________FUNC_RIGHT________________, KC_F11, + _______, _________________LOWER_L1__________________, _______, _______, _________________LOWER_R1__________________, KC_PIPE, + _______, _________________LOWER_L2__________________, _______, _______, _________________LOWER_R2__________________, KC_DQUO, + _______, _________________LOWER_L3__________________, _________________LOWER_R3__________________, KC_PSCR, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PAUS, + _______, _______, _______, _______, _______, _______ + ), + + [_RAISE] = LAYOUT_moonlander_wrapper( + KC_F12, _________________FUNC_LEFT_________________, _______, _______, _________________FUNC_RIGHT________________, KC_F11, + _______, _________________RAISE_L1__________________, _______, _______, _________________RAISE_R1__________________, KC_BSLS, + _______, _________________RAISE_L2__________________, _______, _______, _________________RAISE_R2__________________, KC_QUOT, + _______, _________________RAISE_L3__________________, _________________RAISE_R3__________________, KC_PSCR, + _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_PAUS, + _______, _______, _______, _______, _______, _______ + ), + + [_ADJUST] = LAYOUT_moonlander_wrapper( + QK_MAKE, KC_WIDE,KC_AUSSIE,KC_SCRIPT,KC_ZALGO,KC_NOMODE,_______, KC_NUKE,KC_NOMODE,KC_BLOCKS,KC_REGIONAL,_______,_______, QK_BOOT, + VRSN, _________________ADJUST_L1_________________, TG(_DIABLOII), _______, _________________ADJUST_R1_________________, EE_CLR, + KEYLOCK, _________________ADJUST_L2_________________, _______, _______, _________________ADJUST_R2_________________, RGB_IDL, + UC_NEXT, _________________ADJUST_L3_________________, _________________ADJUST_R3_________________, TG_MODS, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, AUTO_CTN, + QK_RBT, _______, _______, _______, _______, _______ + ), +}; + +/* Blank + + [_LAYER] = LAYOUT_moonlander_wrapper( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + ), + +*/ + + +bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_1: + if (layer_state_is(_GAMEPAD) && userspace_config.swapped_numbers) { + if (record->event.pressed) { + register_code(KC_2); + } else { + unregister_code(KC_2); + } + return false; + } + break; + case KC_2: + if (layer_state_is(_GAMEPAD) && userspace_config.swapped_numbers) { + if (record->event.pressed) { + register_code(KC_1); + } else { + unregister_code(KC_1); + } + return false; + } + break; + case KC_SWAP_NUM: + if (record->event.pressed) { + userspace_config.swapped_numbers ^= 1; + eeconfig_update_user(userspace_config.raw); + unregister_code(KC_1); + unregister_code(KC_2); + } + break; + } + return true; +} + +#ifdef RGB_MATRIX_ENABLE +bool rgb_matrix_indicators_advanced_keymap(uint8_t led_min, uint8_t led_max) { + if (layer_state_is(_GAMEPAD)) { + RGB_MATRIX_INDICATOR_SET_COLOR(11, 0x00, 0xFF, 0x00); // Q + RGB_MATRIX_INDICATOR_SET_COLOR(16, 0x00, 0xFF, 0xFF); // W + RGB_MATRIX_INDICATOR_SET_COLOR(21, 0xFF, 0x00, 0x00); // E + RGB_MATRIX_INDICATOR_SET_COLOR(26, 0xFF, 0x80, 0x00); // R + RGB_MATRIX_INDICATOR_SET_COLOR(12, 0x00, 0xFF, 0xFF); // A + RGB_MATRIX_INDICATOR_SET_COLOR(17, 0x00, 0xFF, 0xFF); // S + RGB_MATRIX_INDICATOR_SET_COLOR(22, 0x00, 0xFF, 0xFF); // D + RGB_MATRIX_INDICATOR_SET_COLOR(27, 0x7A, 0x00, 0xFF); // F + + RGB_MATRIX_INDICATOR_SET_COLOR((userspace_config.swapped_numbers ? 15 : 10), 0xFF, 0xFF, 0xFF); // 1 + RGB_MATRIX_INDICATOR_SET_COLOR((userspace_config.swapped_numbers ? 10 : 15), 0x00, 0xFF, 0x00); // 2 + RGB_MATRIX_INDICATOR_SET_COLOR(20, 0x7A, 0x00, 0xFF); // 3 + } + + return true; +} +#endif + +#ifdef TAPPING_TERM_PER_KEY +uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { + if (keycode >= QK_MOD_TAP && keycode <= QK_MOD_TAP_MAX) { + if (mod_config(keycode & 0xf) & MOD_MASK_ALT) { + return (2 * TAPPING_TERM); + } + } + return TAPPING_TERM; +} +#endif diff --git a/keyboards/moonlander/keymaps/drashna/rules.mk b/keyboards/moonlander/keymaps/drashna/rules.mk new file mode 100644 index 00000000..927d956e --- /dev/null +++ b/keyboards/moonlander/keymaps/drashna/rules.mk @@ -0,0 +1,6 @@ +TAP_DANCE_ENABLE = yes +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +UNICODE_ENABLE = yes +UNICODEMAP_ENABLE = no +AUTOCORRECT_ENABLE = yes +CAPS_WORD_ENABLE = yes diff --git a/keyboards/moonlander/keymaps/manna-harbour_miryoku/config.h b/keyboards/moonlander/keymaps/manna-harbour_miryoku/config.h new file mode 100644 index 00000000..44679baf --- /dev/null +++ b/keyboards/moonlander/keymaps/manna-harbour_miryoku/config.h @@ -0,0 +1,23 @@ +// Copyright 2019 Manna Harbour +// https://github.com/manna-harbour/miryoku + +// 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 + +#define XXX KC_NO + +#define LAYOUT_miryoku(\ + 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,\ + N30, N31, K32, K33, K34, K35, K36, K37, N38, N39\ +)\ +LAYOUT_moonlander(\ +XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX, XXX,\ +XXX, K00, K01, K02, K03, K04, XXX, XXX, K05, K06, K07, K08, K09, XXX,\ +XXX, K10, K11, K12, K13, K14, XXX, XXX, K15, K16, K17, K18, K19, XXX,\ +XXX, K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, XXX,\ +XXX, XXX, XXX, XXX, K32, XXX, XXX, K37, XXX, XXX, XXX, XXX,\ + K33, K34, XXX, XXX, K35, K36\ +) diff --git a/keyboards/moonlander/keymaps/manna-harbour_miryoku/keymap.c b/keyboards/moonlander/keymaps/manna-harbour_miryoku/keymap.c new file mode 100644 index 00000000..dbab7f98 --- /dev/null +++ b/keyboards/moonlander/keymaps/manna-harbour_miryoku/keymap.c @@ -0,0 +1,4 @@ +// Copyright 2019 Manna Harbour +// https://github.com/manna-harbour/miryoku + +// 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 . diff --git a/keyboards/moonlander/keymaps/oco-oryx/config.h b/keyboards/moonlander/keymaps/oco-oryx/config.h new file mode 100644 index 00000000..96f3dbe9 --- /dev/null +++ b/keyboards/moonlander/keymaps/oco-oryx/config.h @@ -0,0 +1,42 @@ +/* + Set any config.h overrides for your specific keymap here. + See config.h options at https://docs.qmk.fm/#/config_options?id=the-configh-file +*/ +#define ORYX_CONFIGURATOR +#define IGNORE_MOD_TAP_INTERRUPT +#undef TAPPING_TERM +#define TAPPING_TERM 141 + +#define ONESHOT_TAP_TOGGLE 1 + +#define TAPPING_FORCE_HOLD + +#undef RGB_MATRIX_VAL_STEP +#define RGB_MATRIX_VAL_STEP 6 + +#define USB_SUSPEND_WAKEUP_DELAY 0 +#undef MOUSEKEY_INTERVAL +#define MOUSEKEY_INTERVAL 4 + +#undef MOUSEKEY_WHEEL_DELAY +#define MOUSEKEY_WHEEL_DELAY 197 + +#undef MOUSEKEY_MAX_SPEED +#define MOUSEKEY_MAX_SPEED 2 + +#undef MOUSEKEY_TIME_TO_MAX +#define MOUSEKEY_TIME_TO_MAX 29 + +#undef MOUSEKEY_WHEEL_MAX_SPEED +#define MOUSEKEY_WHEEL_MAX_SPEED 4 + +#undef MOUSEKEY_WHEEL_TIME_TO_MAX +#define MOUSEKEY_WHEEL_TIME_TO_MAX 18 + +#define NO_AUTO_SHIFT_TAB +#define NO_AUTO_SHIFT_ALPHA +#define FIRMWARE_VERSION u8"ENA3n/vYrra" +#define RAW_USAGE_PAGE 0xFF60 +#define RAW_USAGE_ID 0x61 +#define LAYER_STATE_16BIT +#define RGB_MATRIX_STARTUP_SPD 60 diff --git a/keyboards/moonlander/keymaps/oco-oryx/keymap.c b/keyboards/moonlander/keymaps/oco-oryx/keymap.c new file mode 100644 index 00000000..199446bf --- /dev/null +++ b/keyboards/moonlander/keymaps/oco-oryx/keymap.c @@ -0,0 +1,469 @@ +#include QMK_KEYBOARD_H +#include "version.h" +#include "keymap_german.h" +#include "keymap_nordic.h" +#include "keymap_french.h" +#include "keymap_spanish.h" +#include "keymap_hungarian.h" +#include "keymap_swedish.h" +#include "keymap_br_abnt2.h" +#include "keymap_canadian_multilingual.h" +#include "keymap_german_ch.h" +#include "keymap_jp.h" +#include "keymap_korean.h" +#include "keymap_bepo.h" +#include "keymap_italian.h" +#include "keymap_slovenian.h" +#include "keymap_lithuanian_azerty.h" +#include "keymap_danish.h" +#include "keymap_norwegian.h" +#include "keymap_portuguese.h" +#include "keymap_contributions.h" +#include "keymap_czech.h" +#include "keymap_romanian.h" +#include "keymap_russian.h" +#include "keymap_uk.h" +#include "keymap_estonian.h" +#include "keymap_belgian.h" +#include "keymap_us_international.h" +#include "keymap_croatian.h" +#include "keymap_turkish_q.h" +#include "keymap_slovak.h" + +#define KC_MAC_UNDO LGUI(KC_Z) +#define KC_MAC_CUT LGUI(KC_X) +#define KC_MAC_COPY LGUI(KC_C) +#define KC_MAC_PASTE LGUI(KC_V) +#define KC_PC_UNDO LCTL(KC_Z) +#define KC_PC_CUT LCTL(KC_X) +#define KC_PC_COPY LCTL(KC_C) +#define KC_PC_PASTE LCTL(KC_V) +#define ES_LESS_MAC KC_GRAVE +#define ES_GRTR_MAC LSFT(KC_GRAVE) +#define ES_BSLS_MAC ALGR(KC_6) +#define NO_PIPE_ALT KC_GRAVE +#define NO_BSLS_ALT KC_EQUAL +#define LSA_T(kc) MT(MOD_LSFT | MOD_LALT, kc) +#define BP_NDSH_MAC ALGR(KC_8) +#define SE_SECT_MAC ALGR(KC_6) +#define MOON_LED_LEVEL LED_LEVEL + +enum custom_keycodes { + RGB_SLD = ML_SAFE_RANGE, + ST_MACRO_0, + ST_MACRO_1, + ST_MACRO_2, + ST_MACRO_3, + ST_MACRO_4, + ST_MACRO_5, +}; + + +enum tap_dance_codes { + DANCE_0, + DANCE_1, + DANCE_2, + DANCE_3, + DANCE_4, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [0] = LAYOUT_moonlander( + KC_ESCAPE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_F5, KC_GRAVE, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, + KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_F6, KC_LBRACKET, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_EQUAL, + LCTL_T(KC_CAPSLOCK),LSFT_T(KC_A),LALT_T(KC_S),LCTL_T(KC_D),LSFT_T(KC_F),KC_G, KC_F7, KC_RBRACKET, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_QUOTE, + KC_LSHIFT, LGUI_T(KC_Z),KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_BSLASH, + KC_LEFT, KC_RIGHT, KC_DOWN, KC_UP, LCTL_T(KC_TAB),TG(3), TG(1), LT(5,KC_SPACE), TD(DANCE_0), DYN_MACRO_PLAY1,DYN_MACRO_PLAY2,_______, + LT(4,KC_BSPACE),KC_DELETE, _______, TG(6), _______, LT(7,KC_ENTER) + ), + [1] = LAYOUT_moonlander( + _______, _______, _______, _______, _______, _______, _______, KC_TILD, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, KC_LBRACKET, _______, _______, _______, _______, _______, _______, + _______, LSFT_T(KC_A),KC_S, KC_D, KC_F, _______, _______, KC_RBRACKET, _______, _______, _______, _______, _______, _______, + _______, KC_Z, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + LT(2,KC_BSPACE),_______, _______, _______, _______, _______ + ), + [2] = LAYOUT_moonlander( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_NO, KC_LPRN, KC_EQUAL, KC_RPRN, _______, _______, _______, _______, KC_7, KC_8, KC_9, _______, _______, + _______, KC_LCTRL, KC_LBRACKET, KC_MINUS, KC_RBRACKET, _______, _______, _______, _______, KC_4, KC_5, KC_6, KC_COLN, KC_DQUO, + _______, KC_LSHIFT, KC_SLASH, KC_EQUAL, KC_BSLASH, _______, _______, KC_1, KC_2, KC_3, _______, _______, + _______, KC_MEH, KC_HYPR, _______, _______, _______, _______, LT(5,KC_0), _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + ), + [3] = LAYOUT_moonlander( + TO(0), LCTL(KC_F1), LGUI(LSFT(KC_RIGHT)),LGUI(KC_UP), LGUI(KC_RIGHT), TD(DANCE_1), LGUI(LSFT(KC_S)), KC_A, KC_B, _______, _______, _______, _______, _______, + KC_TAB, KC_MS_WH_UP, KC_MS_BTN2, KC_UP, KC_MS_BTN1, KC_PGUP, KC_D, KC_C, KC_D, KC_7, KC_8, KC_9, _______, _______, + KC_LCTRL, KC_MS_WH_DOWN, KC_LEFT, KC_DOWN, KC_RIGHT, KC_PGDOWN, TD(DANCE_2), KC_E, KC_F, KC_4, KC_5, KC_6, _______, _______, + _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), KC_MS_BTN3, KC_MINUS, KC_1, KC_2, KC_3, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_COMMA, KC_DOT, _______, _______, + KC_SPACE, KC_ENTER, _______, _______, _______, _______ + ), + [4] = LAYOUT_moonlander( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F11, KC_F12, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_UNDS, + _______, KC_B, KC_C, _______, KC_D, TD(DANCE_3), _______, KC_LPRN, KC_RPRN, KC_7, KC_8, KC_9, _______, KC_PLUS, + _______, ST_MACRO_0, ST_MACRO_1, LCTL_T(KC_MINUS),ST_MACRO_2, KC_DOT, _______, KC_LBRACKET, KC_RBRACKET, KC_4, KC_5, KC_6, KC_COLN, KC_DQUO, + _______, TD(DANCE_4), ST_MACRO_3, KC_UNDS, KC_EQUAL, _______, ST_MACRO_4, KC_1, KC_2, KC_3, _______, _______, + _______, _______, _______, _______, _______, _______, _______, LT(5,KC_0), _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + ), + [5] = LAYOUT_moonlander( + TO(0), LCTL(KC_F1), KC_F2, KC_F3, LALT(KC_F4), KC_F5, KC_F6, _______, _______, _______, _______, _______, _______, RESET, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_LGUI, KC_LALT, KC_LCTRL, KC_LSHIFT, _______, _______, _______, KC_INSERT, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_ENTER, + _______, KC_PC_UNDO, KC_PC_CUT, KC_PC_COPY, KC_PC_PASTE, LCTL(KC_B), KC_APPLICATION, KC_HOME, KC_PGDOWN, KC_PGUP, KC_END, KC_BSPACE, + _______, _______, _______, _______, _______, _______, WEBUSB_PAIR, _______, _______, DYN_REC_START1, DYN_REC_START2, _______, + KC_BSPACE, _______, _______, _______, _______, _______ + ), + [6] = LAYOUT_moonlander( + _______, _______, _______, _______, _______, _______, _______, MU_TOG, KC_B, _______, TOGGLE_LAYER_COLOR,RGB_TOG, RGB_MOD, RGB_SLD, + _______, KC_F12, KC_F7, KC_F8, KC_F9, _______, _______, AU_TOG, KC_C, KC_7, KC_8, KC_9, RGB_SPI, RGB_SPD, + _______, LGUI_T(KC_F11),LALT_T(KC_F4),LCTL_T(KC_F5),LSFT_T(KC_F6),KC_BSPACE, _______, MU_MOD, KC_D, LSFT_T(KC_4),LCTL_T(KC_5),LALT_T(KC_6),RGB_VAI, RGB_VAD, + _______, KC_F10, KC_F1, KC_F2, KC_F3, KC_DELETE, KC_F, KC_1, KC_2, KC_3, RGB_SAI, RGB_SAD, + _______, _______, _______, _______, _______, _______, _______, KC_0, ST_MACRO_5, KC_NO, RGB_HUI, RGB_HUD, + _______, _______, _______, _______, _______, _______ + ), + [7] = LAYOUT_moonlander( + _______, LCTL(KC_F1), _______, _______, LALT(KC_F4), _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, KC_MS_WH_DOWN, KC_MS_UP, KC_MS_WH_UP, _______, _______, _______, KC_NO, KC_LSHIFT, KC_LCTRL, KC_LALT, KC_LGUI, _______, + _______, _______, KC_MS_LEFT, KC_MS_DOWN, KC_MS_RIGHT, _______, _______, _______, KC_MS_BTN3, KC_MS_ACCEL0, KC_MS_BTN1, KC_MS_BTN2, KC_MS_ACCEL2, _______, + _______, LCTL(KC_Z), LCTL(KC_X), LCTL(KC_C), LCTL(KC_V), LCTL(KC_B), KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, + LCTL(LSFT(KC_E)),LALT(KC_S), LALT(KC_TAB), _______, _______, KC_MS_BTN3, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + ), +}; + +extern rgb_config_t rgb_matrix_config; + +void keyboard_post_init_user(void) { + rgb_matrix_enable(); +} + +const uint8_t PROGMEM ledmap[][DRIVER_LED_TOTAL][3] = { + [0] = { {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226}, {87,243,226} }, + + [1] = { {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223}, {199,251,223} }, + + [3] = { {0,0,0}, {0,0,0}, {0,0,0}, {74,255,255}, {74,255,255}, {0,0,0}, {131,255,255}, {131,255,255}, {152,255,255}, {74,255,255}, {0,0,0}, {41,255,255}, {0,245,245}, {152,255,255}, {74,255,255}, {152,255,255}, {0,245,245}, {0,245,245}, {152,255,255}, {0,0,0}, {0,0,0}, {41,255,255}, {0,245,245}, {152,255,255}, {0,0,0}, {0,0,0}, {131,255,255}, {131,255,255}, {41,255,255}, {0,0,0}, {0,0,0}, {219,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,255,255}, {0,255,255}, {0,255,255}, {0,0,0}, {0,0,0}, {0,255,255}, {0,255,255}, {0,255,255}, {0,0,0}, {0,0,0}, {0,255,255}, {0,255,255}, {0,255,255}, {0,255,255}, {72,244,245}, {72,244,245}, {72,244,245}, {0,0,0}, {72,244,245}, {72,244,245}, {72,244,245}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} }, + + [4] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {31,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {31,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,255,255}, {0,255,255}, {0,255,255}, {0,0,0}, {0,0,0}, {0,255,255}, {0,255,255}, {0,255,255}, {0,0,0}, {0,0,0}, {0,255,255}, {0,255,255}, {0,255,255}, {0,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {31,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} }, + + [5] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,255,255}, {0,0,0}, {81,253,252}, {0,0,0}, {0,0,0}, {0,255,255}, {0,0,0}, {81,253,252}, {0,0,0}, {0,0,0}, {0,255,255}, {0,0,0}, {81,253,252}, {0,0,0}, {0,0,0}, {0,255,255}, {0,0,0}, {81,253,252}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {81,253,252}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,255,255}, {81,253,252}, {0,0,0}, {0,0,0}, {0,0,0}, {0,255,255}, {81,253,252}, {0,0,0}, {0,0,0}, {0,0,0}, {0,255,255}, {81,253,252}, {0,0,0}, {0,0,0}, {0,0,0}, {0,255,255}, {81,253,252}, {0,0,0}, {0,0,0}, {0,0,0}, {81,253,252}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} }, + + [6] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {146,224,255}, {146,224,255}, {146,224,255}, {0,0,0}, {0,0,0}, {169,120,255}, {169,120,255}, {169,120,255}, {0,0,0}, {0,0,0}, {169,120,255}, {169,120,255}, {169,120,255}, {0,0,0}, {0,0,0}, {169,120,255}, {169,120,255}, {169,120,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {85,203,158}, {85,203,158}, {85,203,158}, {85,203,158}, {85,203,158}, {10,225,255}, {10,225,255}, {10,225,255}, {10,225,255}, {10,225,255}, {134,255,213}, {169,120,255}, {169,120,255}, {169,120,255}, {0,0,0}, {134,255,213}, {169,120,255}, {169,120,255}, {169,120,255}, {0,0,0}, {0,0,0}, {169,120,255}, {169,120,255}, {169,120,255}, {169,120,255}, {0,0,255}, {0,0,255}, {0,0,255}, {0,0,255}, {0,0,0}, {0,0,255}, {0,0,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} }, + + [7] = { {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {81,253,252}, {0,0,0}, {0,0,0}, {0,255,255}, {172,255,255}, {81,253,252}, {0,0,0}, {0,0,0}, {172,255,255}, {172,255,255}, {81,253,252}, {0,0,0}, {0,0,0}, {0,255,255}, {172,255,255}, {81,253,252}, {0,0,0}, {0,0,0}, {81,253,252}, {128,255,252}, {81,253,252}, {0,0,0}, {81,253,252}, {128,255,252}, {0,0,0}, {0,0,0}, {0,0,0}, {128,255,252}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {81,253,252}, {0,0,0}, {0,255,255}, {0,0,0}, {0,0,0}, {81,253,252}, {172,255,255}, {0,255,255}, {0,0,0}, {0,0,0}, {81,253,252}, {172,255,255}, {0,255,255}, {0,0,0}, {0,0,0}, {81,253,252}, {172,255,255}, {0,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {172,255,255}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0}, {0,0,0} }, + +}; + +void set_layer_color(int layer) { + for (int i = 0; i < DRIVER_LED_TOTAL; i++) { + HSV hsv = { + .h = pgm_read_byte(&ledmap[layer][i][0]), + .s = pgm_read_byte(&ledmap[layer][i][1]), + .v = pgm_read_byte(&ledmap[layer][i][2]), + }; + if (!hsv.h && !hsv.s && !hsv.v) { + rgb_matrix_set_color( i, 0, 0, 0 ); + } else { + RGB rgb = hsv_to_rgb( hsv ); + float f = (float)rgb_matrix_config.hsv.v / UINT8_MAX; + rgb_matrix_set_color( i, f * rgb.r, f * rgb.g, f * rgb.b ); + } + } +} + +void rgb_matrix_indicators_user(void) { + if (keyboard_config.disable_layer_led) { return; } + switch (biton32(layer_state)) { + case 0: + set_layer_color(0); + break; + case 1: + set_layer_color(1); + break; + case 3: + set_layer_color(3); + break; + case 4: + set_layer_color(4); + break; + case 5: + set_layer_color(5); + break; + case 6: + set_layer_color(6); + break; + case 7: + set_layer_color(7); + break; + default: + if (rgb_matrix_get_flags() == LED_FLAG_NONE) + rgb_matrix_set_color_all(0, 0, 0); + break; + } +} + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case ST_MACRO_0: + if (record->event.pressed) { + SEND_STRING(SS_TAP(X_LANG1) SS_DELAY(100) SS_TAP(X_A) SS_DELAY(100) SS_TAP(X_LANG1)); + + } + break; + case ST_MACRO_1: + if (record->event.pressed) { + SEND_STRING(SS_LSFT(SS_TAP(X_9)) SS_DELAY(100) SS_LSFT(SS_TAP(X_0)) SS_DELAY(100) SS_TAP(X_LEFT)); + + } + break; + case ST_MACRO_2: + if (record->event.pressed) { + SEND_STRING(SS_TAP(X_KP_COMMA) SS_DELAY(100) SS_TAP(X_SPACE)); + + } + break; + case ST_MACRO_3: + if (record->event.pressed) { + SEND_STRING(SS_TAP(X_LBRACKET) SS_DELAY(100) SS_TAP(X_RBRACKET) SS_DELAY(100) SS_TAP(X_LEFT)); + + } + break; + case ST_MACRO_4: + if (record->event.pressed) { + SEND_STRING(SS_TAP(X_BSLASH) SS_DELAY(100) SS_TAP(X_N)); + + } + break; + case ST_MACRO_5: + if (record->event.pressed) { + SEND_STRING(SS_TAP(X_LEFT) SS_DELAY(100) SS_TAP(X_LEFT) SS_DELAY(100) SS_TAP(X_SLASH)); + + } + break; + case RGB_SLD: + if (record->event.pressed) { + rgblight_mode(1); + } + return false; + } + return true; +} + +typedef struct { + bool is_press_action; + uint8_t step; +} tap; + +enum { + SINGLE_TAP = 1, + SINGLE_HOLD, + DOUBLE_TAP, + DOUBLE_HOLD, + DOUBLE_SINGLE_TAP, + MORE_TAPS +}; + +static tap dance_state[5]; + +uint8_t dance_step(qk_tap_dance_state_t *state); + +uint8_t dance_step(qk_tap_dance_state_t *state) { + if (state->count == 1) { + if (state->interrupted || !state->pressed) return SINGLE_TAP; + else return SINGLE_HOLD; + } else if (state->count == 2) { + if (state->interrupted) return DOUBLE_SINGLE_TAP; + else if (state->pressed) return DOUBLE_HOLD; + else return DOUBLE_TAP; + } + return MORE_TAPS; +} + + +void on_dance_0(qk_tap_dance_state_t *state, void *user_data); +void dance_0_finished(qk_tap_dance_state_t *state, void *user_data); +void dance_0_reset(qk_tap_dance_state_t *state, void *user_data); + +void on_dance_0(qk_tap_dance_state_t *state, void *user_data) { + if(state->count == 3) { + tap_code16(KC_LANG1); + tap_code16(KC_LANG1); + tap_code16(KC_LANG1); + } + if(state->count > 3) { + tap_code16(KC_LANG1); + } +} + +void dance_0_finished(qk_tap_dance_state_t *state, void *user_data) { + dance_state[0].step = dance_step(state); + switch (dance_state[0].step) { + case SINGLE_TAP: register_code16(KC_LANG1); break; + case SINGLE_HOLD: register_code16(KC_LANG2); break; + case DOUBLE_TAP: register_code16(KC_LANG1); register_code16(KC_LANG1); break; + case DOUBLE_SINGLE_TAP: tap_code16(KC_LANG1); register_code16(KC_LANG1); + } +} + +void dance_0_reset(qk_tap_dance_state_t *state, void *user_data) { + wait_ms(10); + switch (dance_state[0].step) { + case SINGLE_TAP: unregister_code16(KC_LANG1); break; + case SINGLE_HOLD: unregister_code16(KC_LANG2); break; + case DOUBLE_TAP: unregister_code16(KC_LANG1); break; + case DOUBLE_SINGLE_TAP: unregister_code16(KC_LANG1); break; + } + dance_state[0].step = 0; +} +void on_dance_1(qk_tap_dance_state_t *state, void *user_data); +void dance_1_finished(qk_tap_dance_state_t *state, void *user_data); +void dance_1_reset(qk_tap_dance_state_t *state, void *user_data); + +void on_dance_1(qk_tap_dance_state_t *state, void *user_data) { + if(state->count == 3) { + tap_code16(KC_F5); + tap_code16(KC_F5); + tap_code16(KC_F5); + } + if(state->count > 3) { + tap_code16(KC_F5); + } +} + +void dance_1_finished(qk_tap_dance_state_t *state, void *user_data) { + dance_state[1].step = dance_step(state); + switch (dance_state[1].step) { + case SINGLE_TAP: register_code16(KC_F5); break; + case DOUBLE_TAP: register_code16(KC_F5); register_code16(KC_F5); break; + case DOUBLE_HOLD: register_code16(LALT(KC_F4)); break; + case DOUBLE_SINGLE_TAP: tap_code16(KC_F5); register_code16(KC_F5); + } +} + +void dance_1_reset(qk_tap_dance_state_t *state, void *user_data) { + wait_ms(10); + switch (dance_state[1].step) { + case SINGLE_TAP: unregister_code16(KC_F5); break; + case DOUBLE_TAP: unregister_code16(KC_F5); break; + case DOUBLE_HOLD: unregister_code16(LALT(KC_F4)); break; + case DOUBLE_SINGLE_TAP: unregister_code16(KC_F5); break; + } + dance_state[1].step = 0; +} +void on_dance_2(qk_tap_dance_state_t *state, void *user_data); +void dance_2_finished(qk_tap_dance_state_t *state, void *user_data); +void dance_2_reset(qk_tap_dance_state_t *state, void *user_data); + +void on_dance_2(qk_tap_dance_state_t *state, void *user_data) { + if(state->count == 3) { + tap_code16(KC_H); + tap_code16(KC_H); + tap_code16(KC_H); + } + if(state->count > 3) { + tap_code16(KC_H); + } +} + +void dance_2_finished(qk_tap_dance_state_t *state, void *user_data) { + dance_state[2].step = dance_step(state); + switch (dance_state[2].step) { + case SINGLE_TAP: register_code16(KC_H); break; + case SINGLE_HOLD: register_code16(KC_Z); break; + case DOUBLE_TAP: register_code16(KC_H); register_code16(KC_H); break; + case DOUBLE_SINGLE_TAP: tap_code16(KC_H); register_code16(KC_H); + } +} + +void dance_2_reset(qk_tap_dance_state_t *state, void *user_data) { + wait_ms(10); + switch (dance_state[2].step) { + case SINGLE_TAP: unregister_code16(KC_H); break; + case SINGLE_HOLD: unregister_code16(KC_Z); break; + case DOUBLE_TAP: unregister_code16(KC_H); break; + case DOUBLE_SINGLE_TAP: unregister_code16(KC_H); break; + } + dance_state[2].step = 0; +} +void on_dance_3(qk_tap_dance_state_t *state, void *user_data); +void dance_3_finished(qk_tap_dance_state_t *state, void *user_data); +void dance_3_reset(qk_tap_dance_state_t *state, void *user_data); + +void on_dance_3(qk_tap_dance_state_t *state, void *user_data) { + if(state->count == 3) { + tap_code16(KC_F); + tap_code16(KC_F); + tap_code16(KC_F); + } + if(state->count > 3) { + tap_code16(KC_F); + } +} + +void dance_3_finished(qk_tap_dance_state_t *state, void *user_data) { + dance_state[3].step = dance_step(state); + switch (dance_state[3].step) { + case SINGLE_TAP: register_code16(KC_F); break; + case SINGLE_HOLD: register_code16(KC_G); break; + case DOUBLE_TAP: register_code16(KC_F); register_code16(KC_F); break; + case DOUBLE_SINGLE_TAP: tap_code16(KC_F); register_code16(KC_F); + } +} + +void dance_3_reset(qk_tap_dance_state_t *state, void *user_data) { + wait_ms(10); + switch (dance_state[3].step) { + case SINGLE_TAP: unregister_code16(KC_F); break; + case SINGLE_HOLD: unregister_code16(KC_G); break; + case DOUBLE_TAP: unregister_code16(KC_F); break; + case DOUBLE_SINGLE_TAP: unregister_code16(KC_F); break; + } + dance_state[3].step = 0; +} +void on_dance_4(qk_tap_dance_state_t *state, void *user_data); +void dance_4_finished(qk_tap_dance_state_t *state, void *user_data); +void dance_4_reset(qk_tap_dance_state_t *state, void *user_data); + +void on_dance_4(qk_tap_dance_state_t *state, void *user_data) { + if(state->count == 3) { + tap_code16(LCTL(KC_Z)); + tap_code16(LCTL(KC_Z)); + tap_code16(LCTL(KC_Z)); + } + if(state->count > 3) { + tap_code16(LCTL(KC_Z)); + } +} + +void dance_4_finished(qk_tap_dance_state_t *state, void *user_data) { + dance_state[4].step = dance_step(state); + switch (dance_state[4].step) { + case SINGLE_TAP: register_code16(LCTL(KC_Z)); break; + case SINGLE_HOLD: register_code16(KC_LGUI); break; + case DOUBLE_TAP: register_code16(LCTL(KC_Z)); register_code16(LCTL(KC_Z)); break; + case DOUBLE_SINGLE_TAP: tap_code16(LCTL(KC_Z)); register_code16(LCTL(KC_Z)); + } +} + +void dance_4_reset(qk_tap_dance_state_t *state, void *user_data) { + wait_ms(10); + switch (dance_state[4].step) { + case SINGLE_TAP: unregister_code16(LCTL(KC_Z)); break; + case SINGLE_HOLD: unregister_code16(KC_LGUI); break; + case DOUBLE_TAP: unregister_code16(LCTL(KC_Z)); break; + case DOUBLE_SINGLE_TAP: unregister_code16(LCTL(KC_Z)); break; + } + dance_state[4].step = 0; +} + +qk_tap_dance_action_t tap_dance_actions[] = { + [DANCE_0] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_0, dance_0_finished, dance_0_reset), + [DANCE_1] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_1, dance_1_finished, dance_1_reset), + [DANCE_2] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_2, dance_2_finished, dance_2_reset), + [DANCE_3] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_3, dance_3_finished, dance_3_reset), + [DANCE_4] = ACTION_TAP_DANCE_FN_ADVANCED(on_dance_4, dance_4_finished, dance_4_reset), +}; + diff --git a/keyboards/moonlander/keymaps/oco-oryx/rules.mk b/keyboards/moonlander/keymaps/oco-oryx/rules.mk new file mode 100644 index 00000000..a7cb0477 --- /dev/null +++ b/keyboards/moonlander/keymaps/oco-oryx/rules.mk @@ -0,0 +1,12 @@ +# Set any rules.mk overrides for your specific keymap here. +# See rules at https://docs.qmk.fm/#/config_options?id=the-rulesmk-file +CONSOLE_ENABLE = no +COMMAND_ENABLE = no +AUDIO_ENABLE = no +AUTO_SHIFT_ENABLE = yes +ORYX_ENABLE = yes +DYNAMIC_MACRO_ENABLE = yes +TAP_DANCE_ENABLE = yes +SPACE_CADET_ENABLE = no + +SRC = matrix.c diff --git a/keyboards/moonlander/keymaps/oco9oco/config.h b/keyboards/moonlander/keymaps/oco9oco/config.h new file mode 100644 index 00000000..83ea2a1b --- /dev/null +++ b/keyboards/moonlander/keymaps/oco9oco/config.h @@ -0,0 +1,21 @@ +/* Copyright 2020 ZSA Technology Labs, Inc <@zsa> + * Copyright 2020 Jack Humbert + * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * + * 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 + +#define ORYX_CONFIGURATOR diff --git a/keyboards/moonlander/keymaps/oco9oco/keymap.c b/keyboards/moonlander/keymaps/oco9oco/keymap.c new file mode 100644 index 00000000..1c235f16 --- /dev/null +++ b/keyboards/moonlander/keymaps/oco9oco/keymap.c @@ -0,0 +1,149 @@ +/* Copyright 2020 ZSA Technology Labs, Inc <@zsa> + * Copyright 2020 Jack Humbert + * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * + * 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 "oco9oco.h" +#include "version.h" + +// clang-format off +/* EMPTY +_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, +_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + +*/ + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +[_BASE] = LAYOUT_moonlander_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + KC_ESC, __________________NUMROW_L_________________, KC_F5, KC_MINS, __________________NUMROW_R_________________, KC_DEL, + KC_GRAVE,__________________QWERTY_L1________________, KC_F6, KC_EQL, __________________QWERTY_R1________________, KC_BSPC, + KC_CAPS, __________________QWERTY_SACS_L2___________, KC_F7, XXXXXXX, __________________QWERTY_HOME_R2___________, KC_QUOT, + KC_LSFT, __________________QWERTY_GUIZ_L3___________, __________________QWERTY_R3________________, KC_BSLS, + KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, LCTL_T(KC_TAB), TG(_BASE_NOMOD), TG(_ONEHAND), XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, + THUMB_L2, THUMB_L3, THUMB_L1, THUMB_R1, THUMB_R3, THUMB_R2 +), + +[_BASE_NOMOD] = LAYOUT_moonlander_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + KC_ESC, __________________NUMROW_L_________________, _______, _______, __________________NUMROW_R_________________, KC_DEL, + KC_TAB, __________________QWERTY_L1________________, _______, _______, __________________QWERTY_R1________________, KC_BSPC, + KC_CAPS, __________________QWERTY_L2________________, _______, _______, __________________QWERTY_R2________________, KC_QUOT, + KC_LSFT, __________________QWERTY_L3________________, __________________QWERTY_R3________________, KC_BSLS, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + +), + +[_IPC] = LAYOUT_moonlander_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + _______, PDF_HL, KC_P, KC_X, XXXXXXX, XXXXXXX, KC_F5, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, + _______, HAEN_B, HAEN_C, HAEN_E, HAEN_D, KC_SLSH, KC_F6, KC_LBRC, KC_RBRC, _________NUM_789_________, XXXXXXX, KC_EQL, + _______, IPC(A), IPC(S), IPC_MIN, IPC(F), KC_DOT, KC_F7, KC_LPRN, KC_RPRN, _________NUM_456_________, KC_COLN, KC_DQUO, + _______, IPC(Z), BRKT, IPC(C), KC_EQL, XXXXXXX, XXXXXXX, _________NUM_123_________, _______, KC_PIPE, +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + _______, _______, _______, _______, _______, TO(_ONEHAND), _______, _______, _______, _______, KC_LPRN, KC_RPRN, + _______, _______, _______, _______, _______, LT(_NAV, KC_0) +), + +[_NAV] = LAYOUT_moonlander_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + _______, CTRL_F1, KC_F2, KC_F3, ALT_F4, KC_F5, XXXXXXX, XXXXXXX, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + _______, XXXXXXX, A(KC_7), A(KC_8), A(KC_9), KC_F6, XXXXXXX, XXXXXXX, XXXXXXX, A(KC_1), A(KC_2), A(KC_3), XXXXXXX, KC_F12, + _______, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, KC_F7, XXXXXXX, XXXXXXX, KC_INS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_ENT, + _______, NAV(Z), C(KC_X), C(KC_C), C(KC_V), C(KC_B), KC_APP, KC_HOME, KC_PGDN, KC_PGUP, KC_END, XXXXXXX, +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + _______, _______, _______, BRKT, _______, _______, _______, KC_TRNS, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ +), + +[_MOUSE] = LAYOUT_moonlander_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + _______, CTRL_F1, KC_F2, KC_F3, ALT_F4, KC_F5, XXXXXXX, XXXXXXX, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, RESET, + KC_U, XXXXXXX, KC_WH_D, KC_MS_U, KC_WH_U, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + KC_P, KC_LSFT, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX, XXXXXXX, XXXXXXX, KC_ACL2, KC_ACL0, KC_BTN1, KC_BTN2, KC_BTN3, KC_ENT, + KC_X, KC_LGUI, KC_LALT, KC_LCTL, KC_LSFT, BOLDFACE, KC_APP, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, XXXXXXX, + _______, _______, _______, _______, _______, TO_BASE, _______, _______, _______, _______, _______, _______, +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + KC_ENT, KC_SPC, KC_LCTL, KC_TRNS, _______, _______ +), + +[_FUNC] = LAYOUT_moonlander_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + _______, RGB_TOG, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, + XXXXXXX, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX, XXXXXXX, XXXXXXX, KC_F12, KC_F7, KC_F8, KC_F9, XXXXXXX, XXXXXXX, + XXXXXXX, KC_LSFT, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, KC_F11, KC_F4, KC_F5, KC_F6, XXXXXXX, XXXXXXX, + XXXXXXX, KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_F10, KC_F1, KC_F2, KC_F3, XXXXXXX, XXXXXXX, + _______, _______, _______, BRKT, _______, _______, _______, KC_TRNS, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + +), + +[_ONEHAND] = LAYOUT_moonlander_wrapper( +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + KC_ESC, C(KC_F1), XXXXXXX, XXXXXXX, A(KC_F4), XXXXXXX, XXXXXXX, XXXXXXX, _______, _______, _______, _______, _______, _______, + KC_TAB, C(KC_WH_U), KC_BTN2, KC_UP, KC_BTN1, SCRNSHOT, XXXXXXX, XXXXXXX, BRKT, KC_WH_D, KC_MS_U, KC_WH_U, _______, _______, + A(KC_6), C(KC_WH_D), KC_LEFT, KC_DOWN, KC_RGHT, PDF_HL, XXXXXXX, XXXXXXX, PRNS, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, + KC_LSFT, UNDO, A(KC_7), A(KC_8), PASTE, KC_ENT, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, TO_BASE, _______, _______, _______, _______, KC_LCTL, _______, +// |--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------| + KC_LCTL, KC_BSPC, KC_DEL, _______, _______, _______ +), + +}; + +enum combos { + COMBO_ONEHAND, + COMBO_VIM, + COMBO_HOME, + COMBO_OS, + COMBO_ONEHAND_HOME, + //ZB_STENO, + COMBO_LENGTH +}; +uint16_t COMBO_LEN = COMBO_LENGTH; +const uint16_t PROGMEM qw_combo[] = {KC_W, KC_E, COMBO_END}; +const uint16_t PROGMEM hl_combo[] = {KC_H, KC_SCLN, COMBO_END}; +const uint16_t PROGMEM ee_combo[] = {KC_ESC, KC_EQL, COMBO_END}; +const uint16_t PROGMEM os_combo[]= {KC_BSLS, KC_SLSH, COMBO_END}; +const uint16_t PROGMEM oh_combo[]= {KC_BTN2, KC_UP, COMBO_END}; + +combo_t key_combos[] = { + [COMBO_ONEHAND] = COMBO(qw_combo, TO(_ONEHAND)), + [COMBO_VIM] = COMBO(hl_combo, TO(_BASE_NOMOD)), + [COMBO_HOME] = COMBO(ee_combo, TO(_BASE)), + [COMBO_OS] = COMBO(os_combo, CG_TOGG), + [COMBO_ONEHAND_HOME] = COMBO(oh_combo, TO(_BASE)), +}; + +// Key overrides + +const key_override_t tilde_esc_override = ko_make_basic(MOD_MASK_SHIFT, KC_ESC, S(KC_GRAVE)); // Shift + esc = ~ +const key_override_t grave_esc_override = ko_make_basic(MOD_MASK_CTRL, KC_ESC, KC_GRAVE); // GUI + esc = ` + +const key_override_t DEL_override = ko_make_basic(MOD_MASK_SHIFT, KC_DEL, KC_BSPC); // Shift + del = bspc +// // shift + caps lock = toggle control - gui + +const key_override_t **key_overrides = (const key_override_t *[]){ // This globally defines all key overrides to be used + &tilde_esc_override, &grave_esc_override, + &DEL_override, //&OS_override, + NULL // Null terminate the array of overrides! +}; diff --git a/keyboards/moonlander/keymaps/oco9oco/rules.mk b/keyboards/moonlander/keymaps/oco9oco/rules.mk new file mode 100644 index 00000000..3bf3f273 --- /dev/null +++ b/keyboards/moonlander/keymaps/oco9oco/rules.mk @@ -0,0 +1 @@ +AUDIO_ENABLE = no diff --git a/keyboards/moonlander/keymaps/via/keymap.c b/keyboards/moonlander/keymaps/via/keymap.c new file mode 100644 index 00000000..70264c24 --- /dev/null +++ b/keyboards/moonlander/keymaps/via/keymap.c @@ -0,0 +1,126 @@ +/* Copyright 2020 ZSA Technology Labs, Inc <@zsa> + * Copyright 2020 Jack Humbert + * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * + * 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 +#include "version.h" + +enum layers { + BASE, // default layer + SYMB, // symbols + MDIA, // media keys +}; + +// clang-format off +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [BASE] = LAYOUT_moonlander( + KC_EQL, KC_1, KC_2, KC_3, KC_4, KC_5, KC_LEFT, KC_RGHT, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, + KC_DEL, KC_Q, KC_W, KC_E, KC_R, KC_T, TG(SYMB), TG(SYMB), KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, + KC_BSPC, KC_A, KC_S, KC_D, KC_F, KC_G, KC_HYPR, KC_MEH, KC_H, KC_J, KC_K, KC_L, LT(MDIA, KC_SCLN), LGUI_T(KC_QUOT), + KC_LSFT, LCTL_T(KC_Z),KC_X,KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RCTL_T(KC_SLSH), KC_RSFT, + LT(SYMB,KC_GRV),WEBUSB_PAIR,A(KC_LSFT),KC_LEFT, KC_RGHT, LALT_T(KC_APP), RCTL_T(KC_ESC), KC_UP, KC_DOWN, KC_LBRC, KC_RBRC, MO(SYMB), + KC_SPC, KC_BSPC, KC_LGUI, KC_LALT, KC_TAB, KC_ENT + ), + + [SYMB] = LAYOUT_moonlander( + USER00, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + _______, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, _______, _______, KC_UP, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, + _______, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, _______, _______, KC_DOWN, KC_4, KC_5, KC_6, KC_PLUS, _______, + _______, KC_PERC, KC_CIRC, KC_LBRC, KC_RBRC, KC_TILD, KC_AMPR, KC_1, KC_2, KC_3, KC_BSLS, _______, + _______, _______, _______, _______, _______, RGB_VAI, RGB_TOG, _______, KC_DOT, KC_0, KC_EQL, _______, + RGB_HUD, RGB_VAD, RGB_HUI, _______, _______, _______ + ), + + [MDIA] = LAYOUT_moonlander( + USER01, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, + _______, _______, _______, KC_MS_U, _______, _______, _______, _______, _______, _______, _______, _______, _______, EE_CLR, + _______, _______, KC_MS_L, KC_MS_D, KC_MS_R, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MPRV, KC_MNXT, _______, _______, + _______, _______, _______, KC_BTN1, KC_BTN2, _______, _______, KC_VOLU, KC_VOLD, KC_MUTE, _______, _______, + _______, _______, _______, _______, _______, _______ + ), + [3] = LAYOUT_moonlander( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + ), + [4] = LAYOUT_moonlander( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + ), + [5] = LAYOUT_moonlander( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + ), + [6] = LAYOUT_moonlander( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + ), + [7] = LAYOUT_moonlander( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______ + ), +}; +// clang-format on + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case USER00: + if (record->event.pressed) { + SEND_STRING(QMK_KEYBOARD "/" QMK_KEYMAP " @ " QMK_VERSION); + } + return false; + case USER01: + if (record->event.pressed) { + keyboard_config.led_level ^= 1; + eeconfig_update_kb(keyboard_config.raw); + if (keyboard_config.led_level) { + layer_state_set_kb(layer_state); + } else { + ML_LED_1(false); + ML_LED_2(false); + ML_LED_3(false); + ML_LED_4(false); + ML_LED_5(false); + ML_LED_6(false); + } + } + break; + } + return true; +} diff --git a/keyboards/moonlander/keymaps/via/readme.md b/keyboards/moonlander/keymaps/via/readme.md new file mode 100644 index 00000000..8bede7be --- /dev/null +++ b/keyboards/moonlander/keymaps/via/readme.md @@ -0,0 +1,7 @@ +# VIA Keymap for the Moonlander + +This is based on the default layout for the Moonlander keyboard from ZSA Techonology Labs. + +ZSA does not provide any support for VIA (the app or firmware feature). Any and all issues should be directed to [VIA](https://github.com/the-via). + +Initial flash and reflash may make the keyboard look like it has locked up. This is because it can take a while to load the EEPROM data (the keymap), and is halted by that process until it's finished. diff --git a/keyboards/moonlander/keymaps/via/rules.mk b/keyboards/moonlander/keymaps/via/rules.mk new file mode 100644 index 00000000..1e5b9980 --- /dev/null +++ b/keyboards/moonlander/keymaps/via/rules.mk @@ -0,0 +1 @@ +VIA_ENABLE = yes diff --git a/keyboards/moonlander/matrix.c b/keyboards/moonlander/matrix.c new file mode 100644 index 00000000..36017fcd --- /dev/null +++ b/keyboards/moonlander/matrix.c @@ -0,0 +1,233 @@ +/* Copyright 2020 ZSA Technology Labs, Inc <@zsa> + * Copyright 2020 Jack Humbert + * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * + * 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 "moonlander.h" +#include "i2c_master.h" + +/* +#define MATRIX_ROW_PINS { B10, B11, B12, B13, B14, B15 } outputs +#define MATRIX_COL_PINS { A0, A1, A2, A3, A6, A7, B0 } inputs + */ +/* matrix state(1:on, 0:off) */ +extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values +extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values +static matrix_row_t raw_matrix_right[MATRIX_COLS]; + +#define ROWS_PER_HAND (MATRIX_ROWS / 2) +#ifndef MOONLANDER_I2C_TIMEOUT +# define MOONLANDER_I2C_TIMEOUT 100 +#endif + +extern bool mcp23018_leds[3]; +extern bool is_launching; + +bool mcp23018_initd = false; +static uint8_t mcp23018_reset_loop; + +uint8_t mcp23018_tx[3]; +uint8_t mcp23018_rx[1]; + +void mcp23018_init(void) { + i2c_init(); + + // #define MCP23_ROW_PINS { GPB5, GBP4, GBP3, GBP2, GBP1, GBP0 } outputs + // #define MCP23_COL_PINS { GPA0, GBA1, GBA2, GBA3, GBA4, GBA5, GBA6 } inputs + + mcp23018_tx[0] = 0x00; // IODIRA + mcp23018_tx[1] = 0b00000000; // A is output + mcp23018_tx[2] = 0b00111111; // B is inputs + + if (MSG_OK != i2c_transmit(MCP23018_DEFAULT_ADDRESS << 1, mcp23018_tx, 3, MOONLANDER_I2C_TIMEOUT)) { + dprintf("error hori\n"); + } else { + mcp23018_tx[0] = 0x0C; // GPPUA + mcp23018_tx[1] = 0b10000000; // A is not pulled-up + mcp23018_tx[2] = 0b11111111; // B is pulled-up + + if (MSG_OK != i2c_transmit(MCP23018_DEFAULT_ADDRESS << 1, mcp23018_tx, 3, MOONLANDER_I2C_TIMEOUT)) { + dprintf("error hori\n"); + } else { + mcp23018_initd = is_launching = true; + } + } +} + +void matrix_init_custom(void) { + dprintf("matrix init\n"); + // debug_matrix = true; + // outputs + setPinOutput(B10); + setPinOutput(B11); + setPinOutput(B12); + setPinOutput(B13); + setPinOutput(B14); + setPinOutput(B15); + + // inputs + setPinInputLow(A0); + setPinInputLow(A1); + setPinInputLow(A2); + setPinInputLow(A3); + setPinInputLow(A6); + setPinInputLow(A7); + setPinInputLow(B0); + + mcp23018_init(); +} + +bool matrix_scan_custom(matrix_row_t current_matrix[]) { + bool changed = false; + + // Try to re-init right side + if (!mcp23018_initd) { + if (++mcp23018_reset_loop == 0) { + // if (++mcp23018_reset_loop >= 1300) { + // 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_init(); + if (!mcp23018_initd) { + print("right side not responding\n"); + } else { + print("right side attached\n"); +#ifdef RGB_MATRIX_ENABLE + rgb_matrix_init(); +#endif + } + } + } + + matrix_row_t data = 0; + // actual matrix + for (uint8_t row = 0; row <= ROWS_PER_HAND; row++) { + // strobe row + switch (row) { + case 0: writePinHigh(B10); break; + case 1: writePinHigh(B11); break; + case 2: writePinHigh(B12); break; + case 3: writePinHigh(B13); break; + case 4: writePinHigh(B14); break; + case 5: writePinHigh(B15); break; + case 6: break; // Left hand has 6 rows + } + + // right side + if (mcp23018_initd) { + // #define MCP23_ROW_PINS { GPB5, GBP4, GBP3, GBP2, GBP1, GBP0 } outputs + // #define MCP23_COL_PINS { GPA0, GBA1, GBA2, GBA3, GBA4, GBA5, GBA6 } inputs + + // select row + mcp23018_tx[0] = 0x12; // GPIOA + mcp23018_tx[1] = (0b01111111 & ~(1 << (row))) | ((uint8_t)!mcp23018_leds[2] << 7); // activate row + mcp23018_tx[2] = ((uint8_t)!mcp23018_leds[1] << 6) | ((uint8_t)!mcp23018_leds[0] << 7); // activate row + + if (MSG_OK != i2c_transmit(MCP23018_DEFAULT_ADDRESS << 1, mcp23018_tx, 3, MOONLANDER_I2C_TIMEOUT)) { + dprintf("error hori\n"); + mcp23018_initd = false; + } + + // read col + + mcp23018_tx[0] = 0x13; // GPIOB + if (MSG_OK != i2c_readReg(MCP23018_DEFAULT_ADDRESS << 1, mcp23018_tx[0], &mcp23018_rx[0], 1, MOONLANDER_I2C_TIMEOUT)) { + dprintf("error vert\n"); + mcp23018_initd = false; + } + + data = ~(mcp23018_rx[0] & 0b00111111); + // data = 0x01; + } else { + data = 0; + } + + if (raw_matrix_right[row] != data) { + raw_matrix_right[row] = data; + changed = true; + } + + + // left side + if (row < ROWS_PER_HAND) { + // i2c comm incur enough wait time + if (!mcp23018_initd) { + // need wait to settle pin state + matrix_io_delay(); + } + // read col data + data = ( + (readPin(A0) << 0 ) | + (readPin(A1) << 1 ) | + (readPin(A2) << 2 ) | + (readPin(A3) << 3 ) | + (readPin(A6) << 4 ) | + (readPin(A7) << 5 ) | + (readPin(B0) << 6 ) + ); + // unstrobe row + switch (row) { + case 0: writePinLow(B10); break; + case 1: writePinLow(B11); break; + case 2: writePinLow(B12); break; + case 3: writePinLow(B13); break; + case 4: writePinLow(B14); break; + case 5: writePinLow(B15); break; + case 6: break; + } + + if (current_matrix[row] != data) { + current_matrix[row] = data; + changed = true; + } + } + } + for (uint8_t row = 0; row < ROWS_PER_HAND; row++) { + current_matrix[11 - row] = 0; + for (uint8_t col = 0; col < MATRIX_COLS; col++) { + current_matrix[11 - row] |= ((raw_matrix_right[6 - col] & (1 << row) ? 1 : 0) << col); + } + } + return changed; +} + +// DO NOT REMOVE +// Needed for proper wake/sleep +void matrix_power_up(void) { + bool temp_launching = is_launching; + + matrix_init_custom(); + + is_launching = temp_launching; + if (!is_launching) { + ML_LED_1(false); + ML_LED_2(false); + ML_LED_3(false); + ML_LED_4(false); + ML_LED_5(false); + ML_LED_6(false); + } + + // initialize matrix state: all keys off + for (uint8_t i=0; i < MATRIX_ROWS; i++) { + matrix[i] = 0; + } + +} + +bool is_transport_connected(void) { + return mcp23018_initd; +} \ No newline at end of file diff --git a/keyboards/moonlander/mcuconf.h b/keyboards/moonlander/mcuconf.h new file mode 100644 index 00000000..69f458a9 --- /dev/null +++ b/keyboards/moonlander/mcuconf.h @@ -0,0 +1,39 @@ +/* Copyright 2021 QMK + * + * 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 3 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_next "mcuconf.h" + +// for i2c expander, and ISSI +#undef STM32_I2C_USE_I2C1 +#define STM32_I2C_USE_I2C1 TRUE + +// for future hardwar +#undef STM32_I2C_USE_I2C2 +#define STM32_I2C_USE_I2C2 TRUE + +// for audio +#undef STM32_DAC_USE_DAC1_CH1 +#define STM32_DAC_USE_DAC1_CH1 TRUE +#undef STM32_DAC_USE_DAC1_CH2 +#define STM32_DAC_USE_DAC1_CH2 TRUE +#undef STM32_GPT_USE_TIM6 +#define STM32_GPT_USE_TIM6 TRUE +#undef STM32_GPT_USE_TIM7 +#define STM32_GPT_USE_TIM7 TRUE +#undef STM32_GPT_USE_TIM8 +#define STM32_GPT_USE_TIM8 TRUE diff --git a/keyboards/moonlander/moonlander.c b/keyboards/moonlander/moonlander.c new file mode 100644 index 00000000..2d6b1f03 --- /dev/null +++ b/keyboards/moonlander/moonlander.c @@ -0,0 +1,461 @@ +/* Copyright 2020 ZSA Technology Labs, Inc <@zsa> + * Copyright 2020 Jack Humbert + * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * + * 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 "moonlander.h" + +keyboard_config_t keyboard_config; + +bool mcp23018_leds[3] = {0, 0, 0}; +bool is_launching = false; + +#ifdef DYNAMIC_MACRO_ENABLE +static bool is_dynamic_recording = false; + +void dynamic_macro_record_start_user(void) { is_dynamic_recording = true; } + +void dynamic_macro_record_end_user(int8_t direction) { + is_dynamic_recording = false; + ML_LED_3(false); +} +#endif + +void moonlander_led_task(void) { + if (is_launching) { + ML_LED_1(false); + ML_LED_2(false); + ML_LED_3(false); + ML_LED_4(false); + ML_LED_5(false); + ML_LED_6(false); + + ML_LED_1(true); + wait_ms(250); + ML_LED_2(true); + wait_ms(250); + ML_LED_3(true); + wait_ms(250); + ML_LED_4(true); + wait_ms(250); + ML_LED_5(true); + wait_ms(250); + ML_LED_6(true); + wait_ms(250); + ML_LED_1(false); + wait_ms(250); + ML_LED_2(false); + wait_ms(250); + ML_LED_3(false); + wait_ms(250); + ML_LED_4(false); + wait_ms(250); + ML_LED_5(false); + wait_ms(250); + ML_LED_6(false); + wait_ms(250); + is_launching = false; + layer_state_set_kb(layer_state); + } +#ifdef DYNAMIC_MACRO_ENABLE + else if (is_dynamic_recording) { + ML_LED_3(true); + wait_ms(100); + ML_LED_3(false); + wait_ms(155); + } +#endif +#if !defined(MOONLANDER_USER_LEDS) + else { + layer_state_set_kb(layer_state); + } +#endif +} + +static THD_WORKING_AREA(waLEDThread, 128); +static THD_FUNCTION(LEDThread, arg) { + (void)arg; + chRegSetThreadName("LEDThread"); + while (true) { + moonlander_led_task(); + } +} + +void keyboard_pre_init_kb(void) { + setPinOutput(B5); + setPinOutput(B4); + setPinOutput(B3); + + writePinLow(B5); + writePinLow(B4); + writePinLow(B3); + + chThdCreateStatic(waLEDThread, sizeof(waLEDThread), NORMALPRIO - 16, LEDThread, NULL); + + /* the array is initialized to 0, no need to re-set it here */ + // mcp23018_leds[0] = 0; // blue + // mcp23018_leds[1] = 0; // green + // mcp23018_leds[2] = 0; // red + + keyboard_pre_init_user(); +} + +#if !defined(MOONLANDER_USER_LEDS) +layer_state_t layer_state_set_kb(layer_state_t state) { + state = layer_state_set_user(state); + if (is_launching || !keyboard_config.led_level) return state; + bool LED_1 = false; + bool LED_2 = false; + bool LED_3 = false; + bool LED_4 = false; + bool LED_5 = false; +#if !defined(CAPS_LOCK_STATUS) + bool LED_6 = false; +#endif + + uint8_t layer = get_highest_layer(state); + switch (layer) { + case 1: + LED_1 = true; + LED_4 = true; + break; + case 2: + LED_2 = true; + LED_5 = true; + break; + case 3: + LED_3 = true; +#if !defined(CAPS_LOCK_STATUS) + LED_6 = true; +#endif + break; + case 4: + LED_4 = true; + break; + case 5: + LED_5 = true; + break; + case 6: +#if !defined(CAPS_LOCK_STATUS) + LED_6 = true; +#endif + break; + default: + break; + } + + ML_LED_1(LED_1); + ML_LED_2(LED_2); + ML_LED_3(LED_3); + ML_LED_4(LED_4); + ML_LED_5(LED_5); +#if !defined(CAPS_LOCK_STATUS) + ML_LED_6(LED_6); +#endif + + return state; +} +#endif + +#ifdef RGB_MATRIX_ENABLE +// clang-format off +const is31_led PROGMEM g_is31_leds[RGB_MATRIX_LED_COUNT] = { +/* Refer to IS31 manual for these locations + * driver + * | R location + * | | G location + * | | | B location + * | | | | */ + {0, C3_2, C1_1, C4_2}, // 1 + {0, C2_2, C1_2, C4_3}, + {0, C2_3, C1_3, C3_3}, + {0, C2_4, C1_4, C3_4}, + {0, C2_5, C1_5, C3_5}, + {0, C2_6, C1_6, C3_6}, + {0, C2_7, C1_7, C3_7}, + {0, C2_8, C1_8, C3_8}, + {0, C3_1, C2_1, C4_1}, + + {0, C7_8, C6_8, C8_8}, // 10 + {0, C7_7, C6_7, C9_8}, + {0, C8_7, C6_6, C9_7}, + {0, C8_6, C7_6, C9_6}, + {0, C8_5, C7_5, C9_5}, + {0, C8_4, C7_4, C9_4}, + {0, C8_3, C7_3, C9_3}, + {0, C8_2, C7_2, C9_2}, + {0, C8_1, C7_1, C9_1}, + + {0, C3_10, C1_9, C4_10}, // 19 + {0, C2_10, C1_10, C4_11}, + {0, C2_11, C1_11, C3_11}, + {0, C2_12, C1_12, C3_12}, + {0, C2_13, C1_13, C3_13}, + {0, C2_14, C1_14, C3_14}, + {0, C2_15, C1_15, C3_15}, + {0, C2_16, C1_16, C3_16}, + {0, C3_9, C2_9, C4_9}, + + {0, C7_16, C6_16, C8_16}, // 28 + {0, C7_15, C6_15, C9_16}, + {0, C8_15, C6_14, C9_15}, + {0, C8_10, C7_10, C9_10}, + {0, C8_9, C7_9, C9_9}, + {0, C8_11, C7_11, C9_11}, + {0, C8_12, C7_12, C9_12}, + {0, C8_13, C7_13, C9_13}, + {0, C8_14, C7_14, C9_14}, + + {1, C3_2, C1_1, C4_2}, // 1 + {1, C2_2, C1_2, C4_3}, + {1, C2_3, C1_3, C3_3}, + {1, C2_4, C1_4, C3_4}, + {1, C2_5, C1_5, C3_5}, + {1, C2_6, C1_6, C3_6}, + {1, C2_7, C1_7, C3_7}, + {1, C2_8, C1_8, C3_8}, + {1, C3_1, C2_1, C4_1}, + + {1, C7_8, C6_8, C8_8}, // 10 + {1, C7_7, C6_7, C9_8}, + {1, C8_7, C6_6, C9_7}, + {1, C8_6, C7_6, C9_6}, + {1, C8_5, C7_5, C9_5}, + {1, C8_4, C7_4, C9_4}, + {1, C8_3, C7_3, C9_3}, + {1, C8_2, C7_2, C9_2}, + {1, C8_1, C7_1, C9_1}, + + {1, C3_10, C1_9, C4_10}, // 19 + {1, C2_10, C1_10, C4_11}, + {1, C2_11, C1_11, C3_11}, + {1, C2_12, C1_12, C3_12}, + {1, C2_13, C1_13, C3_13}, + {1, C2_14, C1_14, C3_14}, + {1, C2_15, C1_15, C3_15}, + {1, C2_16, C1_16, C3_16}, + {1, C3_9, C2_9, C4_9}, + + {1, C7_16, C6_16, C8_16}, // 28 + {1, C7_15, C6_15, C9_16}, + {1, C8_15, C6_14, C9_15}, + {1, C8_10, C7_10, C9_10}, + {1, C8_9, C7_9, C9_9}, + {1, C8_11, C7_11, C9_11}, + {1, C8_12, C7_12, C9_12}, + {1, C8_13, C7_13, C9_13}, + {1, C8_14, C7_14, C9_14}, + +}; + +led_config_t g_led_config = { { + { 0, 5, 10, 15, 20, 25, 29 }, + { 1, 6, 11, 16, 21, 26, 30 }, + { 2, 7, 12, 17, 22, 27, 31 }, + { 3, 8, 13, 18, 23, 28, NO_LED }, + { 4, 9, 14, 19, 24, NO_LED, NO_LED }, + { 32, 33, 34, 35, NO_LED, NO_LED, NO_LED }, + { 65, 61, 56, 51, 46, 41, 36 }, + { 66, 62, 57, 52, 47, 42, 37 }, + { 67, 63, 58, 53, 48, 43, 38 }, + { NO_LED, 64, 59, 54, 49, 44, 39 }, + { NO_LED, NO_LED, 60, 55, 50, 45, 40 }, + { NO_LED, NO_LED, NO_LED, 71, 70, 69, 68 }, +}, { + { 0, 0 }, { 0, 12 }, { 0, 25 }, { 0, 38 }, { 0, 51 }, + { 17, 0 }, { 17, 12 }, { 17, 25 }, { 17, 38 }, { 17, 51 }, + { 34, 0 }, { 34, 12 }, { 34, 25 }, { 34, 38 }, { 34, 51 }, + { 51, 0 }, { 51, 12 }, { 51, 25 }, { 51, 38 }, { 51, 51 }, + { 68, 0 }, { 68, 12 }, { 68, 25 }, { 68, 38 }, { 68, 51 }, + { 86, 0 }, { 86, 12 }, { 86, 25 }, { 86, 38 }, + { 105, 0 }, { 105, 12 }, { 105, 25 }, + { 90, 55 }, { 105, 68 }, { 116, 86 }, { 116, 59 }, + + { 250, 0 }, { 250, 12 }, { 250, 25 }, { 250, 38 }, { 250, 51 }, + { 233, 0 }, { 233, 12 }, { 233, 25 }, { 233, 38 }, { 233, 51 }, + { 216, 0 }, { 216, 12 }, { 216, 25 }, { 216, 38 }, { 216, 51 }, + { 198, 0 }, { 198, 12 }, { 198, 25 }, { 198, 38 }, { 198, 51 }, + { 181, 0 }, { 181, 12 }, { 181, 25 }, { 181, 38 }, { 181, 51 }, + { 163, 0 }, { 163, 12 }, { 163, 25 }, { 163, 38 }, + { 146, 0 }, { 146, 12 }, { 146, 25 }, + { 161, 55 }, { 161, 68 }, { 146, 86 }, { 131, 59 } + +}, { + 1, 1, 1, 1, 1, 4, + 4, 4, 4, 1, 4, 4, + 4, 4, 1, 4, 4, 4, + 4, 1, 4, 4, 4, 4, + 1, 4, 4, 4, 4, 4, + 4, 4, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 4, + 4, 4, 4, 1, 4, 4, + 4, 4, 1, 4, 4, 4, + 4, 1, 4, 4, 4, 4, + 1, 4, 4, 4, 4, 4, + 4, 4, 1, 1, 1, 1 +} }; +// clang-format on + +#endif + +#ifdef AUDIO_ENABLE +bool music_mask_kb(uint16_t keycode) { + switch (keycode) { + case QK_LAYER_TAP ... QK_LAYER_TAP_MAX: + case QK_TO ... QK_TO_MAX: + case QK_MOMENTARY ... QK_MOMENTARY_MAX: + case QK_DEF_LAYER ... QK_DEF_LAYER_MAX: + case QK_TOGGLE_LAYER ... QK_TOGGLE_LAYER_MAX: + case QK_ONE_SHOT_LAYER ... QK_ONE_SHOT_LAYER_MAX: + case QK_LAYER_TAP_TOGGLE ... QK_LAYER_TAP_TOGGLE_MAX: + case QK_LAYER_MOD ... QK_LAYER_MOD_MAX: + case QK_ONE_SHOT_MOD ... QK_ONE_SHOT_MOD_MAX: + case QK_MOD_TAP ... QK_MOD_TAP_MAX: + case AU_ON ... AU_PREV: + case QK_BOOT: + case QK_CLEAR_EEPROM: + return false; + default: + return music_mask_user(keycode); + } +} +#endif + +#ifdef SWAP_HANDS_ENABLE +// swap-hands action needs a matrix to define the swap +// clang-format off +const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = { + /* Left hand, matrix positions */ + {{6,6}, {5,6}, {4,6}, {3,6}, {2,6}, {1,6},{0,6}}, + {{6,7}, {5,7}, {4,7}, {3,7}, {2,7}, {1,7},{0,7}}, + {{6,8}, {5,8}, {4,8}, {3,8}, {2,8}, {1,8},{0,8}}, + {{6,9}, {5,9}, {4,9}, {3,9}, {2,9}, {1,9},{0,9}}, + {{6,10},{5,10},{4,10},{3,10},{2,10},{1,10},{0,10}}, + {{6,11},{5,11},{4,11},{3,11},{2,11},{1,11},{0,11}}, + /* Right hand, matrix positions */ + {{6,0}, {5,0}, {4,0}, {3,0}, {2,0}, {1,0},{0,0}}, + {{6,1}, {5,1}, {4,1}, {3,1}, {2,1}, {1,1},{0,1}}, + {{6,2}, {5,2}, {4,2}, {3,2}, {2,2}, {1,2},{0,2}}, + {{6,3}, {5,3}, {4,3}, {3,3}, {2,3}, {1,3},{0,3}}, + {{6,4}, {5,4}, {4,4}, {3,4}, {2,4}, {1,4},{0,4}}, + {{6,5}, {5,5}, {4,5}, {3,5}, {2,5}, {1,5},{0,5}}, +}; +// clang-format on + +void keyboard_post_init_kb(void) { + rgb_matrix_enable_noeeprom(); + keyboard_post_init_user(); +} +#endif + +#if defined(AUDIO_ENABLE) && defined(MUSIC_MAP) +// clang-format off +__attribute__ ((weak)) +const uint8_t music_map[MATRIX_ROWS][MATRIX_COLS] = LAYOUT_moonlander( + 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, + 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, + 8, 9, 10, 11, 12, 3, 4, 13, 14, 15, 16, 17, + 0, 1, 2, 5, 6, 7 +); +// clang-format on +#endif + +#ifdef CAPS_LOCK_STATUS +void led_update_ports(led_t led_state) { + ML_LED_6(led_state.caps_lock); +} +#endif + +bool process_record_kb(uint16_t keycode, keyrecord_t *record) { + if (!process_record_user(keycode, record)) { return false; } + switch (keycode) { +#if !defined(MOONLANDER_USER_LEDS) + case LED_LEVEL: + if (record->event.pressed) { + keyboard_config.led_level ^= 1; + eeconfig_update_kb(keyboard_config.raw); + if (keyboard_config.led_level) { + layer_state_set_kb(layer_state); + } else { + ML_LED_1(false); + ML_LED_2(false); + ML_LED_3(false); + ML_LED_4(false); + ML_LED_5(false); + ML_LED_6(false); + } + } + break; +#endif +#ifdef RGB_MATRIX_ENABLE + case TOGGLE_LAYER_COLOR: + if (record->event.pressed) { + keyboard_config.disable_layer_led ^= 1; + if (keyboard_config.disable_layer_led) rgb_matrix_set_color_all(0, 0, 0); + eeconfig_update_kb(keyboard_config.raw); + } + break; + case RGB_TOG: + if (record->event.pressed) { + switch (rgb_matrix_get_flags()) { + case LED_FLAG_ALL: { + rgb_matrix_set_flags(LED_FLAG_NONE); + keyboard_config.rgb_matrix_enable = false; + rgb_matrix_set_color_all(0, 0, 0); + } break; + default: { + rgb_matrix_set_flags(LED_FLAG_ALL); + keyboard_config.rgb_matrix_enable = true; + } break; + } + eeconfig_update_kb(keyboard_config.raw); + } + return false; +#endif + } + return true; +} + +void matrix_init_kb(void) { + keyboard_config.raw = eeconfig_read_kb(); + + if (!keyboard_config.led_level && !keyboard_config.led_level_res) { + keyboard_config.led_level = true; + keyboard_config.led_level_res = 0b11; + eeconfig_update_kb(keyboard_config.raw); + } +#ifdef RGB_MATRIX_ENABLE + if (keyboard_config.rgb_matrix_enable) { + rgb_matrix_set_flags(LED_FLAG_ALL); + } else { + rgb_matrix_set_flags(LED_FLAG_NONE); + } +#endif + matrix_init_user(); +} + +void eeconfig_init_kb(void) { // EEPROM is getting reset! + keyboard_config.raw = 0; + keyboard_config.rgb_matrix_enable = true; + keyboard_config.led_level = true; + keyboard_config.led_level_res = 0b11; + eeconfig_update_kb(keyboard_config.raw); + eeconfig_init_user(); +} diff --git a/keyboards/moonlander/moonlander.h b/keyboards/moonlander/moonlander.h new file mode 100644 index 00000000..19618a9e --- /dev/null +++ b/keyboards/moonlander/moonlander.h @@ -0,0 +1,86 @@ +/* Copyright 2020 ZSA Technology Labs, Inc <@zsa> + * Copyright 2020 Jack Humbert + * Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) + * + * 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" + +extern bool mcp23018_leds[]; + +#define MCP23018_DEFAULT_ADDRESS 0b0100000 + +#define ML_LED_1(status) writePin(B5, (bool)status) +#define ML_LED_2(status) writePin(B4, (bool)status) +#define ML_LED_3(status) writePin(B3, (bool)status) + +#define ML_LED_4(status) mcp23018_leds[0] = (bool)status +#define ML_LED_5(status) mcp23018_leds[1] = (bool)status +#define ML_LED_6(status) mcp23018_leds[2] = (bool)status + + +// clang-format off +#define LAYOUT_moonlander( \ + k00, k01, k02, k03, k04, k05, k06, k60, k61, k62, k63, k64, k65, k66, \ + k10, k11, k12, k13, k14, k15, k16, k70, k71, k72, k73, k74, k75, k76, \ + k20, k21, k22, k23, k24, k25, k26, k80, k81, k82, k83, k84, k85, k86, \ + k30, k31, k32, k33, k34, k35, k91, k92, k93, k94, k95, k96, \ + k40, k41, k42, k43, k44, k53, kb3, ka2, ka3, ka4, ka5, ka6, \ + k50, k51, k52, kb4, kb5, kb6 \ +) \ +{ \ + { k00, k01, k02, k03, k04, k05, k06 }, \ + { k10, k11, k12, k13, k14, k15, k16 }, \ + { k20, k21, k22, k23, k24, k25, k26 }, \ + { k30, k31, k32, k33, k34, k35, KC_NO }, \ + { k40, k41, k42, k43, k44, KC_NO, KC_NO }, \ + { k50, k51, k52, k53, KC_NO, KC_NO, KC_NO }, \ +\ + { k60, k61, k62, k63, k64, k65, k66 }, \ + { k70, k71, k72, k73, k74, k75, k76 }, \ + { k80, k81, k82, k83, k84, k85, k86 }, \ + { KC_NO, k91, k92, k93, k94, k95, k96 }, \ + { KC_NO, KC_NO, ka2, ka3, ka4, ka5, ka6 }, \ + { KC_NO, KC_NO, KC_NO, kb3, kb4, kb5, kb6 } \ +} +// clang-format on + +enum planck_ez_keycodes { + TOGGLE_LAYER_COLOR = SAFE_RANGE, + LED_LEVEL, + ML_SAFE_RANGE, +}; + +#ifndef WEBUSB_ENABLE +# define WEBUSB_PAIR KC_NO +#endif + +typedef union { + uint32_t raw; + struct { + bool disable_layer_led :1; + bool rgb_matrix_enable :1; + bool led_level :1; + uint8_t led_level_res :2; // DO NOT REMOVE + }; +} keyboard_config_t; + +extern keyboard_config_t keyboard_config; + +bool is_transport_connected(void); diff --git a/keyboards/moonlander/readme.md b/keyboards/moonlander/readme.md new file mode 100644 index 00000000..733780ab --- /dev/null +++ b/keyboards/moonlander/readme.md @@ -0,0 +1,58 @@ +# Moonlander + +![Moonlander](https://zsa.io/static/gallery-white-case-7a2ef555f8f7f4ce1b9030477b16e517.png) + +A next-gen split, ergonomic keyboard with an active left side, USB type C, integrated wrist rest, and a thumb cluster that can move. + + +* Keyboard Maintainer: [drashna](https://github.com/drashna), [ZSA](https://github.com/zsa/) +* Hardware Supported: Moonlander MK 1 (STM32F303xC) +* Hardware Availability: [ZSA Store](https://zsa.io/moonlander/) + +Make example for this keyboard (after setting up your build environment): + + make moonlander:default + +Flashing example for this keyboard: + + make moonlander: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). + + +## Moonlander Customization + +### Indicator LEDs + +There are 6 functions for enabling and disabling the LEDs on the top of the boards. The functions are `ML_LED_1(bool)` through `ML_LED_6(bool)`, with the first LED being the left most LED on the left hand, and the sixth LED being the right most LED on the right side. + +By default, the Indicator LEDs are used to indicate the layer state for the keyboard. If you wish to change this (and indicate caps/num/scroll lock status instead), then define `MOONLANDER_USER_LEDS` in your `config.h` file. + + +### Oryx Configuration + +To enable the features from Oryx (ZSA's Configurator), either compile the `default` keymap, or add `#define ORYX_CONFIGURATOR` to your `config.h` file. + +This enables the front Indicator LEDs, and the `TOGGLE_LAYER_COLOR` keycode. The `TOGGLE_LAYER_COLOR` keycode toggles the customized LED map configured on Oryx. + +### RGB Matrix Features + +If you're using the Smart LED (layer indication) feature from the Oryx Configurator, you want to make sure that you enable these options by adding `#define ORYX_CONFIGURATOR` to your keymap's `config.h`. + +This changes the `RGB_TOG` keycode so that it will toggle the lights on and off, in a way that will allow the Smart LEDs to continue to work, even with the rest of the LEDs turned off. + +Additionally, a new keycode has been added to toggle the Smart LEDs. Use `TOGGLE_LAYER_COLOR`, if you aren't already. + +### Detecting split / Gaming mode + +To make it extra gaming friendly, you can configure what happens when you disconnect the right half. This is especially useful when using gaming unfriendly layers or layouts (e.g. home row mods, dvorak, colemak). + +Example for enabling a specific layer while right side is disconnected: + +``` +void housekeeping_task_user(void) { + if (!is_transport_connected()) { + // set layer + } +} +``` \ No newline at end of file diff --git a/keyboards/moonlander/rules.mk b/keyboards/moonlander/rules.mk new file mode 100644 index 00000000..72682d29 --- /dev/null +++ b/keyboards/moonlander/rules.mk @@ -0,0 +1,30 @@ +# MCU name +MCU = STM32F303 + +# Bootloader selection +BOOTLOADER = stm32-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 = yes # Console for debug +COMMAND_ENABLE = yes # 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 = yes # Audio output +AUDIO_DRIVER = dac_additive +CUSTOM_MATRIX = lite +SWAP_HANDS_ENABLE = yes +RGB_MATRIX_ENABLE = yes +RGB_MATRIX_DRIVER = IS31FL3731 +EEPROM_DRIVER = i2c + +#project specific files +SRC += matrix.c +QUANTUM_LIB_SRC += i2c_master.c + +MOUSE_SHARED_EP = no diff --git a/qmk.json b/qmk.json index 60f4caa5..2b3fd039 100644 --- a/qmk.json +++ b/qmk.json @@ -2,6 +2,7 @@ "userspace_version": "1.1", "build_targets": [ ["keycapsss/kimiko/rev2", "oco9oco"], - ["bastardkb/charybdis/4x6/v2/splinky_3", "oco9oco"] + ["bastardkb/charybdis/4x6/v2/splinky_3", "oco9oco"], + ["crkbd/rev1", "default"] ] } \ No newline at end of file diff --git a/users/oco9oco/COMBO_MACRO_LIST.MD b/users/oco9oco/COMBO_MACRO_LIST.MD new file mode 100644 index 00000000..eceffab6 --- /dev/null +++ b/users/oco9oco/COMBO_MACRO_LIST.MD @@ -0,0 +1,5 @@ +# Combo & Macro List + +## 앞으로 적용할 텍스트 단축어 +- 청구항 +- 인용발명 diff --git a/users/oco9oco/autocorrect_dictionary.txt b/users/oco9oco/autocorrect_dictionary.txt new file mode 100644 index 00000000..eceffab6 --- /dev/null +++ b/users/oco9oco/autocorrect_dictionary.txt @@ -0,0 +1,5 @@ +# Combo & Macro List + +## 앞으로 적용할 텍스트 단축어 +- 청구항 +- 인용발명 diff --git a/users/oco9oco/config.h b/users/oco9oco/config.h new file mode 100644 index 00000000..46ab8808 --- /dev/null +++ b/users/oco9oco/config.h @@ -0,0 +1,78 @@ +/* +Copyright 2022 oco9oco +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 + +/* Handedness. */ +// #define MASTER_LEFT +// #undef MASTER_RIGHT +#define MASTER_RIGHT + +// TAP-HOLD OPTIONS +#define TAPPING_TERM 200 +#define QUICK_TAP_TERM 0 +//#define PERMISSIVE_HOLD_PER_KEY +#define HOLD_ON_OTHER_KEY_PRESS_PER_KEY +#define CHORDAL_HOLD +// AUTO SHIFT OPTIONS +#define NO_AUTO_SHIFT_ALPHA + +//MOUSEKEY OPTIONS + +//#define MOUSEKEY_INERTIA +// #ifdef MOUSEKEY_INERTIA + #undef MOUSEKEY_DELAY + #undef MOUSEKEY_INTERVAL + #undef MOUSEKEY_MAX_SPEED //Maximum cursor speed at which acceleration stops + #undef MOUSEKEY_TIME_TO_MAX //Number of frames until maximum cursor speed is reached + #undef MOUSEKEY_FRICTION //How quickly the cursor stops after releasing a key + #undef MOUSEKEY_MOVE_DELTA //How much to move on first frame (1 strongly recommended) + + #define MOUSEKEY_DELAY 0 + #define MOUSEKEY_INTERVAL 16 //Time between cursor movements in milliseconds (16 = 60fps) + #define MOUSEKEY_MAX_SPEED 18 //Maximum cursor speed at which acceleration stops + #define MOUSEKEY_TIME_TO_MAX 20 //Number of frames until maximum cursor speed is reached + #define MOUSEKEY_FRICTION 50 //How quickly the cursor stops after releasing a key + #define MOUSEKEY_MOVE_DELTA 1 //How much to move on first frame (1 strongly recommended) +// #endif + +#undef MOUSEKEY_WHEEL_DELAY //Delay between pressing a wheel key and wheel movement +#undef MOUSEKEY_WHEEL_INTERVAL //Time between wheel movements +#undef MOUSEKEY_WHEEL_MAX_SPEED //Maximum number of scroll steps per scroll action +#undef MOUSEKEY_WHEEL_TIME_TO_MAX + +#define MOUSEKEY_WHEEL_DELAY 0 //Delay between pressing a wheel key and wheel movement +#define MOUSEKEY_WHEEL_INTERVAL 50 //Time between wheel movements +#define MOUSEKEY_WHEEL_MAX_SPEED 3 +#define MOUSEKEY_WHEEL_TIME_TO_MAX 0 + +#ifdef MK_KINETIC_SPEED + + #define MOUSEKEY_MOVE_DELTA 30 + #define MOUSEKEY_INITIAL_SPEED 300 + #define MOUSEKEY_BASE_SPEED 2000 + #define MOUSEKEY_DECELERATED_SPEED 300 + #define MOUSEKEY_ACCELERATED_SPEED 2500 + #define MOUSEKEY_WHEEL_INITIAL_MOVEMENTS 5 + #define MOUSEKEY_WHEEL_BASE_MOVEMENTS 8 + #define MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS 12 + #define MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS 5 +#endif +// ONESHOT OPTIONS +// #define ONESHOT_TAP_TOGGLE 1 /* Tapping this number of times holds the key until tapped once again. */ +// #define ONESHOT_TIMEOUT 5000 + +// COMBO OPTIONS +#define COMBO_TERM 40 +#define COMBO_TERM_PER_COMBO +#define COMBO_COUNT 4 diff --git a/users/oco9oco/oco9oco.c b/users/oco9oco/oco9oco.c new file mode 100644 index 00000000..0e033f8b --- /dev/null +++ b/users/oco9oco/oco9oco.c @@ -0,0 +1,567 @@ +/* +Copyright 2022 oco9oco +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 "oco9oco.h" + +bool is_alt_tab_active = false; // ADD this near the beginning of keymap.c +uint16_t alt_tab_timer = 0; // we will be using them soon. + +void appcmd(uint16_t keycode) { + tap_code(KC_APP); + tap_code(keycode); +} +//쌍자음 감지기 +/* + if keyrecord row가 doubleconsonants일 때 + corne: row 0 + lily58, kimiko, id75, moonlander: row 1 + save instaShift on + else instaShift off + + 다룰 조합들 + 이따가 vs 임다가 + -dlaekrk + QWERT 발동 조건 + + 임대 vs 이때 + 이때 vs 이뗴 + dlEo - shift QWERT 다음에는 무조건 shift 해제 + +*/ + +// process_record_user +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case THUMB_L2: + case THUMB_L3: + if (__PRESSED__) { + prns_pressed = false; + brkt_pressed = false; + num_in_prns = false; + switch_cite = 0; + cite_done = true; + } else { + if (num_in_prns) { + if(prns_pressed){tap_code(KC_RGHT);} + if(brkt_pressed){ + cite_done = true; + tap_code(KC_RGHT); + } + } + } + return true; + break; + + case CLASS_A: + if (__PRESSED__) { + if (!cite_done) { + tap_code(KC_BSPC); + tap_code(KC_BSPC); + tap_code(KC_BSPC); + tap_code(KC_BSPC); + // if(switch_cite ==0){ + // tap_code(KC_BSPC); + // tap_code(KC_BSPC); + // tap_code(KC_BSPC); + // } + } + switch (switch_cite) { + case 0: + SEND_STRING("A62B"); + switch_cite = 1; + break; + case 1: + SEND_STRING("E05B"); + switch_cite = 2; // case 2 추가되는 경우 switch_cite = 2; + break; + case 2: + SEND_STRING("E06B"); + switch_cite = 0; + break; + } + } else { + cite_done = false; + } + break; + case CLASS_E: + if (__PRESSED__) { + if (!cite_done) { + tap_code(KC_BSPC); + tap_code(KC_BSPC); + tap_code(KC_BSPC); + tap_code(KC_BSPC); + } + switch (switch_cite) { + case 0: + SEND_STRING("E05B"); + switch_cite = 1; + break; + case 1: + SEND_STRING("E05C"); + switch_cite = 2; + break; + case 2: + SEND_STRING("E06B"); + switch_cite = 3; + break; + case 3: + SEND_STRING("E05G"); + switch_cite = 0; + break; + } + } else { + cite_done = false; + } + break; + + // appcmd function + case JOINTBL: + if (__PRESSED__) { + appcmd(KC_J); + } + break; + + case PDF_HL: + if (__PRESSED__) { + appcmd(KC_H); + } + break; + +#ifdef RGBLIGHT_ENABLE + case TO_NOMOD: + if (__PRESSED__) { + rgblight_setrgb(0, 0, 50); + } + return true; + case TO_BASE: + if (__PRESSED__) { + rgblight_setrgb(RGB_OFF); + } + return true; +#endif + // 괄호 커서이동 기능 + case KC_COMM: + if (__PRESSED__ /* && (brkt_pressed||prns_pressed)*/) { + cite_done = true; + } + return true; + case KC_1 ... KC_0: + if (__PRESSED__ && (prns_pressed || brkt_pressed)) { + num_in_prns = true; + cite_done = true; + } + return true; + break; + + // HWP_CITE + case HWP_MACRO: + if(__PRESSED__){ + tap_code_delay(KC_F6,200); + + register_code(KC_LALT); + tap_code_delay(KC_O,200); + tap_code_delay(KC_F,200); + unregister_code(KC_LALT); + + tap_code_delay(KC_DOWN,100); + tap_code_delay(KC_DOWN,100); + tap_code(KC_ENT); + register_code(KC_LALT); + tap_code_delay(KC_I,200); + unregister_code(KC_LALT); + + tap_code(KC_DOWN); + register_code(KC_LALT); + tap_code_delay(KC_B,200); + tap_code_delay(KC_Y,200); + tap_code_delay(KC_A,200); + tap_code_delay(KC_Y,200); + tap_code_delay(KC_N,200); + tap_code_delay(KC_D,200); + unregister_code(KC_LALT); + tap_code_delay(KC_ESC,200); + + register_code(KC_LCTL); + tap_code_delay(KC_K,200); + tap_code_delay(KC_O,200); + unregister_code(KC_LCTL); + + register_code(KC_LALT); + tap_code_delay(KC_N,200); + unregister_code(KC_LALT); + + tap_code_delay(KC_PGDN,100); + tap_code_delay(KC_END,100); + + register_code(KC_LALT); + tap_code_delay(KC_D,200); + unregister_code(KC_LALT); + + } + break; + case HWP_CITE: + // prns 안에서는 cite_done = false + // comma 누르면 cite_done = true + // prns && num 상태에서는 cite_done = true, SPC_COMM + + // START --- added 15:27 241016 + // if (__TAPPED__ && __PRESSED__) { + // SEND_STRING("{}" SS_TAP(X_LEFT)); + // } else { + // END --- added 15:27 241016 + + if (__PRESSED__) { + switch (switch_cite) { + case 0: + if (!cite_done) { + user_i = 0; + while (user_i < 2) { + tap_code(KC_BSPC); + user_i++; + } + } + if (!brkt_pressed) { + SEND_STRING("[]" SS_TAP(X_LEFT)); + brkt_pressed = true; + } + switch_cite = 3; + break; + case 3: + SEND_STRING("anseks "); + switch_cite = 4; + cite_done = false; + break; + case 4: + if (!cite_done) { + user_i = 0; + while (user_i < 3) { + tap_code(KC_BSPC); + user_i++; + } + } + if (brkt_pressed && num_in_prns) { + SEND_STRING(", "); + num_in_prns = false; + } + SEND_STRING("cjdrngkd "); + switch_cite = 2; + cite_done = false; + break; + case 2: + if (!cite_done) { + user_i = 0; + while (user_i < 4) { + tap_code(KC_BSPC); + user_i++; + } + } + if (brkt_pressed && num_in_prns) { + SEND_STRING(", "); + num_in_prns = false; + } + SEND_STRING("eh "); + switch_cite = 0; + cite_done = false; + break; + } + } + break; + // Intercept mod-tap + + // case LT(_BASE,KC_DEL): + // if (__TAPPED__ && __PRESSED__) { + // tap_code(KC_DEL); + // } else if (__PRESSED__) { + // register_code16(DRGSCRL); + // } else { + // unregister_code16(DRGSCRL); + // } + // return false; + // break; + + case LT(_BASE,KC_ENT): + if (__TAPPED__ && __PRESSED__) { + tap_code(KC_ENT); + } else if (__PRESSED__) { + register_code(KC_LNG1); + } else { + unregister_code(KC_LNG1); + } + return false; + break; + + case IPC(A): + if (__TAPPED__ && __PRESSED__) { + if(!cite_done){tap_code(KC_BSPC);} + switch (switch_cite){ + case 0: + SEND_STRING(SS_TAP(X_LNG1) SS_TAP(X_A) SS_TAP(X_LNG1)); + switch_cite = 1; + break; + case 1: + SEND_STRING(SS_TAP(X_LNG1) SS_TAP(X_B) SS_TAP(X_LNG1)); + switch_cite = 2; + break; + case 2: + SEND_STRING(SS_TAP(X_LNG1) SS_TAP(X_C) SS_TAP(X_LNG1)); + switch_cite = 3; + break; + case 3: + SEND_STRING(SS_TAP(X_LNG1) SS_TAP(X_D) SS_TAP(X_LNG1)); + switch_cite = 0; + break; + } + } else if (__PRESSED__) { + register_code(KC_LSFT); + } else { + unregister_code(KC_LSFT); + cite_done=false; + } + return false; + break; + + case IPC(S): + if (__TAPPED__ && __PRESSED__) { + SEND_STRING("()" SS_TAP(X_LEFT)); + prns_pressed = true; + } else if (__PRESSED__) { + register_code(KC_LALT); + } else { + unregister_code(KC_LALT); + } + return false; + break; + case IPC(F): + if (__TAPPED__ && __PRESSED__) { + SEND_STRING(", "); + } else if (__PRESSED__) { + register_code(KC_LSFT); + } else { + unregister_code(KC_LSFT); + } + return false; + break; + + case IPC(Z): + if (__TAPPED__ && __PRESSED__) { + tap_code16(KC_LNG1); + } else if (__PRESSED__) { + register_code(KC_LGUI); + } else { + unregister_code(KC_LGUI); + } + return false; + break; + + case IPC(C): + if (__TAPPED__ && __PRESSED__) { + tap_code16(KC_UNDS); + } else if (__PRESSED__) { + tap_code16(KC_PLUS); + } + return false; + break; + + case NAV(Z): + if (__TAPPED__ && __PRESSED__) { + tap_code16(C(KC_Z)); + } else if (__PRESSED__) { + register_code(KC_LGUI); + } else { + unregister_code(KC_LGUI); + } + return false; + break; + + case SFT_CAPS: + if (__TAPPED__ && __PRESSED__) { + tap_code16(KC_CAPS); + } else if (__PRESSED__) { + register_code(KC_LNG1); + } else { + unregister_code(KC_LNG1); + } + return false; + break; + +#ifdef __SCROLL_THUMB__ + case THUMB_L3: + if (__TAPPED__ && __PRESSED__) { + tap_code16(KC_DEL); + } else if (__PRESSED__) { + register_code(KC_BTN4); + } else { + unregister_code(KC_BTN4); + } + return false; + break; +#endif + // CLOSING BRACKET PAIRS + case BRKT: + if (__PRESSED__) { + SEND_STRING("[]" SS_TAP(X_LEFT)); + brkt_pressed = true; // 괄호입력상태 + } + break; + case ABRK: + if (__PRESSED__) { + SEND_STRING("<>" SS_TAP(X_LEFT)); + prns_pressed = true; // 괄호입력상태 + } + break; + + case CMM_SPC: + if (__PRESSED__) { + SEND_STRING(", "); + } + break; + case CLN_SPC: + if (__PRESSED__) { + SEND_STRING(": "); + } + break; + case ENT_HOME: + if (__PRESSED__) { + tap_code(KC_ENT); + layer_move(_BASE); + } + break; + case AT_IPC: + if (__PRESSED__) { + SEND_STRING("@IPC"); + } + break; + // case SLSH_LL: + // if (__PRESSED__) { + // SEND_STRING(SS_TAP(X_LEFT) SS_TAP(X_LEFT) SS_TAP(X_SLSH) SS_TAP(X_RGHT) SS_TAP(X_RGHT)); + // } + // break; + case NAV_NS: + if(__PRESSED__){ + tap_code16(LCA(KC_J)); + tap_code16(LCA(KC_H)); + } + break; + case ALT_TAB: + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + } + break; + + + } + return true; + +}; + +uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + + // case THUMB_L2: + // return TAPPING_TERM - 50; + // case SFTT_A: + // case SFTT_F: + // case CTLT_D: + // return TAPPING_TERM ; + case LGUI_T(KC_Z): + return TAPPING_TERM + 200; + case SFTT_J: + case GUIT_A: + case GUIT_SCL: + return TAPPING_TERM + 50; + case NAV(S): + case NAV(D): + case NAV(F): + return TAPPING_TERM - 50; + default: + return TAPPING_TERM; + } +} +// Get hold on other key press +bool get_permissive_hold(uint16_t keycode, keyrecord_t *record){ + switch (keycode) { + case SFTT_A: + return true; + default: + return false; + } +} +bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { +// case LSFT_T(KC_W): + case IPC(Z): + case THUMB_L1: + case THUMB_L2: + case THUMB_L3: + case THUMB_R1: + case THUMB_R3: + case SFT_CAPS: + //case SFTT_A: + // case SFTT_Z: + // case GUIT_Z: + // case SFTT_F: + // case SFTT_J: + // case ALTT_S: + // case CTLT_D: + // case GUIT_SCL: + // case ALTT_L: + // case CTLT_K: + // case GUIT_A: + // case LT(_NAV, KC_0): + // case IPC_COMM: + return true; + default: + return false; + } +} + + +void matrix_scan_user(void) { // The very important timer. + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 1000) { + unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } +} + +bool get_chordal_hold(uint16_t tap_hold_keycode, keyrecord_t* tap_hold_record, + uint16_t other_keycode, keyrecord_t* other_record) { +// Exceptionally allow some one-handed chords for hotkeys. +switch (tap_hold_keycode) { +case LSFT_T(KC_A): +if (other_keycode == KC_W || other_keycode == KC_E || other_keycode == KC_R || other_keycode == KC_T) { +return true; +} +break; + +case LSFT_T(KC_F): +if (other_keycode == KC_Q) { +return true; +} + +break; + +} +// Otherwise defer to the opposite hands rule. +return get_chordal_hold_default(tap_hold_record, other_record); +} + + diff --git a/users/oco9oco/oco9oco.h b/users/oco9oco/oco9oco.h new file mode 100644 index 00000000..9bdeaa99 --- /dev/null +++ b/users/oco9oco/oco9oco.h @@ -0,0 +1,339 @@ +/* +Copyright 2022 oco9oco +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 +//#include + +#define BASE_COLOR HSV_RED +#define BASE_NOMOD_COLOR HSV_BLUE +#define DOOM_COLOR HSV_GREEN +#define FACTORIO_COLOR HSV_PURPLE +#define IPC_COLOR HSV_CYAN +#define NAV_COLOR HSV_YELLOW +#define MOUSE_COLOR HSV_ORANGE +#define FUNC_COLOR HSV_WHITE +#define ONEHAND_COLOR HSV_PINK +#define SETTINGS_COLOR HSV_GOLD + + +// MOD-TAP ALIASES +#define GUIT_A LGUI_T(KC_A) +#define SFTT_A LSFT_T(KC_A) +#define SFTT_Z LSFT_T(KC_Z) +#define GUIT_Z LGUI_T(KC_Z) +#define ALTT_S LALT_T(KC_S) +#define CTLT_D LCTL_T(KC_D) +#define SFTT_F LSFT_T(KC_F) +#define SFTT_J LSFT_T(KC_J) +#define CTLT_K LCTL_T(KC_K) +#define ALTT_L LALT_T(KC_L) +#define GUIT_SCL LGUI_T(KC_SCLN) +#define SFTT_M LSFT_T(KC_M) +#define CTL_CL LCTL_T(KC_COMM) +#define ALT_DT LALT_T(KC_DOT) +#define GUI_SLSH LGUI_T(KC_SLSH) +// NUMBER ROW MOD-TAP KEYS +#define F1_1 LT(_BASE, KC_1) +#define F2_2 LT(_BASE, KC_2) +#define F3_3 LT(_BASE, KC_3) +#define F4_4 LT(_BASE, KC_4) +#define F5_5 LT(_BASE, KC_5) +#define F6_6 LT(_BASE, KC_6) +#define F7_7 LT(_BASE, KC_7) +#define F8_8 LT(_BASE, KC_8) +#define F9_9 LT(_BASE, KC_9) +#define F0_0 LT(_BASE, KC_0) +/* REGIONS + +N N N N N N E E N N N N N N +L X X X X X E E X X X X X R +L X X X X X E E X X X X X R +L X X X X X X X X X X R +m m m m m T T m m m m m + T T T T T T +N +L,R +E +X Base row +T Thumb row +m Modifier row + +X = ( +Q W E R T Y U I O P +A S D F G H J K L ; +Z X C V B N M , . / +) +*/ + +// QWERTY +// |--------|--------|--------|--------|--------| +#define __________________NUMROW_L_________________ KC_1, KC_2, KC_3, KC_4, KC_5 +#define __________________NUMROW_R_________________ KC_6, KC_7, KC_8, KC_9, KC_0 +#define __________________FN_ROW_L_________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 +#define __________________FN_ROW_R_________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 +// |--------|--------|--------|--------|--------| +#define __________________QWERTY_L1________________ KC_Q, KC_W, KC_E, KC_R, KC_T +#define __________________QWERTY_L2________________ KC_A, KC_S, KC_D, KC_F, KC_G +#define __________________QWERTY_L3_SFTZ___________ SFTT_Z, KC_X, KC_C, KC_V, KC_B +#define __________________QWERTY_GUIZ_L3___________ LGUI_T(KC_Z), KC_X, KC_C, KC_V, KC_B + +#define __________________QWERTY_L2_SFTA___________ SFTT_A, KC_S, KC_D, SFTT_F, KC_G +#define __________________QWERTY_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_B +// |--------|--------|--------|--------|--------| +#define __________________QWERTY_R1________________ KC_Y, KC_U, KC_I, KC_O, KC_P +#define __________________QWERTY_R2________________ KC_H, KC_J, KC_K, KC_L, LSFT_T(KC_SCLN) +#define __________________QWERTY_R3________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH +// |--------|--------|--------|--------|--------| +#define __________________QWERTY_HOME_L2___________ GUIT_A, ALTT_S, CTLT_D, SFTT_F, KC_G +#define __________________QWERTY_HOME_R2___________ KC_H, KC_J, CTLT_K, ALTT_L, LSFT_T(KC_SCLN) +#define __________________QWERTY_HOME_R3___________ KC_N, LSFT_T(KC_M), LCTL_T(KC_COMM), LALT_T(KC_DOT), LGUI_T(KC_SLSH) +// different layout +#define __________________QWERTY_SACS_L2___________ SFTT_A, ALTT_S, CTLT_D, SFTT_F, KC_G +// process-intercepted keys + +#define _IPC_A LT(_IPC, KC_A) +#define _IPC_S LT(_IPC, KC_S) +#define _IPC_D LT(_IPC, KC_D) +#define _IPC_C LT(_IPC, KC_C) +#define _IPC_F LT(_IPC, KC_F) +#define _IPC_Z LT(_IPC, KC_Z) +#define _IPC_MIN LCTL_T(KC_MINS) + +#define IPC(x) LT(_IPC, KC_##x) +#define NAV(x) LT(_NAV, KC_##x) +#define IPC_MIN _IPC_MIN +#define IPC_COMM LSFT_T(KC_COMM) +#define _NUM_A LT(_NUM, KC_A) +#define _NUM_S LT(_NUM, KC_S) +#define _NUM_D LT(_NUM, KC_D) +#define _NUM_F LT(_NUM, KC_F) +#define _NUM_MIN LCTL_T(KC_MINS) + +#define NUM(x) LT(_NUM, KC_##x) + +#define BULLET_U C(S(KC_LBRC)) +#define BULLET_D C(S(KC_RBRC)) + +// function keys +#define UNDO C(KC_Z) +#define CUT C(KC_X) +#define COPY C(KC_C) +#define PASTE C(KC_V) +#define BOLDFACE C(KC_B) +#define GUI_RGHT LSG(KC_RGHT) + +#define CTRL_F1 C(KC_F1) +#define ALT_F4 A(KC_F4) +#define SCRNSHOT LSG(KC_S) +#define TO_BASE TO(_BASE) +#define TO_NOMOD TG(_BASE_NOMOD) +#define LT_NAV_0 LT(_NAV, KC_0) +#define MT_CAPS LALT_T(KC_CAPS) +#define SFT_CAPS LT(_BASE_NOMOD, KC_LSFT) + +// NUMPAD +#define _________NUM_789_________ KC_7, KC_8, KC_9 +#define _________NUM_456_________ KC_4, KC_5, KC_6 +#define _________NUM_123_________ KC_1, KC_2, KC_3 + +// FUNCPAD +#define _____________FUNC_2789____________ KC_F12, KC_F7, KC_F8, KC_F9 +#define _____________FUNC_1456____________ KC_F11, KC_F4, KC_F5, KC_F6 +#define _____________FUNC_0123____________ KC_F10, KC_F1, KC_F2, KC_F3 + +// NUMROW + +// TAP-HOLD CONFIG CONDITIONS +// ROW INDEX +// #if PRODUCT == Crkbd +// #define ALPHA_QWERT 0 //AFTER NUMBER ROW +// #define ALPHA_ASDFG 1 //AFTER NUMBER ROW +// #define ALPHA_ZXCVB 2 //AFTER NUMBER ROW +// #else +// #define NUMBR_12345 0 //NO NUMBER ROW +// #define ALPHA_QWERT 1 //NO NUMBER ROW +// #define ALPHA_ASDFG 2 //NO NUMBER ROW +// #define ALPHA_ZXCVB 3 //NO NUMBER ROW +// #endif + +// COLUMN INDEX +#define MOD_COL 0 +#define ALPHA_QAZ 1 +#define ALPHA_WSX 2 +#define ALPHA_EDC 3 +#define ALPHA_RFV 4 +#define ALPHA_TGB 5 + +#define KEY_ROW record->event.key.row +#define KEY_COL record->event.key.col +#define __PRESSED__ record->event.pressed +#define __TAPPED__ record->tap.count +//#define __IF_PRESSED__ if(record->event.pressed){ +//#define __IF_HELD__ if(record->event.pressed && !record->tap.count){ +//#define __IF_RELEASED__ } else { + +// wrapper layout +#define LAYOUT_crkbd_wrapper(...) LAYOUT_split_3x6_3(__VA_ARGS__) +#define LAYOUT_moonlander_wrapper(...) LAYOUT_moonlander(__VA_ARGS__) +#define LAYOUT_kimiko_wrapper(...) LAYOUT(__VA_ARGS__) +#define LAYOUT_ID75_wrapper(...) LAYOUT_ortho_5x15(__VA_ARGS__) +#define LAYOUT_charybdis_wrapper(...) LAYOUT(__VA_ARGS__) + +#define _ALT _BASE_NOMOD + +// MOVED COMBO TO EACH KEYBOARDS + +// Korean +bool user_debug; +bool prns_pressed; // 괄호입력상태 +bool brkt_pressed; +bool num_in_prns; // 괄호 치고 번호를 입력한 경우 +bool cite_done; +int switch_cite; +int user_i; +bool kca_pressed; +bool qwert; +// BASE KEYMAPS [3X5 + 3 THUMB KEYS] + +#define __BASE_L1 __________________QWERTY_L1________________ +#define __BASE_L2 __________________QWERTY_SACS_L2___________ +#define __BASE_L3 __________________QWERTY_GUIZ_L3___________ + +#define __BASE_R1 __________________QWERTY_R1________________ +#define __BASE_R2 __________________QWERTY_HOME_R2___________ +#define __BASE_R3 __________________QWERTY_R3________________ + +#define __ALT_L1 __________________QWERTY_L1________________ +#define __ALT_L2 __________________QWERTY_L2________________ +#define __ALT_L3 __________________QWERTY_L3________________ + +#define __ALT_R1 __________________QWERTY_R1________________ +#define __ALT_R2 __________________QWERTY_R2________________ +#define __ALT_R3 __________________QWERTY_R3________________ + +#define __IPC_L1 HAEN_B, HAEN_C, HAEN_E, HAEN_D, KC_SLSH +#define __IPC_L2 IPC(A), IPC(S), IPC_MIN, IPC(F), KC_DOT +#define __IPC_L3 IPC(Z), BRKT, IPC(C), KC_EQL, KC_COLN + +#define __IPC_R1 KC_LBRC, _________NUM_789_________, KC_RBRC +#define __IPC_R2 KC_GRV, _________NUM_456_________, KC_COLN +#define __IPC_R3 A(KC_2), _________NUM_123_________, _______ + +#define __NAV_L1 XXXXXXX, A(KC_7), A(KC_8), A(KC_9), KC_F6 +#define __NAV_L2 XXXXXXX, KC_LALT, KC_LCTL, KC_LSFT, KC_F7 +#define __NAV_L3 NAV(Z), C(KC_X), C(KC_C), C(KC_V), C(KC_B) + +#define __NAV_R1 XXXXXXX, A(KC_1), A(KC_2), A(KC_3), XXXXXXX +#define __NAV_R2 KC_INS, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT +#define __NAV_R3 KC_APP, KC_HOME, KC_PGDN, KC_PGUP, KC_END + +#define __MOUSE_L1 XXXXXXX, KC_WH_D, KC_MS_U, KC_WH_U, XXXXXXX +#define __MOUSE_L2 KC_LSFT, KC_MS_L, KC_MS_D, KC_MS_R, XXXXXXX +#define __MOUSE_L3 UNDO, CUT, COPY, PASTE, BOLDFACE + +#define __MOUSE_R1 XXXXXXX, KC_ACL2, XXXXXXX, XXXXXXX, XXXXXXX +#define __MOUSE_R2 KC_INS, KC_ACL0, KC_BTN1, KC_BTN2, KC_BTN3 +#define __MOUSE_R3 KC_APP, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT + +#define __FUNC_L1 RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, XXXXXXX +#define __FUNC_L2 KC_LSFT, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX +#define __FUNC_L3 KC_LGUI, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX + +#define __FUNC_R1 XXXXXXX, KC_F9, KC_F10, KC_F11, KC_F12 +#define __FUNC_R2 XXXXXXX, KC_F5, KC_F6, KC_F7, KC_F8 +#define __FUNC_R3 XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F4 + +// Thumb keys +#define THUMB_L1 LCTL_T(KC_TAB) +#define THUMB_L2 LT(_IPC, KC_BSPC) +#define THUMB_L3 LSFT_T(KC_DEL) + +#define THUMB_R3 LT(_MOUSE, KC_ENT) +#define THUMB_R2 LT(_NAV, KC_SPC) +#define THUMB_R1 LT(_FUNC, KC_LNG1) +#define TH_BK_R1 LT(_FUNC, KC_ENT) + +#define __BASE_LT THUMB_L1, THUMB_L2, LSFT_T(KC_DEL) +#define __BASE_RT THUMB_R3, THUMB_R2, THUMB_R1 + +#define __ALT_LT _______, LT(_IPC, KC_BSPC), LSFT_T(KC_DEL) +#define __ALT_RT _______, _______, _______ + +#define __NAV_LT BRKT, KC_BSPC, KC_DEL +#define __NAV_RT _______, KC_TRNS, _______ + +#define __IPC_LT _______, _______, _______ +#define __IPC_RT _______, LT(_NAV, KC_0), _______ + +#define __MOUSE_LT KC_LCTL, KC_SPC, KC_ENT +#define __MOUSE_RT KC_TRNS, _______, _______ + +#define __FUNC_LT _______, _______, _______ +#define __FUNC_RT _______, _______, KC_TRNS + +// AUX KEYS E.G. NUM ROWS, FUNC ROW +#define __NONE XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX +#define __IPC_L0 A62B18, E05C, E05B, KC_SLSH, XXXXXXX +#define __IPC_R0 KC_LT, KC_LPRN, KC_GRV, KC_RPRN, KC_GT +#define __NAV_L0 CTRL_F1, KC_F2, KC_F3, ALT_F4, KC_F5 +#define __NAV_R0 KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 +#define __NUMROW_L KC_1, KC_2, KC_3, KC_4, KC_5 +#define __NUMROW_R KC_6, KC_7, KC_8, KC_9, KC_0 +#define __FN_ROW_L KC_F1, KC_F2, KC_F3, KC_F4, KC_F5 +#define __FN_ROW_R KC_F6, KC_F7, KC_F8, KC_F9, KC_F10 + +#define __NUM_789 KC_7, KC_8, KC_9 +#define __NUM_456 KC_4, KC_5, KC_6 +#define __NUM_123 KC_1, KC_2, KC_3 + +enum custom_keycodes { + PRNS = SAFE_RANGE, + BRKT, + ABRK, + CMM_SPC, + CLN_SPC, + SLSH_LL, + NEXT_LNE, + HAEN_A, + HAEN_B, + HAEN_C, + HAEN_D, + HAEN_E, + HAEN_F, + HAEN_G, + PDF_HL, // ADOBE PDF HIGHLIGHT MACRO + JOINTBL, + ENT_HOME, + AT_IPC, + HWP_CITE, + CLASS_A, + CLASS_E, + ALT_TAB, + NAV_NS, + HWP_MACRO, +}; + +enum layer_index { + _BASE = 0, // QWERTY with home row mods + _BASE_NOMOD, // Just QWERTY + _BASE_SWAP, // BASE WITH RIGHT THUMB SWAP + _DOOM, // DOOM ETERNAL + _FACTORIO, + _NAV, // Arrows + _IPC, // + _NUM, + _MOUSE, // + _FUNC, // + _ONEHAND, // + _SETTINGS, +}; diff --git a/users/oco9oco/rules.mk b/users/oco9oco/rules.mk new file mode 100644 index 00000000..3ef46847 --- /dev/null +++ b/users/oco9oco/rules.mk @@ -0,0 +1,14 @@ +CONSOLE_ENABLE = no +COMMAND_ENABME = no +OLED_ENABLE = no +KEY_OVERRIDE_ENABLE = no +COMBO_ENABLE = no +AUTO_SHIFT_ENABLE= no +SPACE_CADET_ENABLE = no +GRAVE_ESC_ENABLE = no +MAGIC_ENABLE = no +NKRO_ENABLE = yes +SRC+=oco9oco.c +MOUSEKEY_ENABLE = yes +# RGB 라이트 기능 활성화 +RGBLIGHT_ENABLE = no