diff --git a/keyboards/nachie/evelyn/config.h b/keyboards/nachie/evelyn/config.h new file mode 100755 index 0000000000..e52c3797b5 --- /dev/null +++ b/keyboards/nachie/evelyn/config.h @@ -0,0 +1,29 @@ +/* +Copyright 2024 nachie + +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 RP2040_FLASH_GENERIC_03H + +/* key matrix size */ +#define MATRIX_ROWS 7 +#define MATRIX_COLS 6 + +#define DEBUG_MATRIX_SCAN_RATE +#define DEBUG_ACTION + +#define VIA_CUSTOM_LIGHTING_ENABLE diff --git a/keyboards/nachie/evelyn/info.json b/keyboards/nachie/evelyn/info.json new file mode 100644 index 0000000000..7b0c80d08e --- /dev/null +++ b/keyboards/nachie/evelyn/info.json @@ -0,0 +1,87 @@ +{ + "manufacturer": "nachie", + "keyboard_name": "Syndrome", + "maintainer": "nachie", + "board": "GENERIC_RP_RP2040", + "bootloader": "rp2040", + "processor": "RP2040", + "url": "https://littlecraftery.com/products/evelyn", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": false, + "audio": false, + "backlight": false, + "rgb_matrix": false, + "rgblight": false, + "encoder": true + }, + "dynamic_keymap": { + "layer_count": 4 + }, + "usb": { + "device_version": "1.0.0", + "pid": "0x4B43", + "vid": "0x6F75" + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["GP19", "GP18", "GP16", "GP7", "GP22", "GP2"], + "rows": ["GP24", "GP23", "GP25", "GP26", "GP20", "GP21", "GP17"] + }, + "encoder": { + "enabled": true, + "rotary": [ + { "pin_a": "GP12", "pin_b": "GP13", "resolution": 2 }, + { "pin_a": "GP0", "pin_b": "GP1", "resolution": 2 }, + { "pin_a": "GP27", "pin_b": "GP28", "resolution": 2 } + ] + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"y": 0.0, "x": 0.29, "matrix": [0, 0], "label": "0,0"}, + {"y": 0.0, "x": 10.190000000000001, "matrix": [1, 4], "label": "1,4"}, + {"y": 0.0, "x": 11.190000000000001, "matrix": [0, 5], "label": "0,5"}, + {"y": 0.99, "x": 0.15, "matrix": [2, 0], "w": 1.25, "label": "2,0"}, + {"y": 0.99, "x": 10.58, "matrix": [2, 5], "w": 1.75, "label": "2,5"}, + {"y": 1.99, "x": 0.0, "matrix": [4, 0], "w": 1.75, "label": "4,0"}, + {"y": 2.99, "x": 0.09000000000000001, "matrix": [6, 0], "w": 1.25, "label": "6,0"}, + {"y": 6.23, "x": 3.97, "matrix": [5, 4], "w": 1.25, "label": "5,4"}, + {"y": 6.23, "x": 5.220000000000001, "matrix": [4, 5], "label": "4,5"}, + {"y": 7.23, "x": 4.87, "matrix": [6, 5], "w": 1.25, "label": "6,5"}, + {"y": 8.23, "x": 1.43, "matrix": [1, 0], "label": "1,0"}, + {"y": 8.23, "x": 2.43, "matrix": [0, 1], "label": "0,1"}, + {"y": 8.23, "x": 3.43, "matrix": [1, 1], "label": "1,1"}, + {"y": 8.23, "x": 4.430000000000001, "matrix": [0, 2], "label": "0,2"}, + {"y": 9.23, "x": 1.68, "matrix": [3, 0], "label": "3,0"}, + {"y": 9.23, "x": 2.68, "matrix": [2, 1], "label": "2,1"}, + {"y": 9.23, "x": 3.68, "matrix": [3, 1], "label": "3,1"}, + {"y": 9.23, "x": 4.680000000000001, "matrix": [2, 2], "label": "2,2"}, + {"y": 10.23, "x": 2.18, "matrix": [5, 0], "label": "5,0"}, + {"y": 10.23, "x": 3.18, "matrix": [4, 1], "label": "4,1"}, + {"y": 10.23, "x": 4.180000000000001, "matrix": [5, 1], "label": "5,1"}, + {"y": 10.23, "x": 5.180000000000001, "matrix": [4, 2], "label": "4,2"}, + {"y": 11.23, "x": 2.93, "matrix": [6, 1], "label": "6,1"}, + {"y": 11.23, "x": 3.93, "matrix": [6, 2], "w": 2.25, "label": "6,2"}, + {"y": 9.89, "x": 5.930000000000001, "matrix": [1, 2], "label": "1,2"}, + {"y": 9.89, "x": 6.930000000000001, "matrix": [0, 3], "label": "0,3"}, + {"y": 9.89, "x": 7.930000000000001, "matrix": [1, 3], "label": "1,3"}, + {"y": 9.89, "x": 8.93, "matrix": [0, 4], "label": "0,4"}, + {"y": 10.89, "x": 6.180000000000001, "matrix": [3, 2], "label": "3,2"}, + {"y": 10.89, "x": 7.180000000000001, "matrix": [2, 3], "label": "2,3"}, + {"y": 10.89, "x": 8.18, "matrix": [3, 3], "label": "3,3"}, + {"y": 10.89, "x": 9.18, "matrix": [2, 4], "label": "2,4"}, + {"y": 11.89, "x": 5.680000000000001, "matrix": [5, 2], "label": "5,2"}, + {"y": 11.89, "x": 6.680000000000001, "matrix": [4, 3], "label": "4,3"}, + {"y": 11.89, "x": 7.680000000000001, "matrix": [5, 3], "label": "5,3"}, + {"y": 11.89, "x": 8.68, "matrix": [4, 4], "label": "4,4"}, + {"y": 12.89, "x": 5.680000000000001, "matrix": [6, 3], "w": 2, "label": "6,3"}, + {"y": 12.89, "x": 7.680000000000001, "matrix": [6, 4], "label": "6,4"} + ] + } + } +} diff --git a/keyboards/nachie/evelyn/keyboard.json b/keyboards/nachie/evelyn/keyboard.json new file mode 100644 index 0000000000..61d598a52b --- /dev/null +++ b/keyboards/nachie/evelyn/keyboard.json @@ -0,0 +1,87 @@ +{ + "manufacturer": "nachie", + "keyboard_name": "Syndrome", + "maintainer": "nachie", + "board": "GENERIC_RP_RP2040", + "bootloader": "rp2040", + "processor": "RP2040", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "rgb_matrix": false + }, + "dynamic_keymap": { + "layer_count": 4 + }, + "usb": { + "device_version": "1.0.0", + "pid": "0x4B43", + "vid": "0x6F75" + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["GP19", "GP18", "GP16", "GP7", "GP22", "GP2"], + "rows": ["GP24", "GP23", "GP25", "GP26", "GP20", "GP21", "GP17"] + }, + "encoder": { + "enabled": true, + "rotary": [ + { "pin_a": "GP12", "pin_b": "GP13", "resolution": 2 }, + { "pin_a": "GP0", "pin_b": "GP1", "resolution": 2 }, + { "pin_a": "GP27", "pin_b": "GP28", "resolution": 2 } + ] + }, + "qmk": { + "locking": { + "enabled": true, + "resync": true + } + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"y": 0.0, "x": 0.29, "matrix": [0, 0], "label": "0,0"}, + {"y": 0.0, "x": 10.190000000000001, "matrix": [1, 4], "label": "1,4"}, + {"y": 0.0, "x": 11.190000000000001, "matrix": [0, 5], "label": "0,5"}, + {"y": 0.99, "x": 0.15, "matrix": [2, 0], "w": 1.25, "label": "2,0"}, + {"y": 0.99, "x": 10.58, "matrix": [2, 5], "w": 1.75, "label": "2,5"}, + {"y": 1.99, "x": 0.0, "matrix": [4, 0], "w": 1.75, "label": "4,0"}, + {"y": 2.99, "x": 0.09000000000000001, "matrix": [6, 0], "w": 1.25, "label": "6,0"}, + {"y": 6.23, "x": 3.97, "matrix": [5, 4], "w": 1.25, "label": "5,4"}, + {"y": 6.23, "x": 5.220000000000001, "matrix": [4, 5], "label": "4,5"}, + {"y": 7.23, "x": 4.87, "matrix": [6, 5], "w": 1.25, "label": "6,5"}, + {"y": 8.23, "x": 1.43, "matrix": [1, 0], "label": "1,0"}, + {"y": 8.23, "x": 2.43, "matrix": [0, 1], "label": "0,1"}, + {"y": 8.23, "x": 3.43, "matrix": [1, 1], "label": "1,1"}, + {"y": 8.23, "x": 4.430000000000001, "matrix": [0, 2], "label": "0,2"}, + {"y": 9.23, "x": 1.68, "matrix": [3, 0], "label": "3,0"}, + {"y": 9.23, "x": 2.68, "matrix": [2, 1], "label": "2,1"}, + {"y": 9.23, "x": 3.68, "matrix": [3, 1], "label": "3,1"}, + {"y": 9.23, "x": 4.680000000000001, "matrix": [2, 2], "label": "2,2"}, + {"y": 10.23, "x": 2.18, "matrix": [5, 0], "label": "5,0"}, + {"y": 10.23, "x": 3.18, "matrix": [4, 1], "label": "4,1"}, + {"y": 10.23, "x": 4.180000000000001, "matrix": [5, 1], "label": "5,1"}, + {"y": 10.23, "x": 5.180000000000001, "matrix": [4, 2], "label": "4,2"}, + {"y": 11.23, "x": 2.93, "matrix": [6, 1], "label": "6,1"}, + {"y": 11.23, "x": 3.93, "matrix": [6, 2], "w": 2.25, "label": "6,2"}, + {"y": 9.89, "x": 5.930000000000001, "matrix": [1, 2], "label": "1,2"}, + {"y": 9.89, "x": 6.930000000000001, "matrix": [0, 3], "label": "0,3"}, + {"y": 9.89, "x": 7.930000000000001, "matrix": [1, 3], "label": "1,3"}, + {"y": 9.89, "x": 8.93, "matrix": [0, 4], "label": "0,4"}, + {"y": 10.89, "x": 6.180000000000001, "matrix": [3, 2], "label": "3,2"}, + {"y": 10.89, "x": 7.180000000000001, "matrix": [2, 3], "label": "2,3"}, + {"y": 10.89, "x": 8.18, "matrix": [3, 3], "label": "3,3"}, + {"y": 10.89, "x": 9.18, "matrix": [2, 4], "label": "2,4"}, + {"y": 11.89, "x": 5.680000000000001, "matrix": [5, 2], "label": "5,2"}, + {"y": 11.89, "x": 6.680000000000001, "matrix": [4, 3], "label": "4,3"}, + {"y": 11.89, "x": 7.680000000000001, "matrix": [5, 3], "label": "5,3"}, + {"y": 11.89, "x": 8.68, "matrix": [4, 4], "label": "4,4"}, + {"y": 12.89, "x": 5.680000000000001, "matrix": [6, 3], "w": 2, "label": "6,3"}, + {"y": 12.89, "x": 7.680000000000001, "matrix": [6, 4], "label": "6,4"} + ] + } + } +} \ No newline at end of file diff --git a/keyboards/nachie/evelyn/keymaps/default/keymap.c b/keyboards/nachie/evelyn/keymaps/default/keymap.c new file mode 100755 index 0000000000..43266d2051 --- /dev/null +++ b/keyboards/nachie/evelyn/keymaps/default/keymap.c @@ -0,0 +1,27 @@ +/* +Copyright 2024 nachie + +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] = { + + /* QWERTY */ + LAYOUT( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1), + KC_LCTL, KC_LGUI, KC_SPC, KC_SPC, KC_RGUI, MO(1)) +}; diff --git a/keyboards/nachie/evelyn/keymaps/default/readme.md b/keyboards/nachie/evelyn/keymaps/default/readme.md new file mode 100644 index 0000000000..80a227e25e --- /dev/null +++ b/keyboards/nachie/evelyn/keymaps/default/readme.md @@ -0,0 +1 @@ +The default keymap for the Evelyn. \ No newline at end of file diff --git a/keyboards/nachie/evelyn/keymaps/vial/config.h b/keyboards/nachie/evelyn/keymaps/vial/config.h new file mode 100644 index 0000000000..bf83820779 --- /dev/null +++ b/keyboards/nachie/evelyn/keymaps/vial/config.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#define VIAL_KEYBOARD_UID {0x53, 0x01, 0x24, 0xD6, 0x96, 0x84, 0xF2, 0x0F} + +#define VIAL_UNLOCK_COMBO_ROWS { 0, 2 } +#define VIAL_UNLOCK_COMBO_COLS { 0, 5 } + +#define RGB_MATRIX_FRAMEBUFFER_EFFECTS +#define RGB_MATRIX_KEYPRESSES \ No newline at end of file diff --git a/keyboards/nachie/evelyn/keymaps/vial/keymap.c b/keyboards/nachie/evelyn/keymaps/vial/keymap.c new file mode 100755 index 0000000000..9f58b5accb --- /dev/null +++ b/keyboards/nachie/evelyn/keymaps/vial/keymap.c @@ -0,0 +1,65 @@ +/* +Copyright 2024 nachie + +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 +char wpm_str[10]; + +enum layer_names { + _BASE, // Default Layer + _FN, // Fn Layer 1 + _FN2, // Fn Layer 2 + _FN3 // Fn Layer 3 +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* QWERTY */ + [_BASE] = LAYOUT( + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1), + KC_LCTL, KC_LGUI, KC_SPC, KC_SPC, KC_RGUI, MO(1)), + + /* FUNCTION */ + [_FN] = LAYOUT( + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1), + KC_LGUI, KC_LGUI, KC_LALT, KC_BSPC, KC_RGUI, MO(1)), + + [_FN2] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______), + + [_FN3] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) }, + [_FN2] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) }, + [_FN3] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) }, +}; +#endif diff --git a/keyboards/nachie/evelyn/keymaps/vial/readme.md b/keyboards/nachie/evelyn/keymaps/vial/readme.md new file mode 100644 index 0000000000..c68b8bea09 --- /dev/null +++ b/keyboards/nachie/evelyn/keymaps/vial/readme.md @@ -0,0 +1 @@ +The vial keymap for the Evelyn PCB. \ No newline at end of file diff --git a/keyboards/nachie/evelyn/keymaps/vial/rules.mk b/keyboards/nachie/evelyn/keymaps/vial/rules.mk new file mode 100644 index 0000000000..2b08f373bf --- /dev/null +++ b/keyboards/nachie/evelyn/keymaps/vial/rules.mk @@ -0,0 +1,6 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes + +#VIALRGB_ENABLE = yes + +ENCODER_MAP_ENABLE = yes \ No newline at end of file diff --git a/keyboards/nachie/evelyn/keymaps/vial/vial.json b/keyboards/nachie/evelyn/keymaps/vial/vial.json new file mode 100644 index 0000000000..4597db1978 --- /dev/null +++ b/keyboards/nachie/evelyn/keymaps/vial/vial.json @@ -0,0 +1,213 @@ +{ + "name": "Syndrome", + "vendorId": "0x4B43", + "productId": "0x6F75", + "matrix": { "rows": 7, "cols": 6 }, + "layouts": { + "labels":[ + [ + "Right Shift", + "Split Shift", + "Full Shift" + ], + "1.75 Left Space", + "1.75 Right Space" + ], + "keymap": [ + [ + { + "y": 0.16, + "x": 12.25 + }, + "1,0\n\n\n\n\n\n\n\n\ne", + "1,1\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "y": -0.9199999999999999, + "x": 0.3, + "c": "#ffffff", + "t": "#2e2525" + }, + "0,0", + { + "x": 8.9 + }, + "1,4", + "0,5" + ], + [ + { + "y": -0.010000000000000009, + "x": 0.16, + "w": 1.25 + }, + "2,0", + { + "x": 9.18, + "w": 1.75 + }, + "2,5" + ], + [ + { + "x": 0.01, + "w": 1.75 + }, + "4,0" + ], + [ + { + "y": -0.9899999999999998, + "x": 12.73, + "w": 2.25 + }, + "5,4\n\n\n0,1" + ], + [ + { + "y": -0.010000000000000231, + "x": 0.1, + "w": 1.25 + }, + "6,0" + ], + [ + { + "y": 0.6799999999999997, + "x": 3.5, + "c": "#cccccc", + "t": "#000000" + }, + "2,0\n\n\n\n\n\n\n\n\ne", + "2,1\n\n\n\n\n\n\n\n\ne", + { + "x": 0.75 + }, + "3,0\n\n\n\n\n\n\n\n\ne", + "3,1\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "rx": 6.25, + "y": 2.24, + "x": 3.9800000000000004, + "c": "#ffffff", + "t": "#2e2525", + "w": 1.25 + }, + "5,4\n\n\n0,0", + "4,5\n\n\n0,0" + ], + [ + { + "x": 4.879999999999999, + "w": 1.25 + }, + "6,5" + ], + [ + { + "r": 8, + "rx": 0, + "x": 1.44 + }, + "1,0", + "0,1", + "1,1", + "0,2" + ], + [ + { + "x": 1.69 + }, + "3,0", + "2,1", + "3,1", + "2,2" + ], + [ + { + "x": 2.19 + }, + "5,0", + "4,1", + "5,1", + "4,2" + ], + [ + { + "x": 2.94 + }, + "6,1\n\n\n1,0", + { + "w": 2.25 + }, + "6,2\n\n\n1,0" + ], + [ + { + "x": 2.94, + "t": "#000000", + "w": 1.5 + }, + "6,1\n\n\n1,1", + { + "x": 8.881784197001252e-16, + "w": 1.75 + }, + "6,2\n\n\n1,1" + ], + [ + { + "r": -8, + "y": -3.34, + "x": 5.9399999999999995, + "t": "#2e2525" + }, + "1,2", + "0,3", + "1,3", + "0,4" + ], + [ + { + "x": 6.19 + }, + "3,2", + "2,3", + "3,3", + "2,4" + ], + [ + { + "x": 5.69 + }, + "5,2", + "4,3", + "5,3", + "4,4" + ], + [ + { + "x": 5.69, + "w": 2 + }, + "6,3\n\n\n2,0", + "6,4\n\n\n2,0" + ], + [ + { + "x": 5.69, + "t": "#000000", + "w": 1.75 + }, + "6,3\n\n\n2,1", + { + "w": 1.25 + }, + "6,4\n\n\n2,1" + ] + ] + } +} \ No newline at end of file diff --git a/keyboards/nachie/evelyn/readme.md b/keyboards/nachie/evelyn/readme.md new file mode 100644 index 0000000000..2259be9671 --- /dev/null +++ b/keyboards/nachie/evelyn/readme.md @@ -0,0 +1,23 @@ +# Båge + +Firmware for the Båge + +* Keyboard Maintainer: [nachie](https://github.com/nachie) +* Hardware Supported: Båge +* Hardware Availability: [nachie](https://littlecraftery.com/products/Båge) + +Make example for this keyboard (after setting up your build environment): + + make nachie/syndrome:default + +Or to make and flash: + + make nachie/syndrome:default:flash + + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +* **Bootmagic reset**: Hold down ESC key (top left) and plug in the keyboard +* **Physical reset button**: Briefly press the button labeled "SW_RST1" on the back of the PCB diff --git a/keyboards/nachie/evelyn/rules.mk b/keyboards/nachie/evelyn/rules.mk new file mode 100755 index 0000000000..7ff128fa69 --- /dev/null +++ b/keyboards/nachie/evelyn/rules.mk @@ -0,0 +1 @@ +# This file intentionally left blank \ No newline at end of file diff --git a/keyboards/nachie/littlewritter/config.h b/keyboards/nachie/littlewritter/config.h new file mode 100755 index 0000000000..aeedd65f7f --- /dev/null +++ b/keyboards/nachie/littlewritter/config.h @@ -0,0 +1,25 @@ +/* +Copyright 2024 Nachie + +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 RP2040_FLASH_GENERIC_03H + +#ifdef HAPTIC_ENABLE +#define SOLENOID_PIN GP15 +#endif + +#define VIA_CUSTOM_LIGHTING_ENABLE diff --git a/keyboards/nachie/littlewritter/halconf.h b/keyboards/nachie/littlewritter/halconf.h new file mode 100644 index 0000000000..7691f8fd28 --- /dev/null +++ b/keyboards/nachie/littlewritter/halconf.h @@ -0,0 +1,3 @@ +#pragma once + +#include_next diff --git a/keyboards/nachie/littlewritter/info.json b/keyboards/nachie/littlewritter/info.json new file mode 100644 index 0000000000..3c55188b27 --- /dev/null +++ b/keyboards/nachie/littlewritter/info.json @@ -0,0 +1,148 @@ +{ + "keyboard_name": "LittleWritter", + "manufacturer": "Nachie", + "usb": { + "vid": "0x4B43", + "pid": "0x5358", + "device_version": "1.0.0" + }, + "board": "GENERIC_RP_RP2040", + "bootloader": "rp2040", + "processor": "RP2040", + "url": "https://littlecraftery.com/products/little-writter", + "maintainer": "nachie", + "ws2812": { + "pin": "GP29", + "driver": "vendor" + }, + "rgb_matrix": { + "driver": "ws2812", + "led_count": 16, + "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, + "rainbow_moving_chevron":true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "cycle_pinwheel": true, + "cycle_spiral": true, + "rainbow_pinwheels": true, + "raindrops": true, + "jellybean_raindrops": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": 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, + "solid_splash": true, + "solid_multisplash": true, + "pixel_rain": true, + "pixel_fractal": true + } + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"y": 0, "x": 11.5, "matrix": [10, 5], "label": "10,5"}, + {"y": 1, "x": 10.5, "matrix": [10, 6], "label": "10,6"}, + {"y": 1, "x": 12.5, "matrix": [10, 7], "label": "10,7"}, + {"y": 1.75, "x": 0, "matrix": [8, 5], "label": "8,5"}, + {"y": 1.75, "x": 1, "matrix": [9, 5], "label": "9,5"}, + {"y": 1.75, "x": 3.25, "matrix": [8, 6], "label": "8,6"}, + {"y": 1.75, "x": 4.25, "matrix": [9, 6], "label": "9,6"}, + {"y": 1.75, "x": 5.25, "matrix": [8, 7], "label": "8,7"}, + {"y": 1.75, "x": 7.25, "matrix": [9, 7], "label": "9,7"}, + {"y": 1.75, "x": 8.25, "matrix": [8, 8], "label": "8,8"}, + {"y": 2, "x": 11.5, "matrix": [10, 8], "label": "10,8"}, + {"y": 3.5, "x": 0, "matrix": [0, 0], "label": "0,0"}, + {"y": 3.5, "x": 1, "matrix": [1, 0], "label": "1,0"}, + {"y": 3.5, "x": 2, "matrix": [0, 1], "label": "0,1"}, + {"y": 3.5, "x": 3, "matrix": [1, 1], "label": "1,1"}, + {"y": 3.5, "x": 4, "matrix": [0, 2], "label": "0,2"}, + {"y": 3.5, "x": 5, "matrix": [1, 2], "label": "1,2"}, + {"y": 3.5, "x": 6, "matrix": [0, 3], "label": "0,3"}, + {"y": 3.5, "x": 7, "matrix": [1, 3], "label": "1,3"}, + {"y": 3.5, "x": 8, "matrix": [0, 4], "label": "0,4"}, + {"y": 3.5, "x": 9, "matrix": [1, 4], "label": "1,4"}, + {"y": 3.5, "x": 10, "matrix": [7, 4], "label": "7,4"}, + {"y": 3.5, "x": 12.5, "matrix": [9, 8], "label": "9,8"}, + {"y": 4.5, "x": 0, "matrix": [2, 0], "w": 1.25, "label": "2,0"}, + {"y": 4.5, "x": 1.25, "matrix": [3, 0], "label": "3,0"}, + {"y": 4.5, "x": 2.25, "matrix": [2, 1], "label": "2,1"}, + {"y": 4.5, "x": 3.25, "matrix": [3, 1], "label": "3,1"}, + {"y": 4.5, "x": 4.25, "matrix": [2, 2], "label": "2,2"}, + {"y": 4.5, "x": 5.25, "matrix": [3, 2], "label": "3,2"}, + {"y": 4.5, "x": 6.25, "matrix": [2, 3], "label": "2,3"}, + {"y": 4.5, "x": 7.25, "matrix": [3, 3], "label": "3,3"}, + {"y": 4.5, "x": 8.25, "matrix": [2, 4], "label": "2,4"}, + {"y": 4.5, "x": 9.25, "matrix": [3, 4], "w": 1.75, "label": "3,4"}, + {"y": 4.5, "x": 12.5, "matrix": [8, 9], "label": "8,9"}, + {"y": 5.5, "x": 0, "matrix": [4, 0], "w": 1.75, "label": "4,0"}, + {"y": 5.5, "x": 1.75, "matrix": [5, 0], "label": "5,0"}, + {"y": 5.5, "x": 2.75, "matrix": [4, 1], "label": "4,1"}, + {"y": 5.5, "x": 3.75, "matrix": [5, 1], "label": "5,1"}, + {"y": 5.5, "x": 4.75, "matrix": [4, 2], "label": "4,2"}, + {"y": 5.5, "x": 5.75, "matrix": [5, 2], "label": "5,2"}, + {"y": 5.5, "x": 6.75, "matrix": [4, 3], "label": "4,3"}, + {"y": 5.5, "x": 7.75, "matrix": [5, 3], "label": "5,3"}, + {"y": 5.5, "x": 8.75, "matrix": [4, 4], "w": 1.25, "label": "4,4"}, + {"y": 5.5, "x": 10, "matrix": [5, 4], "label": "5,4"}, + {"y": 5.5, "x": 12.5, "matrix": [9, 9], "label": "9,9"}, + {"y": 6.5, "x": 0, "matrix": [6, 0], "w": 1.5, "label": "6,0"}, + {"y": 6.5, "x": 1.5, "matrix": [7, 0], "label": "7,0"}, + {"y": 6.5, "x": 2.5, "matrix": [6, 1], "w": 1.25, "label": "6,1"}, + {"y": 6.5, "x": 3.75, "matrix": [7, 1], "w": 1.75, "label": "7,1"}, + {"y": 6.5, "x": 5.5, "matrix": [7, 2], "w": 1.75, "label": "7,2"}, + {"y": 6.5, "x": 7.25, "matrix": [6, 3], "w": 1.25, "label": "6,3"}, + {"y": 6.5, "x": 8.5, "matrix": [7, 3], "label": "7,3"}, + {"y": 6.5, "x": 9.5, "matrix": [6, 4], "w": 1.5, "label": "6,4"} + ] + } + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": false, + "audio": false, + "backlight": false, + "rgblight": false, + "encoder": true, + "rgb_matrix": true + }, + "encoder": { + "enabled": true, + "rotary": [ + { "pin_a": "GP22", "pin_b": "GP23", "resolution": 2 }, + { "pin_a": "GP26", "pin_b": "GP27", "resolution": 2 }, + { "pin_a": "GP0", "pin_b": "GP1", "resolution": 2 } + ] + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["GP28", "GP21", "GP20", "GP3", "GP2", "GP12", "GP13", "GP14", "GP10", "GP11"], + "rows": ["GP25", "GP24", "GP16", "GP7", "GP17", "GP18", "GP19", "GP4", "GP8", "GP9", "GP15"] + } +} diff --git a/keyboards/nachie/littlewritter/keyboard.json b/keyboards/nachie/littlewritter/keyboard.json new file mode 100644 index 0000000000..3c55188b27 --- /dev/null +++ b/keyboards/nachie/littlewritter/keyboard.json @@ -0,0 +1,148 @@ +{ + "keyboard_name": "LittleWritter", + "manufacturer": "Nachie", + "usb": { + "vid": "0x4B43", + "pid": "0x5358", + "device_version": "1.0.0" + }, + "board": "GENERIC_RP_RP2040", + "bootloader": "rp2040", + "processor": "RP2040", + "url": "https://littlecraftery.com/products/little-writter", + "maintainer": "nachie", + "ws2812": { + "pin": "GP29", + "driver": "vendor" + }, + "rgb_matrix": { + "driver": "ws2812", + "led_count": 16, + "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, + "rainbow_moving_chevron":true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "cycle_pinwheel": true, + "cycle_spiral": true, + "rainbow_pinwheels": true, + "raindrops": true, + "jellybean_raindrops": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": 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, + "solid_splash": true, + "solid_multisplash": true, + "pixel_rain": true, + "pixel_fractal": true + } + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"y": 0, "x": 11.5, "matrix": [10, 5], "label": "10,5"}, + {"y": 1, "x": 10.5, "matrix": [10, 6], "label": "10,6"}, + {"y": 1, "x": 12.5, "matrix": [10, 7], "label": "10,7"}, + {"y": 1.75, "x": 0, "matrix": [8, 5], "label": "8,5"}, + {"y": 1.75, "x": 1, "matrix": [9, 5], "label": "9,5"}, + {"y": 1.75, "x": 3.25, "matrix": [8, 6], "label": "8,6"}, + {"y": 1.75, "x": 4.25, "matrix": [9, 6], "label": "9,6"}, + {"y": 1.75, "x": 5.25, "matrix": [8, 7], "label": "8,7"}, + {"y": 1.75, "x": 7.25, "matrix": [9, 7], "label": "9,7"}, + {"y": 1.75, "x": 8.25, "matrix": [8, 8], "label": "8,8"}, + {"y": 2, "x": 11.5, "matrix": [10, 8], "label": "10,8"}, + {"y": 3.5, "x": 0, "matrix": [0, 0], "label": "0,0"}, + {"y": 3.5, "x": 1, "matrix": [1, 0], "label": "1,0"}, + {"y": 3.5, "x": 2, "matrix": [0, 1], "label": "0,1"}, + {"y": 3.5, "x": 3, "matrix": [1, 1], "label": "1,1"}, + {"y": 3.5, "x": 4, "matrix": [0, 2], "label": "0,2"}, + {"y": 3.5, "x": 5, "matrix": [1, 2], "label": "1,2"}, + {"y": 3.5, "x": 6, "matrix": [0, 3], "label": "0,3"}, + {"y": 3.5, "x": 7, "matrix": [1, 3], "label": "1,3"}, + {"y": 3.5, "x": 8, "matrix": [0, 4], "label": "0,4"}, + {"y": 3.5, "x": 9, "matrix": [1, 4], "label": "1,4"}, + {"y": 3.5, "x": 10, "matrix": [7, 4], "label": "7,4"}, + {"y": 3.5, "x": 12.5, "matrix": [9, 8], "label": "9,8"}, + {"y": 4.5, "x": 0, "matrix": [2, 0], "w": 1.25, "label": "2,0"}, + {"y": 4.5, "x": 1.25, "matrix": [3, 0], "label": "3,0"}, + {"y": 4.5, "x": 2.25, "matrix": [2, 1], "label": "2,1"}, + {"y": 4.5, "x": 3.25, "matrix": [3, 1], "label": "3,1"}, + {"y": 4.5, "x": 4.25, "matrix": [2, 2], "label": "2,2"}, + {"y": 4.5, "x": 5.25, "matrix": [3, 2], "label": "3,2"}, + {"y": 4.5, "x": 6.25, "matrix": [2, 3], "label": "2,3"}, + {"y": 4.5, "x": 7.25, "matrix": [3, 3], "label": "3,3"}, + {"y": 4.5, "x": 8.25, "matrix": [2, 4], "label": "2,4"}, + {"y": 4.5, "x": 9.25, "matrix": [3, 4], "w": 1.75, "label": "3,4"}, + {"y": 4.5, "x": 12.5, "matrix": [8, 9], "label": "8,9"}, + {"y": 5.5, "x": 0, "matrix": [4, 0], "w": 1.75, "label": "4,0"}, + {"y": 5.5, "x": 1.75, "matrix": [5, 0], "label": "5,0"}, + {"y": 5.5, "x": 2.75, "matrix": [4, 1], "label": "4,1"}, + {"y": 5.5, "x": 3.75, "matrix": [5, 1], "label": "5,1"}, + {"y": 5.5, "x": 4.75, "matrix": [4, 2], "label": "4,2"}, + {"y": 5.5, "x": 5.75, "matrix": [5, 2], "label": "5,2"}, + {"y": 5.5, "x": 6.75, "matrix": [4, 3], "label": "4,3"}, + {"y": 5.5, "x": 7.75, "matrix": [5, 3], "label": "5,3"}, + {"y": 5.5, "x": 8.75, "matrix": [4, 4], "w": 1.25, "label": "4,4"}, + {"y": 5.5, "x": 10, "matrix": [5, 4], "label": "5,4"}, + {"y": 5.5, "x": 12.5, "matrix": [9, 9], "label": "9,9"}, + {"y": 6.5, "x": 0, "matrix": [6, 0], "w": 1.5, "label": "6,0"}, + {"y": 6.5, "x": 1.5, "matrix": [7, 0], "label": "7,0"}, + {"y": 6.5, "x": 2.5, "matrix": [6, 1], "w": 1.25, "label": "6,1"}, + {"y": 6.5, "x": 3.75, "matrix": [7, 1], "w": 1.75, "label": "7,1"}, + {"y": 6.5, "x": 5.5, "matrix": [7, 2], "w": 1.75, "label": "7,2"}, + {"y": 6.5, "x": 7.25, "matrix": [6, 3], "w": 1.25, "label": "6,3"}, + {"y": 6.5, "x": 8.5, "matrix": [7, 3], "label": "7,3"}, + {"y": 6.5, "x": 9.5, "matrix": [6, 4], "w": 1.5, "label": "6,4"} + ] + } + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": false, + "audio": false, + "backlight": false, + "rgblight": false, + "encoder": true, + "rgb_matrix": true + }, + "encoder": { + "enabled": true, + "rotary": [ + { "pin_a": "GP22", "pin_b": "GP23", "resolution": 2 }, + { "pin_a": "GP26", "pin_b": "GP27", "resolution": 2 }, + { "pin_a": "GP0", "pin_b": "GP1", "resolution": 2 } + ] + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["GP28", "GP21", "GP20", "GP3", "GP2", "GP12", "GP13", "GP14", "GP10", "GP11"], + "rows": ["GP25", "GP24", "GP16", "GP7", "GP17", "GP18", "GP19", "GP4", "GP8", "GP9", "GP15"] + } +} diff --git a/keyboards/nachie/littlewritter/keymaps/default/keymap.c b/keyboards/nachie/littlewritter/keymaps/default/keymap.c new file mode 100755 index 0000000000..0ae29aa151 --- /dev/null +++ b/keyboards/nachie/littlewritter/keymaps/default/keymap.c @@ -0,0 +1,28 @@ +/* +Copyright 2024 Nachie + +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] = { + + /* QWERTY */ + LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_W, + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_Q, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, KC_A, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1), KC_Z, + KC_LGUI, KC_LGUI, KC_LALT, KC_SPC, KC_BSPC, KC_RGUI, KC_RALT, MO(1)) +}; diff --git a/keyboards/nachie/littlewritter/keymaps/default/readme.md b/keyboards/nachie/littlewritter/keymaps/default/readme.md new file mode 100644 index 0000000000..0bb2e6026d --- /dev/null +++ b/keyboards/nachie/littlewritter/keymaps/default/readme.md @@ -0,0 +1 @@ +The default keymap for the Little Writter. \ No newline at end of file diff --git a/keyboards/nachie/littlewritter/keymaps/vial/config.h b/keyboards/nachie/littlewritter/keymaps/vial/config.h new file mode 100644 index 0000000000..a6cc2583d0 --- /dev/null +++ b/keyboards/nachie/littlewritter/keymaps/vial/config.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#define VIAL_KEYBOARD_UID {0x81, 0x8E, 0x3C, 0xC9, 0xA3, 0x67, 0xDE, 0xA5} + +#define VIAL_UNLOCK_COMBO_ROWS { 0, 3 } +#define VIAL_UNLOCK_COMBO_COLS { 0, 4 } + +#define RGB_MATRIX_FRAMEBUFFER_EFFECTS +#define RGB_MATRIX_KEYPRESSES \ No newline at end of file diff --git a/keyboards/nachie/littlewritter/keymaps/vial/keymap.c b/keyboards/nachie/littlewritter/keymaps/vial/keymap.c new file mode 100755 index 0000000000..fe744f7a0b --- /dev/null +++ b/keyboards/nachie/littlewritter/keymaps/vial/keymap.c @@ -0,0 +1,486 @@ +/* +Copyright 2024 Nachie + +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 +#include "os_detection.h" + +os_variant_t current_platform; +bool is_alt_tab_active = false; +uint16_t alt_tab_timer = 0; + +enum layer_names { + _BASE, // Default Layer + _FN, // Fn Layer 1 + _FN2, // Fn Layer 2 + _FN3 // Fn Layer 3 +}; + +enum custom_keycode { + JWRDL = QK_KB_0, + JWRDR, + SWRDL, + SWRDR, + TABL, + TABR, + DSKTPL, + DSKTPR, + PRVAPP, + NXTAPP +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_HOME: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LGUI); + tap_code(KC_LEFT); + unregister_mods(MOD_LGUI); + } else { + tap_code(KC_HOME); + } + break; + case KC_END: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LGUI); + tap_code(KC_RIGHT); + unregister_mods(MOD_LGUI); + } else { + tap_code(KC_END); + } + break; + case KC_PGUP: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LGUI); + tap_code(KC_UP); + unregister_mods(MOD_LGUI); + } else { + tap_code(KC_PGUP); + } + break; + case KC_PGDN: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LGUI); + tap_code(KC_DOWN); + unregister_mods(MOD_LGUI); + } else { + tap_code(KC_PGDN); + } + break; + case KC_NUM_LOCK: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LSFT); + tap_code(KC_CLEAR); + unregister_mods(MOD_LSFT); + } else { + tap_code(KC_NUM_LOCK); + } + break; + case KC_SCROLL_LOCK: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LCTL); + tap_code(KC_F14); + unregister_mods(MOD_LCTL); + } else { + tap_code(KC_SCROLL_LOCK); + } + break; + case KC_PRINT_SCREEN: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LSFT); + register_mods(MOD_LGUI); + tap_code(KC_5); + unregister_mods(MOD_LGUI); + unregister_mods(MOD_LSFT); + } else { + tap_code(KC_PRINT_SCREEN); + } + break; + case JWRDL: + if (record->event.pressed) { + (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL); + tap_code(KC_LEFT); + (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL); + } else { + } + break; + case JWRDR: + if (record->event.pressed) { + (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL); + tap_code(KC_RIGHT); + (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL); + } else { + } + break; + case SWRDL: + if (record->event.pressed) { + register_mods(MOD_LSFT); + (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL); + tap_code(KC_LEFT); + (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL); + unregister_mods(MOD_LSFT); + } else { + } + break; + case SWRDR: + if (record->event.pressed) { + register_mods(MOD_LSFT); + (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL); + tap_code(KC_RIGHT); + (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL); + unregister_mods(MOD_LSFT); + } else { + } + break; + case TABL: + if (record->event.pressed) { + register_mods(MOD_LCTL); + register_mods(MOD_LSFT); + tap_code(KC_TAB); + unregister_mods(MOD_LSFT); + unregister_mods(MOD_LCTL); + } else { + } + break; + case TABR: + if (record->event.pressed) { + register_mods(MOD_LCTL); + tap_code(KC_TAB); + unregister_mods(MOD_LCTL); + } else { + } + break; + case DSKTPL: + if (record->event.pressed) { + register_mods(MOD_LCTL); + register_mods(MOD_LGUI); + (current_platform == OS_LINUX) ? tap_code(KC_UP) : tap_code(KC_LEFT); + unregister_mods(MOD_LGUI); + unregister_mods(MOD_LCTL); + } else { + } + break; + case DSKTPR: + if (record->event.pressed) { + register_mods(MOD_LCTL); + register_mods(MOD_LGUI); + (current_platform == OS_LINUX) ? tap_code(KC_DOWN) : tap_code(KC_RGHT); + unregister_mods(MOD_LGUI); + unregister_mods(MOD_LCTL); + } else { + } + break; + case PRVAPP: + if (record->event.pressed) { + register_code(KC_LSFT); + if (!is_alt_tab_active) { + is_alt_tab_active = true; + (current_platform == OS_MACOS) ? register_code(KC_LGUI) : register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + unregister_code(KC_LSFT); + } + break; + case NXTAPP: + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + (current_platform == OS_MACOS) ? register_code(KC_LGUI) : register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + } + break; + } + return true; +}; + +#ifndef HAPTIC_ENABLE + #define HF_TOGG _______ +#endif + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* QWERTY */ + [_BASE] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_W, + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_Q, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, KC_A, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1), KC_Z, + KC_LGUI, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_BSPC, KC_RGUI, MO(2)), + + /* FUNCTION */ + [_FN] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_W, + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, _______, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, _______, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1), _______, + KC_LGUI, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_BSPC, KC_RGUI, MO(1)), + + [_FN2] = LAYOUT( + KC_ESC, QK_BOOTLOADER, QK_REBOOT, QK_DEBUG_TOGGLE, QK_CLEAR_EEPROM, _______, _______, _______, _______, _______, _______, + HF_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______), + + [_FN3] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______) +}; + +void matrix_scan_user(void) { // The very important timer. + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 1000) { + (current_platform == OS_MACOS) ? unregister_code(KC_LGUI) : unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } +} + +#if defined(ENCODER_MAP_ENABLE) + const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) }, + [_FN2] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) }, + [_FN3] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) }, + }; +#endif + +#ifdef OLED_ENABLE + #ifdef DYNAMIC_MACRO_ENABLE + bool macro1; + bool macro1rec; + bool macro2; + bool macro2rec; + bool prevEnabled; + uint8_t prevRGBmode; + + void render_dynamic_macro_status(int col, int line){ + oled_set_cursor(col,line); + macro1rec ? oled_write(PSTR("DM1"), macro1) : oled_write(PSTR(" "),false); + oled_set_cursor(col,line+1); + macro2rec ? oled_write(PSTR("DM2"), macro2) : oled_write(PSTR(" "),false); + } + + //direction indicates which macro it is, with 1 being Macro 1, -1 being Macro 2, and 0 being no macro. + void dynamic_macro_record_start_user(int8_t direction){ + prevEnabled = rgb_matrix_is_enabled(); + if (!prevEnabled) { rgb_matrix_enable(); } + prevRGBmode = rgb_matrix_get_mode(); + rgb_matrix_mode(RGB_MATRIX_BREATHING); + switch(direction){ + case 1: + macro1 = false; + macro1rec = true; + break; + case -1: + macro2 = false; + macro2rec = true; + break; + default: + macro1 = false; + macro2 = false; + macro1rec = false; + macro2rec = false; + break; + } + } + + void dynamic_macro_record_end_user(int8_t direction){ + prevEnabled ? rgb_matrix_mode(prevRGBmode) : rgb_matrix_disable(); + switch(direction){ + case 1: + macro1 = true; + break; + case -1: + macro2 = true; + break; + default: + macro1 = false; + macro2 = false; + break; + } + } + #endif + + bool clear_screen = false; + bool rerender_platform = false; + + static void render_logo(void) { + static const char PROGMEM logo[] = { + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00 + }; + + oled_write(logo, false); + } + + void render_keylock_status(led_t led_state) { + bool caps_state = (led_state.caps_lock || is_caps_word_on()); + oled_write(PSTR("CAPS"), caps_state); + oled_write(PSTR(" "), false); + oled_write(PSTR("NUM"), led_state.num_lock); + oled_write(PSTR(" "), false); + oled_write(PSTR("SCRL"), led_state.scroll_lock); + //oled_write_ln_P(PSTR(" "), false); + } + + void render_mod_status(uint8_t modifiers) { + oled_write(PSTR("SH"), (modifiers & MOD_MASK_SHIFT)); + oled_write(PSTR(" "), false); + (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("CMD"), (modifiers & MOD_MASK_GUI)) : oled_write(PSTR("CT"), (modifiers & MOD_MASK_CTRL)); + oled_write(PSTR(" "), false); + (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("OPT"), (modifiers & MOD_MASK_ALT)) : oled_write(PSTR("ALT"), (modifiers & MOD_MASK_ALT)); + oled_write(PSTR(" "), false); + (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("CT"), (modifiers & MOD_MASK_CTRL)) : oled_write(PSTR("GUI"), (modifiers & MOD_MASK_GUI)); + } + + void render_key_status_or_logo(){ + led_t led_state = host_keyboard_led_state(); + uint8_t mod_state = (get_mods()|get_oneshot_mods()); + if ( !led_state.num_lock && !led_state.caps_lock && !led_state.scroll_lock + && !(mod_state & MOD_MASK_SHIFT) && !(mod_state & MOD_MASK_ALT) && !(mod_state & MOD_MASK_CTRL) && !(mod_state & MOD_MASK_GUI)) { + if(!clear_screen) { + render_logo(); + rerender_platform = true; + } + clear_screen = true; + } else { + if (clear_screen == true) { + oled_clear(); + oled_render(); + clear_screen = false; + } + oled_set_cursor(8,0); + render_keylock_status(led_state); + oled_set_cursor(8,1); + render_mod_status(mod_state); + rerender_platform = true; + } + + } + + void render_current_layer(){ + switch (get_highest_layer(layer_state)) { + case 0: + oled_write(PSTR("Layer 0"), false); + break; + case 1: + oled_write(PSTR("Layer 1"), false); + break; + case 2: + oled_write(PSTR("Layer 2"), false); + break; + case 3: + oled_write(PSTR("Layer 3"), false); + break; + default: + oled_write(PSTR("Layer ?"), false); // Should never display, here as a catchall + } + } + + void render_current_wpm(){ + oled_write_P(PSTR("WPM: "), false); + oled_write(get_u8_str(get_current_wpm(), '0'), false); + } + + void render_platform_status(int col, int line) { + /* Show Ctrl-Gui Swap options */ + static const char PROGMEM logo[][5][3] = { + {{0x9B, 0x9C, 0}, {0xbb, 0xbc, 0}}, //Android + {{0x99, 0x9A, 0}, {0xb9, 0xba, 0}}, //Linux + {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}, //Windows + {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, //Mac/iOS + {{0x9D, 0x9E, 0}, {0xbd, 0xbe, 0}}, //Empty Placeholder + }; + current_platform = detected_host_os(); + switch (current_platform) { + /*case OS_ANDROID: //Android + oled_set_cursor(col,line); + oled_write(logo[0][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[0][1], false); + break;*/ + case OS_LINUX: //Linux + oled_set_cursor(col,line); + oled_write(logo[1][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[1][1], false); + keymap_config.swap_lctl_lgui = false; + keymap_config.swap_rctl_rgui = false; + break; + case OS_WINDOWS: //Windows + oled_set_cursor(col,line); + oled_write(logo[2][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[2][1], false); + keymap_config.swap_lctl_lgui = false; + keymap_config.swap_rctl_rgui = false; + break; + case OS_MACOS: //Mac + oled_set_cursor(col,line); + oled_write(logo[3][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[3][1], false); + keymap_config.swap_lctl_lgui = true; + keymap_config.swap_rctl_rgui = true; + break; + case OS_IOS: //iOS + oled_set_cursor(col,line); + oled_write(logo[3][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[3][1], false); + keymap_config.swap_lctl_lgui = true; + keymap_config.swap_rctl_rgui = true; + break; + default: //OS_UNSURE or not configured + oled_set_cursor(col,line); + oled_write(logo[4][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[4][1], false); + break; + } + rerender_platform = false; + } + + bool oled_task_user(void) { + render_key_status_or_logo(); + oled_set_cursor(8,2); + render_current_layer(); + #ifdef DYNAMIC_MACRO_ENABLE + render_dynamic_macro_status(18,2); + #endif + oled_set_cursor(8,3); + render_current_wpm(); + #ifdef OS_DETECTION_ENABLE + if(current_platform != detected_host_os() || rerender_platform) { render_platform_status(3,0); } + #endif + + return false; + } + +#endif diff --git a/keyboards/nachie/littlewritter/keymaps/vial/readme.md b/keyboards/nachie/littlewritter/keymaps/vial/readme.md new file mode 100644 index 0000000000..a0f0ba8669 --- /dev/null +++ b/keyboards/nachie/littlewritter/keymaps/vial/readme.md @@ -0,0 +1 @@ +The vial keymap for the Little Writter PCB. \ No newline at end of file diff --git a/keyboards/nachie/littlewritter/keymaps/vial/rules.mk b/keyboards/nachie/littlewritter/keymaps/vial/rules.mk new file mode 100644 index 0000000000..9f6eb0c0b1 --- /dev/null +++ b/keyboards/nachie/littlewritter/keymaps/vial/rules.mk @@ -0,0 +1,10 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes + +VIALRGB_ENABLE = yes +ENCODER_MAP_ENABLE = yes +BOOTMAGIC_ENABLE = yes +MAGIC_ENABLE = yes +OS_DETECTION_ENABLE = yes +DYNAMIC_MACRO_ENABLE = yes +CAPS_WORD_ENABLE = yes diff --git a/keyboards/nachie/littlewritter/keymaps/vial/vial.json b/keyboards/nachie/littlewritter/keymaps/vial/vial.json new file mode 100644 index 0000000000..a4c716e148 --- /dev/null +++ b/keyboards/nachie/littlewritter/keymaps/vial/vial.json @@ -0,0 +1,433 @@ +{ + "name": "LittleWritter", + "vendorId": "0x4B43", + "productId": "0x5358", + "customKeycodes": [ + { + "name": "JmpWordL", + "title": "Jump Word Left", + "shortName": "JWRDL" + }, + { + "name": "JmpWordR", + "title": "Jump Word Right", + "shortName": "JWRDR" + }, + { + "name": "SlcWordL", + "title": "Select Word Left", + "shortName": "SWRDL" + }, + { + "name": "SlcWordR", + "title": "Select Word Right", + "shortName": "SWRDR" + }, + { + "name": "TabLft", + "title": "Tab Left", + "shortName": "TABL" + }, + { + "name": "TabRght", + "title": "Tab Right", + "shortName": "TABR" + }, + { + "name": "DsktpLft", + "title": "Desktop Left", + "shortName": "DSKTPL" + }, + { + "name": "DsktpRght", + "title": "Desktop Right", + "shortName": "DSKTPR" + }, + { + "name": "PrevApp", + "title": "Previous App", + "shortName": "PRVAPP" + }, + { + "name": "NextApp", + "title": "Next App", + "shortName": "NXTAPP" + } + ], + "matrix": { "rows": 11, "cols": 10 }, + "lighting": "vialrgb", + "layouts": { + "labels":[ + [ + "Right Shift", + "Split Shift Fn", + "Split Fn Shift", + "No Split" + ], + [ + "Bottom Row", + "3U Centered", + "6U Big Bar", + "3U/3U", + "2U/2U", + "1.75U/1.75U", + "7U Big Bar", + "3U/1U/3U", + "2.75U ALPS", + "3U/ENC/3U" + ], + "Macro Row" + ], + "keymap": [ + [ + { + "y": 2.5, + "x": 13.5 + }, + "10,5" + ], + [ + { + "x": 12.5 + }, + "10,6", + { + "x": 1 + }, + "10,7\nBreak" + ], + [ + { + "y": -0.25, + "x": 2 + }, + "8,5", + "9,5", + { + "x": 1.25 + }, + "8,6", + "9,6", + "8,7", + { + "x": 1 + }, + "9,7", + "8,8" + ], + [ + { + "y": -0.75, + "x": 13.5 + }, + "10,8" + ], + [ + { + "x": 1 + }, + "0,0\n\n\n\n\n\n\n\n\ne", + { + "x": 11 + }, + "1,0\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "y": -0.5, + "x": 2 + }, + "0,0", + "1,0", + "0,1", + "1,1", + "0,2", + "1,2", + "0,3", + "1,3", + "0,4", + "1,4", + "7,4", + { + "x": 1.5 + }, + "9,8" + ], + [ + { + "y": -0.5, + "x": 1 + }, + "0,1\n\n\n\n\n\n\n\n\ne", + { + "x": 11 + }, + "1,1\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "y": -0.5, + "x": 2, + "c": "#aaaaaa", + "w": 1.25 + }, + "2,0", + { + "c": "#cccccc" + }, + "3,0", + "2,1", + "3,1", + "2,2", + "3,2", + "2,3", + "3,3", + "2,4", + { + "c": "#777777", + "w": 1.75 + }, + "3,4", + { + "x": 1.5, + "c": "#cccccc" + }, + "8,9" + ], + [ + { + "x": 2, + "c": "#aaaaaa", + "w": 1.75 + }, + "4,0", + { + "c": "#cccccc" + }, + "5,0", + "4,1", + "5,1", + "4,2", + "5,2", + "4,3", + "5,3", + { + "c": "#aaaaaa", + "w": 1.25 + }, + "4,4\n\n\n0,0", + { + "c": "#cccccc" + }, + "5,4\n\n\n0,0", + { + "x": 1.5 + }, + "9,9" + ], + [ + { + "x": 2, + "c": "#aaaaaa", + "w": 1.5 + }, + "6,0\n\n\n1,0", + "7,0\n\n\n1,0", + { + "w": 1.5 + }, + "6,1\n\n\n1,0", + { + "w": 3 + }, + "7,2\n\n\n1,0", + { + "w": 1.5 + }, + "6,3\n\n\n1,0", + "7,3\n\n\n1,0", + { + "w": 1.5 + }, + "6,4\n\n\n1,0" + ], + [ + { + "x": 6.5, + "c": "#cccccc" + }, + "2,0\n\n\n\n\n\n\n\n\ne", + "2,1\n\n\n\n\n\n\n\n\ne", + { + "x": 2.25 + }, + "4,4\n\n\n0,1", + { + "c": "#aaaaaa", + "w": 1.25 + }, + "5,4\n\n\n0,1" + ], + [ + { + "x": 10.75, + "w": 2.25 + }, + "4,4\n\n\n0,2" + ], + [ + { + "y": 0.25, + "x": 2, + "w": 1.5 + }, + "6,0\n\n\n1,1", + "7,0\n\n\n1,1", + { + "w": 6 + }, + "7,2\n\n\n1,1", + "7,3\n\n\n1,1", + { + "w": 1.5 + }, + "6,4\n\n\n1,1" + ], + [ + { + "x": 2, + "w": 1.5 + }, + "6,0\n\n\n1,2", + "7,0\n\n\n1,2", + { + "w": 3 + }, + "7,1\n\n\n1,2", + { + "w": 3 + }, + "7,2\n\n\n1,2", + "7,3\n\n\n1,2", + { + "w": 1.5 + }, + "6,4\n\n\n1,2" + ], + [ + { + "x": 2, + "w": 1.5 + }, + "6,0\n\n\n1,3", + "7,0\n\n\n1,3", + "6,1\n\n\n1,3", + { + "w": 2 + }, + "7,1\n\n\n1,3", + { + "w": 2 + }, + "7,2\n\n\n1,3", + "6,3\n\n\n1,3", + "7,3\n\n\n1,3", + { + "w": 1.5 + }, + "6,4\n\n\n1,3" + ], + [ + { + "x": 2, + "w": 1.5 + }, + "6,0\n\n\n1,4", + "7,0\n\n\n1,4", + { + "w": 1.25 + }, + "6,1\n\n\n1,4", + { + "w": 1.75 + }, + "7,1\n\n\n1,4", + { + "w": 1.75 + }, + "7,2\n\n\n1,4", + { + "w": 1.25 + }, + "6,3\n\n\n1,4", + "7,3\n\n\n1,4", + { + "w": 1.5 + }, + "6,4\n\n\n1,4" + ], + [ + { + "x": 2 + }, + "6,0\n\n\n1,5", + "7,0\n\n\n1,5", + { + "w": 7 + }, + "7,2\n\n\n1,5", + "7,3\n\n\n1,5", + "6,4\n\n\n1,5" + ], + [ + { + "x": 2 + }, + "6,0\n\n\n1,6", + "7,0\n\n\n1,6", + { + "w": 3 + }, + "6,1\n\n\n1,6", + "7,2\n\n\n1,6", + { + "w": 3 + }, + "6,3\n\n\n1,6", + "7,3\n\n\n1,6", + "6,4\n\n\n1,6" + ], + [ + { + "x": 2, + "w": 1.25 + }, + "6,0\n\n\n1,7", + { + "w": 1.5 + }, + "7,0\n\n\n1,7", + { + "w": 1.25 + }, + "6,1\n\n\n1,7", + { + "w": 2.75 + }, + "7,2\n\n\n1,7", + { + "w": 1.25 + }, + "6,3\n\n\n1,7", + { + "w": 1.5 + }, + "7,3\n\n\n1,7", + { + "w": 1.5 + }, + "6,4\n\n\n1,7" + ] + ] + } +} diff --git a/keyboards/nachie/littlewritter/littlewritter.c b/keyboards/nachie/littlewritter/littlewritter.c new file mode 100755 index 0000000000..9784354c9d --- /dev/null +++ b/keyboards/nachie/littlewritter/littlewritter.c @@ -0,0 +1,89 @@ +/* +Copyright 2024 Nachie + +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" + + +led_config_t g_led_config = { { + { NO_LED, 6, 5, 4, NO_LED, 3, 2, 1, 0, NO_LED }, + { NO_LED, 6, 5, 4, NO_LED, 3, 2, 1, 0, NO_LED }, + { 7, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 15 }, + { 8, 9, 10, 11, 12, NO_LED, 13, 14, NO_LED, NO_LED}, + { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED } +}, { + { 183,0 }, { 162,0 }, { 142,0 }, { 122,0 }, { 81,0 }, { 61,0 }, { 40,0 }, + { 20,16 }, { 40,48 }, + { 61,48 }, { 81,48 }, { 101,48 }, { 122,48 }, { 162,48 }, { 203,48 }, { 244,16 } +}, { + 1, 1, 1, 1, 1, 1, 1, + 1, 1, + 1, 1, 1, 1, 1, 1, 1 +} }; + +#ifdef OLED_ENABLE + +static void render_logo(void) { + static const char PROGMEM my_logo[] = { + // 'Screenshot 2023-07-21 at 1', 128x32px +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xfe, 0x00, 0x03, 0xc0, 0x00, 0xc0, 0x00, 0x3c, 0x00, 0x0f, 0x1f, 0xf8, 0xe0, 0x00, 0x1f, 0xff, +0xff, 0x80, 0x01, 0xc0, 0x00, 0x40, 0x00, 0x38, 0x00, 0x07, 0x1f, 0xf8, 0xe0, 0x00, 0x1f, 0xff, +0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x0f, 0xff, +0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x8f, 0xff, +0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x0f, 0xff, +0xfe, 0x1f, 0xf1, 0xc0, 0x03, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xc0, 0x1f, 0xff, +0xfe, 0x1f, 0xf1, 0xc0, 0x03, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xe0, 0x3f, 0xff, +0xfe, 0x1f, 0xf1, 0xc3, 0xff, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xf0, 0xff, 0xff, +0xfe, 0x1f, 0xf1, 0xc3, 0xff, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xf8, 0x7f, 0xff, +0xfe, 0x1f, 0xf1, 0xc3, 0xff, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xf8, 0x7f, 0xff, +0xfe, 0x00, 0x01, 0xc0, 0x00, 0x7f, 0x8f, 0xf8, 0x00, 0x07, 0x00, 0x00, 0xe1, 0xfc, 0x3f, 0xff, +0xfe, 0x00, 0x03, 0xc0, 0x00, 0xff, 0x8f, 0xfc, 0x00, 0x0f, 0x80, 0x01, 0xe1, 0xfe, 0x1f, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff +}; + oled_write_raw_P(my_logo, sizeof(my_logo)); +} + +bool oled_task_kb(void) { + // Defer to the keymap if they want to override + + if(!oled_task_user()) { + return false; + } + + // default keyboard drawing code + render_logo(); + return false; +} + +#endif \ No newline at end of file diff --git a/keyboards/nachie/littlewritter/mcuconf.h b/keyboards/nachie/littlewritter/mcuconf.h new file mode 100644 index 0000000000..ed18e34905 --- /dev/null +++ b/keyboards/nachie/littlewritter/mcuconf.h @@ -0,0 +1,3 @@ +#pragma once + +#include_next diff --git a/keyboards/nachie/littlewritter/readme.md b/keyboards/nachie/littlewritter/readme.md new file mode 100644 index 0000000000..719ba4e63b --- /dev/null +++ b/keyboards/nachie/littlewritter/readme.md @@ -0,0 +1,23 @@ +# LittleWritter + +Firmware for the LittleWritter + +* Keyboard Maintainer: [Nachie](https://github.com/nachie) +* Hardware Supported: LittleWritter +* Hardware Availability: [Little Craftery](https://littlecraftery.com/products/littlewritter) + +Make example for this keyboard (after setting up your build environment): + + make nachie/littlewritter:default + +Or to make and flash: + + make nachie/littlewritter:default:flash + + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +* **Bootmagic reset**: Hold down ESC key (top left) and plug in the keyboard +* **Physical reset button**: Briefly press the button labeled "SW_RST1" on the back of the PCB diff --git a/keyboards/nachie/littlewritter/rules.mk b/keyboards/nachie/littlewritter/rules.mk new file mode 100755 index 0000000000..2c49b41d7a --- /dev/null +++ b/keyboards/nachie/littlewritter/rules.mk @@ -0,0 +1 @@ +# This file is intentionally left blank \ No newline at end of file diff --git a/keyboards/nachie/rnd60/config.h b/keyboards/nachie/rnd60/config.h new file mode 100644 index 0000000000..2451782afd --- /dev/null +++ b/keyboards/nachie/rnd60/config.h @@ -0,0 +1,29 @@ +/* +Copyright 2024 nachie + +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 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* number of backlight levels */ + +#define VIA_CUSTOM_LIGHTING_ENABLE + +#define LED_CAPS_LOCK_PIN GP17 +#define LED_KANA_PIN GP26 +#define LED_PIN_ON_STATE 1 diff --git a/keyboards/nachie/rnd60/info.json b/keyboards/nachie/rnd60/info.json new file mode 100644 index 0000000000..9664025c5b --- /dev/null +++ b/keyboards/nachie/rnd60/info.json @@ -0,0 +1,155 @@ +{ + "keyboard_name": "RND60", + "manufacturer": "Nachie", + "board": "GENERIC_RP_RP2040", + "bootloader": "rp2040", + "processor": "RP2040", + "usb": { + "vid": "0x4B43", + "pid": "0x5336", + "device_version": "1.0.0" + }, + "url": "https://rndkbd.com", + "maintainer": "nachie", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "audio": false, + "backlight": false, + "rgblight": false, + "encoder": false, + "rgb_matrix": true + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["GP21", "GP5", "GP4", "GP3", "GP2", "GP1", "GP0", "GP15", "GP14", "GP13", "GP12", "GP11", "GP10", "GP8", "GP9"], + "rows": ["GP28", "GP27", "GP20", "GP6", "GP7"] + }, + "ws2812": { + "pin": "GP29", + "driver": "vendor" + }, + "rgb_matrix": { + "driver": "ws2812", + "led_count": 16, + "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, + "rainbow_moving_chevron":true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "cycle_pinwheel": true, + "cycle_spiral": true, + "rainbow_pinwheels": true, + "raindrops": true, + "jellybean_raindrops": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": 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, + "solid_splash": true, + "solid_multisplash": true, + "pixel_rain": true, + "pixel_fractal": true + } + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"y": 0, "x": 0, "matrix": [0, 0], "label": "0,0"}, + {"y": 0, "x": 1, "matrix": [0, 1], "label": "0,1"}, + {"y": 0, "x": 2, "matrix": [0, 2], "label": "0,2"}, + {"y": 0, "x": 3, "matrix": [0, 3], "label": "0,3"}, + {"y": 0, "x": 4, "matrix": [0, 4], "label": "0,4"}, + {"y": 0, "x": 5, "matrix": [0, 5], "label": "0,5"}, + {"y": 0, "x": 6, "matrix": [0, 6], "label": "0,6"}, + {"y": 0, "x": 7, "matrix": [0, 7], "label": "0,7"}, + {"y": 0, "x": 8, "matrix": [0, 8], "label": "0,8"}, + {"y": 0, "x": 9, "matrix": [0, 9], "label": "0,9"}, + {"y": 0, "x": 10, "matrix": [0, 10], "label": "0,10"}, + {"y": 0, "x": 11, "matrix": [0, 11], "label": "0,11"}, + {"y": 0, "x": 12, "matrix": [0, 12], "label": "0,12"}, + {"y": 0, "x": 13, "matrix": [0, 13], "label": "0,13"}, + {"y": 0, "x": 14, "matrix": [0, 14], "label": "0,14"}, + {"y": 1, "x": 0, "matrix": [1, 0], "w": 1.5, "label": "1,0"}, + {"y": 1, "x": 1.5, "matrix": [1, 1], "label": "1,1"}, + {"y": 1, "x": 2.5, "matrix": [1, 2], "label": "1,2"}, + {"y": 1, "x": 3.5, "matrix": [1, 3], "label": "1,3"}, + {"y": 1, "x": 4.5, "matrix": [1, 4], "label": "1,4"}, + {"y": 1, "x": 5.5, "matrix": [1, 5], "label": "1,5"}, + {"y": 1, "x": 6.5, "matrix": [1, 6], "label": "1,6"}, + {"y": 1, "x": 7.5, "matrix": [1, 7], "label": "1,7"}, + {"y": 1, "x": 8.5, "matrix": [1, 8], "label": "1,8"}, + {"y": 1, "x": 9.5, "matrix": [1, 9], "label": "1,9"}, + {"y": 1, "x": 10.5, "matrix": [1, 10], "label": "1,10"}, + {"y": 1, "x": 11.5, "matrix": [1, 11], "label": "1,11"}, + {"y": 1, "x": 12.5, "matrix": [1, 12], "label": "1,12"}, + {"y": 1, "x": 13.5, "matrix": [1, 14], "w": 1.5, "label": "1,14"}, + {"y": 2, "x": 0, "matrix": [2, 0], "w": 1.75, "label": "2,0"}, + {"y": 2, "x": 1.75, "matrix": [2, 1], "label": "2,1"}, + {"y": 2, "x": 2.75, "matrix": [2, 2], "label": "2,2"}, + {"y": 2, "x": 3.75, "matrix": [2, 3], "label": "2,3"}, + {"y": 2, "x": 4.75, "matrix": [2, 4], "label": "2,4"}, + {"y": 2, "x": 5.75, "matrix": [2, 5], "label": "2,5"}, + {"y": 2, "x": 6.75, "matrix": [2, 6], "label": "2,6"}, + {"y": 2, "x": 7.75, "matrix": [2, 7], "label": "2,7"}, + {"y": 2, "x": 8.75, "matrix": [2, 8], "label": "2,8"}, + {"y": 2, "x": 9.75, "matrix": [2, 9], "label": "2,9"}, + {"y": 2, "x": 10.75, "matrix": [2, 10], "label": "2,10"}, + {"y": 2, "x": 11.75, "matrix": [2, 11], "label": "2,11"}, + {"y": 2, "x": 12.75, "matrix": [2, 12], "label": "2,12"}, + {"y": 2, "x": 12.75, "matrix": [2, 13], "w": 2.25, "label": "2,13"}, + {"y": 3, "x": 0, "matrix": [3, 0], "w": 1.25, "label": "3,0"}, + {"y": 3, "x": 1.25, "matrix": [3, 1], "label": "3,1"}, + {"y": 3, "x": 2.25, "matrix": [3, 2], "label": "3,2"}, + {"y": 3, "x": 3.25, "matrix": [3, 3], "label": "3,3"}, + {"y": 3, "x": 4.25, "matrix": [3, 4], "label": "3,4"}, + {"y": 3, "x": 5.25, "matrix": [3, 5], "label": "3,5"}, + {"y": 3, "x": 6.25, "matrix": [3, 6], "label": "3,6"}, + {"y": 3, "x": 7.25, "matrix": [3, 7], "label": "3,7"}, + {"y": 3, "x": 8.25, "matrix": [3, 8], "label": "3,8"}, + {"y": 3, "x": 9.25, "matrix": [3, 9], "label": "3,9"}, + {"y": 3, "x": 10.25, "matrix": [3, 10], "label": "3,10"}, + {"y": 3, "x": 11.25, "matrix": [3, 11], "label": "3,11"}, + {"y": 3, "x": 12.25, "matrix": [3, 12], "w": 1.75, "label": "3,12"}, + {"y": 3, "x": 14, "matrix": [3, 14], "label": "3,14"}, + {"y": 4, "x": 0, "matrix": [4, 0], "w": 1.25, "label": "4,0"}, + {"y": 4, "x": 1.25, "matrix": [4, 1], "w": 1.25, "label": "4,1"}, + {"y": 4, "x": 2.5, "matrix": [4, 2], "w": 1.25, "label": "4,2"}, + {"y": 4, "x": 4, "matrix": [4, 4], "label": "4,4"}, + {"y": 4, "x": 5, "matrix": [4, 5], "w": 2.25, "label": "4,5"}, + {"y": 4, "x": 7, "matrix": [4, 7], "label": "4,7"}, + {"y": 4, "x": 8, "matrix": [4, 9], "w": 3, "label": "4,9"}, + {"y": 4, "x": 10, "matrix": [4, 10], "w": 1.25, "label": "4,10"}, + {"y": 4, "x": 11.25, "matrix": [4, 11], "w": 1.25, "label": "4,11"}, + {"y": 4, "x": 12.5, "matrix": [4, 12], "w": 1.25, "label": "4,12"}, + {"y": 4, "x": 13.75, "matrix": [4, 14], "w": 1.25, "label": "4,14"} + ] + } + } + } diff --git a/keyboards/nachie/rnd60/keyboard.json b/keyboards/nachie/rnd60/keyboard.json new file mode 100644 index 0000000000..6e63a2d125 --- /dev/null +++ b/keyboards/nachie/rnd60/keyboard.json @@ -0,0 +1,155 @@ +{ + "keyboard_name": "RND60", + "manufacturer": "Nachie", + "board": "GENERIC_RP_RP2040", + "bootloader": "rp2040", + "processor": "RP2040", + "usb": { + "vid": "0x4B43", + "pid": "0x5336", + "device_version": "1.0.0" + }, + "url": "https://rndkbd.com", + "maintainer": "nachie", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "audio": false, + "backlight": false, + "rgblight": false, + "encoder": false, + "rgb_matrix": true + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["GP21", "GP5", "GP4", "GP3", "GP2", "GP1", "GP0", "GP15", "GP14", "GP13", "GP12", "GP11", "GP10", "GP8", "GP9"], + "rows": ["GP28", "GP27", "GP20", "GP6", "GP7"] + }, + "ws2812": { + "pin": "GP29", + "driver": "vendor" + }, + "rgb_matrix": { + "driver": "ws2812", + "led_count": 16, + "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, + "rainbow_moving_chevron":true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "cycle_pinwheel": true, + "cycle_spiral": true, + "rainbow_pinwheels": true, + "raindrops": true, + "jellybean_raindrops": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": 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, + "solid_splash": true, + "solid_multisplash": true, + "pixel_rain": true, + "pixel_fractal": true + } + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"y": 0, "x": 0, "matrix": [0, 0], "label": "0,0"}, + {"y": 0, "x": 1, "matrix": [0, 1], "label": "0,1"}, + {"y": 0, "x": 2, "matrix": [0, 2], "label": "0,2"}, + {"y": 0, "x": 3, "matrix": [0, 3], "label": "0,3"}, + {"y": 0, "x": 4, "matrix": [0, 4], "label": "0,4"}, + {"y": 0, "x": 5, "matrix": [0, 5], "label": "0,5"}, + {"y": 0, "x": 6, "matrix": [0, 6], "label": "0,6"}, + {"y": 0, "x": 7, "matrix": [0, 7], "label": "0,7"}, + {"y": 0, "x": 8, "matrix": [0, 8], "label": "0,8"}, + {"y": 0, "x": 9, "matrix": [0, 9], "label": "0,9"}, + {"y": 0, "x": 10, "matrix": [0, 10], "label": "0,10"}, + {"y": 0, "x": 11, "matrix": [0, 11], "label": "0,11"}, + {"y": 0, "x": 12, "matrix": [0, 12], "label": "0,12"}, + {"y": 0, "x": 13, "matrix": [0, 13], "label": "0,13"}, + {"y": 0, "x": 14, "matrix": [0, 14], "label": "0,14"}, + {"y": 1, "x": 0, "matrix": [1, 0], "w": 1.5, "label": "1,0"}, + {"y": 1, "x": 1.5, "matrix": [1, 1], "label": "1,1"}, + {"y": 1, "x": 2.5, "matrix": [1, 2], "label": "1,2"}, + {"y": 1, "x": 3.5, "matrix": [1, 3], "label": "1,3"}, + {"y": 1, "x": 4.5, "matrix": [1, 4], "label": "1,4"}, + {"y": 1, "x": 5.5, "matrix": [1, 5], "label": "1,5"}, + {"y": 1, "x": 6.5, "matrix": [1, 6], "label": "1,6"}, + {"y": 1, "x": 7.5, "matrix": [1, 7], "label": "1,7"}, + {"y": 1, "x": 8.5, "matrix": [1, 8], "label": "1,8"}, + {"y": 1, "x": 9.5, "matrix": [1, 9], "label": "1,9"}, + {"y": 1, "x": 10.5, "matrix": [1, 10], "label": "1,10"}, + {"y": 1, "x": 11.5, "matrix": [1, 11], "label": "1,11"}, + {"y": 1, "x": 12.5, "matrix": [1, 12], "label": "1,12"}, + {"y": 1, "x": 13.5, "matrix": [1, 14], "w": 1.5, "label": "1,14"}, + {"y": 2, "x": 0, "matrix": [2, 0], "w": 1.75, "label": "2,0"}, + {"y": 2, "x": 1.75, "matrix": [2, 1], "label": "2,1"}, + {"y": 2, "x": 2.75, "matrix": [2, 2], "label": "2,2"}, + {"y": 2, "x": 3.75, "matrix": [2, 3], "label": "2,3"}, + {"y": 2, "x": 4.75, "matrix": [2, 4], "label": "2,4"}, + {"y": 2, "x": 5.75, "matrix": [2, 5], "label": "2,5"}, + {"y": 2, "x": 6.75, "matrix": [2, 6], "label": "2,6"}, + {"y": 2, "x": 7.75, "matrix": [2, 7], "label": "2,7"}, + {"y": 2, "x": 8.75, "matrix": [2, 8], "label": "2,8"}, + {"y": 2, "x": 9.75, "matrix": [2, 9], "label": "2,9"}, + {"y": 2, "x": 10.75, "matrix": [2, 10], "label": "2,10"}, + {"y": 2, "x": 11.75, "matrix": [2, 11], "label": "2,11"}, + {"y": 2, "x": 12.75, "matrix": [2, 12], "label": "2,12"}, + {"y": 2, "x": 12.75, "matrix": [2, 13], "w": 2.25, "label": "2,13"}, + {"y": 3, "x": 0, "matrix": [3, 0], "w": 1.25, "label": "3,0"}, + {"y": 3, "x": 1.25, "matrix": [3, 1], "label": "3,1"}, + {"y": 3, "x": 2.25, "matrix": [3, 2], "label": "3,2"}, + {"y": 3, "x": 3.25, "matrix": [3, 3], "label": "3,3"}, + {"y": 3, "x": 4.25, "matrix": [3, 4], "label": "3,4"}, + {"y": 3, "x": 5.25, "matrix": [3, 5], "label": "3,5"}, + {"y": 3, "x": 6.25, "matrix": [3, 6], "label": "3,6"}, + {"y": 3, "x": 7.25, "matrix": [3, 7], "label": "3,7"}, + {"y": 3, "x": 8.25, "matrix": [3, 8], "label": "3,8"}, + {"y": 3, "x": 9.25, "matrix": [3, 9], "label": "3,9"}, + {"y": 3, "x": 10.25, "matrix": [3, 10], "label": "3,10"}, + {"y": 3, "x": 11.25, "matrix": [3, 11], "label": "3,11"}, + {"y": 3, "x": 12.25, "matrix": [3, 12], "w": 1.75, "label": "3,12"}, + {"y": 3, "x": 14, "matrix": [3, 14], "label": "3,14"}, + {"y": 4, "x": 0, "matrix": [4, 0], "w": 1.25, "label": "4,0"}, + {"y": 4, "x": 1.25, "matrix": [4, 1], "w": 1.25, "label": "4,1"}, + {"y": 4, "x": 2.5, "matrix": [4, 2], "w": 1.25, "label": "4,2"}, + {"y": 4, "x": 4, "matrix": [4, 4], "label": "4,4"}, + {"y": 4, "x": 5, "matrix": [4, 5], "w": 2.25, "label": "4,5"}, + {"y": 4, "x": 7, "matrix": [4, 7], "label": "4,7"}, + {"y": 4, "x": 8, "matrix": [4, 9], "w": 3, "label": "4,9"}, + {"y": 4, "x": 10, "matrix": [4, 10], "w": 1.25, "label": "4,10"}, + {"y": 4, "x": 11.25, "matrix": [4, 11], "w": 1.25, "label": "4,11"}, + {"y": 4, "x": 12.5, "matrix": [4, 12], "w": 1.25, "label": "4,12"}, + {"y": 4, "x": 13.75, "matrix": [4, 14], "w": 1.25, "label": "4,14"} + ] + } + } +} diff --git a/keyboards/nachie/rnd60/keymaps/default/keymap.c b/keyboards/nachie/rnd60/keymaps/default/keymap.c new file mode 100644 index 0000000000..45eac72322 --- /dev/null +++ b/keyboards/nachie/rnd60/keymaps/default/keymap.c @@ -0,0 +1,54 @@ +/* +Copyright 2024 nachie + +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( + 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_EQL, KC_BSPC, 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_LBRC, KC_RBRC, KC_BSLS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUBS, KC_ENT, + KC_LSFT, KC_NUHS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), + KC_LCTL, KC_LGUI, KC_LALT, KC_VOLD, KC_SPC, KC_MPLY, KC_SPC, KC_VOLU, KC_RALT, KC_LGUI, KC_LCTL + ), + + [1] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + [2] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + [3] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) + +}; diff --git a/keyboards/nachie/rnd60/keymaps/vial/config.h b/keyboards/nachie/rnd60/keymaps/vial/config.h new file mode 100644 index 0000000000..181ca38486 --- /dev/null +++ b/keyboards/nachie/rnd60/keymaps/vial/config.h @@ -0,0 +1,9 @@ +#pragma once + +#define VIAL_KEYBOARD_UID {0xEB, 0x02, 0x48, 0xB5, 0x37, 0x0B, 0x55, 0x7B} + +#define VIAL_UNLOCK_COMBO_ROWS { 0, 2 } +#define VIAL_UNLOCK_COMBO_COLS { 0, 13 } + +#define RGB_MATRIX_FRAMEBUFFER_EFFECTS +#define RGB_MATRIX_KEYPRESSES \ No newline at end of file diff --git a/keyboards/nachie/rnd60/keymaps/vial/keymap.c b/keyboards/nachie/rnd60/keymaps/vial/keymap.c new file mode 100644 index 0000000000..c9feda29ac --- /dev/null +++ b/keyboards/nachie/rnd60/keymaps/vial/keymap.c @@ -0,0 +1,54 @@ +/* +Copyright 2024 nachie + +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( + 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_EQL, KC_BSPC, 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_LBRC, KC_RBRC, KC_BSLS, + KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUBS, KC_ENT, + KC_LSFT, KC_NUHS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), + KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_LGUI, KC_APP, KC_LCTL + ), + + [1] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + [2] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ), + + [3] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS + ) + +}; diff --git a/keyboards/nachie/rnd60/keymaps/vial/rules.mk b/keyboards/nachie/rnd60/keymaps/vial/rules.mk new file mode 100644 index 0000000000..d013bc62da --- /dev/null +++ b/keyboards/nachie/rnd60/keymaps/vial/rules.mk @@ -0,0 +1,3 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes +VIALRGB_ENABLE = yes diff --git a/keyboards/nachie/rnd60/keymaps/vial/vial.json b/keyboards/nachie/rnd60/keymaps/vial/vial.json new file mode 100644 index 0000000000..7fa02bd148 --- /dev/null +++ b/keyboards/nachie/rnd60/keymaps/vial/vial.json @@ -0,0 +1,346 @@ +{ + "name": "RND60", + "vendorId": "0x4B43", + "productId": "0x5345", + "lighting": "vialrgb", + "matrix": { + "rows": 5, + "cols": 15 + }, + "layouts": { + "labels": [ + "Split Backspace", + ["Enter", "ANSI", "ISO"], + "Split Left Shift", + "Split Right Shift", + ["Space", "6.25u", "3-1-3 Split", "Small Split", "10u", "7u"] + ], + "keymap": [ + [ + { + "x": 2.5, + "c": "#777777" + }, + "0,0", + { + "c": "#cccccc" + }, + "0,1", + "0,2", + "0,3", + "0,4", + "0,5", + "0,6", + "0,7", + "0,8", + "0,9", + "0,10", + "0,11", + "0,12", + { + "c": "#aaaaaa", + "w": 2 + }, + "0,14\n\n\n0,0", + { + "x": 1 + }, + "0,13\n\n\n0,1", + "0,14\n\n\n0,1" + ], + [ + { + "x": 2.5, + "w": 1.5 + }, + "1,0", + { + "c": "#cccccc" + }, + "1,1", + "1,2", + "1,3", + "1,4", + "1,5", + "1,6", + "1,7", + "1,8", + "1,9", + "1,10", + "1,11", + "1,12", + { + "c": "#aaaaaa", + "w": 1.5 + }, + "1,14\n\n\n1,0", + { + "x": 1.75, + "c": "#777777", + "w": 1.25, + "h": 2, + "w2": 1.5, + "h2": 1, + "x2": -0.25 + }, + "2,13\n\n\n1,1" + ], + [ + { + "x": 2.5, + "c": "#aaaaaa", + "w": 1.75 + }, + "2,0", + { + "c": "#cccccc" + }, + "2,1", + "2,2", + "2,3", + "2,4", + "2,5", + "2,6", + "2,7", + "2,8", + "2,9", + "2,10", + "2,11", + { + "c": "#777777", + "w": 2.25 + }, + "2,13\n\n\n1,0", + { + "x": 0.75, + "c": "#cccccc" + }, + "2,12\n\n\n1,1" + ], + [ + { + "c": "#aaaaaa", + "w": 1.25 + }, + "3,0\n\n\n2,1", + "3,1\n\n\n2,1", + { + "x": 0.25, + "w": 2.25 + }, + "3,0\n\n\n2,0", + { + "c": "#cccccc" + }, + "3,2", + "3,3", + "3,4", + "3,5", + "3,6", + "3,7", + "3,8", + "3,9", + "3,10", + "3,11", + { + "c": "#aaaaaa", + "w": 2.75 + }, + "3,12\n\n\n3,0", + { + "x": 0.25, + "w": 1.75 + }, + "3,12\n\n\n3,1", + "3,14\n\n\n3,1" + ], + [ + { + "x": 2.5, + "w": 1.25 + }, + "4,0\n\n\n4,0", + { + "x": -1.25, + "w": 1.5 + }, + "4,0\n\n\n4,4", + { + "x": -1.5, + "w": 1.5 + }, + "4,0\n\n\n4,1", + { + "x": -1.5, + "w": 1.5 + }, + "4,0\n\n\n4,2", + { + "x": -1.5, + "w": 1.5 + }, + "4,0\n\n\n4,3", + { + "x": -0.25, + "w": 1.25 + }, + "4,1\n\n\n4,0", + { + "x": -1 + }, + "4,1\n\n\n4,4", + { + "x": -1 + }, + "4,1\n\n\n4,1", + { + "x": -1 + }, + "4,1\n\n\n4,2", + { + "x": -1 + }, + "4,1\n\n\n4,3", + { + "w": 1.25 + }, + "4,2\n\n\n4,0", + { + "x": -1.25, + "w": 1.5 + }, + "4,2\n\n\n4,4", + { + "x": -1.5, + "w": 1.5 + }, + "4,2\n\n\n4,1", + { + "x": -1.5, + "w": 1.5 + }, + "4,2\n\n\n4,2", + { + "x": -1.5, + "c": "#cccccc", + "w": 10 + }, + "4,7\n\n\n4,3", + { + "x": -8.75, + "w": 6.25 + }, + "4,7\n\n\n4,0", + { + "x": -6, + "w": 7 + }, + "4,7\n\n\n4,4", + { + "x": -7, + "w": 3 + }, + "4,5\n\n\n4,1", + { + "x": -3, + "c": "#aaaaaa" + }, + "4,4\n\n\n4,2", + { + "c": "#cccccc", + "w": 2.25 + }, + "4,5\n\n\n4,2", + { + "x": -0.25, + "c": "#aaaaaa" + }, + "4,7\n\n\n4,1", + { + "x": -0.75, + "c": "#cccccc", + "w": 2.75 + }, + "4,9\n\n\n4,2", + { + "x": -2, + "w": 3 + }, + "4,9\n\n\n4,1", + { + "x": -1, + "c": "#aaaaaa", + "w": 1.25 + }, + "4,10\n\n\n4,0", + { + "x": -1.25 + }, + "4,10\n\n\n4,2", + { + "w": 1.5 + }, + "4,11\n\n\n4,4", + { + "x": -1.5, + "w": 1.5 + }, + "4,11\n\n\n4,1", + { + "x": -1.5, + "w": 1.5 + }, + "4,11\n\n\n4,2", + { + "x": -1.25, + "w": 1.25 + }, + "4,11\n\n\n4,0", + { + "w": 1.25 + }, + "4,12\n\n\n4,0", + { + "x": -1.25 + }, + "4,12\n\n\n4,4", + { + "x": -1 + }, + "4,12\n\n\n4,1", + { + "x": -1 + }, + "4,12\n\n\n4,2", + { + "x": -1 + }, + "4,12\n\n\n4,3", + { + "w": 1.5 + }, + "4,14\n\n\n4,4", + { + "x": -1.5, + "w": 1.5 + }, + "4,14\n\n\n4,1", + { + "x": -1.5, + "w": 1.5 + }, + "4,14\n\n\n4,2", + { + "x": -1.5, + "w": 1.5 + }, + "4,14\n\n\n4,3", + { + "x": -1.25, + "w": 1.25 + }, + "4,14\n\n\n4,0" + ] + ] + } +} \ No newline at end of file diff --git a/keyboards/nachie/rnd60/rnd60.c b/keyboards/nachie/rnd60/rnd60.c new file mode 100644 index 0000000000..3d117420fc --- /dev/null +++ b/keyboards/nachie/rnd60/rnd60.c @@ -0,0 +1,38 @@ +/* +Copyright 2024 nachie + +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" + +led_config_t g_led_config = { { + { NO_LED, 0, NO_LED, 1, NO_LED, 2, NO_LED, NO_LED, 3, NO_LED, 4, NO_LED, 5, NO_LED, NO_LED }, + { 6, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 7 }, + { 8, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED }, + { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 9 }, + { NO_LED, NO_LED, 10, NO_LED, 11, 12, NO_LED, NO_LED, 13, 14, NO_LED, 15, NO_LED, NO_LED, NO_LED } +}, { + { 16,0 }, { 49,0 }, { 81,0 }, { 130,0 }, { 163,0 }, { 195,0 }, + { 4,16 }, { 224,16 }, + { 6,32 }, + { 224,48 }, + { 16,64 }, { 51,64 }, { 79,64 }, { 120,64 }, { 153,64 }, { 204,64 } +}, { + 1, 1, 1, 1, 1, 1, + 1, 1, + 1, + 1, + 1, 1, 1, 1, 1, 1 +} }; \ No newline at end of file diff --git a/keyboards/nachie/rnd60/rules.mk b/keyboards/nachie/rnd60/rules.mk new file mode 100644 index 0000000000..837f4bffb5 --- /dev/null +++ b/keyboards/nachie/rnd60/rules.mk @@ -0,0 +1 @@ +# This file is intentionally left blank diff --git a/keyboards/nachie/subtext/chconf.h b/keyboards/nachie/subtext/chconf.h new file mode 100644 index 0000000000..f58ef8c02a --- /dev/null +++ b/keyboards/nachie/subtext/chconf.h @@ -0,0 +1,26 @@ +/* +Copyright 2024 Nachie + +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 CH_CFG_ST_FREQUENCY 10000 + +#define CH_CFG_OPTIMIZE_SPEED FALSE + +#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE + +#include_next diff --git a/keyboards/nachie/subtext/config.h b/keyboards/nachie/subtext/config.h new file mode 100644 index 0000000000..579b7833ba --- /dev/null +++ b/keyboards/nachie/subtext/config.h @@ -0,0 +1,46 @@ +/* +Copyright 2024 nachie + +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 + +#ifdef OLED_ENABLE +/* Oled config */ +#define OLED_DISPLAY_ADDRESS 0x3C +#define I2C1_SCL_PIN B6 +#define I2C1_SDA_PIN B7 +#define I2C1_SCL_PAL_MODE 1 +#define I2C1_SDA_PAL_MODE 1 + +#define OLED_TIMEOUT 60000 // Turns off the OLED screen after x ms of keyboard inactivity. Helps reduce OLED Burn-in. Set to 0 to disable. +#define OLED_BRIGHTNESS 50 // The default brightness level of the OLED, from 0 to 255. +#define OLED_UPDATE_INTERVAL 16 // limits in milliseconds how frequently the OLED updates. Calculation 1000/fps (increases keyboard responsiveness) + +#endif + +/* I2c Timings at 48mhz - Fast mode 400KHz */ +// #define I2C1_TIMINGR_PRESC 2U +// #define I2C1_TIMINGR_SCLDEL 1U +// #define I2C1_TIMINGR_SDADEL 0U +// #define I2C1_TIMINGR_SCLH 9U +// #define I2C1_TIMINGR_SCLL 26U + +/* I2c Timings at 48mhz - Fast mode plus 1MHz */ +#define I2C1_TIMINGR_PRESC 0x00U +#define I2C1_TIMINGR_SCLDEL 0x03U +#define I2C1_TIMINGR_SDADEL 0x01U +#define I2C1_TIMINGR_SCLH 0x03U +#define I2C1_TIMINGR_SCLL 0x09U diff --git a/keyboards/nachie/subtext/halconf.h b/keyboards/nachie/subtext/halconf.h new file mode 100644 index 0000000000..b80587a2f9 --- /dev/null +++ b/keyboards/nachie/subtext/halconf.h @@ -0,0 +1,22 @@ +/* +Copyright 2024 nachie + +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/nachie/subtext/info.json b/keyboards/nachie/subtext/info.json new file mode 100644 index 0000000000..1ad2beadaf --- /dev/null +++ b/keyboards/nachie/subtext/info.json @@ -0,0 +1,83 @@ +{ + "keyboard_name": "Subtext", + "manufacturer": "Nachie", + "usb": { + "vid": "0x4B43", + "pid": "0x5354", + "device_version": "1.0.0" + }, + "url": "https://littlecraftery.com/products/subtext", + "maintainer": "nachie", + "bootloader": "stm32-dfu", + "processor": "STM32F072", + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "h": 0.75, "label": "0,0", "w": 1.0357, "y": 0.0, "x": 0}, + {"matrix": [1, 0], "h": 0.75, "label": "1,0", "w": 1.0357, "y": 0.0, "x": 1.03}, + {"matrix": [0, 1], "h": 0.75, "label": "0,1", "w": 1.0357, "y": 0.0, "x": 2.0700000000000003}, + {"matrix": [1, 1], "h": 0.75, "label": "1,1", "w": 1.0357, "y": 0.0, "x": 3.1}, + {"matrix": [0, 3], "h": 0.75, "label": "0,3", "w": 1.0357, "y": 0.0, "x": 6.46}, + {"matrix": [1, 3], "h": 0.75, "label": "1,3", "w": 1.0357, "y": 0.0, "x": 7.5}, + {"matrix": [0, 4], "h": 0.75, "label": "0,4", "w": 1.0357, "y": 0.0, "x": 8.530000000000001}, + {"matrix": [1, 4], "h": 0.75, "label": "1,4", "w": 1.0357, "y": 0.0, "x": 9.57}, + {"matrix": [2, 0], "h": 0.75, "label": "2,0", "w": 1.0357, "y": 1.0, "x": 0}, + {"matrix": [3, 0], "h": 0.75, "label": "3,0", "w": 1.0357, "y": 1.0, "x": 1.03}, + {"matrix": [2, 1], "h": 0.75, "label": "2,1", "w": 1.0357, "y": 1.0, "x": 2.0700000000000003}, + {"matrix": [3, 1], "h": 0.75, "label": "3,1", "w": 1.0357, "y": 1.0, "x": 3.1}, + {"matrix": [2, 2], "h": 0.75, "label": "2,2", "w": 1.0357, "y": 1.0, "x": 4.140000000000001}, + {"matrix": [3, 2], "h": 0.75, "label": "3,2", "w": 1.0357, "y": 1.0, "x": 5.180000000000001}, + {"matrix": [2, 3], "h": 0.75, "label": "2,3", "w": 1.0357, "y": 1.0, "x": 6.21}, + {"matrix": [3, 3], "h": 0.75, "label": "3,3", "w": 1.0357, "y": 1.0, "x": 7.250000000000001}, + {"matrix": [2, 4], "h": 0.75, "label": "2,4", "w": 1.0357, "y": 1.0, "x": 8.280000000000001}, + {"matrix": [3, 4], "h": 0.75, "label": "3,4", "w": 1.0357, "y": 1.0, "x": 9.32}, + {"matrix": [4, 0], "h": 0.75, "label": "4,0", "w": 1.0357, "y": 1.75, "x": 0.25}, + {"matrix": [5, 0], "h": 0.75, "label": "5,0", "w": 1.0357, "y": 1.75, "x": 1.28}, + {"matrix": [4, 1], "h": 0.75, "label": "4,1", "w": 1.0357, "y": 1.75, "x": 2.3200000000000003}, + {"matrix": [5, 1], "h": 0.75, "label": "5,1", "w": 1.0357, "y": 1.75, "x": 3.35}, + {"matrix": [4, 2], "h": 0.75, "label": "4,2", "w": 1.0357, "y": 1.75, "x": 4.390000000000001}, + {"matrix": [5, 2], "h": 0.75, "label": "5,2", "w": 1.0357, "y": 1.75, "x": 5.430000000000001}, + {"matrix": [4, 3], "h": 0.75, "label": "4,3", "w": 1.0357, "y": 1.75, "x": 6.46}, + {"matrix": [5, 3], "h": 0.75, "label": "5,3", "w": 1.0357, "y": 1.75, "x": 7.500000000000001}, + {"matrix": [4, 4], "h": 0.75, "label": "4,4", "w": 1.0357, "y": 1.75, "x": 8.530000000000001}, + {"matrix": [5, 4], "h": 0.75, "label": "5,4", "w": 1.0357, "y": 1.75, "x": 9.57}, + {"matrix": [7, 0], "h": 0.75, "label": "7,0", "w": 1.0357, "y": 2.5, "x": 0.5}, + {"matrix": [6, 1], "h": 0.75, "label": "6,1", "w": 1.0357, "y": 2.5, "x": 1.53}, + {"matrix": [7, 1], "h": 0.75, "label": "7,1", "w": 1.0357, "y": 2.5, "x": 2.5700000000000003}, + {"matrix": [6, 2], "h": 0.75, "label": "6,2", "w": 1.0357, "y": 2.5, "x": 3.6}, + {"matrix": [7, 2], "h": 0.75, "label": "7,2", "w": 1.0357, "y": 2.5, "x": 4.640000000000001}, + {"matrix": [6, 3], "h": 0.75, "label": "6,3", "w": 1.0357, "y": 2.5, "x": 5.680000000000001}, + {"matrix": [7, 3], "h": 0.75, "label": "7,3", "w": 1.0357, "y": 2.5, "x": 6.71}, + {"matrix": [6, 4], "h": 0.75, "label": "6,4", "w": 1.0357, "y": 2.5, "x": 7.750000000000001}, + {"matrix": [7, 4], "h": 0.75, "label": "7,4", "w": 1.0357, "y": 2.5, "x": 8.780000000000001}, + {"matrix": [8, 0], "h": 0.75, "label": "8,0", "w": 1.0357, "y": 3.25, "x": 1.25}, + {"matrix": [9, 0], "h": 0.75, "label": "9,0", "w": 1.0357, "y": 3.25, "x": 2.2800000000000002}, + {"matrix": [8, 1], "h": 0.75, "label": "8,1", "w": 1.0357, "y": 3.25, "x": 3.3200000000000003}, + {"matrix": [9, 1], "h": 0.75, "label": "9,1", "w": 1.0357, "y": 3.25, "x": 4.3500000000000005}, + {"matrix": [8, 2], "h": 0.75, "label": "8,2", "w": 1.0357, "y": 3.25, "x": 5.390000000000001}, + {"matrix": [9, 2], "h": 0.75, "label": "9,2", "w": 1.0357, "y": 3.25, "x": 6.430000000000001}, + {"matrix": [8, 3], "h": 0.75, "label": "8,3", "w": 1.0357, "y": 3.25, "x": 7.46}, + {"matrix": [9, 3], "h": 0.75, "label": "9,3", "w": 1.0357, "y": 3.25, "x": 8.5} + ] + } + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": false, + "audio": false, + "backlight": false, + "rgblight": false, + "encoder": false, + "oled": true, + "wpm": true + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["A3", "A9", "A8", "B12", "B14"], + "rows": ["A2", "A4", "C13", "B5", "B9", "B3", "B4", "B8", "A15", "A10"] + } +} diff --git a/keyboards/nachie/subtext/keyboard.json b/keyboards/nachie/subtext/keyboard.json new file mode 100644 index 0000000000..2d16dd50b4 --- /dev/null +++ b/keyboards/nachie/subtext/keyboard.json @@ -0,0 +1,83 @@ +{ + "keyboard_name": "Subtext", + "manufacturer": "Nachie", + "usb": { + "vid": "0x4B43", + "pid": "0x5354", + "device_version": "1.0.0" + }, + "url": "https://littlecraftery.com/products/subtext", + "maintainer": "nachie", + "bootloader": "stm32-dfu", + "processor": "STM32F072", + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "h": 0.75, "label": "0,0", "w": 1.0357, "y": 0.0, "x": 0}, + {"matrix": [1, 0], "h": 0.75, "label": "1,0", "w": 1.0357, "y": 0.0, "x": 1.03}, + {"matrix": [0, 1], "h": 0.75, "label": "0,1", "w": 1.0357, "y": 0.0, "x": 2.0700000000000003}, + {"matrix": [1, 1], "h": 0.75, "label": "1,1", "w": 1.0357, "y": 0.0, "x": 3.1}, + {"matrix": [0, 3], "h": 0.75, "label": "0,3", "w": 1.0357, "y": 0.0, "x": 6.46}, + {"matrix": [1, 3], "h": 0.75, "label": "1,3", "w": 1.0357, "y": 0.0, "x": 7.5}, + {"matrix": [0, 4], "h": 0.75, "label": "0,4", "w": 1.0357, "y": 0.0, "x": 8.530000000000001}, + {"matrix": [1, 4], "h": 0.75, "label": "1,4", "w": 1.0357, "y": 0.0, "x": 9.57}, + {"matrix": [2, 0], "h": 0.75, "label": "2,0", "w": 1.0357, "y": 1.0, "x": 0}, + {"matrix": [3, 0], "h": 0.75, "label": "3,0", "w": 1.0357, "y": 1.0, "x": 1.03}, + {"matrix": [2, 1], "h": 0.75, "label": "2,1", "w": 1.0357, "y": 1.0, "x": 2.0700000000000003}, + {"matrix": [3, 1], "h": 0.75, "label": "3,1", "w": 1.0357, "y": 1.0, "x": 3.1}, + {"matrix": [2, 2], "h": 0.75, "label": "2,2", "w": 1.0357, "y": 1.0, "x": 4.140000000000001}, + {"matrix": [3, 2], "h": 0.75, "label": "3,2", "w": 1.0357, "y": 1.0, "x": 5.180000000000001}, + {"matrix": [2, 3], "h": 0.75, "label": "2,3", "w": 1.0357, "y": 1.0, "x": 6.21}, + {"matrix": [3, 3], "h": 0.75, "label": "3,3", "w": 1.0357, "y": 1.0, "x": 7.250000000000001}, + {"matrix": [2, 4], "h": 0.75, "label": "2,4", "w": 1.0357, "y": 1.0, "x": 8.280000000000001}, + {"matrix": [3, 4], "h": 0.75, "label": "3,4", "w": 1.0357, "y": 1.0, "x": 9.32}, + {"matrix": [4, 0], "h": 0.75, "label": "4,0", "w": 1.0357, "y": 1.75, "x": 0.25}, + {"matrix": [5, 0], "h": 0.75, "label": "5,0", "w": 1.0357, "y": 1.75, "x": 1.28}, + {"matrix": [4, 1], "h": 0.75, "label": "4,1", "w": 1.0357, "y": 1.75, "x": 2.3200000000000003}, + {"matrix": [5, 1], "h": 0.75, "label": "5,1", "w": 1.0357, "y": 1.75, "x": 3.35}, + {"matrix": [4, 2], "h": 0.75, "label": "4,2", "w": 1.0357, "y": 1.75, "x": 4.390000000000001}, + {"matrix": [5, 2], "h": 0.75, "label": "5,2", "w": 1.0357, "y": 1.75, "x": 5.430000000000001}, + {"matrix": [4, 3], "h": 0.75, "label": "4,3", "w": 1.0357, "y": 1.75, "x": 6.46}, + {"matrix": [5, 3], "h": 0.75, "label": "5,3", "w": 1.0357, "y": 1.75, "x": 7.500000000000001}, + {"matrix": [4, 4], "h": 0.75, "label": "4,4", "w": 1.0357, "y": 1.75, "x": 8.530000000000001}, + {"matrix": [5, 4], "h": 0.75, "label": "5,4", "w": 1.0357, "y": 1.75, "x": 9.57}, + {"matrix": [7, 0], "h": 0.75, "label": "7,0", "w": 1.0357, "y": 2.5, "x": 0.5}, + {"matrix": [6, 1], "h": 0.75, "label": "6,1", "w": 1.0357, "y": 2.5, "x": 1.53}, + {"matrix": [7, 1], "h": 0.75, "label": "7,1", "w": 1.0357, "y": 2.5, "x": 2.5700000000000003}, + {"matrix": [6, 2], "h": 0.75, "label": "6,2", "w": 1.0357, "y": 2.5, "x": 3.6}, + {"matrix": [7, 2], "h": 0.75, "label": "7,2", "w": 1.0357, "y": 2.5, "x": 4.640000000000001}, + {"matrix": [6, 3], "h": 0.75, "label": "6,3", "w": 1.0357, "y": 2.5, "x": 5.680000000000001}, + {"matrix": [7, 3], "h": 0.75, "label": "7,3", "w": 1.0357, "y": 2.5, "x": 6.71}, + {"matrix": [6, 4], "h": 0.75, "label": "6,4", "w": 1.0357, "y": 2.5, "x": 7.750000000000001}, + {"matrix": [7, 4], "h": 0.75, "label": "7,4", "w": 1.0357, "y": 2.5, "x": 8.780000000000001}, + {"matrix": [8, 0], "h": 0.75, "label": "8,0", "w": 1.0357, "y": 3.25, "x": 1.25}, + {"matrix": [9, 0], "h": 0.75, "label": "9,0", "w": 1.0357, "y": 3.25, "x": 2.2800000000000002}, + {"matrix": [8, 1], "h": 0.75, "label": "8,1", "w": 1.0357, "y": 3.25, "x": 3.3200000000000003}, + {"matrix": [9, 1], "h": 0.75, "label": "9,1", "w": 1.0357, "y": 3.25, "x": 4.3500000000000005}, + {"matrix": [8, 2], "h": 0.75, "label": "8,2", "w": 1.0357, "y": 3.25, "x": 5.390000000000001}, + {"matrix": [9, 2], "h": 0.75, "label": "9,2", "w": 1.0357, "y": 3.25, "x": 6.430000000000001}, + {"matrix": [8, 3], "h": 0.75, "label": "8,3", "w": 1.0357, "y": 3.25, "x": 7.46}, + {"matrix": [9, 3], "h": 0.75, "label": "9,3", "w": 1.0357, "y": 3.25, "x": 8.5} + ] + } + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": false, + "audio": false, + "backlight": false, + "rgblight": false, + "encoder": false, + "oled": true, + "wpm": true + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["A3", "A9", "A8", "B12", "B14"], + "rows": ["A2", "A4", "C13", "B5", "B9", "B3", "B4", "B8", "A15", "A10"] + } +} diff --git a/keyboards/nachie/subtext/keymaps/default/keymap.c b/keyboards/nachie/subtext/keymaps/default/keymap.c new file mode 100644 index 0000000000..b87f5bb39a --- /dev/null +++ b/keyboards/nachie/subtext/keymaps/default/keymap.c @@ -0,0 +1,27 @@ +/* +Copyright 2024 nachie + +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] = { + LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, + 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_ENT, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_DOT, + KC_LGUI, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_BSPC, KC_RALT, KC_RCTL + ) +}; \ No newline at end of file diff --git a/keyboards/nachie/subtext/keymaps/default/readme.md b/keyboards/nachie/subtext/keymaps/default/readme.md new file mode 100644 index 0000000000..5f776a4427 --- /dev/null +++ b/keyboards/nachie/subtext/keymaps/default/readme.md @@ -0,0 +1 @@ +The default layout for the nachie SubText \ No newline at end of file diff --git a/keyboards/nachie/subtext/keymaps/vial/config.h b/keyboards/nachie/subtext/keymaps/vial/config.h new file mode 100644 index 0000000000..f11557a734 --- /dev/null +++ b/keyboards/nachie/subtext/keymaps/vial/config.h @@ -0,0 +1,8 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#define VIAL_KEYBOARD_UID {0x7B, 0x8D, 0x18, 0xFF, 0xE1, 0x74, 0x36, 0xB2} + +#define VIAL_UNLOCK_COMBO_ROWS { 0, 5 } +#define VIAL_UNLOCK_COMBO_COLS { 0, 4 } diff --git a/keyboards/nachie/subtext/keymaps/vial/keymap.c b/keyboards/nachie/subtext/keymaps/vial/keymap.c new file mode 100644 index 0000000000..f40f343353 --- /dev/null +++ b/keyboards/nachie/subtext/keymaps/vial/keymap.c @@ -0,0 +1,487 @@ +/* +Copyright 2024 nachie + +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 +#include "os_detection.h" + +#ifdef OLED_ENABLE +void render_key_status_or_logo(void); +void render_current_layer(void); +void render_current_wpm(void); +#endif + +os_variant_t current_platform; +bool is_alt_tab_active = false; +uint16_t alt_tab_timer = 0; + +enum layer_names { + _BASE, // Default Layer + _FN, // Fn Layer 1 + _FN2, // Fn Layer 2 + _FN3 // Fn Layer 3 +}; + +enum custom_keycode { + JWRDL = QK_KB_0, + JWRDR, + SWRDL, + SWRDR, + TABL, + TABR, + DSKTPL, + DSKTPR, + PRVAPP, + NXTAPP +}; + + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_HOME: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LGUI); + tap_code(KC_LEFT); + unregister_mods(MOD_LGUI); + } else { + tap_code(KC_HOME); + } + break; + case KC_END: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LGUI); + tap_code(KC_RIGHT); + unregister_mods(MOD_LGUI); + } else { + tap_code(KC_END); + } + break; + case KC_PGUP: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LGUI); + tap_code(KC_UP); + unregister_mods(MOD_LGUI); + } else { + tap_code(KC_PGUP); + } + break; + case KC_PGDN: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LGUI); + tap_code(KC_DOWN); + unregister_mods(MOD_LGUI); + } else { + tap_code(KC_PGDN); + } + break; + case KC_NUM_LOCK: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LSFT); + tap_code(KC_CLEAR); + unregister_mods(MOD_LSFT); + } else { + tap_code(KC_NUM_LOCK); + } + break; + case KC_SCROLL_LOCK: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LCTL); + tap_code(KC_F14); + unregister_mods(MOD_LCTL); + } else { + tap_code(KC_SCROLL_LOCK); + } + break; + case KC_PRINT_SCREEN: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LSFT); + register_mods(MOD_LGUI); + tap_code(KC_5); + unregister_mods(MOD_LGUI); + unregister_mods(MOD_LSFT); + } else { + tap_code(KC_PRINT_SCREEN); + } + break; + case JWRDL: + if (record->event.pressed) { + (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL); + tap_code(KC_LEFT); + (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL); + } else { + } + break; + case JWRDR: + if (record->event.pressed) { + (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL); + tap_code(KC_RIGHT); + (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL); + } else { + } + break; + case SWRDL: + if (record->event.pressed) { + register_mods(MOD_LSFT); + (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL); + tap_code(KC_LEFT); + (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL); + unregister_mods(MOD_LSFT); + } else { + } + break; + case SWRDR: + if (record->event.pressed) { + register_mods(MOD_LSFT); + (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL); + tap_code(KC_RIGHT); + (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL); + unregister_mods(MOD_LSFT); + } else { + } + break; + case TABL: + if (record->event.pressed) { + register_mods(MOD_LCTL); + register_mods(MOD_LSFT); + tap_code(KC_TAB); + unregister_mods(MOD_LSFT); + unregister_mods(MOD_LCTL); + } else { + } + break; + case TABR: + if (record->event.pressed) { + register_mods(MOD_LCTL); + tap_code(KC_TAB); + unregister_mods(MOD_LCTL); + } else { + } + break; + case DSKTPL: + if (record->event.pressed) { + register_mods(MOD_LCTL); + register_mods(MOD_LGUI); + (current_platform == OS_LINUX) ? tap_code(KC_UP) : tap_code(KC_LEFT); + unregister_mods(MOD_LGUI); + unregister_mods(MOD_LCTL); + } else { + } + break; + case DSKTPR: + if (record->event.pressed) { + register_mods(MOD_LCTL); + register_mods(MOD_LGUI); + (current_platform == OS_LINUX) ? tap_code(KC_DOWN) : tap_code(KC_RGHT); + unregister_mods(MOD_LGUI); + unregister_mods(MOD_LCTL); + } else { + } + break; + case PRVAPP: + if (record->event.pressed) { + register_code(KC_LSFT); + if (!is_alt_tab_active) { + is_alt_tab_active = true; + (current_platform == OS_MACOS) ? register_code(KC_LGUI) : register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + unregister_code(KC_LSFT); + } + break; + case NXTAPP: + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + (current_platform == OS_MACOS) ? register_code(KC_LGUI) : register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + } + break; + } + return true; +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* QWERTY */ + [_BASE] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, + 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_ENT, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_DOT, + KC_LGUI, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_BSPC, KC_RALT, KC_RCTL + ), + + /* FUNCTION */ + [_FN] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [_FN2] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [_FN3] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______ + ) + +}; + + +void matrix_scan_user(void) { // The very important timer. + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 1000) { + (current_platform == OS_MACOS) ? unregister_code(KC_LGUI) : unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } +} + + +#ifdef OLED_ENABLE + #ifdef DYNAMIC_MACRO_ENABLE + bool macro1; + bool macro1rec; + bool macro2; + bool macro2rec; + bool prevEnabled; + uint8_t prevRGBmode; + + void render_dynamic_macro_status(int col, int line){ + oled_set_cursor(col,line); + macro1rec ? oled_write(PSTR("DM1"), macro1) : oled_write(PSTR(" "),false); + oled_set_cursor(col,line+1); + macro2rec ? oled_write(PSTR("DM2"), macro2) : oled_write(PSTR(" "),false); + } + + //direction indicates which macro it is, with 1 being Macro 1, -1 being Macro 2, and 0 being no macro. + void dynamic_macro_record_start_user(int8_t direction){ + //prevEnabled = rgb_matrix_is_enabled(); + //if (!prevEnabled) { rgb_matrix_enable(); } + //prevRGBmode = rgb_matrix_get_mode(); + //rgb_matrix_mode(RGB_MATRIX_BREATHING); + switch(direction){ + case 1: + macro1 = false; + macro1rec = true; + break; + case -1: + macro2 = false; + macro2rec = true; + break; + default: + macro1 = false; + macro2 = false; + macro1rec = false; + macro2rec = false; + break; + } + } + + void dynamic_macro_record_end_user(int8_t direction){ + //prevEnabled ? rgb_matrix_mode(prevRGBmode) : rgb_matrix_disable(); + switch(direction){ + case 1: + macro1 = true; + break; + case -1: + macro2 = true; + break; + default: + macro1 = false; + macro2 = false; + break; + } + } + #endif + + bool clear_screen = false; + bool rerender_platform = false; + + static void render_logo(void) { + static const char PROGMEM logo[] = { + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00 + }; + + oled_write(logo, false); + } + + void render_keylock_status(led_t led_state) { + bool caps_state = (led_state.caps_lock || is_caps_word_on()); + oled_write(PSTR("CAPS"), caps_state); + oled_write(PSTR(" "), false); + oled_write(PSTR("NUM"), led_state.num_lock); + oled_write(PSTR(" "), false); + oled_write(PSTR("SCRL"), led_state.scroll_lock); + //oled_write_ln_P(PSTR(" "), false); + } + + void render_mod_status(uint8_t modifiers) { + oled_write(PSTR("SH"), (modifiers & MOD_MASK_SHIFT)); + oled_write(PSTR(" "), false); + (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("CMD"), (modifiers & MOD_MASK_GUI)) : oled_write(PSTR("CT"), (modifiers & MOD_MASK_CTRL)); + oled_write(PSTR(" "), false); + (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("OPT"), (modifiers & MOD_MASK_ALT)) : oled_write(PSTR("ALT"), (modifiers & MOD_MASK_ALT)); + oled_write(PSTR(" "), false); + (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("CT"), (modifiers & MOD_MASK_CTRL)) : oled_write(PSTR("GUI"), (modifiers & MOD_MASK_GUI)); + } + + void render_key_status_or_logo(){ + led_t led_state = host_keyboard_led_state(); + uint8_t mod_state = (get_mods()|get_oneshot_mods()); + if ( !led_state.num_lock && !led_state.caps_lock && !led_state.scroll_lock + && !(mod_state & MOD_MASK_SHIFT) && !(mod_state & MOD_MASK_ALT) && !(mod_state & MOD_MASK_CTRL) && !(mod_state & MOD_MASK_GUI)) { + if(!clear_screen) { + render_logo(); + rerender_platform = true; + } + clear_screen = true; + } else { + if (clear_screen == true) { + oled_clear(); + oled_render(); + clear_screen = false; + } + oled_set_cursor(8,0); + render_keylock_status(led_state); + oled_set_cursor(8,1); + render_mod_status(mod_state); + rerender_platform = true; + } + + } + + void render_current_layer(){ + switch (get_highest_layer(layer_state)) { + case 0: + oled_write(PSTR("Layer 0"), false); + break; + case 1: + oled_write(PSTR("Layer 1"), false); + break; + case 2: + oled_write(PSTR("Layer 2"), false); + break; + case 3: + oled_write(PSTR("Layer 3"), false); + break; + default: + oled_write(PSTR("Layer ?"), false); // Should never display, here as a catchall + } + } + + void render_current_wpm(){ + oled_write_P(PSTR("WPM: "), false); + oled_write(get_u8_str(get_current_wpm(), '0'), false); + } + + void render_platform_status(int col, int line) { + /* Show Ctrl-Gui Swap options */ + static const char PROGMEM logo[][5][3] = { + {{0x9B, 0x9C, 0}, {0xbb, 0xbc, 0}}, //Android + {{0x99, 0x9A, 0}, {0xb9, 0xba, 0}}, //Linux + {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}, //Windows + {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, //Mac/iOS + {{0x9D, 0x9E, 0}, {0xbd, 0xbe, 0}}, //Empty Placeholder + }; + current_platform = detected_host_os(); + switch (current_platform) { + /*case OS_ANDROID: //Android + oled_set_cursor(col,line); + oled_write(logo[0][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[0][1], false); + break;*/ + case OS_LINUX: //Linux + oled_set_cursor(col,line); + oled_write(logo[1][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[1][1], false); + keymap_config.swap_lctl_lgui = false; + keymap_config.swap_rctl_rgui = false; + break; + case OS_WINDOWS: //Windows + oled_set_cursor(col,line); + oled_write(logo[2][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[2][1], false); + keymap_config.swap_lctl_lgui = false; + keymap_config.swap_rctl_rgui = false; + break; + case OS_MACOS: //Mac + oled_set_cursor(col,line); + oled_write(logo[3][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[3][1], false); + keymap_config.swap_lctl_lgui = true; + keymap_config.swap_rctl_rgui = true; + break; + case OS_IOS: //iOS + oled_set_cursor(col,line); + oled_write(logo[3][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[3][1], false); + keymap_config.swap_lctl_lgui = true; + keymap_config.swap_rctl_rgui = true; + break; + default: //OS_UNSURE or not configured + oled_set_cursor(col,line); + oled_write(logo[4][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[4][1], false); + break; + } + rerender_platform = false; + } + + bool oled_task_user(void) { + render_key_status_or_logo(); + oled_set_cursor(8,2); + render_current_layer(); + #ifdef DYNAMIC_MACRO_ENABLE + render_dynamic_macro_status(18,2); + #endif + oled_set_cursor(8,3); + render_current_wpm(); + #ifdef OS_DETECTION_ENABLE + if(current_platform != detected_host_os() || rerender_platform) { render_platform_status(3,0); } + #endif + + return false; + } + +#endif \ No newline at end of file diff --git a/keyboards/nachie/subtext/keymaps/vial/readme.md b/keyboards/nachie/subtext/keymaps/vial/readme.md new file mode 100644 index 0000000000..c7dbc0d8fa --- /dev/null +++ b/keyboards/nachie/subtext/keymaps/vial/readme.md @@ -0,0 +1 @@ +The VIAL Keymap for the nachie subtext \ No newline at end of file diff --git a/keyboards/nachie/subtext/keymaps/vial/rules.mk b/keyboards/nachie/subtext/keymaps/vial/rules.mk new file mode 100644 index 0000000000..038a797951 --- /dev/null +++ b/keyboards/nachie/subtext/keymaps/vial/rules.mk @@ -0,0 +1,9 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes + +ENCODER_MAP_ENABLE = no +BOOTMAGIC_ENABLE = yes +MAGIC_ENABLE = yes +OS_DETECTION_ENABLE = yes +DYNAMIC_MACRO_ENABLE = yes +CAPS_WORD_ENABLE = yes \ No newline at end of file diff --git a/keyboards/nachie/subtext/keymaps/vial/vial.json b/keyboards/nachie/subtext/keymaps/vial/vial.json new file mode 100644 index 0000000000..8c2b566aa4 --- /dev/null +++ b/keyboards/nachie/subtext/keymaps/vial/vial.json @@ -0,0 +1,298 @@ +{ + "name": "Subtext", + "vendorId": "0x4B43", + "productId": "0x5354", + "customKeycodes": [ + { + "name": "JmpWordL", + "title": "Jump Word Left", + "shortName": "JWRDL" + }, + { + "name": "JmpWordR", + "title": "Jump Word Right", + "shortName": "JWRDR" + }, + { + "name": "SlcWordL", + "title": "Select Word Left", + "shortName": "SWRDL" + }, + { + "name": "SlcWordR", + "title": "Select Word Right", + "shortName": "SWRDR" + }, + { + "name": "TabLft", + "title": "Tab Left", + "shortName": "TABL" + }, + { + "name": "TabRght", + "title": "Tab Right", + "shortName": "TABR" + }, + { + "name": "DsktpLft", + "title": "Desktop Left", + "shortName": "DSKTPL" + }, + { + "name": "DsktpRght", + "title": "Desktop Right", + "shortName": "DSKTPR" + }, + { + "name": "PrevApp", + "title": "Previous App", + "shortName": "PRVAPP" + }, + { + "name": "NextApp", + "title": "Next App", + "shortName": "NXTAPP" + } + ], + "matrix": { "rows": 10, "cols": 5 }, + "layouts": { + "keymap": [ + [ + { + "t": "#666666", + "f": 2, + "w": 1.0357 + }, + "0,0", + { + "x": -0.005700000000000038, + "w": 1.0357 + }, + "1,0", + { + "x": 0.0042999999999997485, + "w": 1.0357 + }, + "0,1", + { + "x": -0.005699999999999594, + "w": 1.0357 + }, + "1,1", + { + "x": 2.3243, + "w": 1.0357 + }, + "0,3", + { + "x": 0.0042999999999997485, + "w": 1.0357 + }, + "1,3", + { + "x": -0.0057000000000009265, + "w": 1.0357 + }, + "0,4", + { + "x": 0.004300000000000637, + "w": 1.0357 + }, + "1,4" + ], + [ + { + "y": 0.5, + "w": 1.0357 + }, + "2,0", + { + "x": -0.005700000000000038, + "w": 1.0357 + }, + "3,0", + { + "x": 0.0042999999999997485, + "w": 1.0357 + }, + "2,1", + { + "x": -0.005699999999999594, + "w": 1.0357 + }, + "3,1", + { + "x": 0.0042999999999997485, + "w": 1.0357 + }, + "2,2", + { + "x": 0.0042999999999997485, + "w": 1.0357 + }, + "3,2", + { + "x": -0.005700000000000038, + "w": 1.0357 + }, + "2,3", + { + "x": 0.0042999999999997485, + "w": 1.0357 + }, + "3,3", + { + "x": -0.0057000000000009265, + "w": 1.0357 + }, + "2,4", + { + "x": 0.004300000000000637, + "w": 1.0357 + }, + "3,4" + ], + [ + { + "x": 0.25, + "w": 1.0357 + }, + "4,0", + { + "x": -0.005700000000000038, + "w": 1.0357 + }, + "5,0", + { + "x": 0.0042999999999997485, + "w": 1.0357 + }, + "4,1", + { + "x": -0.005699999999999594, + "w": 1.0357 + }, + "5,1", + { + "x": 0.0042999999999997485, + "w": 1.0357 + }, + "4,2", + { + "x": 0.0042999999999997485, + "w": 1.0357 + }, + "5,2", + { + "x": -0.005700000000000038, + "w": 1.0357 + }, + "4,3", + { + "x": 0.0042999999999997485, + "w": 1.0357 + }, + "5,3", + { + "x": -0.0057000000000009265, + "w": 1.0357 + }, + "4,4", + { + "x": 0.004300000000000637, + "w": 1.0357 + }, + "5,4" + ], + [ + { + "x": 0.5, + "w": 1.0357 + }, + "7,0", + { + "x": -0.005700000000000038, + "w": 1.0357 + }, + "6,1", + { + "x": 0.0042999999999997485, + "w": 1.0357 + }, + "7,1", + { + "x": -0.005699999999999594, + "w": 1.0357 + }, + "6,2", + { + "x": 0.0042999999999997485, + "w": 1.0357 + }, + "7,2", + { + "x": 0.0042999999999997485, + "w": 1.0357 + }, + "6,3", + { + "x": -0.005700000000000038, + "w": 1.0357 + }, + "7,3", + { + "x": 0.0042999999999997485, + "w": 1.0357 + }, + "6,4", + { + "x": -0.0057000000000009265, + "w": 1.0357 + }, + "7,4" + ], + [ + { + "x": 1.25, + "w": 1.0357 + }, + "8,0", + { + "x": -0.0057000000000004825, + "w": 1.0357 + }, + "9,0", + { + "x": 0.0043000000000001926, + "w": 1.0357 + }, + "8,1", + { + "x": -0.005700000000000038, + "w": 1.0357 + }, + "9,1", + { + "x": 0.0042999999999997485, + "w": 1.0357 + }, + "8,2", + { + "x": 0.0042999999999997485, + "w": 1.0357 + }, + "9,2", + { + "x": -0.005700000000000038, + "w": 1.0357 + }, + "8,3", + { + "x": 0.004300000000000637, + "w": 1.0357 + }, + "9,3" + ] + ] + } + } diff --git a/keyboards/nachie/subtext/mcuconf.h b/keyboards/nachie/subtext/mcuconf.h new file mode 100644 index 0000000000..e8803b14f8 --- /dev/null +++ b/keyboards/nachie/subtext/mcuconf.h @@ -0,0 +1,22 @@ +/* +Copyright 2024 nachie + +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_I2C_USE_I2C1 +#define STM32_I2C_USE_I2C1 TRUE diff --git a/keyboards/nachie/subtext/readme.md b/keyboards/nachie/subtext/readme.md new file mode 100644 index 0000000000..f4cb6f1bfb --- /dev/null +++ b/keyboards/nachie/subtext/readme.md @@ -0,0 +1,23 @@ +# Subtext + +Firmware for the nachie Subtext keyboard + +* Keyboard Maintainer: [nachie](https://github.com/nachie) +* Hardware Supported: Subtext +* Hardware Availability: [nachie](https://littlecraftery.com/products/subtext) + +Make example for this keyboard (after setting up your build environment): + + make nachie/subtext:default + +Or to make and flash: + + make nachie/subtext:default:flash + + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +* **Bootmagic reset**: Hold down ESC (top left) and plug in the keyboard +* **Physical reset button**: Briefly press the button labeled "SW_RST1" on the back of the PCB diff --git a/keyboards/nachie/subtext/rules.mk b/keyboards/nachie/subtext/rules.mk new file mode 100644 index 0000000000..934dbb46a9 --- /dev/null +++ b/keyboards/nachie/subtext/rules.mk @@ -0,0 +1,5 @@ + +OLED_DRIVER = ssd1306 # Set Driver to SSD1306 + +# Enter lower-power sleep mode when on the ChibiOS idle thread +OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE \ No newline at end of file diff --git a/keyboards/nachie/subtext/subtext.c b/keyboards/nachie/subtext/subtext.c new file mode 100644 index 0000000000..aad919566d --- /dev/null +++ b/keyboards/nachie/subtext/subtext.c @@ -0,0 +1,79 @@ +/* +Copyright 2024 nachie + +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" + +void board_init(void) { + SYSCFG->CFGR1 |= SYSCFG_CFGR1_I2C1_DMA_RMP; // DMA re-map, you may not need this depending on your +} + +#ifdef OLED_ENABLE + +oled_rotation_t oled_init_kb(oled_rotation_t rotation) { + return OLED_ROTATION_0; +} + +static void render_logo(void) { + static const char PROGMEM my_logo[] = { + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0x3f, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0x7f, 0x7f, +0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x7f, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0x00, 0x00, 0x1f, 0x8f, 0x07, 0x03, 0x71, 0xf8, 0xfc, 0xfe, 0xff, 0xff, 0x03, 0x01, +0x38, 0x1c, 0x06, 0xa6, 0xb6, 0x86, 0xfc, 0xf8, 0x00, 0x03, 0xff, 0xff, 0xff, 0x00, 0x00, 0xf1, +0xf9, 0xfc, 0xfc, 0xfc, 0xf8, 0xe1, 0x03, 0x0f, 0xff, 0xff, 0x1f, 0x03, 0x01, 0xf9, 0xfc, 0x1c, +0x80, 0xf8, 0xf0, 0xf1, 0xf7, 0xff, 0xff, 0xff, 0x03, 0x01, 0x38, 0x1c, 0x06, 0xa6, 0xb6, 0x86, +0xfc, 0xf8, 0x00, 0x03, 0xff, 0xff, 0xdf, 0x9f, 0x3f, 0x7f, 0xf8, 0xf2, 0xf2, 0x00, 0x01, 0xff, +0xff, 0xff, 0x07, 0x03, 0x91, 0x99, 0x9c, 0x9c, 0x9c, 0x98, 0x91, 0x83, 0x87, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xe0, 0xe0, 0xff, 0xff, 0xff, 0xfe, 0xf8, 0xe0, 0xe3, 0xe7, 0xff, 0xff, 0xff, 0xe0, +0xe0, 0xe0, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xe0, 0xff, 0xff, 0xff, 0x00, 0x00, 0xf1, +0xe7, 0xe7, 0xe7, 0xe7, 0xe3, 0xf0, 0xf8, 0xfe, 0xff, 0xff, 0xfe, 0xf8, 0x70, 0x03, 0xc0, 0xe4, +0xe7, 0xe7, 0xe1, 0xf0, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xfe, 0xff, 0xff, 0xff, +0xff, 0xff, 0xe0, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xf8, 0xf1, 0xe1, 0xe0, 0xe0, 0xff, +0xff, 0xff, 0xfc, 0xf0, 0xf1, 0xe3, 0xe7, 0xe7, 0xe7, 0xe7, 0xe3, 0xf1, 0xf9, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff +}; + oled_write_raw_P(my_logo, sizeof(my_logo)); +} + + +bool oled_task_kb(void) { + // Defer to the keymap if they want to override + if(!oled_task_user()) { + return false; + } + + // default keyboard drawing code + render_logo(); + return false; +} + +#endif \ No newline at end of file diff --git a/keyboards/nachie/syndrome/chconf.h b/keyboards/nachie/syndrome/chconf.h new file mode 100644 index 0000000000..ad01fb3387 --- /dev/null +++ b/keyboards/nachie/syndrome/chconf.h @@ -0,0 +1,11 @@ +/* + * `qmk chibios-confmigrate -i firmware/nachie/syndrome/chconf.h -r ../keymaps_qmk/platforms/chibios/boards/GENERIC_PROMICRO_RP2040/configs/chconf.h` + */ + + +#pragma once + +#include_next + +#undef CH_CFG_ST_TIMEDELTA +#define CH_CFG_ST_TIMEDELTA 100 \ No newline at end of file diff --git a/keyboards/nachie/syndrome/config.h b/keyboards/nachie/syndrome/config.h new file mode 100755 index 0000000000..e050f0be12 --- /dev/null +++ b/keyboards/nachie/syndrome/config.h @@ -0,0 +1,38 @@ +/* +Copyright 2024 Nachie + +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 RP2040_FLASH_GENERIC_03H + + +#ifdef HAPTIC_ENABLE +#define SOLENOID_PIN GP15 +#endif + +/* Oled config */ +#ifdef OLED_ENABLE +#define I2C_DRIVER I2CD1 +#define I2C1_SDA_PIN GP10 +#define I2C1_SCL_PIN GP11 +#define OLED_TIMEOUT 60000 // Turns off the OLED screen after x ms of screen update inactivity. Helps reduce OLED Burn-in. Set to 0 to disable. +#define OLED_FADE_OUT +#define OLED_FADE_OUT_INTERVAL 13 +#define OLED_BRIGHTNESS 50 // The default brightness level of the OLED, from 0 to 255. +#define OLED_UPDATE_INTERVAL 16 // limits in milliseconds how frequently the OLED updates. Calculation 1000/fps (increases keyboard responsiveness) +#endif + +#define VIA_CUSTOM_LIGHTING_ENABLE diff --git a/keyboards/nachie/syndrome/halconf.h b/keyboards/nachie/syndrome/halconf.h new file mode 100644 index 0000000000..23c08453a8 --- /dev/null +++ b/keyboards/nachie/syndrome/halconf.h @@ -0,0 +1,4 @@ +#pragma once + +#include_next +#define HAL_USE_I2C TRUE \ No newline at end of file diff --git a/keyboards/nachie/syndrome/info.json b/keyboards/nachie/syndrome/info.json new file mode 100644 index 0000000000..71825036b1 --- /dev/null +++ b/keyboards/nachie/syndrome/info.json @@ -0,0 +1,149 @@ +{ + "keyboard_name": "Syndrome", + "manufacturer": "Nachie", + "usb": { + "vid": "0x4B43", + "pid": "0x5359", + "device_version": "1.0.0" + }, + "board": "GENERIC_RP_RP2040", + "bootloader": "rp2040", + "processor": "RP2040", + "url": "https://littlecraftery.com/products/syndrome", + "maintainer": "nachie", + "ws2812": { + "pin": "GP29", + "driver": "vendor" + }, + "rgb_matrix": { + "driver": "ws2812", + "led_count": 16, + "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, + "rainbow_moving_chevron":true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "cycle_pinwheel": true, + "cycle_spiral": true, + "rainbow_pinwheels": true, + "raindrops": true, + "jellybean_raindrops": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": 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, + "solid_splash": true, + "solid_multisplash": true, + "pixel_rain": true, + "pixel_fractal": true + } + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"y": 0, "x": 0, "matrix": [8, 5], "label": "8,5"}, + {"y": 0, "x": 7, "matrix": [9, 5], "label": "9,5"}, + {"y": 0, "x": 8, "matrix": [8, 6], "label": "8,6"}, + {"y": 0, "x": 9, "matrix": [9, 6], "label": "9,6"}, + {"y": 0, "x": 10, "matrix": [8, 7], "label": "8,7"}, + {"y": 2, "x": 0, "matrix": [0, 0], "label": "0,0"}, + {"y": 2, "x": 1, "matrix": [1, 0], "label": "1,0"}, + {"y": 2, "x": 2, "matrix": [0, 1], "label": "0,1"}, + {"y": 2, "x": 3, "matrix": [1, 1], "label": "1,1"}, + {"y": 2, "x": 4, "matrix": [0, 2], "label": "0,2"}, + {"y": 2, "x": 5, "matrix": [1, 2], "label": "1,2"}, + {"y": 2, "x": 6, "matrix": [0, 3], "label": "0,3"}, + {"y": 2, "x": 7, "matrix": [1, 3], "label": "1,3"}, + {"y": 2, "x": 8, "matrix": [0, 4], "label": "0,4"}, + {"y": 2, "x": 9, "matrix": [1, 4], "label": "1,4"}, + {"y": 2, "x": 10, "matrix": [7, 4], "label": "7,4"}, + {"y": 3, "x": 0, "matrix": [2, 0], "w": 1.25, "label": "2,0"}, + {"y": 3, "x": 1.25, "matrix": [3, 0], "label": "3,0"}, + {"y": 3, "x": 2.25, "matrix": [2, 1], "label": "2,1"}, + {"y": 3, "x": 3.25, "matrix": [3, 1], "label": "3,1"}, + {"y": 3, "x": 4.25, "matrix": [2, 2], "label": "2,2"}, + {"y": 3, "x": 5.25, "matrix": [3, 2], "label": "3,2"}, + {"y": 3, "x": 6.25, "matrix": [2, 3], "label": "2,3"}, + {"y": 3, "x": 7.25, "matrix": [3, 3], "label": "3,3"}, + {"y": 3, "x": 8.25, "matrix": [2, 4], "label": "2,4"}, + {"y": 3, "x": 9.25, "matrix": [3, 4], "w": 1.75, "label": "3,4"}, + {"y": 4, "x": 0, "matrix": [4, 0], "w": 1.75, "label": "4,0"}, + {"y": 4, "x": 1.75, "matrix": [5, 0], "label": "5,0"}, + {"y": 4, "x": 2.75, "matrix": [4, 1], "label": "4,1"}, + {"y": 4, "x": 3.75, "matrix": [5, 1], "label": "5,1"}, + {"y": 4, "x": 4.75, "matrix": [4, 2], "label": "4,2"}, + {"y": 4, "x": 5.75, "matrix": [5, 2], "label": "5,2"}, + {"y": 4, "x": 6.75, "matrix": [4, 3], "label": "4,3"}, + {"y": 4, "x": 7.75, "matrix": [5, 3], "label": "5,3"}, + {"y": 4, "x": 8.75, "matrix": [4, 4], "w": 1.25, "label": "4,4"}, + {"y": 4, "x": 10, "matrix": [5, 4], "label": "5,4"}, + {"y": 5, "x": 0, "matrix": [6, 0], "w": 1.5, "label": "6,0"}, + {"y": 5, "x": 1.5, "matrix": [7, 0], "label": "7,0"}, + {"y": 5, "x": 2.5, "matrix": [6, 1], "w": 1.25, "label": "6,1"}, + {"y": 5, "x": 3.75, "matrix": [7, 1], "w": 1.75, "label": "7,1"}, + {"y": 5, "x": 5.5, "matrix": [7, 2], "w": 1.75, "label": "7,2"}, + {"y": 5, "x": 7.25, "matrix": [6, 3], "w": 1.25, "label": "6,3"}, + {"y": 5, "x": 8.5, "matrix": [7, 3], "label": "7,3"}, + {"y": 5, "x": 9.5, "matrix": [6, 4], "w": 1.5, "label": "6,4"} + ] + } + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": false, + "audio": false, + "backlight": false, + "rgblight": false, + "encoder": true, + "rgb_matrix": true, + "haptic": true, + "oled": true, + "wpm": true + }, + "build": { + "lto": true + }, + "haptic": { + "driver": "solenoid" + }, + "encoder": { + "enabled": true, + "rotary": [ + { "pin_a": "GP22", "pin_b": "GP23", "resolution": 2 }, + { "pin_a": "GP26", "pin_b": "GP27", "resolution": 2 }, + { "pin_a": "GP0", "pin_b": "GP1", "resolution": 2 }, + { "pin_a": "GP5", "pin_b": "GP6", "resolution": 2 } + ] + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["GP28", "GP21", "GP20", "GP3", "GP2", "GP12", "GP13", "GP14"], + "rows": ["GP25", "GP24", "GP16", "GP7", "GP17", "GP18", "GP19", "GP4", "GP8", "GP9"] + } +} diff --git a/keyboards/nachie/syndrome/keyboard.json b/keyboards/nachie/syndrome/keyboard.json new file mode 100644 index 0000000000..71825036b1 --- /dev/null +++ b/keyboards/nachie/syndrome/keyboard.json @@ -0,0 +1,149 @@ +{ + "keyboard_name": "Syndrome", + "manufacturer": "Nachie", + "usb": { + "vid": "0x4B43", + "pid": "0x5359", + "device_version": "1.0.0" + }, + "board": "GENERIC_RP_RP2040", + "bootloader": "rp2040", + "processor": "RP2040", + "url": "https://littlecraftery.com/products/syndrome", + "maintainer": "nachie", + "ws2812": { + "pin": "GP29", + "driver": "vendor" + }, + "rgb_matrix": { + "driver": "ws2812", + "led_count": 16, + "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, + "rainbow_moving_chevron":true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "cycle_pinwheel": true, + "cycle_spiral": true, + "rainbow_pinwheels": true, + "raindrops": true, + "jellybean_raindrops": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": 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, + "solid_splash": true, + "solid_multisplash": true, + "pixel_rain": true, + "pixel_fractal": true + } + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"y": 0, "x": 0, "matrix": [8, 5], "label": "8,5"}, + {"y": 0, "x": 7, "matrix": [9, 5], "label": "9,5"}, + {"y": 0, "x": 8, "matrix": [8, 6], "label": "8,6"}, + {"y": 0, "x": 9, "matrix": [9, 6], "label": "9,6"}, + {"y": 0, "x": 10, "matrix": [8, 7], "label": "8,7"}, + {"y": 2, "x": 0, "matrix": [0, 0], "label": "0,0"}, + {"y": 2, "x": 1, "matrix": [1, 0], "label": "1,0"}, + {"y": 2, "x": 2, "matrix": [0, 1], "label": "0,1"}, + {"y": 2, "x": 3, "matrix": [1, 1], "label": "1,1"}, + {"y": 2, "x": 4, "matrix": [0, 2], "label": "0,2"}, + {"y": 2, "x": 5, "matrix": [1, 2], "label": "1,2"}, + {"y": 2, "x": 6, "matrix": [0, 3], "label": "0,3"}, + {"y": 2, "x": 7, "matrix": [1, 3], "label": "1,3"}, + {"y": 2, "x": 8, "matrix": [0, 4], "label": "0,4"}, + {"y": 2, "x": 9, "matrix": [1, 4], "label": "1,4"}, + {"y": 2, "x": 10, "matrix": [7, 4], "label": "7,4"}, + {"y": 3, "x": 0, "matrix": [2, 0], "w": 1.25, "label": "2,0"}, + {"y": 3, "x": 1.25, "matrix": [3, 0], "label": "3,0"}, + {"y": 3, "x": 2.25, "matrix": [2, 1], "label": "2,1"}, + {"y": 3, "x": 3.25, "matrix": [3, 1], "label": "3,1"}, + {"y": 3, "x": 4.25, "matrix": [2, 2], "label": "2,2"}, + {"y": 3, "x": 5.25, "matrix": [3, 2], "label": "3,2"}, + {"y": 3, "x": 6.25, "matrix": [2, 3], "label": "2,3"}, + {"y": 3, "x": 7.25, "matrix": [3, 3], "label": "3,3"}, + {"y": 3, "x": 8.25, "matrix": [2, 4], "label": "2,4"}, + {"y": 3, "x": 9.25, "matrix": [3, 4], "w": 1.75, "label": "3,4"}, + {"y": 4, "x": 0, "matrix": [4, 0], "w": 1.75, "label": "4,0"}, + {"y": 4, "x": 1.75, "matrix": [5, 0], "label": "5,0"}, + {"y": 4, "x": 2.75, "matrix": [4, 1], "label": "4,1"}, + {"y": 4, "x": 3.75, "matrix": [5, 1], "label": "5,1"}, + {"y": 4, "x": 4.75, "matrix": [4, 2], "label": "4,2"}, + {"y": 4, "x": 5.75, "matrix": [5, 2], "label": "5,2"}, + {"y": 4, "x": 6.75, "matrix": [4, 3], "label": "4,3"}, + {"y": 4, "x": 7.75, "matrix": [5, 3], "label": "5,3"}, + {"y": 4, "x": 8.75, "matrix": [4, 4], "w": 1.25, "label": "4,4"}, + {"y": 4, "x": 10, "matrix": [5, 4], "label": "5,4"}, + {"y": 5, "x": 0, "matrix": [6, 0], "w": 1.5, "label": "6,0"}, + {"y": 5, "x": 1.5, "matrix": [7, 0], "label": "7,0"}, + {"y": 5, "x": 2.5, "matrix": [6, 1], "w": 1.25, "label": "6,1"}, + {"y": 5, "x": 3.75, "matrix": [7, 1], "w": 1.75, "label": "7,1"}, + {"y": 5, "x": 5.5, "matrix": [7, 2], "w": 1.75, "label": "7,2"}, + {"y": 5, "x": 7.25, "matrix": [6, 3], "w": 1.25, "label": "6,3"}, + {"y": 5, "x": 8.5, "matrix": [7, 3], "label": "7,3"}, + {"y": 5, "x": 9.5, "matrix": [6, 4], "w": 1.5, "label": "6,4"} + ] + } + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": false, + "audio": false, + "backlight": false, + "rgblight": false, + "encoder": true, + "rgb_matrix": true, + "haptic": true, + "oled": true, + "wpm": true + }, + "build": { + "lto": true + }, + "haptic": { + "driver": "solenoid" + }, + "encoder": { + "enabled": true, + "rotary": [ + { "pin_a": "GP22", "pin_b": "GP23", "resolution": 2 }, + { "pin_a": "GP26", "pin_b": "GP27", "resolution": 2 }, + { "pin_a": "GP0", "pin_b": "GP1", "resolution": 2 }, + { "pin_a": "GP5", "pin_b": "GP6", "resolution": 2 } + ] + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["GP28", "GP21", "GP20", "GP3", "GP2", "GP12", "GP13", "GP14"], + "rows": ["GP25", "GP24", "GP16", "GP7", "GP17", "GP18", "GP19", "GP4", "GP8", "GP9"] + } +} diff --git a/keyboards/nachie/syndrome/keymaps/default/keymap.c b/keyboards/nachie/syndrome/keymaps/default/keymap.c new file mode 100755 index 0000000000..9536a4d71c --- /dev/null +++ b/keyboards/nachie/syndrome/keymaps/default/keymap.c @@ -0,0 +1,28 @@ +/* +Copyright 2024 Nachie + +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] = { + + /* QWERTY */ + LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1), + KC_LGUI, KC_LGUI, KC_LALT, KC_SPC, KC_BSPC, KC_RGUI, KC_RALT, MO(1)) +}; diff --git a/keyboards/nachie/syndrome/keymaps/default/readme.md b/keyboards/nachie/syndrome/keymaps/default/readme.md new file mode 100644 index 0000000000..4301f35d66 --- /dev/null +++ b/keyboards/nachie/syndrome/keymaps/default/readme.md @@ -0,0 +1 @@ +The default keymap for the Syndrome. \ No newline at end of file diff --git a/keyboards/nachie/syndrome/keymaps/vial/config.h b/keyboards/nachie/syndrome/keymaps/vial/config.h new file mode 100644 index 0000000000..db5d246379 --- /dev/null +++ b/keyboards/nachie/syndrome/keymaps/vial/config.h @@ -0,0 +1,11 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#define VIAL_KEYBOARD_UID {0xBE, 0x9A, 0x53, 0x6B, 0x85, 0xE5, 0xE2, 0xFE} + +#define VIAL_UNLOCK_COMBO_ROWS { 0, 3 } +#define VIAL_UNLOCK_COMBO_COLS { 0, 4 } + +#define RGB_MATRIX_FRAMEBUFFER_EFFECTS +#define RGB_MATRIX_KEYPRESSES \ No newline at end of file diff --git a/keyboards/nachie/syndrome/keymaps/vial/keymap.c b/keyboards/nachie/syndrome/keymaps/vial/keymap.c new file mode 100755 index 0000000000..229b78c6d9 --- /dev/null +++ b/keyboards/nachie/syndrome/keymaps/vial/keymap.c @@ -0,0 +1,492 @@ +/* +Copyright 2024 Nachie + +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 +#include "os_detection.h" + +#ifdef OLED_ENABLE +void render_key_status_or_logo(void); +void render_current_layer(void); +void render_current_wpm(void); +#endif + +os_variant_t current_platform; +bool is_alt_tab_active = false; +uint16_t alt_tab_timer = 0; + +enum layer_names { + _BASE, // Default Layer + _FN, // Fn Layer 1 + _FN2, // Fn Layer 2 + _FN3 // Fn Layer 3 +}; + +enum custom_keycode { + JWRDL = QK_KB_0, + JWRDR, + SWRDL, + SWRDR, + TABL, + TABR, + DSKTPL, + DSKTPR, + PRVAPP, + NXTAPP +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_HOME: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LGUI); + tap_code(KC_LEFT); + unregister_mods(MOD_LGUI); + } else { + tap_code(KC_HOME); + } + break; + case KC_END: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LGUI); + tap_code(KC_RIGHT); + unregister_mods(MOD_LGUI); + } else { + tap_code(KC_END); + } + break; + case KC_PGUP: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LGUI); + tap_code(KC_UP); + unregister_mods(MOD_LGUI); + } else { + tap_code(KC_PGUP); + } + break; + case KC_PGDN: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LGUI); + tap_code(KC_DOWN); + unregister_mods(MOD_LGUI); + } else { + tap_code(KC_PGDN); + } + break; + case KC_NUM_LOCK: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LSFT); + tap_code(KC_CLEAR); + unregister_mods(MOD_LSFT); + } else { + tap_code(KC_NUM_LOCK); + } + break; + case KC_SCROLL_LOCK: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LCTL); + tap_code(KC_F14); + unregister_mods(MOD_LCTL); + } else { + tap_code(KC_SCROLL_LOCK); + } + break; + case KC_PRINT_SCREEN: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LSFT); + register_mods(MOD_LGUI); + tap_code(KC_5); + unregister_mods(MOD_LGUI); + unregister_mods(MOD_LSFT); + } else { + tap_code(KC_PRINT_SCREEN); + } + break; + case JWRDL: + if (record->event.pressed) { + (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL); + tap_code(KC_LEFT); + (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL); + } else { + } + break; + case JWRDR: + if (record->event.pressed) { + (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL); + tap_code(KC_RIGHT); + (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL); + } else { + } + break; + case SWRDL: + if (record->event.pressed) { + register_mods(MOD_LSFT); + (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL); + tap_code(KC_LEFT); + (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL); + unregister_mods(MOD_LSFT); + } else { + } + break; + case SWRDR: + if (record->event.pressed) { + register_mods(MOD_LSFT); + (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL); + tap_code(KC_RIGHT); + (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL); + unregister_mods(MOD_LSFT); + } else { + } + break; + case TABL: + if (record->event.pressed) { + register_mods(MOD_LCTL); + register_mods(MOD_LSFT); + tap_code(KC_TAB); + unregister_mods(MOD_LSFT); + unregister_mods(MOD_LCTL); + } else { + } + break; + case TABR: + if (record->event.pressed) { + register_mods(MOD_LCTL); + tap_code(KC_TAB); + unregister_mods(MOD_LCTL); + } else { + } + break; + case DSKTPL: + if (record->event.pressed) { + register_mods(MOD_LCTL); + register_mods(MOD_LGUI); + (current_platform == OS_LINUX) ? tap_code(KC_UP) : tap_code(KC_LEFT); + unregister_mods(MOD_LGUI); + unregister_mods(MOD_LCTL); + } else { + } + break; + case DSKTPR: + if (record->event.pressed) { + register_mods(MOD_LCTL); + register_mods(MOD_LGUI); + (current_platform == OS_LINUX) ? tap_code(KC_DOWN) : tap_code(KC_RGHT); + unregister_mods(MOD_LGUI); + unregister_mods(MOD_LCTL); + } else { + } + break; + case PRVAPP: + if (record->event.pressed) { + register_code(KC_LSFT); + if (!is_alt_tab_active) { + is_alt_tab_active = true; + (current_platform == OS_MACOS) ? register_code(KC_LGUI) : register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + unregister_code(KC_LSFT); + } + break; + case NXTAPP: + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + (current_platform == OS_MACOS) ? register_code(KC_LGUI) : register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + } + break; + } + return true; +}; + +#ifndef HAPTIC_ENABLE + #define HF_TOGG _______ +#endif + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* QWERTY */ + [_BASE] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1), + KC_LGUI, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_BSPC, KC_RGUI, MO(2)), + + /* FUNCTION */ + [_FN] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ENT, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1), + KC_LGUI, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_BSPC, KC_RGUI, MO(1)), + + [_FN2] = LAYOUT( + KC_ESC, QK_BOOTLOADER, QK_REBOOT, QK_DEBUG_TOGGLE, QK_CLEAR_EEPROM, + HF_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______), + + [_FN3] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______) +}; + +void matrix_scan_user(void) { // The very important timer. + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 1000) { + (current_platform == OS_MACOS) ? unregister_code(KC_LGUI) : unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } +} + +#if defined(ENCODER_MAP_ENABLE) + const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) }, + [_FN2] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_FN3] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + }; +#endif + +#ifdef OLED_ENABLE + #ifdef DYNAMIC_MACRO_ENABLE + bool macro1; + bool macro1rec; + bool macro2; + bool macro2rec; + bool prevEnabled; + uint8_t prevRGBmode; + + void render_dynamic_macro_status(int col, int line){ + oled_set_cursor(col,line); + macro1rec ? oled_write(PSTR("DM1"), macro1) : oled_write(PSTR(" "),false); + oled_set_cursor(col,line+1); + macro2rec ? oled_write(PSTR("DM2"), macro2) : oled_write(PSTR(" "),false); + } + + //direction indicates which macro it is, with 1 being Macro 1, -1 being Macro 2, and 0 being no macro. + void dynamic_macro_record_start_user(int8_t direction){ + prevEnabled = rgb_matrix_is_enabled(); + if (!prevEnabled) { rgb_matrix_enable(); } + prevRGBmode = rgb_matrix_get_mode(); + rgb_matrix_mode(RGB_MATRIX_BREATHING); + switch(direction){ + case 1: + macro1 = false; + macro1rec = true; + break; + case -1: + macro2 = false; + macro2rec = true; + break; + default: + macro1 = false; + macro2 = false; + macro1rec = false; + macro2rec = false; + break; + } + } + + void dynamic_macro_record_end_user(int8_t direction){ + prevEnabled ? rgb_matrix_mode(prevRGBmode) : rgb_matrix_disable(); + switch(direction){ + case 1: + macro1 = true; + break; + case -1: + macro2 = true; + break; + default: + macro1 = false; + macro2 = false; + break; + } + } + #endif + + bool clear_screen = false; + bool rerender_platform = false; + + static void render_logo(void) { + static const char PROGMEM logo[] = { + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00 + }; + + oled_write(logo, false); + } + + void render_keylock_status(led_t led_state) { + bool caps_state = (led_state.caps_lock || is_caps_word_on()); + oled_write(PSTR("CAPS"), caps_state); + oled_write(PSTR(" "), false); + oled_write(PSTR("NUM"), led_state.num_lock); + oled_write(PSTR(" "), false); + oled_write(PSTR("SCRL"), led_state.scroll_lock); + //oled_write_ln_P(PSTR(" "), false); + } + + void render_mod_status(uint8_t modifiers) { + oled_write(PSTR("SH"), (modifiers & MOD_MASK_SHIFT)); + oled_write(PSTR(" "), false); + (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("CMD"), (modifiers & MOD_MASK_GUI)) : oled_write(PSTR("CT"), (modifiers & MOD_MASK_CTRL)); + oled_write(PSTR(" "), false); + (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("OPT"), (modifiers & MOD_MASK_ALT)) : oled_write(PSTR("ALT"), (modifiers & MOD_MASK_ALT)); + oled_write(PSTR(" "), false); + (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("CT"), (modifiers & MOD_MASK_CTRL)) : oled_write(PSTR("GUI"), (modifiers & MOD_MASK_GUI)); + } + + void render_key_status_or_logo(){ + led_t led_state = host_keyboard_led_state(); + uint8_t mod_state = (get_mods()|get_oneshot_mods()); + if ( !led_state.num_lock && !led_state.caps_lock && !led_state.scroll_lock + && !(mod_state & MOD_MASK_SHIFT) && !(mod_state & MOD_MASK_ALT) && !(mod_state & MOD_MASK_CTRL) && !(mod_state & MOD_MASK_GUI)) { + if(!clear_screen) { + render_logo(); + rerender_platform = true; + } + clear_screen = true; + } else { + if (clear_screen == true) { + oled_clear(); + oled_render(); + clear_screen = false; + } + oled_set_cursor(8,0); + render_keylock_status(led_state); + oled_set_cursor(8,1); + render_mod_status(mod_state); + rerender_platform = true; + } + + } + + void render_current_layer(){ + switch (get_highest_layer(layer_state)) { + case 0: + oled_write(PSTR("Layer 0"), false); + break; + case 1: + oled_write(PSTR("Layer 1"), false); + break; + case 2: + oled_write(PSTR("Layer 2"), false); + break; + case 3: + oled_write(PSTR("Layer 3"), false); + break; + default: + oled_write(PSTR("Layer ?"), false); // Should never display, here as a catchall + } + } + + void render_current_wpm(){ + oled_write_P(PSTR("WPM: "), false); + oled_write(get_u8_str(get_current_wpm(), '0'), false); + } + + void render_platform_status(int col, int line) { + /* Show Ctrl-Gui Swap options */ + static const char PROGMEM logo[][5][3] = { + {{0x9B, 0x9C, 0}, {0xbb, 0xbc, 0}}, //Android + {{0x99, 0x9A, 0}, {0xb9, 0xba, 0}}, //Linux + {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}, //Windows + {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, //Mac/iOS + {{0x9D, 0x9E, 0}, {0xbd, 0xbe, 0}}, //Empty Placeholder + }; + current_platform = detected_host_os(); + switch (current_platform) { + /*case OS_ANDROID: //Android + oled_set_cursor(col,line); + oled_write(logo[0][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[0][1], false); + break;*/ + case OS_LINUX: //Linux + oled_set_cursor(col,line); + oled_write(logo[1][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[1][1], false); + keymap_config.swap_lctl_lgui = false; + keymap_config.swap_rctl_rgui = false; + break; + case OS_WINDOWS: //Windows + oled_set_cursor(col,line); + oled_write(logo[2][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[2][1], false); + keymap_config.swap_lctl_lgui = false; + keymap_config.swap_rctl_rgui = false; + break; + case OS_MACOS: //Mac + oled_set_cursor(col,line); + oled_write(logo[3][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[3][1], false); + keymap_config.swap_lctl_lgui = true; + keymap_config.swap_rctl_rgui = true; + break; + case OS_IOS: //iOS + oled_set_cursor(col,line); + oled_write(logo[3][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[3][1], false); + keymap_config.swap_lctl_lgui = true; + keymap_config.swap_rctl_rgui = true; + break; + default: //OS_UNSURE or not configured + oled_set_cursor(col,line); + oled_write(logo[4][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[4][1], false); + break; + } + rerender_platform = false; + } + + bool oled_task_user(void) { + render_key_status_or_logo(); + oled_set_cursor(8,2); + render_current_layer(); + #ifdef DYNAMIC_MACRO_ENABLE + render_dynamic_macro_status(18,2); + #endif + oled_set_cursor(8,3); + render_current_wpm(); + #ifdef OS_DETECTION_ENABLE + if(current_platform != detected_host_os() || rerender_platform) { render_platform_status(3,0); } + #endif + + return false; + } + +#endif diff --git a/keyboards/nachie/syndrome/keymaps/vial/readme.md b/keyboards/nachie/syndrome/keymaps/vial/readme.md new file mode 100644 index 0000000000..4b24f26170 --- /dev/null +++ b/keyboards/nachie/syndrome/keymaps/vial/readme.md @@ -0,0 +1 @@ +The vial keymap for the Syndrome PCB. \ No newline at end of file diff --git a/keyboards/nachie/syndrome/keymaps/vial/rules.mk b/keyboards/nachie/syndrome/keymaps/vial/rules.mk new file mode 100644 index 0000000000..9f6eb0c0b1 --- /dev/null +++ b/keyboards/nachie/syndrome/keymaps/vial/rules.mk @@ -0,0 +1,10 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes + +VIALRGB_ENABLE = yes +ENCODER_MAP_ENABLE = yes +BOOTMAGIC_ENABLE = yes +MAGIC_ENABLE = yes +OS_DETECTION_ENABLE = yes +DYNAMIC_MACRO_ENABLE = yes +CAPS_WORD_ENABLE = yes diff --git a/keyboards/nachie/syndrome/keymaps/vial/vial.json b/keyboards/nachie/syndrome/keymaps/vial/vial.json new file mode 100644 index 0000000000..cc3f42f35e --- /dev/null +++ b/keyboards/nachie/syndrome/keymaps/vial/vial.json @@ -0,0 +1,397 @@ +{ + "name": "Syndrome", + "vendorId": "0x4B43", + "productId": "0x5359", + "customKeycodes": [ + { + "name": "JmpWordL", + "title": "Jump Word Left", + "shortName": "JWRDL" + }, + { + "name": "JmpWordR", + "title": "Jump Word Right", + "shortName": "JWRDR" + }, + { + "name": "SlcWordL", + "title": "Select Word Left", + "shortName": "SWRDL" + }, + { + "name": "SlcWordR", + "title": "Select Word Right", + "shortName": "SWRDR" + }, + { + "name": "TabLft", + "title": "Tab Left", + "shortName": "TABL" + }, + { + "name": "TabRght", + "title": "Tab Right", + "shortName": "TABR" + }, + { + "name": "DsktpLft", + "title": "Desktop Left", + "shortName": "DSKTPL" + }, + { + "name": "DsktpRght", + "title": "Desktop Right", + "shortName": "DSKTPR" + }, + { + "name": "PrevApp", + "title": "Previous App", + "shortName": "PRVAPP" + }, + { + "name": "NextApp", + "title": "Next App", + "shortName": "NXTAPP" + } + ], + "matrix": { "rows": 10, "cols": 8 }, + "lighting": "vialrgb", + "layouts": { + "labels":[ + [ + "Right Shift", + "Split Shift Fn", + "Split Fn Shift", + "No Split" + ], + [ + "Bottom Row", + "3U Centered", + "6U Big Bar", + "3U/3U", + "2U/2U", + "1.75U/1.75U", + "7U Big Bar", + "3U/1U/3U", + "2.75U ALPS", + "3U/ENC/3U" + ], + "Macro Row" + ], + "keymap": [ + [ + { + "y": 2.5, + "x": 1.5 + }, + "3,0\n\n\n\n\n\n\n\n\ne", + "3,1\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "x": 2 + }, + "8,5\n\n\n2,0", + { + "x": 6 + }, + "9,5\n\n\n2,0", + "8,6\n\n\n2,0", + "9,6\n\n\n2,0", + "8,7\n\n\n2,0" + ], + [ + { + "y": 0.5, + "x": 1 + }, + "0,0\n\n\n\n\n\n\n\n\ne", + { + "x": 11 + }, + "1,0\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "y": -0.5, + "x": 2 + }, + "0,0", + "1,0", + "0,1", + "1,1", + "0,2", + "1,2", + "0,3", + "1,3", + "0,4", + "1,4", + "7,4" + ], + [ + { + "y": -0.5, + "x": 1 + }, + "0,1\n\n\n\n\n\n\n\n\ne", + { + "x": 11 + }, + "1,1\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "y": -0.5, + "x": 2, + "c": "#aaaaaa", + "w": 1.25 + }, + "2,0", + { + "c": "#cccccc" + }, + "3,0", + "2,1", + "3,1", + "2,2", + "3,2", + "2,3", + "3,3", + "2,4", + { + "c": "#777777", + "w": 1.75 + }, + "3,4" + ], + [ + { + "x": 2, + "c": "#aaaaaa", + "w": 1.75 + }, + "4,0", + { + "c": "#cccccc" + }, + "5,0", + "4,1", + "5,1", + "4,2", + "5,2", + "4,3", + "5,3", + { + "c": "#aaaaaa", + "w": 1.25 + }, + "4,4\n\n\n0,0", + { + "c": "#cccccc" + }, + "5,4\n\n\n0,0", + { + "x": 0.25 + }, + "4,4\n\n\n0,1", + { + "c": "#aaaaaa", + "w": 1.25 + }, + "5,4\n\n\n0,1", + { + "x": 0.25, + "w": 2.25 + }, + "4,4\n\n\n0,2" + ], + [ + { + "x": 2, + "w": 1.5 + }, + "6,0\n\n\n1,0", + "7,0\n\n\n1,0", + { + "w": 1.5 + }, + "6,1\n\n\n1,0", + { + "w": 3 + }, + "7,2\n\n\n1,0", + { + "w": 1.5 + }, + "6,3\n\n\n1,0", + "7,3\n\n\n1,0", + { + "w": 1.5 + }, + "6,4\n\n\n1,0" + ], + [ + { + "x": 6.5, + "c": "#cccccc" + }, + "2,0\n\n\n\n\n\n\n\n\ne", + "2,1\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "y": 0.25, + "x": 2, + "c": "#aaaaaa", + "w": 1.5 + }, + "6,0\n\n\n1,1", + "7,0\n\n\n1,1", + { + "w": 6 + }, + "7,2\n\n\n1,1", + "7,3\n\n\n1,1", + { + "w": 1.5 + }, + "6,4\n\n\n1,1" + ], + [ + { + "x": 2, + "w": 1.5 + }, + "6,0\n\n\n1,2", + "7,0\n\n\n1,2", + { + "w": 3 + }, + "7,1\n\n\n1,2", + { + "w": 3 + }, + "7,2\n\n\n1,2", + "7,3\n\n\n1,2", + { + "w": 1.5 + }, + "6,4\n\n\n1,2" + ], + [ + { + "x": 2, + "w": 1.5 + }, + "6,0\n\n\n1,3", + "7,0\n\n\n1,3", + "6,1\n\n\n1,3", + { + "w": 2 + }, + "7,1\n\n\n1,3", + { + "w": 2 + }, + "7,2\n\n\n1,3", + "6,3\n\n\n1,3", + "7,3\n\n\n1,3", + { + "w": 1.5 + }, + "6,4\n\n\n1,3" + ], + [ + { + "x": 2, + "w": 1.5 + }, + "6,0\n\n\n1,4", + "7,0\n\n\n1,4", + { + "w": 1.25 + }, + "6,1\n\n\n1,4", + { + "w": 1.75 + }, + "7,1\n\n\n1,4", + { + "w": 1.75 + }, + "7,2\n\n\n1,4", + { + "w": 1.25 + }, + "6,3\n\n\n1,4", + "7,3\n\n\n1,4", + { + "w": 1.5 + }, + "6,4\n\n\n1,4" + ], + [ + { + "x": 2 + }, + "6,0\n\n\n1,5", + "7,0\n\n\n1,5", + { + "w": 7 + }, + "7,2\n\n\n1,5", + "7,3\n\n\n1,5", + "6,4\n\n\n1,5" + ], + [ + { + "x": 2 + }, + "6,0\n\n\n1,6", + "7,0\n\n\n1,6", + { + "w": 3 + }, + "6,1\n\n\n1,6", + "7,2\n\n\n1,6", + { + "w": 3 + }, + "6,3\n\n\n1,6", + "7,3\n\n\n1,6", + "6,4\n\n\n1,6" + ], + [ + { + "x": 2, + "w": 1.25 + }, + "6,0\n\n\n1,7", + { + "w": 1.5 + }, + "7,0\n\n\n1,7", + { + "w": 1.25 + }, + "6,1\n\n\n1,7", + { + "w": 2.75 + }, + "7,2\n\n\n1,7", + { + "w": 1.25 + }, + "6,3\n\n\n1,7", + { + "w": 1.5 + }, + "7,3\n\n\n1,7", + { + "w": 1.5 + }, + "6,4\n\n\n1,7" + ] + ] + } +} diff --git a/keyboards/nachie/syndrome/mcuconf.h b/keyboards/nachie/syndrome/mcuconf.h new file mode 100644 index 0000000000..771e56e0de --- /dev/null +++ b/keyboards/nachie/syndrome/mcuconf.h @@ -0,0 +1,9 @@ +#pragma once + +#include_next + +#undef RP_I2C_USE_I2C0 +#define RP_I2C_USE_I2C0 FALSE + +#undef RP_I2C_USE_I2C1 +#define RP_I2C_USE_I2C1 TRUE \ No newline at end of file diff --git a/keyboards/nachie/syndrome/readme.md b/keyboards/nachie/syndrome/readme.md new file mode 100644 index 0000000000..5d6bf99339 --- /dev/null +++ b/keyboards/nachie/syndrome/readme.md @@ -0,0 +1,23 @@ +# Syndrome + +Firmware for the Syndrome (and Detour) + +* Keyboard Maintainer: [Nachie](https://github.com/nachie) +* Hardware Supported: Syndrome +* Hardware Availability: [Little Craftery](https://littlecraftery.com/products/syndrome) + +Make example for this keyboard (after setting up your build environment): + + make nachie/syndrome:default + +Or to make and flash: + + make nachie/syndrome:default:flash + + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +* **Bootmagic reset**: Hold down ESC key (top left) and plug in the keyboard +* **Physical reset button**: Briefly press the button labeled "SW_RST1" on the back of the PCB diff --git a/keyboards/nachie/syndrome/rules.mk b/keyboards/nachie/syndrome/rules.mk new file mode 100755 index 0000000000..2af4b691b6 --- /dev/null +++ b/keyboards/nachie/syndrome/rules.mk @@ -0,0 +1,4 @@ + +OLED_DRIVER = ssd1306 + +OPT_DEFS += -DHAL_USE_I2C=TRUE diff --git a/keyboards/nachie/syndrome/syndrome.c b/keyboards/nachie/syndrome/syndrome.c new file mode 100755 index 0000000000..cc62882ef0 --- /dev/null +++ b/keyboards/nachie/syndrome/syndrome.c @@ -0,0 +1,89 @@ +/* +Copyright 2024 Nachie + +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" + +led_config_t g_led_config = { { + {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, + { 6, 5, 4, 3, 2, 1, 0, NO_LED }, + { 7, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 15 }, + { 8 , 9, NO_LED, 10, 11, 12, 13, 14 }, + { NO_LED, NO_LED, NO_LED,NO_LED, NO_LED, NO_LED, NO_LED, NO_LED } +}, { + { 183,0 }, { 162,0 }, { 142,0 }, { 122,0 }, { 81,0 }, { 61,0 }, { 40,0 }, + { 20,16 }, { 40,48 }, + { 61,48 }, { 81,48 }, { 101,48 }, { 122,48 }, { 162,48 }, { 203,48 }, { 244,16 } +}, { + 1, 1, 1, 1, 1, 1, 1, + 1, 1, + 1, 1, 1, 1, 1, 1, 1 +} }; + +#ifdef OLED_ENABLE + +static void render_logo(void) { + static const char PROGMEM my_logo[] = { + // 'Screenshot 2023-07-21 at 1', 128x32px +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xfe, 0x00, 0x03, 0xc0, 0x00, 0xc0, 0x00, 0x3c, 0x00, 0x0f, 0x1f, 0xf8, 0xe0, 0x00, 0x1f, 0xff, +0xff, 0x80, 0x01, 0xc0, 0x00, 0x40, 0x00, 0x38, 0x00, 0x07, 0x1f, 0xf8, 0xe0, 0x00, 0x1f, 0xff, +0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x0f, 0xff, +0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x8f, 0xff, +0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x0f, 0xff, +0xfe, 0x1f, 0xf1, 0xc0, 0x03, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xc0, 0x1f, 0xff, +0xfe, 0x1f, 0xf1, 0xc0, 0x03, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xe0, 0x3f, 0xff, +0xfe, 0x1f, 0xf1, 0xc3, 0xff, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xf0, 0xff, 0xff, +0xfe, 0x1f, 0xf1, 0xc3, 0xff, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xf8, 0x7f, 0xff, +0xfe, 0x1f, 0xf1, 0xc3, 0xff, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xf8, 0x7f, 0xff, +0xfe, 0x00, 0x01, 0xc0, 0x00, 0x7f, 0x8f, 0xf8, 0x00, 0x07, 0x00, 0x00, 0xe1, 0xfc, 0x3f, 0xff, +0xfe, 0x00, 0x03, 0xc0, 0x00, 0xff, 0x8f, 0xfc, 0x00, 0x0f, 0x80, 0x01, 0xe1, 0xfe, 0x1f, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff +}; + oled_write_raw_P(my_logo, sizeof(my_logo)); +} + +bool oled_task_kb(void) { + // Defer to the keymap if they want to override + + if(!oled_task_user()) { + return false; + } + + // default keyboard drawing code + render_logo(); + return false; +} + +#endif \ No newline at end of file diff --git a/keyboards/nachie/syndrome_ortho/chconf.h b/keyboards/nachie/syndrome_ortho/chconf.h new file mode 100644 index 0000000000..ad01fb3387 --- /dev/null +++ b/keyboards/nachie/syndrome_ortho/chconf.h @@ -0,0 +1,11 @@ +/* + * `qmk chibios-confmigrate -i firmware/nachie/syndrome/chconf.h -r ../keymaps_qmk/platforms/chibios/boards/GENERIC_PROMICRO_RP2040/configs/chconf.h` + */ + + +#pragma once + +#include_next + +#undef CH_CFG_ST_TIMEDELTA +#define CH_CFG_ST_TIMEDELTA 100 \ No newline at end of file diff --git a/keyboards/nachie/syndrome_ortho/config.h b/keyboards/nachie/syndrome_ortho/config.h new file mode 100755 index 0000000000..895749b5e2 --- /dev/null +++ b/keyboards/nachie/syndrome_ortho/config.h @@ -0,0 +1,37 @@ +/* +Copyright 2024 Nachie + +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 RP2040_FLASH_GENERIC_03H + +#ifdef HAPTIC_ENABLE +#define SOLENOID_PIN GP15 +#endif + +/* Oled config */ +#ifdef OLED_ENABLE +#define I2C_DRIVER I2CD1 +#define I2C1_SDA_PIN GP10 +#define I2C1_SCL_PIN GP11 +#define OLED_TIMEOUT 60000 // Turns off the OLED screen after x ms of screen update inactivity. Helps reduce OLED Burn-in. Set to 0 to disable. +#define OLED_FADE_OUT +#define OLED_FADE_OUT_INTERVAL 13 +#define OLED_BRIGHTNESS 50 // The default brightness level of the OLED, from 0 to 255. +#define OLED_UPDATE_INTERVAL 16 // limits in milliseconds how frequently the OLED updates. Calculation 1000/fps (increases keyboard responsiveness) +#endif + +#define VIA_CUSTOM_LIGHTING_ENABLE diff --git a/keyboards/nachie/syndrome_ortho/halconf.h b/keyboards/nachie/syndrome_ortho/halconf.h new file mode 100644 index 0000000000..23c08453a8 --- /dev/null +++ b/keyboards/nachie/syndrome_ortho/halconf.h @@ -0,0 +1,4 @@ +#pragma once + +#include_next +#define HAL_USE_I2C TRUE \ No newline at end of file diff --git a/keyboards/nachie/syndrome_ortho/info.json b/keyboards/nachie/syndrome_ortho/info.json new file mode 100644 index 0000000000..397b8c2209 --- /dev/null +++ b/keyboards/nachie/syndrome_ortho/info.json @@ -0,0 +1,154 @@ +{ + "keyboard_name": "Syndrome Ortho", + "manufacturer": "Nachie", + "usb": { + "vid": "0x4B43", + "pid": "0x5360", + "device_version": "1.0.0" + }, + "board": "GENERIC_RP_RP2040", + "bootloader": "rp2040", + "processor": "RP2040", + "url": "https://littlecraftery.com/products/syndrome-ortho", + "maintainer": "nachie", + "ws2812": { + "pin": "GP29", + "driver": "vendor" + }, + "rgb_matrix": { + "driver": "ws2812", + "led_count": 16, + "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, + "rainbow_moving_chevron":true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "cycle_pinwheel": true, + "cycle_spiral": true, + "rainbow_pinwheels": true, + "raindrops": true, + "jellybean_raindrops": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": 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, + "solid_splash": true, + "solid_multisplash": true, + "pixel_rain": true, + "pixel_fractal": true + } + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"y": 0, "x": 0, "matrix": [8, 5], "label": "8,5"}, + {"y": 0, "x": 7, "matrix": [9, 5], "label": "9,5"}, + {"y": 0, "x": 8, "matrix": [8, 6], "label": "8,6"}, + {"y": 0, "x": 9, "matrix": [9, 6], "label": "9,6"}, + {"y": 0, "x": 10, "matrix": [8, 7], "label": "8,7"}, + {"y": 1.5, "x": 0, "matrix": [0, 0], "label": "0,0"}, + {"y": 1.5, "x": 1, "matrix": [1, 0], "label": "1,0"}, + {"y": 1.5, "x": 2, "matrix": [0, 1], "label": "0,1"}, + {"y": 1.5, "x": 3, "matrix": [1, 1], "label": "1,1"}, + {"y": 1.5, "x": 4, "matrix": [0, 2], "label": "0,2"}, + {"y": 1.5, "x": 5, "matrix": [1, 2], "label": "1,2"}, + {"y": 1.5, "x": 6, "matrix": [0, 3], "label": "0,3"}, + {"y": 1.5, "x": 7, "matrix": [1, 3], "label": "1,3"}, + {"y": 1.5, "x": 8, "matrix": [0, 4], "label": "0,4"}, + {"y": 1.5, "x": 9, "matrix": [1, 4], "label": "1,4"}, + {"y": 1.5, "x": 10, "matrix": [0, 5], "label": "0,5"}, + {"y": 2.5, "x": 0, "matrix": [2, 0], "label": "2,0"}, + {"y": 2.5, "x": 1, "matrix": [3, 0], "label": "3,0"}, + {"y": 2.5, "x": 2, "matrix": [2, 1], "label": "2,1"}, + {"y": 2.5, "x": 3, "matrix": [3, 1], "label": "3,1"}, + {"y": 2.5, "x": 4, "matrix": [2, 2], "label": "2,2"}, + {"y": 2.5, "x": 5, "matrix": [3, 2], "label": "3,2"}, + {"y": 2.5, "x": 6, "matrix": [2, 3], "label": "2,3"}, + {"y": 2.5, "x": 7, "matrix": [3, 3], "label": "3,3"}, + {"y": 2.5, "x": 8, "matrix": [2, 4], "label": "2,4"}, + {"y": 2.5, "x": 9, "matrix": [3, 4], "label": "3,4"}, + {"y": 2.5, "x": 10, "matrix": [2, 5], "label": "2,5"}, + {"y": 3.5, "x": 0, "matrix": [4, 0], "label": "4,0"}, + {"y": 3.5, "x": 1, "matrix": [5, 0], "label": "5,0"}, + {"y": 3.5, "x": 2, "matrix": [4, 1], "label": "4,1"}, + {"y": 3.5, "x": 3, "matrix": [5, 1], "label": "5,1"}, + {"y": 3.5, "x": 4, "matrix": [4, 2], "label": "4,2"}, + {"y": 3.5, "x": 5, "matrix": [5, 2], "label": "5,2"}, + {"y": 3.5, "x": 6, "matrix": [4, 3], "label": "4,3"}, + {"y": 3.5, "x": 7, "matrix": [5, 3], "label": "5,3"}, + {"y": 3.5, "x": 8, "matrix": [4, 4], "label": "4,4"}, + {"y": 3.5, "x": 9, "matrix": [5, 4], "label": "5,4"}, + {"y": 3.5, "x": 10, "matrix": [4, 5], "label": "4,5"}, + {"y": 4.5, "x": 0, "matrix": [6, 0], "w": 1.5, "label": "6,0"}, + {"y": 4.5, "x": 1.5, "matrix": [7, 0], "label": "7,0"}, + {"y": 4.5, "x": 2.5, "matrix": [6, 1], "label": "6,1"}, + {"y": 4.5, "x": 3.5, "matrix": [7, 1], "label": "7,1"}, + {"y": 4.5, "x": 4.5, "matrix": [6, 2], "label": "6,2"}, + {"y": 4.5, "x": 4.5, "matrix": [6, 3], "w": 2, "label": "6,3"}, + {"y": 4.5, "x": 5.5, "matrix": [7, 2], "label": "7,2"}, + {"y": 4.5, "x": 6.5, "matrix": [7, 3], "label": "7,3"}, + {"y": 4.5, "x": 7.5, "matrix": [6, 4], "label": "6,4"}, + {"y": 4.5, "x": 8.5, "matrix": [7, 4], "label": "7,4"}, + {"y": 4.5, "x": 9.5, "matrix": [6, 5], "w": 1.5, "label": "6,5"} + ] + } + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": false, + "audio": false, + "backlight": false, + "rgblight": false, + "encoder": true, + "rgb_matrix": true, + "haptic": true, + "oled": true, + "wpm": true + }, + "build": { + "lto": true + }, + "haptic": { + "driver": "solenoid" + }, + "encoder": { + "enabled": true, + "rotary": [ + { "pin_a": "GP22", "pin_b": "GP23", "resolution": 2 }, + { "pin_a": "GP26", "pin_b": "GP24", "resolution": 2 }, + { "pin_a": "GP0", "pin_b": "GP1", "resolution": 2 }, + { "pin_a": "GP5", "pin_b": "GP3", "resolution": 2 } + ] + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["GP28", "GP21", "GP20", "GP6", "GP2", "GP12", "GP13", "GP14"], + "rows": ["GP25", "GP27", "GP16", "GP7", "GP17", "GP18", "GP19", "GP4", "GP8", "GP9"] + } +} diff --git a/keyboards/nachie/syndrome_ortho/keyboard.json b/keyboards/nachie/syndrome_ortho/keyboard.json new file mode 100644 index 0000000000..397b8c2209 --- /dev/null +++ b/keyboards/nachie/syndrome_ortho/keyboard.json @@ -0,0 +1,154 @@ +{ + "keyboard_name": "Syndrome Ortho", + "manufacturer": "Nachie", + "usb": { + "vid": "0x4B43", + "pid": "0x5360", + "device_version": "1.0.0" + }, + "board": "GENERIC_RP_RP2040", + "bootloader": "rp2040", + "processor": "RP2040", + "url": "https://littlecraftery.com/products/syndrome-ortho", + "maintainer": "nachie", + "ws2812": { + "pin": "GP29", + "driver": "vendor" + }, + "rgb_matrix": { + "driver": "ws2812", + "led_count": 16, + "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, + "rainbow_moving_chevron":true, + "cycle_out_in": true, + "cycle_out_in_dual": true, + "cycle_pinwheel": true, + "cycle_spiral": true, + "rainbow_pinwheels": true, + "raindrops": true, + "jellybean_raindrops": true, + "hue_breathing": true, + "hue_pendulum": true, + "hue_wave": 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, + "solid_splash": true, + "solid_multisplash": true, + "pixel_rain": true, + "pixel_fractal": true + } + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"y": 0, "x": 0, "matrix": [8, 5], "label": "8,5"}, + {"y": 0, "x": 7, "matrix": [9, 5], "label": "9,5"}, + {"y": 0, "x": 8, "matrix": [8, 6], "label": "8,6"}, + {"y": 0, "x": 9, "matrix": [9, 6], "label": "9,6"}, + {"y": 0, "x": 10, "matrix": [8, 7], "label": "8,7"}, + {"y": 1.5, "x": 0, "matrix": [0, 0], "label": "0,0"}, + {"y": 1.5, "x": 1, "matrix": [1, 0], "label": "1,0"}, + {"y": 1.5, "x": 2, "matrix": [0, 1], "label": "0,1"}, + {"y": 1.5, "x": 3, "matrix": [1, 1], "label": "1,1"}, + {"y": 1.5, "x": 4, "matrix": [0, 2], "label": "0,2"}, + {"y": 1.5, "x": 5, "matrix": [1, 2], "label": "1,2"}, + {"y": 1.5, "x": 6, "matrix": [0, 3], "label": "0,3"}, + {"y": 1.5, "x": 7, "matrix": [1, 3], "label": "1,3"}, + {"y": 1.5, "x": 8, "matrix": [0, 4], "label": "0,4"}, + {"y": 1.5, "x": 9, "matrix": [1, 4], "label": "1,4"}, + {"y": 1.5, "x": 10, "matrix": [0, 5], "label": "0,5"}, + {"y": 2.5, "x": 0, "matrix": [2, 0], "label": "2,0"}, + {"y": 2.5, "x": 1, "matrix": [3, 0], "label": "3,0"}, + {"y": 2.5, "x": 2, "matrix": [2, 1], "label": "2,1"}, + {"y": 2.5, "x": 3, "matrix": [3, 1], "label": "3,1"}, + {"y": 2.5, "x": 4, "matrix": [2, 2], "label": "2,2"}, + {"y": 2.5, "x": 5, "matrix": [3, 2], "label": "3,2"}, + {"y": 2.5, "x": 6, "matrix": [2, 3], "label": "2,3"}, + {"y": 2.5, "x": 7, "matrix": [3, 3], "label": "3,3"}, + {"y": 2.5, "x": 8, "matrix": [2, 4], "label": "2,4"}, + {"y": 2.5, "x": 9, "matrix": [3, 4], "label": "3,4"}, + {"y": 2.5, "x": 10, "matrix": [2, 5], "label": "2,5"}, + {"y": 3.5, "x": 0, "matrix": [4, 0], "label": "4,0"}, + {"y": 3.5, "x": 1, "matrix": [5, 0], "label": "5,0"}, + {"y": 3.5, "x": 2, "matrix": [4, 1], "label": "4,1"}, + {"y": 3.5, "x": 3, "matrix": [5, 1], "label": "5,1"}, + {"y": 3.5, "x": 4, "matrix": [4, 2], "label": "4,2"}, + {"y": 3.5, "x": 5, "matrix": [5, 2], "label": "5,2"}, + {"y": 3.5, "x": 6, "matrix": [4, 3], "label": "4,3"}, + {"y": 3.5, "x": 7, "matrix": [5, 3], "label": "5,3"}, + {"y": 3.5, "x": 8, "matrix": [4, 4], "label": "4,4"}, + {"y": 3.5, "x": 9, "matrix": [5, 4], "label": "5,4"}, + {"y": 3.5, "x": 10, "matrix": [4, 5], "label": "4,5"}, + {"y": 4.5, "x": 0, "matrix": [6, 0], "w": 1.5, "label": "6,0"}, + {"y": 4.5, "x": 1.5, "matrix": [7, 0], "label": "7,0"}, + {"y": 4.5, "x": 2.5, "matrix": [6, 1], "label": "6,1"}, + {"y": 4.5, "x": 3.5, "matrix": [7, 1], "label": "7,1"}, + {"y": 4.5, "x": 4.5, "matrix": [6, 2], "label": "6,2"}, + {"y": 4.5, "x": 4.5, "matrix": [6, 3], "w": 2, "label": "6,3"}, + {"y": 4.5, "x": 5.5, "matrix": [7, 2], "label": "7,2"}, + {"y": 4.5, "x": 6.5, "matrix": [7, 3], "label": "7,3"}, + {"y": 4.5, "x": 7.5, "matrix": [6, 4], "label": "6,4"}, + {"y": 4.5, "x": 8.5, "matrix": [7, 4], "label": "7,4"}, + {"y": 4.5, "x": 9.5, "matrix": [6, 5], "w": 1.5, "label": "6,5"} + ] + } + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": false, + "audio": false, + "backlight": false, + "rgblight": false, + "encoder": true, + "rgb_matrix": true, + "haptic": true, + "oled": true, + "wpm": true + }, + "build": { + "lto": true + }, + "haptic": { + "driver": "solenoid" + }, + "encoder": { + "enabled": true, + "rotary": [ + { "pin_a": "GP22", "pin_b": "GP23", "resolution": 2 }, + { "pin_a": "GP26", "pin_b": "GP24", "resolution": 2 }, + { "pin_a": "GP0", "pin_b": "GP1", "resolution": 2 }, + { "pin_a": "GP5", "pin_b": "GP3", "resolution": 2 } + ] + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "cols": ["GP28", "GP21", "GP20", "GP6", "GP2", "GP12", "GP13", "GP14"], + "rows": ["GP25", "GP27", "GP16", "GP7", "GP17", "GP18", "GP19", "GP4", "GP8", "GP9"] + } +} diff --git a/keyboards/nachie/syndrome_ortho/keymaps/default/keymap.c b/keyboards/nachie/syndrome_ortho/keymaps/default/keymap.c new file mode 100755 index 0000000000..cc7dcb2934 --- /dev/null +++ b/keyboards/nachie/syndrome_ortho/keymaps/default/keymap.c @@ -0,0 +1,28 @@ +/* +Copyright 2024 Nachie + +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] = { + + /* QWERTY */ + LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_SPC, KC_H, KC_J, KC_K, KC_L, KC_ENT, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1), + KC_LGUI, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_BSPC, KC_SPC, KC_SPC, KC_BSPC, KC_RGUI, MO(1)) +}; diff --git a/keyboards/nachie/syndrome_ortho/keymaps/default/readme.md b/keyboards/nachie/syndrome_ortho/keymaps/default/readme.md new file mode 100644 index 0000000000..bdaa70b6e3 --- /dev/null +++ b/keyboards/nachie/syndrome_ortho/keymaps/default/readme.md @@ -0,0 +1 @@ +The default keymap for the Syndrome Ortho. \ No newline at end of file diff --git a/keyboards/nachie/syndrome_ortho/keymaps/vial/config.h b/keyboards/nachie/syndrome_ortho/keymaps/vial/config.h new file mode 100644 index 0000000000..60cacf763c --- /dev/null +++ b/keyboards/nachie/syndrome_ortho/keymaps/vial/config.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#define VIA_EEPROM_LAYOUT_OPTIONS_SIZE 2 + +#define VIAL_KEYBOARD_UID {0xC9, 0x3D, 0x14, 0x32, 0x17, 0xA3, 0xD1, 0x9D} + +#define VIAL_UNLOCK_COMBO_ROWS { 0, 3 } +#define VIAL_UNLOCK_COMBO_COLS { 0, 4 } + +#define RGB_MATRIX_FRAMEBUFFER_EFFECTS +#define RGB_MATRIX_KEYPRESSES \ No newline at end of file diff --git a/keyboards/nachie/syndrome_ortho/keymaps/vial/keymap.c b/keyboards/nachie/syndrome_ortho/keymaps/vial/keymap.c new file mode 100755 index 0000000000..d5a1298178 --- /dev/null +++ b/keyboards/nachie/syndrome_ortho/keymaps/vial/keymap.c @@ -0,0 +1,492 @@ +/* +Copyright 2024 Nachie + +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 +#include "os_detection.h" + +#ifdef OLED_ENABLE +void render_key_status_or_logo(void); +void render_current_layer(void); +void render_current_wpm(void); +#endif + +os_variant_t current_platform; +bool is_alt_tab_active = false; +uint16_t alt_tab_timer = 0; + +enum layer_names { + _BASE, // Default Layer + _FN, // Fn Layer 1 + _FN2, // Fn Layer 2 + _FN3 // Fn Layer 3 +}; + +enum custom_keycode { + JWRDL = QK_KB_0, + JWRDR, + SWRDL, + SWRDR, + TABL, + TABR, + DSKTPL, + DSKTPR, + PRVAPP, + NXTAPP +}; + +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case KC_HOME: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LGUI); + tap_code(KC_LEFT); + unregister_mods(MOD_LGUI); + } else { + tap_code(KC_HOME); + } + break; + case KC_END: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LGUI); + tap_code(KC_RIGHT); + unregister_mods(MOD_LGUI); + } else { + tap_code(KC_END); + } + break; + case KC_PGUP: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LGUI); + tap_code(KC_UP); + unregister_mods(MOD_LGUI); + } else { + tap_code(KC_PGUP); + } + break; + case KC_PGDN: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LGUI); + tap_code(KC_DOWN); + unregister_mods(MOD_LGUI); + } else { + tap_code(KC_PGDN); + } + break; + case KC_NUM_LOCK: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LSFT); + tap_code(KC_CLEAR); + unregister_mods(MOD_LSFT); + } else { + tap_code(KC_NUM_LOCK); + } + break; + case KC_SCROLL_LOCK: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LCTL); + tap_code(KC_F14); + unregister_mods(MOD_LCTL); + } else { + tap_code(KC_SCROLL_LOCK); + } + break; + case KC_PRINT_SCREEN: + if (record->event.pressed && current_platform == OS_MACOS) { + register_mods(MOD_LSFT); + register_mods(MOD_LGUI); + tap_code(KC_5); + unregister_mods(MOD_LGUI); + unregister_mods(MOD_LSFT); + } else { + tap_code(KC_PRINT_SCREEN); + } + break; + case JWRDL: + if (record->event.pressed) { + (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL); + tap_code(KC_LEFT); + (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL); + } else { + } + break; + case JWRDR: + if (record->event.pressed) { + (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL); + tap_code(KC_RIGHT); + (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL); + } else { + } + break; + case SWRDL: + if (record->event.pressed) { + register_mods(MOD_LSFT); + (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL); + tap_code(KC_LEFT); + (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL); + unregister_mods(MOD_LSFT); + } else { + } + break; + case SWRDR: + if (record->event.pressed) { + register_mods(MOD_LSFT); + (current_platform == OS_MACOS) ? register_mods(MOD_LALT) : register_mods(MOD_LCTL); + tap_code(KC_RIGHT); + (current_platform == OS_MACOS) ? unregister_mods(MOD_LALT) : unregister_mods(MOD_LCTL); + unregister_mods(MOD_LSFT); + } else { + } + break; + case TABL: + if (record->event.pressed) { + register_mods(MOD_LCTL); + register_mods(MOD_LSFT); + tap_code(KC_TAB); + unregister_mods(MOD_LSFT); + unregister_mods(MOD_LCTL); + } else { + } + break; + case TABR: + if (record->event.pressed) { + register_mods(MOD_LCTL); + tap_code(KC_TAB); + unregister_mods(MOD_LCTL); + } else { + } + break; + case DSKTPL: + if (record->event.pressed) { + register_mods(MOD_LCTL); + register_mods(MOD_LGUI); + (current_platform == OS_LINUX) ? tap_code(KC_UP) : tap_code(KC_LEFT); + unregister_mods(MOD_LGUI); + unregister_mods(MOD_LCTL); + } else { + } + break; + case DSKTPR: + if (record->event.pressed) { + register_mods(MOD_LCTL); + register_mods(MOD_LGUI); + (current_platform == OS_LINUX) ? tap_code(KC_DOWN) : tap_code(KC_RGHT); + unregister_mods(MOD_LGUI); + unregister_mods(MOD_LCTL); + } else { + } + break; + case PRVAPP: + if (record->event.pressed) { + register_code(KC_LSFT); + if (!is_alt_tab_active) { + is_alt_tab_active = true; + (current_platform == OS_MACOS) ? register_code(KC_LGUI) : register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + unregister_code(KC_LSFT); + } + break; + case NXTAPP: + if (record->event.pressed) { + if (!is_alt_tab_active) { + is_alt_tab_active = true; + (current_platform == OS_MACOS) ? register_code(KC_LGUI) : register_code(KC_LALT); + } + alt_tab_timer = timer_read(); + register_code(KC_TAB); + } else { + unregister_code(KC_TAB); + } + break; + } + return true; +}; + +#ifndef HAPTIC_ENABLE + #define HF_TOGG _______ +#endif + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + /* QWERTY */ + [_BASE] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, + KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_SPC, KC_H, KC_J, KC_K, KC_L, KC_ENT, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1), + KC_LGUI, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_BSPC, KC_SPC, KC_SPC, KC_BSPC, KC_RGUI, MO(2)), + + /* FUNCTION */ + [_FN] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, + KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_A, KC_S, KC_D, KC_F, KC_G, KC_SPC, KC_H, KC_J, KC_K, KC_L, KC_ENT, + KC_Z, KC_X, KC_C, KC_V, KC_B, KC_SPC, KC_N, KC_M, KC_DOT, KC_LSFT, MO(1), + KC_LGUI, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_BSPC, KC_SPC, KC_SPC, KC_BSPC, KC_RGUI, MO(1)), + + [_FN2] = LAYOUT( + KC_ESC, QK_BOOTLOADER, QK_REBOOT, QK_DEBUG_TOGGLE, QK_CLEAR_EEPROM, + HF_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______), + + [_FN3] = LAYOUT( + KC_ESC, KC_1, KC_2, KC_3, KC_4, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______) +}; + +void matrix_scan_user(void) { // The very important timer. + if (is_alt_tab_active) { + if (timer_elapsed(alt_tab_timer) > 1000) { + (current_platform == OS_MACOS) ? unregister_code(KC_LGUI) : unregister_code(KC_LALT); + is_alt_tab_active = false; + } + } +} + +#if defined(ENCODER_MAP_ENABLE) + const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) }, + [_FN2] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [_FN3] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + }; +#endif + +#ifdef OLED_ENABLE + #ifdef DYNAMIC_MACRO_ENABLE + bool macro1; + bool macro1rec; + bool macro2; + bool macro2rec; + bool prevEnabled; + uint8_t prevRGBmode; + + void render_dynamic_macro_status(int col, int line){ + oled_set_cursor(col,line); + macro1rec ? oled_write(PSTR("DM1"), macro1) : oled_write(PSTR(" "),false); + oled_set_cursor(col,line+1); + macro2rec ? oled_write(PSTR("DM2"), macro2) : oled_write(PSTR(" "),false); + } + + //direction indicates which macro it is, with 1 being Macro 1, -1 being Macro 2, and 0 being no macro. + void dynamic_macro_record_start_user(int8_t direction){ + prevEnabled = rgb_matrix_is_enabled(); + if (!prevEnabled) { rgb_matrix_enable(); } + prevRGBmode = rgb_matrix_get_mode(); + rgb_matrix_mode(RGB_MATRIX_BREATHING); + switch(direction){ + case 1: + macro1 = false; + macro1rec = true; + break; + case -1: + macro2 = false; + macro2rec = true; + break; + default: + macro1 = false; + macro2 = false; + macro1rec = false; + macro2rec = false; + break; + } + } + + void dynamic_macro_record_end_user(int8_t direction){ + prevEnabled ? rgb_matrix_mode(prevRGBmode) : rgb_matrix_disable(); + switch(direction){ + case 1: + macro1 = true; + break; + case -1: + macro2 = true; + break; + default: + macro1 = false; + macro2 = false; + break; + } + } + #endif + + bool clear_screen = false; + bool rerender_platform = false; + + static void render_logo(void) { + static const char PROGMEM logo[] = { + 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, + 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, + 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0x00 + }; + + oled_write(logo, false); + } + + void render_keylock_status(led_t led_state) { + bool caps_state = (led_state.caps_lock || is_caps_word_on()); + oled_write(PSTR("CAPS"), caps_state); + oled_write(PSTR(" "), false); + oled_write(PSTR("NUM"), led_state.num_lock); + oled_write(PSTR(" "), false); + oled_write(PSTR("SCRL"), led_state.scroll_lock); + //oled_write_ln_P(PSTR(" "), false); + } + + void render_mod_status(uint8_t modifiers) { + oled_write(PSTR("SH"), (modifiers & MOD_MASK_SHIFT)); + oled_write(PSTR(" "), false); + (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("CMD"), (modifiers & MOD_MASK_GUI)) : oled_write(PSTR("CT"), (modifiers & MOD_MASK_CTRL)); + oled_write(PSTR(" "), false); + (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("OPT"), (modifiers & MOD_MASK_ALT)) : oled_write(PSTR("ALT"), (modifiers & MOD_MASK_ALT)); + oled_write(PSTR(" "), false); + (current_platform == OS_MACOS || current_platform == OS_IOS) ? oled_write(PSTR("CT"), (modifiers & MOD_MASK_CTRL)) : oled_write(PSTR("GUI"), (modifiers & MOD_MASK_GUI)); + } + + void render_key_status_or_logo(){ + led_t led_state = host_keyboard_led_state(); + uint8_t mod_state = (get_mods()|get_oneshot_mods()); + if ( !led_state.num_lock && !led_state.caps_lock && !led_state.scroll_lock + && !(mod_state & MOD_MASK_SHIFT) && !(mod_state & MOD_MASK_ALT) && !(mod_state & MOD_MASK_CTRL) && !(mod_state & MOD_MASK_GUI)) { + if(!clear_screen) { + render_logo(); + rerender_platform = true; + } + clear_screen = true; + } else { + if (clear_screen == true) { + oled_clear(); + oled_render(); + clear_screen = false; + } + oled_set_cursor(8,0); + render_keylock_status(led_state); + oled_set_cursor(8,1); + render_mod_status(mod_state); + rerender_platform = true; + } + + } + + void render_current_layer(){ + switch (get_highest_layer(layer_state)) { + case 0: + oled_write(PSTR("Layer 0"), false); + break; + case 1: + oled_write(PSTR("Layer 1"), false); + break; + case 2: + oled_write(PSTR("Layer 2"), false); + break; + case 3: + oled_write(PSTR("Layer 3"), false); + break; + default: + oled_write(PSTR("Layer ?"), false); // Should never display, here as a catchall + } + } + + void render_current_wpm(){ + oled_write_P(PSTR("WPM: "), false); + oled_write(get_u8_str(get_current_wpm(), '0'), false); + } + + void render_platform_status(int col, int line) { + /* Show Ctrl-Gui Swap options */ + static const char PROGMEM logo[][5][3] = { + {{0x9B, 0x9C, 0}, {0xbb, 0xbc, 0}}, //Android + {{0x99, 0x9A, 0}, {0xb9, 0xba, 0}}, //Linux + {{0x97, 0x98, 0}, {0xb7, 0xb8, 0}}, //Windows + {{0x95, 0x96, 0}, {0xb5, 0xb6, 0}}, //Mac/iOS + {{0x9D, 0x9E, 0}, {0xbd, 0xbe, 0}}, //Empty Placeholder + }; + current_platform = detected_host_os(); + switch (current_platform) { + /*case OS_ANDROID: //Android + oled_set_cursor(col,line); + oled_write(logo[0][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[0][1], false); + break;*/ + case OS_LINUX: //Linux + oled_set_cursor(col,line); + oled_write(logo[1][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[1][1], false); + keymap_config.swap_lctl_lgui = false; + keymap_config.swap_rctl_rgui = false; + break; + case OS_WINDOWS: //Windows + oled_set_cursor(col,line); + oled_write(logo[2][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[2][1], false); + keymap_config.swap_lctl_lgui = false; + keymap_config.swap_rctl_rgui = false; + break; + case OS_MACOS: //Mac + oled_set_cursor(col,line); + oled_write(logo[3][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[3][1], false); + keymap_config.swap_lctl_lgui = true; + keymap_config.swap_rctl_rgui = true; + break; + case OS_IOS: //iOS + oled_set_cursor(col,line); + oled_write(logo[3][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[3][1], false); + keymap_config.swap_lctl_lgui = true; + keymap_config.swap_rctl_rgui = true; + break; + default: //OS_UNSURE or not configured + oled_set_cursor(col,line); + oled_write(logo[4][0], false); + oled_set_cursor(col,line+1); + oled_write(logo[4][1], false); + break; + } + rerender_platform = false; + } + + bool oled_task_user(void) { + render_key_status_or_logo(); + oled_set_cursor(8,2); + render_current_layer(); + #ifdef DYNAMIC_MACRO_ENABLE + render_dynamic_macro_status(18,2); + #endif + oled_set_cursor(8,3); + render_current_wpm(); + #ifdef OS_DETECTION_ENABLE + if(current_platform != detected_host_os() || rerender_platform) { render_platform_status(3,0); } + #endif + + return false; + } + +#endif diff --git a/keyboards/nachie/syndrome_ortho/keymaps/vial/readme.md b/keyboards/nachie/syndrome_ortho/keymaps/vial/readme.md new file mode 100644 index 0000000000..eb6fef76ce --- /dev/null +++ b/keyboards/nachie/syndrome_ortho/keymaps/vial/readme.md @@ -0,0 +1 @@ +The via keymap for the Syndrome Ortho PCB. \ No newline at end of file diff --git a/keyboards/nachie/syndrome_ortho/keymaps/vial/rules.mk b/keyboards/nachie/syndrome_ortho/keymaps/vial/rules.mk new file mode 100644 index 0000000000..9f6eb0c0b1 --- /dev/null +++ b/keyboards/nachie/syndrome_ortho/keymaps/vial/rules.mk @@ -0,0 +1,10 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes + +VIALRGB_ENABLE = yes +ENCODER_MAP_ENABLE = yes +BOOTMAGIC_ENABLE = yes +MAGIC_ENABLE = yes +OS_DETECTION_ENABLE = yes +DYNAMIC_MACRO_ENABLE = yes +CAPS_WORD_ENABLE = yes diff --git a/keyboards/nachie/syndrome_ortho/keymaps/vial/vial.json b/keyboards/nachie/syndrome_ortho/keymaps/vial/vial.json new file mode 100644 index 0000000000..a5a15ec4ce --- /dev/null +++ b/keyboards/nachie/syndrome_ortho/keymaps/vial/vial.json @@ -0,0 +1,302 @@ +{ + "name": "Syndrome", + "vendorId": "0x4B43", + "productId": "0x5360", + "customKeycodes": [ + { + "name": "JmpWordL", + "title": "Jump Word Left", + "shortName": "JWRDL" + }, + { + "name": "JmpWordR", + "title": "Jump Word Right", + "shortName": "JWRDR" + }, + { + "name": "SlcWordL", + "title": "Select Word Left", + "shortName": "SWRDL" + }, + { + "name": "SlcWordR", + "title": "Select Word Right", + "shortName": "SWRDR" + }, + { + "name": "TabLft", + "title": "Tab Left", + "shortName": "TABL" + }, + { + "name": "TabRght", + "title": "Tab Right", + "shortName": "TABR" + }, + { + "name": "DsktpLft", + "title": "Desktop Left", + "shortName": "DSKTPL" + }, + { + "name": "DsktpRght", + "title": "Desktop Right", + "shortName": "DSKTPR" + }, + { + "name": "PrevApp", + "title": "Previous App", + "shortName": "PRVAPP" + }, + { + "name": "NextApp", + "title": "Next App", + "shortName": "NXTAPP" + } + ], + "matrix": { "rows": 10, "cols": 8 }, + "lighting": "vialrgb", + "layouts": { + "labels":[ + [ + "Bottom Row", + "All 1U", + "2U Centered Space", + "6U Big Bar", + "3U/3U", + "2U/2U", + "1.75U/1.75U" + ], + "Alpha Stagger", + "R1 Encoder", + "R2 Encoder", + "R3 Encoder", + "Macro Row" + ], + "keymap": [ + [ + { + "y": 2.5, + "x": 2 + }, + "3,0\n\n\n\n\n\n\n\n\ne", + "3,1\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "x": 2.5 + }, + "8,5\n\n\n5,0", + { + "x": 6 + }, + "9,5\n\n\n5,0", + "8,6\n\n\n5,0", + "9,6\n\n\n5,0", + "8,7\n\n\n5,0" + ], + [ + { + "y": 0.5, + "x": 2.5 + }, + "0,0", + "1,0", + "0,1", + "1,1", + "0,2", + "1,2", + "0,3", + "1,3", + "0,4", + "1,4", + "0,5", + { + "x": 0.75, + "d": true + }, + "0,0\n\n\n2,0\n\n\n\n\n\ne", + { + "d": true + }, + "0,1\n\n\n2,0\n\n\n\n\n\ne", + "0,0\n\n\n2,1\n\n\n\n\n\ne", + "0,1\n\n\n2,1\n\n\n\n\n\ne" + ], + [ + { + "x": 2.5, + "c": "#aaaaaa" + }, + "2,0", + { + "c": "#cccccc" + }, + "3,0", + "2,1", + "3,1", + "2,2", + "3,2", + "2,3", + "3,3", + "2,4", + { + "c": "#777777" + }, + "3,4", + "2,5", + { + "x": 0.75, + "c": "#cccccc", + "d": true + }, + "1,0\n\n\n3,0\n\n\n\n\n\ne", + { + "d": true + }, + "1,1\n\n\n3,0\n\n\n\n\n\ne", + "1,0\n\n\n3,1\n\n\n\n\n\ne", + "1,1\n\n\n3,1\n\n\n\n\n\ne" + ], + [ + { + "x": 2.5, + "c": "#aaaaaa" + }, + "4,0\n\n\n1,0", + { + "c": "#cccccc" + }, + "5,0\n\n\n1,0", + "4,1\n\n\n1,0", + "5,1\n\n\n1,0", + "4,2\n\n\n1,0", + "5,2", + "4,3\n\n\n1,0", + "5,3\n\n\n1,0", + "4,4\n\n\n1,0", + { + "c": "#aaaaaa" + }, + "5,4\n\n\n1,0", + "4,5\n\n\n1,0", + { + "x": 0.75, + "c": "#cccccc", + "d": true + }, + "2,0\n\n\n4,0\n\n\n\n\n\ne", + { + "d": true + }, + "2,1\n\n\n4,0\n\n\n\n\n\ne", + "2,0\n\n\n4,1\n\n\n\n\n\ne", + "2,1\n\n\n4,1\n\n\n\n\n\ne" + ], + [ + { + "x": 2.5, + "w": 1.5 + }, + "6,0", + "7,0", + "6,1\n\n\n0,0", + "7,1\n\n\n0,0", + "6,2\n\n\n0,0", + "7,2\n\n\n0,0", + "7,3\n\n\n0,0", + "6,4\n\n\n0,0", + "7,4", + { + "w": 1.5 + }, + "6,5" + ], + [ + { + "x": 5 + }, + "6,1\n\n\n0,1", + "7,1\n\n\n0,1", + { + "w": 2 + }, + "6,3\n\n\n0,1", + "7,3\n\n\n0,1", + "6,4\n\n\n0,1" + ], + [ + { + "x": 5, + "w": 6 + }, + "6,3\n\n\n0,2" + ], + [ + { + "x": 5, + "w": 3 + }, + "7,1\n\n\n0,3", + { + "w": 3 + }, + "7,3\n\n\n0,3" + ], + [ + { + "x": 5 + }, + "6,1\n\n\n0,4", + { + "w": 2 + }, + "6,2\n\n\n0,4", + { + "w": 2 + }, + "7,3\n\n\n0,4", + "6,4\n\n\n0,4" + ], + [ + { + "x": 5, + "w": 1.25 + }, + "6,1\n\n\n0,5", + { + "w": 1.75 + }, + "6,2\n\n\n0,5", + { + "w": 1.75 + }, + "7,3\n\n\n0,5", + { + "w": 1.25 + }, + "6,4\n\n\n0,5" + ], + [ + { + "y": 1.25, + "x": 2.5, + "w": 1.5 + }, + "4,0\n\n\n1,1", + "5,0\n\n\n1,1", + "4,1\n\n\n1,1", + "5,1\n\n\n1,1", + "4,2\n\n\n1,1", + "4,3\n\n\n1,1", + "5,3\n\n\n1,1", + "4,4\n\n\n1,1", + "5,4\n\n\n1,1", + { + "w": 1.5 + }, + "4,5\n\n\n1,1" + ] + ] + } +} diff --git a/keyboards/nachie/syndrome_ortho/mcuconf.h b/keyboards/nachie/syndrome_ortho/mcuconf.h new file mode 100644 index 0000000000..771e56e0de --- /dev/null +++ b/keyboards/nachie/syndrome_ortho/mcuconf.h @@ -0,0 +1,9 @@ +#pragma once + +#include_next + +#undef RP_I2C_USE_I2C0 +#define RP_I2C_USE_I2C0 FALSE + +#undef RP_I2C_USE_I2C1 +#define RP_I2C_USE_I2C1 TRUE \ No newline at end of file diff --git a/keyboards/nachie/syndrome_ortho/readme.md b/keyboards/nachie/syndrome_ortho/readme.md new file mode 100644 index 0000000000..5c94323941 --- /dev/null +++ b/keyboards/nachie/syndrome_ortho/readme.md @@ -0,0 +1,23 @@ +# Syndrome Ortho + +Firmware for the Syndrome Ortho (and Detour) + +* Keyboard Maintainer: [Nachie](https://github.com/nachie) +* Hardware Supported: Syndrome Ortho +* Hardware Availability: [Little Craftery](https://littlecraftery.com/products/syndrome-ortho) + +Make example for this keyboard (after setting up your build environment): + + make nachie/syndrome_ortho:default + +Or to make and flash: + + make nachie/syndrome_ortho:default:flash + + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +* **Bootmagic reset**: Hold down ESC key (top left) and plug in the keyboard +* **Physical reset button**: Briefly press the button labeled "SW_RST1" on the back of the PCB diff --git a/keyboards/nachie/syndrome_ortho/rules.mk b/keyboards/nachie/syndrome_ortho/rules.mk new file mode 100755 index 0000000000..d45c132405 --- /dev/null +++ b/keyboards/nachie/syndrome_ortho/rules.mk @@ -0,0 +1,3 @@ +OLED_DRIVER = ssd1306 + +OPT_DEFS += -DHAL_USE_I2C=TRUE diff --git a/keyboards/nachie/syndrome_ortho/syndrome_ortho.c b/keyboards/nachie/syndrome_ortho/syndrome_ortho.c new file mode 100755 index 0000000000..ea88ac225b --- /dev/null +++ b/keyboards/nachie/syndrome_ortho/syndrome_ortho.c @@ -0,0 +1,89 @@ +/* +Copyright 2024 Nachie + +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" + + +led_config_t g_led_config = { { + {NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, + { 6, 5, 4, 3, 2, 1, 0, NO_LED }, + { 7, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, 15 }, + { 8 , 9, NO_LED, 10, 11, 12, 13, 14 }, + { NO_LED, NO_LED, NO_LED,NO_LED, NO_LED, NO_LED, NO_LED, NO_LED } +}, { + { 183,0 }, { 162,0 }, { 142,0 }, { 122,0 }, { 81,0 }, { 61,0 }, { 40,0 }, + { 20,16 }, { 40,48 }, + { 61,48 }, { 81,48 }, { 101,48 }, { 122,48 }, { 162,48 }, { 203,48 }, { 244,16 } +}, { + 1, 1, 1, 1, 1, 1, 1, + 1, 1, + 1, 1, 1, 1, 1, 1, 1 +} }; + +#ifdef OLED_ENABLE + +static void render_logo(void) { + static const char PROGMEM my_logo[] = { + // 'Screenshot 2023-07-21 at 1', 128x32px +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xfe, 0x00, 0x03, 0xc0, 0x00, 0xc0, 0x00, 0x3c, 0x00, 0x0f, 0x1f, 0xf8, 0xe0, 0x00, 0x1f, 0xff, +0xff, 0x80, 0x01, 0xc0, 0x00, 0x40, 0x00, 0x38, 0x00, 0x07, 0x1f, 0xf8, 0xe0, 0x00, 0x1f, 0xff, +0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x0f, 0xff, +0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x8f, 0xff, +0xff, 0xff, 0xf1, 0xff, 0xff, 0xff, 0x8f, 0xff, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x0f, 0xff, +0xfe, 0x1f, 0xf1, 0xc0, 0x03, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xc0, 0x1f, 0xff, +0xfe, 0x1f, 0xf1, 0xc0, 0x03, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xe0, 0x3f, 0xff, +0xfe, 0x1f, 0xf1, 0xc3, 0xff, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xf0, 0xff, 0xff, +0xfe, 0x1f, 0xf1, 0xc3, 0xff, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xf8, 0x7f, 0xff, +0xfe, 0x1f, 0xf1, 0xc3, 0xff, 0xff, 0x8f, 0xf8, 0xff, 0xc7, 0x1f, 0xf8, 0xe1, 0xf8, 0x7f, 0xff, +0xfe, 0x00, 0x01, 0xc0, 0x00, 0x7f, 0x8f, 0xf8, 0x00, 0x07, 0x00, 0x00, 0xe1, 0xfc, 0x3f, 0xff, +0xfe, 0x00, 0x03, 0xc0, 0x00, 0xff, 0x8f, 0xfc, 0x00, 0x0f, 0x80, 0x01, 0xe1, 0xfe, 0x1f, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff +}; + oled_write_raw_P(my_logo, sizeof(my_logo)); +} + +bool oled_task_kb(void) { + // Defer to the keymap if they want to override + + if(!oled_task_user()) { + return false; + } + + // default keyboard drawing code + render_logo(); + return false; +} + +#endif \ No newline at end of file