diff --git a/keyboards/arisu/keymaps/kbdksp/config.h b/keyboards/arisu/keymaps/kbdksp/config.h new file mode 100644 index 00000000000..ef154e8744d --- /dev/null +++ b/keyboards/arisu/keymaps/kbdksp/config.h @@ -0,0 +1,37 @@ +#pragma once + + +#define RGB_DI_PIN F5 +#ifdef RGB_DI_PIN + #define RGBLED_NUM 18 + #define RGBLIGHT_HUE_STEP 8 + #define RGBLIGHT_SAT_STEP 8 + #define RGBLIGHT_VAL_STEP 8 + #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */ + #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ +/*== all animations enable ==*/ + #define RGBLIGHT_ANIMATIONS + #define RGB_MATRIX_FRAMEBUFFER_EFFECTS + #define RGB_MATRIX_KEYPRESSES +/*== or choose animations ==*/ +// #define RGBLIGHT_EFFECT_BREATHING +// #define RGBLIGHT_EFFECT_RAINBOW_MOOD +// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL +// #define RGBLIGHT_EFFECT_SNAKE +// #define RGBLIGHT_EFFECT_KNIGHT +// #define RGBLIGHT_EFFECT_CHRISTMAS +// #define RGBLIGHT_EFFECT_STATIC_GRADIENT +// #define RGBLIGHT_EFFECT_RGB_TEST +// #define RGBLIGHT_EFFECT_ALTERNATING +#endif + +#define VIAL_KEYBOARD_UID {0x12, 0x38, 0xDA, 0x0C, 0x13, 0xD5, 0xE1, 0x3D} + +#define VIAL_ENCODER_DEFAULT { KC_VOLU, KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS } + +#define VIAL_UNLOCK_COMBO_ROWS { 0, 0 } +#define VIAL_UNLOCK_COMBO_COLS { 0, 3 } +#define DYNAMIC_KEYMAP_LAYER_COUNT 3 + +#define ENCODERS_PAD_A { F6 } +#define ENCODERS_PAD_B { F7 } diff --git a/keyboards/arisu/keymaps/kbdksp/keymap.c b/keyboards/arisu/keymaps/kbdksp/keymap.c new file mode 100644 index 00000000000..9a7d85359f4 --- /dev/null +++ b/keyboards/arisu/keymaps/kbdksp/keymap.c @@ -0,0 +1,57 @@ +/* Copyright 2019 Fate + * + * 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_GESC, 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_GRV, KC_PGUP, + 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_PGDN, + 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_ENT, MO(1), + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, + _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [2] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), +}; + +#ifdef ENCODER_ENABLE + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (index == 0) { + if (!clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + } + return true; +} + +#endif diff --git a/keyboards/arisu/keymaps/kbdksp/rules.mk b/keyboards/arisu/keymaps/kbdksp/rules.mk new file mode 100644 index 00000000000..9e8e009d19e --- /dev/null +++ b/keyboards/arisu/keymaps/kbdksp/rules.mk @@ -0,0 +1,8 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes +ENCODER_ENABLE = yes +VIAL_ENCODERS_ENABLE = yes +LTO_ENABLE = yes +RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow +QMK_SETTINGS = no +VIAL_INSECURE = yes diff --git a/keyboards/arisu/keymaps/kbdksp/vial.json b/keyboards/arisu/keymaps/kbdksp/vial.json new file mode 100644 index 00000000000..b075c8727d8 --- /dev/null +++ b/keyboards/arisu/keymaps/kbdksp/vial.json @@ -0,0 +1,270 @@ +{ + "name": "ARISU", + "vendorId": "0xFA7E", + "productId": "0x0000", + "lighting": "qmk_rgblight", + "matrix": { "rows": 5, "cols": 15 }, + "layouts": { + "keymap": [ + [ + { + "y": 0.38, + "x": 3.75 + }, + "0,2", + { + "x": 8.5 + }, + "0,11", + { + "x": 3.25, + "c": "#777777" + }, + "1,14", + {"x": 0.25} + ,"0,0\n\n\n\n\n\n\n\n\ne","0,1\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "y": -0.8799999999999999, + "x": 1.75, + "c": "#aaaaaa" + }, + "0,0", + { + "c": "#cccccc" + }, + "0,1", + { + "x": 10.5 + }, + "0,12", + { + "c": "#aaaaaa" + }, + "0,13", + "0,14" + ], + [ + { + "y": -0.1200000000000001, + "x": 17.75, + "c": "#777777" + }, + "2,14" + ], + [ + { + "y": -0.8799999999999999, + "x": 1.5, + "c": "#aaaaaa", + "w": 1.5 + }, + "1,0", + { + "c": "#cccccc" + }, + "1,1", + { + "x": 10 + }, + "1,11", + "1,12", + { + "w": 1.5 + }, + "1,13" + ], + [ + { + "y": -0.1200000000000001, + "x": 18, + "c": "#777777" + }, + "3,14" + ], + [ + { + "y": -0.8799999999999999, + "x": 1.25, + "c": "#aaaaaa", + "w": 1.75 + }, + "2,0", + { + "c": "#cccccc" + }, + "2,1", + { + "x": 9.5 + }, + "2,10", + "2,11", + { + "c": "#777777", + "w": 2.25 + }, + "2,12" + ], + [ + { + "x": 1, + "c": "#aaaaaa", + "w": 2.25 + }, + "3,0", + { + "c": "#cccccc" + }, + "3,1", + { + "x": 9.75 + }, + "3,10", + { + "c": "#aaaaaa", + "w": 1.75 + }, + "3,11" + ], + [ + { + "y": -0.75, + "x": 17 + }, + "3,13" + ], + [ + { + "y": -0.25, + "x": 1, + "w": 1.5 + }, + "4,0" + ], + [ + { + "y": -0.75, + "x": 16 + }, + "4,12", + "4,13", + "4,14" + ], + [ + { + "r": 12, + "rx": 4.75, + "ry": 1.5, + "y": -1, + "c": "#cccccc" + }, + "0,3", + "0,4", + "0,5", + "0,6" + ], + [ + { + "x": -0.5 + }, + "1,2", + "1,3", + "1,4", + "1,5" + ], + [ + { + "x": -0.25 + }, + "2,2", + "2,3", + "2,4", + "2,5" + ], + [ + { + "x": 0.25 + }, + "3,2", + "3,3", + "3,4", + "3,5" + ], + [ + { + "x": 0.25, + "c": "#aaaaaa", + "w": 1.5 + }, + "4,2", + { + "c": "#cccccc", + "w": 2 + }, + "4,4", + { + "c": "#aaaaaa" + }, + "4,5" + ], + [ + { + "r": -12, + "rx": 13.5, + "y": -1, + "x": -4.25, + "c": "#cccccc" + }, + "0,7", + "0,8", + "0,9", + "0,10" + ], + [ + { + "x": -4.75 + }, + "1,6", + "1,7", + "1,8", + "1,9", + "1,10" + ], + [ + { + "x": -4.5 + }, + "2,6", + "2,7", + "2,8", + "2,9" + ], + [ + { + "y": 1, + "x": -4.75, + "w": 2.75 + }, + "4,7", + { + "c": "#aaaaaa", + "w": 1.5 + }, + "4,9" + ], + [ + { + "ry": 1.75, + "y": 1.75, + "x": -4.25, + "c": "#cccccc" + }, + "3,6", + "3,7", + "3,8", + "3,9" + ] + ] + } + } diff --git a/keyboards/arisu/keymaps/sendyyeah/config.h b/keyboards/arisu/keymaps/sendyyeah/config.h new file mode 100644 index 00000000000..ef154e8744d --- /dev/null +++ b/keyboards/arisu/keymaps/sendyyeah/config.h @@ -0,0 +1,37 @@ +#pragma once + + +#define RGB_DI_PIN F5 +#ifdef RGB_DI_PIN + #define RGBLED_NUM 18 + #define RGBLIGHT_HUE_STEP 8 + #define RGBLIGHT_SAT_STEP 8 + #define RGBLIGHT_VAL_STEP 8 + #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */ + #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ +/*== all animations enable ==*/ + #define RGBLIGHT_ANIMATIONS + #define RGB_MATRIX_FRAMEBUFFER_EFFECTS + #define RGB_MATRIX_KEYPRESSES +/*== or choose animations ==*/ +// #define RGBLIGHT_EFFECT_BREATHING +// #define RGBLIGHT_EFFECT_RAINBOW_MOOD +// #define RGBLIGHT_EFFECT_RAINBOW_SWIRL +// #define RGBLIGHT_EFFECT_SNAKE +// #define RGBLIGHT_EFFECT_KNIGHT +// #define RGBLIGHT_EFFECT_CHRISTMAS +// #define RGBLIGHT_EFFECT_STATIC_GRADIENT +// #define RGBLIGHT_EFFECT_RGB_TEST +// #define RGBLIGHT_EFFECT_ALTERNATING +#endif + +#define VIAL_KEYBOARD_UID {0x12, 0x38, 0xDA, 0x0C, 0x13, 0xD5, 0xE1, 0x3D} + +#define VIAL_ENCODER_DEFAULT { KC_VOLU, KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS } + +#define VIAL_UNLOCK_COMBO_ROWS { 0, 0 } +#define VIAL_UNLOCK_COMBO_COLS { 0, 3 } +#define DYNAMIC_KEYMAP_LAYER_COUNT 3 + +#define ENCODERS_PAD_A { F6 } +#define ENCODERS_PAD_B { F7 } diff --git a/keyboards/arisu/keymaps/sendyyeah/keymap.c b/keyboards/arisu/keymaps/sendyyeah/keymap.c new file mode 100644 index 00000000000..560e12d857c --- /dev/null +++ b/keyboards/arisu/keymaps/sendyyeah/keymap.c @@ -0,0 +1,57 @@ +/* Copyright 2019 Fate + * + * 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_GESC, 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_BSLS, KC_GRV, KC_PGUP, + 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_BSPC, KC_PGDN, + 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_ENT, MO(1), + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, + KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT + ), + + [1] = LAYOUT( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______, + _______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, KC_DEL, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [2] = LAYOUT( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), +}; + +#ifdef ENCODER_ENABLE + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (index == 0) { + if (!clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + } + return true; +} + +#endif diff --git a/keyboards/arisu/keymaps/sendyyeah/rules.mk b/keyboards/arisu/keymaps/sendyyeah/rules.mk new file mode 100644 index 00000000000..9e8e009d19e --- /dev/null +++ b/keyboards/arisu/keymaps/sendyyeah/rules.mk @@ -0,0 +1,8 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes +ENCODER_ENABLE = yes +VIAL_ENCODERS_ENABLE = yes +LTO_ENABLE = yes +RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow +QMK_SETTINGS = no +VIAL_INSECURE = yes diff --git a/keyboards/arisu/keymaps/sendyyeah/vial.json b/keyboards/arisu/keymaps/sendyyeah/vial.json new file mode 100644 index 00000000000..b075c8727d8 --- /dev/null +++ b/keyboards/arisu/keymaps/sendyyeah/vial.json @@ -0,0 +1,270 @@ +{ + "name": "ARISU", + "vendorId": "0xFA7E", + "productId": "0x0000", + "lighting": "qmk_rgblight", + "matrix": { "rows": 5, "cols": 15 }, + "layouts": { + "keymap": [ + [ + { + "y": 0.38, + "x": 3.75 + }, + "0,2", + { + "x": 8.5 + }, + "0,11", + { + "x": 3.25, + "c": "#777777" + }, + "1,14", + {"x": 0.25} + ,"0,0\n\n\n\n\n\n\n\n\ne","0,1\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "y": -0.8799999999999999, + "x": 1.75, + "c": "#aaaaaa" + }, + "0,0", + { + "c": "#cccccc" + }, + "0,1", + { + "x": 10.5 + }, + "0,12", + { + "c": "#aaaaaa" + }, + "0,13", + "0,14" + ], + [ + { + "y": -0.1200000000000001, + "x": 17.75, + "c": "#777777" + }, + "2,14" + ], + [ + { + "y": -0.8799999999999999, + "x": 1.5, + "c": "#aaaaaa", + "w": 1.5 + }, + "1,0", + { + "c": "#cccccc" + }, + "1,1", + { + "x": 10 + }, + "1,11", + "1,12", + { + "w": 1.5 + }, + "1,13" + ], + [ + { + "y": -0.1200000000000001, + "x": 18, + "c": "#777777" + }, + "3,14" + ], + [ + { + "y": -0.8799999999999999, + "x": 1.25, + "c": "#aaaaaa", + "w": 1.75 + }, + "2,0", + { + "c": "#cccccc" + }, + "2,1", + { + "x": 9.5 + }, + "2,10", + "2,11", + { + "c": "#777777", + "w": 2.25 + }, + "2,12" + ], + [ + { + "x": 1, + "c": "#aaaaaa", + "w": 2.25 + }, + "3,0", + { + "c": "#cccccc" + }, + "3,1", + { + "x": 9.75 + }, + "3,10", + { + "c": "#aaaaaa", + "w": 1.75 + }, + "3,11" + ], + [ + { + "y": -0.75, + "x": 17 + }, + "3,13" + ], + [ + { + "y": -0.25, + "x": 1, + "w": 1.5 + }, + "4,0" + ], + [ + { + "y": -0.75, + "x": 16 + }, + "4,12", + "4,13", + "4,14" + ], + [ + { + "r": 12, + "rx": 4.75, + "ry": 1.5, + "y": -1, + "c": "#cccccc" + }, + "0,3", + "0,4", + "0,5", + "0,6" + ], + [ + { + "x": -0.5 + }, + "1,2", + "1,3", + "1,4", + "1,5" + ], + [ + { + "x": -0.25 + }, + "2,2", + "2,3", + "2,4", + "2,5" + ], + [ + { + "x": 0.25 + }, + "3,2", + "3,3", + "3,4", + "3,5" + ], + [ + { + "x": 0.25, + "c": "#aaaaaa", + "w": 1.5 + }, + "4,2", + { + "c": "#cccccc", + "w": 2 + }, + "4,4", + { + "c": "#aaaaaa" + }, + "4,5" + ], + [ + { + "r": -12, + "rx": 13.5, + "y": -1, + "x": -4.25, + "c": "#cccccc" + }, + "0,7", + "0,8", + "0,9", + "0,10" + ], + [ + { + "x": -4.75 + }, + "1,6", + "1,7", + "1,8", + "1,9", + "1,10" + ], + [ + { + "x": -4.5 + }, + "2,6", + "2,7", + "2,8", + "2,9" + ], + [ + { + "y": 1, + "x": -4.75, + "w": 2.75 + }, + "4,7", + { + "c": "#aaaaaa", + "w": 1.5 + }, + "4,9" + ], + [ + { + "ry": 1.75, + "y": 1.75, + "x": -4.25, + "c": "#cccccc" + }, + "3,6", + "3,7", + "3,8", + "3,9" + ] + ] + } + } diff --git a/keyboards/cookpad_pad/config.h b/keyboards/cookpad_pad/config.h new file mode 100644 index 00000000000..fd90d387118 --- /dev/null +++ b/keyboards/cookpad_pad/config.h @@ -0,0 +1,23 @@ +#pragma once + +#ifdef WS2812_DI_PIN + #define RGBLED_NUM 3 + #define RGBLIGHT_HUE_STEP 8 + #define RGBLIGHT_SAT_STEP 8 + #define RGBLIGHT_VAL_STEP 8 + #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */ + #define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */ +/*== or choose animations ==*/ + #define RGBLIGHT_EFFECT_BREATHING + #define RGBLIGHT_EFFECT_RAINBOW_MOOD + #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + #define RGBLIGHT_EFFECT_SNAKE + #define RGBLIGHT_EFFECT_KNIGHT + #define RGBLIGHT_EFFECT_CHRISTMAS + #define RGBLIGHT_EFFECT_STATIC_GRADIENT + #define RGBLIGHT_EFFECT_RGB_TEST + #define RGBLIGHT_EFFECT_ALTERNATING +#endif + +/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ +#define DEBOUNCE 5 \ No newline at end of file diff --git a/keyboards/cookpad_pad/cookpad_pad.c b/keyboards/cookpad_pad/cookpad_pad.c new file mode 100644 index 00000000000..2c9de114e11 --- /dev/null +++ b/keyboards/cookpad_pad/cookpad_pad.c @@ -0,0 +1,25 @@ +#ifndef COOKPAD_PAD_H +#define COOKPAD_PAD_H + +#include "quantum.h" + +#define LAYOUT( \ + K01, K02, K03, \ + K11, K12, K13 \ +) \ +{ \ + { K01, K02, K03 }, \ + { K11, K12, K13 }, \ +} + + +#define LAYOUT_kc( \ + A1, A2, A3, \ + B1, B2, B3 \ + ) \ + LAYOUT( \ + KC_##A1, KC_##A2, KC_##A3, \ + KC_##B1, KC_##B2, KC_##B3 \ + ) + +#endif \ No newline at end of file diff --git a/keyboards/cookpad_pad/cookpad_pad.h b/keyboards/cookpad_pad/cookpad_pad.h new file mode 100644 index 00000000000..2c9de114e11 --- /dev/null +++ b/keyboards/cookpad_pad/cookpad_pad.h @@ -0,0 +1,25 @@ +#ifndef COOKPAD_PAD_H +#define COOKPAD_PAD_H + +#include "quantum.h" + +#define LAYOUT( \ + K01, K02, K03, \ + K11, K12, K13 \ +) \ +{ \ + { K01, K02, K03 }, \ + { K11, K12, K13 }, \ +} + + +#define LAYOUT_kc( \ + A1, A2, A3, \ + B1, B2, B3 \ + ) \ + LAYOUT( \ + KC_##A1, KC_##A2, KC_##A3, \ + KC_##B1, KC_##B2, KC_##B3 \ + ) + +#endif \ No newline at end of file diff --git a/keyboards/cookpad_pad/info.json b/keyboards/cookpad_pad/info.json new file mode 100644 index 00000000000..8d19206e809 --- /dev/null +++ b/keyboards/cookpad_pad/info.json @@ -0,0 +1,61 @@ +{ + "keyboard_name": "Cookpad Pad", + "manufacturer": "Cookpad", + "lighting": "none", + "matrix": { + "rows": 2, + "cols": 3 + }, + "macros": [ + [ + { + "action": "tap", + "keycodes": ["KC_LCTL", "KC_LGUI", "KC_LEFT"] + } + ], + [ + { + "action": "tap", + "keycodes": ["KC_LCTL", "KC_LGUI", "KC_RIGHT"] + } + ] + ], + "layout": "LAYOUT", + "layers": [ + [ + "LCTL(KC_C)" , "LCTL(KC_V)" , "SGUI(KC_S)", + "QK_MACRO_0" , "QK_MACRO_1" , "TG(1)" + ], + [ + "KC_MPRV", "KC_MPLY", "KC_MNXT", + "KC_VOLD", "KC_VOLU" , "TG(0)" + ] + ], + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + {"matrix": [1, 0], "x": 0, "y": 1}, + {"matrix": [1, 0], "x": 1, "y": 1}, + {"matrix": [1, 0], "x": 2, "y": 1} + ] + } + }, + "matrix_pins": { + "cols": ["F6", "F5", "F4"], + "rows": ["F7", "B1"] + }, + "ws2812": { + "pin": "D3" + }, + "diode_direction": "COL2ROW", + "processor": "atmega32u4", + "bootloader": "caterina", + "usb": { + "vid": "0xFEED", + "pid": "0x0000", + "device_version": "0.0.1" + } +} \ No newline at end of file diff --git a/keyboards/cookpad_pad/keymaps/default/config.h b/keyboards/cookpad_pad/keymaps/default/config.h new file mode 100644 index 00000000000..661eec1444c --- /dev/null +++ b/keyboards/cookpad_pad/keymaps/default/config.h @@ -0,0 +1,3 @@ +#pragma once + +// place overrides here \ No newline at end of file diff --git a/keyboards/cookpad_pad/keymaps/default/keymap.c b/keyboards/cookpad_pad/keymaps/default/keymap.c new file mode 100644 index 00000000000..51502091d28 --- /dev/null +++ b/keyboards/cookpad_pad/keymaps/default/keymap.c @@ -0,0 +1,34 @@ +#include "cookpad_pad.h" + +#define _BASE 0 +#define _FN1 1 + +#define KC_ KC_TRANSPARENT +#define KC_DFN1 LT(_FN1, KC_D) + +#define KC_RTOG RGB_TOG +#define KC_RMOF RGB_MODE_FORWARD +#define KC_RMOR RGB_MODE_REVERSE +#define KC_RHUI RGB_HUI +#define KC_RHUD RGB_HUD + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_BASE] = LAYOUT_kc( + // |----|----|----| + C , O , K , + // |----|----|----| + P , A ,DFN1 + // |----|----|----| + ), + + [_FN1] = LAYOUT_kc( + // |----|----|----| + RMOF,RHUI,RTOG, + // |----|----|----| + RMOR,RHUD, + // |----|----|----| + ) + + +}; \ No newline at end of file diff --git a/keyboards/cookpad_pad/keymaps/vial/config.h b/keyboards/cookpad_pad/keymaps/vial/config.h new file mode 100644 index 00000000000..39a69c15be1 --- /dev/null +++ b/keyboards/cookpad_pad/keymaps/vial/config.h @@ -0,0 +1,5 @@ +#pragma once + +// place overrides here + +#define VIAL_KEYBOARD_UID {0x95, 0xC5, 0xD9, 0x03, 0x08, 0x5C, 0x63, 0x8B} \ No newline at end of file diff --git a/keyboards/cookpad_pad/keymaps/vial/keymap.c b/keyboards/cookpad_pad/keymaps/vial/keymap.c new file mode 100644 index 00000000000..7a02b40afcd --- /dev/null +++ b/keyboards/cookpad_pad/keymaps/vial/keymap.c @@ -0,0 +1,28 @@ +#include "cookpad_pad.h" + +#define _BASE 0 +#define _FN1 1 + +#define KC_ KC_TRANSPARENT +#define KC_DFN1 LT(_FN1, KC_D) + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + + [_BASE] = LAYOUT( + // |----|----|----| + LCTL(KC_C) , LCTL(KC_V) , SGUI(KC_S) , + // |----|----|----| + QK_MACRO_0 , QK_MACRO_1 , TG(1) + // |----|----|----| + ), + + [_FN1] = LAYOUT( + // |----|----|----| + KC_MPRV, KC_MPLY, KC_MNXT, + // |----|----|----| + KC_VOLD, KC_VOLU , TG(0) + // |----|----|----| + ) + + +}; \ No newline at end of file diff --git a/keyboards/cookpad_pad/keymaps/vial/rules.mk b/keyboards/cookpad_pad/keymaps/vial/rules.mk new file mode 100644 index 00000000000..4af3eddf41f --- /dev/null +++ b/keyboards/cookpad_pad/keymaps/vial/rules.mk @@ -0,0 +1,4 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes +VIAL_INSECURE = yes +LTO_ENABLE = yes \ No newline at end of file diff --git a/keyboards/cookpad_pad/keymaps/vial/vial.json b/keyboards/cookpad_pad/keymaps/vial/vial.json new file mode 100644 index 00000000000..01fc29949bd --- /dev/null +++ b/keyboards/cookpad_pad/keymaps/vial/vial.json @@ -0,0 +1,23 @@ +{ + "keyboard_name": "Cookpad Pad", + "manufacturer": "Cookpad", + "lighting": "none", + "matrix": { + "rows": 2, + "cols": 3 + }, + "layouts": { + "keymap": [ + [ + "0,0", + "0,1", + "0,2" + ], + [ + "1,0", + "1,1", + "1,2" + ] + ] + } +} \ No newline at end of file diff --git a/keyboards/cookpad_pad/rules.mk b/keyboards/cookpad_pad/rules.mk new file mode 100644 index 00000000000..ab0f8992ba3 --- /dev/null +++ b/keyboards/cookpad_pad/rules.mk @@ -0,0 +1,36 @@ +# MCU name +MCU = atmega32u4 + +# Processor frequency. +F_CPU = 16000000 + +# Target architecture +ARCH = AVR8 + +# Input clock frequency. +F_USB = $(F_CPU) + +# Interrupt driven control endpoint task(+60) +OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT + +# Bootloader selection +BOOTLOADER = caterina + +# Build Options +BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration(+1000) +MOUSEKEY_ENABLE = no # Mouse keys(+4700) +EXTRAKEY_ENABLE = yes # Audio control and System control(+450) +CONSOLE_ENABLE = no # Console for debug(+400) +COMMAND_ENABLE = no # Commands for debug and configuration +# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE +SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend +# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work +NKRO_ENABLE = no # USB Nkey Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality on B7 by default +RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow +MIDI_ENABLE = no # MIDI support (+2400 to 4200, depending on config) +UNICODE_ENABLE = no # Unicode +BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID +AUDIO_ENABLE = no # Audio output on port C6 +FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches +HD44780_ENABLE = no # Enable support for HD44780 based LCDs (+400) \ No newline at end of file diff --git a/keyboards/crkbd/keymaps/vial/rules.mk b/keyboards/crkbd/keymaps/vial/rules.mk index a0082d9f233..42d10bd569e 100644 --- a/keyboards/crkbd/keymaps/vial/rules.mk +++ b/keyboards/crkbd/keymaps/vial/rules.mk @@ -1,6 +1,7 @@ VIA_ENABLE = yes VIAL_ENABLE = yes LTO_ENABLE = yes +VIAL_INSECURE = yes RGBLIGHT_ENABLE = yes RGB_MATRIX_ENABLE = no # Can't have RGBLIGHT and RGB_MATRIX at the same time. diff --git a/keyboards/kbdksp/cacah/cacah.c b/keyboards/kbdksp/cacah/cacah.c new file mode 100755 index 00000000000..7ee30ac450b --- /dev/null +++ b/keyboards/kbdksp/cacah/cacah.c @@ -0,0 +1,17 @@ + /* Copyright 2023 sendz + * + * 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 "cacah.h" diff --git a/keyboards/kbdksp/cacah/cacah.h b/keyboards/kbdksp/cacah/cacah.h new file mode 100755 index 00000000000..af37153c945 --- /dev/null +++ b/keyboards/kbdksp/cacah/cacah.h @@ -0,0 +1,43 @@ +/* Copyright 2023 sendz + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include "quantum.h" + +/* This is a shortcut to help you visually see your layout. + * + * The first section contains all of the arguments representing the physical + * layout of the board and position of the keys. + * + * The second converts the arguments into a two-dimensional array which + * represents the switch matrix. + */ + + #define LAYOUT_ortho(\ + L00, L01, L02, L03, \ + L10, L11, L12, L13, \ + L20, L21, L22, L23, \ + L30, L31, L32, L33, \ + L40, L41, L42, L43 \ + ) \ + { \ + { L00, L01, L02, L03}, \ + { L10, L11, L12, L13}, \ + { L20, L21, L22, L23}, \ + { L30, L31, L32, L33}, \ + { L40, L41, L42, L43} \ + } diff --git a/keyboards/kbdksp/cacah/config.h b/keyboards/kbdksp/cacah/config.h new file mode 100755 index 00000000000..935474494e2 --- /dev/null +++ b/keyboards/kbdksp/cacah/config.h @@ -0,0 +1,34 @@ +/* Copyright 2023 sendz + * + * 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 + +/* key matrix size */ + +#define MATRIX_ROWS 5 +#define MATRIX_COLS 4 + +/* Keyboard Matrix Assignments */ +// clang-format off + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE + +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE diff --git a/keyboards/kbdksp/cacah/info.json b/keyboards/kbdksp/cacah/info.json new file mode 100755 index 00000000000..0614bfbddd5 --- /dev/null +++ b/keyboards/kbdksp/cacah/info.json @@ -0,0 +1,145 @@ +{ + "keyboard_name": "Cacah", + "url": "", + "manufacturer": "Keyboard Kasep", + "maintainer": "sendz", + "usb": { + "device_version": "0.0.1", + "pid": "0x4341", + "vid": "0x7370" + }, + "processor": "RP2040", + "bootloader": "rp2040", + "diode_direction": "COL2ROW", + "matrix_pins": { + "rows": [ + "GP2", + "GP3", + "GP4", + "GP8", + "GP9" + ], + "cols": [ + "GP18", + "GP19", + "GP0", + "GP1" + ] + }, + "encoder": { + "enabled": true, + "rotary": [ + { + "pin_a": "GP16", + "pin_b": "GP17", + "resolution": 4 + } + ] + }, + "layouts": { + "LAYOUT_ortho": { + "layout": [ + { + "label": "0,0", + "x": 0, + "y": 0 + }, + { + "label": "0,1", + "x": 1, + "y": 0 + }, + { + "label": "0,2", + "x": 2, + "y": 0 + }, + { + "label": "0,3", + "x": 3, + "y": 0 + }, + { + "label": "1,0", + "x": 0, + "y": 1 + }, + { + "label": "1,1", + "x": 1, + "y": 1 + }, + { + "label": "1,2", + "x": 2, + "y": 1 + }, + { + "label": "1,1", + "x": 3, + "y": 1 + }, + { + "label": "2,0", + "x": 0, + "y": 2 + }, + { + "label": "2,1", + "x": 1, + "y": 2 + }, + { + "label": "2,2", + "x": 2, + "y": 2 + }, + { + "label": "2,3", + "x": 3, + "y": 2 + }, + { + "label": "3,0", + "x": 0, + "y": 3 + }, + { + "label": "3,1", + "x": 1, + "y": 3 + }, + { + "label": "3,2", + "x": 2, + "y": 3 + }, + { + "label": "3,1", + "x": 3, + "y": 3 + }, + { + "label": "4,0", + "x": 0, + "y": 4 + }, + { + "label": "4,1", + "x": 1, + "y": 4 + }, + { + "label": "4,2", + "x": 2, + "y": 4 + }, + { + "label": "4,3", + "x": 3, + "y": 4 + } + ] + } + } +} \ No newline at end of file diff --git a/keyboards/kbdksp/cacah/keymaps/vial/config.h b/keyboards/kbdksp/cacah/keymaps/vial/config.h new file mode 100755 index 00000000000..1dd58ed76af --- /dev/null +++ b/keyboards/kbdksp/cacah/keymaps/vial/config.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#define VIAL_KEYBOARD_UID {0xC6, 0xED, 0xDB, 0x0C, 0x58, 0x33, 0x3F, 0x0C} + +#define VIAL_ENCODER_DEFAULT { \ + KC_VOLU, KC_VOLD, \ + KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, \ +} + +#define DYNAMIC_KEYMAP_LAYER_COUNT 10 diff --git a/keyboards/kbdksp/cacah/keymaps/vial/keymap.c b/keyboards/kbdksp/cacah/keymaps/vial/keymap.c new file mode 100755 index 00000000000..3bfc2e3e782 --- /dev/null +++ b/keyboards/kbdksp/cacah/keymaps/vial/keymap.c @@ -0,0 +1,58 @@ + /* Copyright 2023 sendz + * + * 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_ortho( + LT(1, KC_NUM_LOCK), KC_PSLS, KC_PAST, KC_PMNS, + KC_P7, KC_P8, KC_P9, KC_PPLS, + KC_P4, KC_P5, KC_P6, KC_NUBS, + KC_P1, KC_P2, KC_P3, KC_PENT, + KC_P0, KC_P0, KC_PDOT, KC_PENT + ), + [1] = LAYOUT_ortho( + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, QK_BOOT, _______ + ), + [2] = LAYOUT_ortho( + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______ + ), + [3] = LAYOUT_ortho( + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______, + _______, _______, _______, _______ + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) }, + [1] = { ENCODER_CCW_CW(RGB_HUD, RGB_HUI) }, + [2] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }, + [3] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) }, + // Encoder 1 Encoder 2 +}; +#endif \ No newline at end of file diff --git a/keyboards/kbdksp/cacah/keymaps/vial/rules.mk b/keyboards/kbdksp/cacah/keymaps/vial/rules.mk new file mode 100755 index 00000000000..7e44761b11c --- /dev/null +++ b/keyboards/kbdksp/cacah/keymaps/vial/rules.mk @@ -0,0 +1,5 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes +VIAL_ENCODERS_ENABLE = yes +VIAL_INSECURE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/kbdksp/cacah/keymaps/vial/vial.json b/keyboards/kbdksp/cacah/keymaps/vial/vial.json new file mode 100755 index 00000000000..97db2ede6bf --- /dev/null +++ b/keyboards/kbdksp/cacah/keymaps/vial/vial.json @@ -0,0 +1,76 @@ +{ + "name": "Cacah", + "vendorId": "0x7370", + "productId": "0x4341", + "lighting": "none", + "matrix": { + "rows": 5, + "cols": 4 + }, + "layouts": { + "labels": [ + "2 x 1U +", + "2 x 1U Enter", + "2 x 1U 0" + ], + "keymap": [ + { + "name": "Cacah VIAL", + "author": "KBDKSP" + }, + [ + "0,0", + "0,1", + "0,2", + "0,3", + { + "x": 0.25 + }, + "0,0\n\n\n\n\n\n\n\n\ne", + "0,1\n\n\n\n\n\n\n\n\ne" + ], + [ + "1,0", + "1,1", + "1,2", + "1,3\n\n\n0,1", + { + "x": -1, + "h": 2 + }, + "1,3\n\n\n0,0" + ], + [ + "2,0", + "2,1", + "2,2", + "2,3\n\n\n0,1" + ], + [ + "3,0", + "3,1", + "3,2", + "3,3\n\n\n1,1", + { + "x": -1, + "h": 2 + }, + "3,3\n\n\n1,0" + ], + [ + "4,0\n\n\n2,1", + { + "x": -1, + "w": 2 + }, + "4,0\n\n\n2,0", + { + "x": -1 + }, + "4,1\n\n\n2,1", + "4,2", + "4,3\n\n\n1,1" + ] + ] + } +} \ No newline at end of file diff --git a/keyboards/kbdksp/cacah/rules.mk b/keyboards/kbdksp/cacah/rules.mk new file mode 100755 index 00000000000..d6a5c02ce29 --- /dev/null +++ b/keyboards/kbdksp/cacah/rules.mk @@ -0,0 +1,17 @@ +# MCU name +MCU = RP2040 +# Bootloader selection +BOOTLOADER = rp2040 +# Build Options +# change yes to no to disable +# +BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite +MOUSEKEY_ENABLE = no # Mouse keys +EXTRAKEY_ENABLE = yes # Audio control and System control +CONSOLE_ENABLE = no # Console for debug +COMMAND_ENABLE = no # Commands for debug and configuration +NKRO_ENABLE = yes # Enable N-Key Rollover +BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality +RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow +AUDIO_ENABLE = no # Audio output +# AUDIO_DRIVER = pwm_software diff --git a/keyboards/kbdksp/cengek/keyboard.json b/keyboards/kbdksp/cengek/keyboard.json new file mode 100644 index 00000000000..4ce0e3dcce5 --- /dev/null +++ b/keyboards/kbdksp/cengek/keyboard.json @@ -0,0 +1,51 @@ +{ + "manufacturer": "KBDKSPa", + "keyboard_name": "Cengek", + "maintainer": "Sendy Aditya Suryana", + "bootloader": "rp2040", + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "oled": true, + "encoder": true + }, + "encoder": { + "enabled": true, + "rotary": [ + {"pin_a": "GP2", "pin_b": "GP3"}, + {"pin_a": "GP4", "pin_b": "GP5"}, + {"pin_a": "GP12", "pin_b": "GP13"} + ], + "resolution": 1 + }, + "matrix_pins": { + "direct": [ + ["GP27", "GP28", "GP29"], + ["GP14", "GP15", "GP26"] + ] + }, + "processor": "RP2040", + "url": "", + "usb": { + "device_version": "0.0.1", + "pid": "0x636E", + "vid": "0x7370" + }, + "layouts": { + "LAYOUT": { + "layout": [ + {"matrix": [0, 0], "x": 0, "y": 0}, + {"matrix": [0, 1], "x": 1, "y": 0}, + {"matrix": [0, 2], "x": 2, "y": 0}, + + {"matrix": [1, 0], "x": 0, "y": 1}, + {"matrix": [1, 1], "x": 1, "y": 1}, + {"matrix": [1, 2], "x": 2, "y": 1} + ] + } + } +} \ No newline at end of file diff --git a/keyboards/kbdksp/cengek/keymaps/default/keymap.c b/keyboards/kbdksp/cengek/keymaps/default/keymap.c new file mode 100644 index 00000000000..27fbe946023 --- /dev/null +++ b/keyboards/kbdksp/cengek/keymaps/default/keymap.c @@ -0,0 +1,40 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ┌───┬───┬───┐ + * │ 4 │ 5 │ 6 │ + * ├───┼───┼───┤ + * │ 1 │ 2 │ 3 │ + * └───┴───┴───┘ + */ + [0] = LAYOUT( + KC_P4, KC_P5, KC_P6, + KC_P1, KC_P2, KC_P3 + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][3] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_WH_D, KC_WH_U), ENCODER_CCW_CW(KC_TRNS, KC_TRNS)} +} +#endif + +#ifdef OLED_ENABLE +bool oled_task_user(void) { + oled_on(); + + // Host Keyboard Layer Status + oled_write_P(PSTR(" KBD "), false); + oled_write_P(PSTR(" KSP "), false); + + oled_write_ln_P(PSTR(""), false); + + oled_write_P(PSTR(" CEN "), false); + oled_write_P(PSTR(" GEK "), false); + return false; +} +#endif \ No newline at end of file diff --git a/keyboards/kbdksp/cengek/keymaps/vial/config.h b/keyboards/kbdksp/cengek/keymaps/vial/config.h new file mode 100644 index 00000000000..5cf6688b9d1 --- /dev/null +++ b/keyboards/kbdksp/cengek/keymaps/vial/config.h @@ -0,0 +1,5 @@ +#pragma once + +#define VIAL_KEYBOARD_UID {0x95, 0xE2, 0x8D, 0xCB, 0x66, 0x3E, 0x84, 0x62} + +#define DYNAMIC_KEYMAP_LAYER_COUNT 10 \ No newline at end of file diff --git a/keyboards/kbdksp/cengek/keymaps/vial/keymap.c b/keyboards/kbdksp/cengek/keymaps/vial/keymap.c new file mode 100644 index 00000000000..505a18924d2 --- /dev/null +++ b/keyboards/kbdksp/cengek/keymaps/vial/keymap.c @@ -0,0 +1,44 @@ +// Copyright 2023 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#include QMK_KEYBOARD_H + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + /* + * ┌───┬───┬───┐ + * │ 4 │ 5 │ 6 │ + * ├───┼───┼───┤ + * │ 1 │ 2 │ 3 │ + * └───┴───┴───┘ + */ + [0] = LAYOUT( + KC_P4, KC_P5, KC_P6, + KC_P1, KC_P2, KC_P3 + ) +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { + ENCODER_CCW_CW(KC_VOLD, KC_VOLU), + ENCODER_CCW_CW(KC_WH_D, KC_WH_U), + ENCODER_CCW_CW(KC_TRNS, KC_TRNS) + }, +}; +#endif + +#ifdef OLED_ENABLE +bool oled_task_user(void) { + oled_on(); + + // Host Keyboard Layer Status + oled_write_P(PSTR(" KBD "), false); + oled_write_P(PSTR(" KSP "), false); + + oled_write_ln_P(PSTR(""), false); + + oled_write_P(PSTR(" CEN "), false); + oled_write_P(PSTR(" GEK "), false); + return false; +}; +#endif \ No newline at end of file diff --git a/keyboards/kbdksp/cengek/keymaps/vial/rules.mk b/keyboards/kbdksp/cengek/keymaps/vial/rules.mk new file mode 100644 index 00000000000..c336d4f6e77 --- /dev/null +++ b/keyboards/kbdksp/cengek/keymaps/vial/rules.mk @@ -0,0 +1,4 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes +VIAL_INSECURE = yes +ENCODER_MAP_ENABLE = yes \ No newline at end of file diff --git a/keyboards/kbdksp/cengek/keymaps/vial/vial.json b/keyboards/kbdksp/cengek/keymaps/vial/vial.json new file mode 100644 index 00000000000..7d4a5cc053c --- /dev/null +++ b/keyboards/kbdksp/cengek/keymaps/vial/vial.json @@ -0,0 +1,53 @@ +{ + "name": "Cengek", + "lighting": "qmk_rgblight", + "vendorId": "0x7370", + "productId": "0x0287", + "matrix": { + "rows": 2, + "cols": 3 + }, + "layouts": { + "keymap": [ + { + "name": "Cengek" + }, + [ + "0,0", + "0,1", + "0,2" + ], + [ + "1,0", + "1,1", + "1,2" + ], + [ + { + "w": 0.5 + }, + "0,0\n\n\n\n\n\n\n\n\ne", + { + "w": 0.5 + }, + "0,1\n\n\n\n\n\n\n\n\ne", + { + "w": 0.5 + }, + "1,0\n\n\n\n\n\n\n\n\ne", + { + "w": 0.5 + }, + "1,1\n\n\n\n\n\n\n\n\ne", + { + "w": 0.5 + }, + "2,0\n\n\n\n\n\n\n\n\ne", + { + "w": 0.5 + }, + "2,1\n\n\n\n\n\n\n\n\ne" + ] + ] + } +} \ No newline at end of file diff --git a/keyboards/kbdksp/cengek/readme.md b/keyboards/kbdksp/cengek/readme.md new file mode 100644 index 00000000000..382a10be16b --- /dev/null +++ b/keyboards/kbdksp/cengek/readme.md @@ -0,0 +1,27 @@ +# kbdksp/cengek + +![kbdksp/cengek](imgur.com image replace me!) + +*A short description of the keyboard/project* + +* Keyboard Maintainer: [Sendy Aditya Suryana](https://github.com/Sendy Aditya Suryana) +* Hardware Supported: *The PCBs, controllers supported* +* Hardware Availability: *Links to where you can find this hardware* + +Make example for this keyboard (after setting up your build environment): + + make kbdksp/cengek:default + +Flashing example for this keyboard: + + make kbdksp/cengek:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/kbdksp/cengek/rules.mk b/keyboards/kbdksp/cengek/rules.mk new file mode 100644 index 00000000000..9a3b7a32800 --- /dev/null +++ b/keyboards/kbdksp/cengek/rules.mk @@ -0,0 +1,4 @@ +OLED_DRIVER = ssd1306 +RGBLIGHT_ENABLE = yes +RGBLIGHT_DRIVER = ws2812 +WS2812_DRIVER = vendor diff --git a/keyboards/kbdksp/geulis/config.h b/keyboards/kbdksp/geulis/config.h new file mode 100644 index 00000000000..7bd908b4dae --- /dev/null +++ b/keyboards/kbdksp/geulis/config.h @@ -0,0 +1,78 @@ + /* Copyright 2022 sendz + * + * 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 OLED_DISPLAY_128X32 +#define I2C1_SCL_PIN GP3 +#define I2C1_SDA_PIN GP2 +#define I2C_DRIVER I2CD1 +#define OLED_BRIGHTNESS 128 +#define OLED_FONT_H "keyboards/kbdksp/iteung/fonts/glcdfont.c" +// #define MASTER_RIGHT + +/* key matrix size */ +#define MATRIX_ROWS 10 +#define MATRIX_COLS 6 + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE + +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + +#define SERIAL_USART_FULL_DUPLEX +#define SERIAL_USART_TX_PIN GP0 +#define SERIAL_USART_RX_PIN GP1 + +#define VBUS_SENSE GP12 +// #define MASTER_LEFT + +#include "config_rp2040.h" + +#define OLED_TIMEOUT 0 +#define CUSTOM_OLED_TIMEOUT 10000 + + +#ifdef RGBLIGHT_ENABLE + #define WS2812_DI_PIN GP13 + #define WS2812_PIO_USE_PIO1 // Force the usage of PIO1 peripheral, by default the WS2812 implementation uses the PIO0 peripheral + + #define RGBLIGHT_EFFECT_BREATHING + #define RGBLIGHT_EFFECT_RAINBOW_MOOD + #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + #define RGBLIGHT_EFFECT_SNAKE + #define RGBLIGHT_EFFECT_KNIGHT + #define RGBLIGHT_EFFECT_CHRISTMAS + #define RGBLIGHT_EFFECT_STATIC_GRADIENT + #define RGBLIGHT_EFFECT_RGB_TEST + #define RGBLIGHT_EFFECT_ALTERNATING + #define RGBLIGHT_EFFECT_TWINKLE + + #define RGBLED_NUM 16 + + #define RGBLED_SPLIT { 8, 8 } + + #define RGBLIGHT_LIMIT_VAL 120 + #define RGBLIGHT_HUE_STEP 10 + #define RGBLIGHT_SAT_STEP 17 + #define RGBLIGHT_VAL_STEP 17 +#endif \ No newline at end of file diff --git a/keyboards/kbdksp/geulis/config_rp2040.h b/keyboards/kbdksp/geulis/config_rp2040.h new file mode 100644 index 00000000000..4ada22afd4e --- /dev/null +++ b/keyboards/kbdksp/geulis/config_rp2040.h @@ -0,0 +1,75 @@ +// Copyright 2022 Jose Pablo Ramirez (@jpe230) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +/* --------------------------- + * RP2040 OLED Configuration + * --------------------------- + */ +#define I2C1_CLOCK_SPEED 400000 +#define OLED_UPDATE_INTERVAL 1 +#define OLED_I2C_TIMEOUT 1 + +/* --------------------------- + * RP2040 Split Configuration + * --------------------------- + */ +#define SPLIT_WPM_ENABLE + +/* --------------------------- + * RP2040 Debounce + * --------------------------- + */ +#undef DEBOUNCE +#define DEBOUNCE 1 + +/* --------------------------- + * RP2040 RGB Configuration + * --------------------------- + */ +#ifdef RGB_MATRIX_ENABLE + #define ENABLE_RGB_MATRIX_ALPHAS_MODS + #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN + #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT + #define ENABLE_RGB_MATRIX_BREATHING + #define ENABLE_RGB_MATRIX_BAND_SAT + #define ENABLE_RGB_MATRIX_BAND_VAL + #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT + #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL + #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT + #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL + #define ENABLE_RGB_MATRIX_CYCLE_ALL + #define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT + #define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN + #define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON + #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN + #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL + #define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL + #define ENABLE_RGB_MATRIX_CYCLE_SPIRAL + #define ENABLE_RGB_MATRIX_DUAL_BEACON + #define ENABLE_RGB_MATRIX_RAINBOW_BEACON + #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS + #define ENABLE_RGB_MATRIX_RAINDROPS + #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS + #define ENABLE_RGB_MATRIX_HUE_BREATHING + #define ENABLE_RGB_MATRIX_HUE_PENDULUM + #define ENABLE_RGB_MATRIX_HUE_WAVE + #define ENABLE_RGB_MATRIX_PIXEL_RAIN + #define ENABLE_RGB_MATRIX_PIXEL_FLOW + #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL + #define ENABLE_RGB_MATRIX_TYPING_HEATMAP + #define ENABLE_RGB_MATRIX_DIGITAL_RAIN + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS + #define ENABLE_RGB_MATRIX_SPLASH + #define ENABLE_RGB_MATRIX_MULTISPLASH + #define ENABLE_RGB_MATRIX_SOLID_SPLASH + #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH +#endif \ No newline at end of file diff --git a/keyboards/kbdksp/geulis/fonts/glcdfont.c b/keyboards/kbdksp/geulis/fonts/glcdfont.c new file mode 100755 index 00000000000..fd84399afb5 --- /dev/null +++ b/keyboards/kbdksp/geulis/fonts/glcdfont.c @@ -0,0 +1,244 @@ + /* Copyright 2020 sendyyeah + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "progmem.h" + +const unsigned char font[] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, + 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, + 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, + 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, + 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, + 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, + 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, + 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, + 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, + 0x26, 0x29, 0x79, 0x29, 0x26, 0x00, + 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, + 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, + 0x5A, 0x3C, 0x66, 0x3C, 0x5A, 0x00, + 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, + 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, + 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, + 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, + 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, + 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, + 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, + 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, + 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, + 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, + 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, + 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, + 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, + 0x14, 0x3E, 0x14, 0x3E, 0x14, 0x00, + 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, + 0x26, 0x16, 0x08, 0x34, 0x32, 0x00, + 0x36, 0x4A, 0x56, 0x20, 0x50, 0x00, + 0x00, 0x0A, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x3C, 0x42, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x42, 0x3C, 0x00, 0x00, + 0x2A, 0x1C, 0x3E, 0x1C, 0x2A, 0x00, + 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, + 0x00, 0xA0, 0x60, 0x00, 0x00, 0x00, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, + 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, + 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, + 0x3C, 0x42, 0x42, 0x42, 0x3C, 0x00, + 0x00, 0x44, 0x7E, 0x40, 0x00, 0x00, + 0x64, 0x52, 0x52, 0x52, 0x4C, 0x00, + 0x22, 0x42, 0x4A, 0x4A, 0x36, 0x00, + 0x38, 0x24, 0x22, 0x7E, 0x20, 0x00, + 0x2E, 0x4A, 0x4A, 0x4A, 0x32, 0x00, + 0x3C, 0x4A, 0x4A, 0x4A, 0x32, 0x00, + 0x02, 0x02, 0x62, 0x1A, 0x06, 0x00, + 0x34, 0x4A, 0x4A, 0x4A, 0x34, 0x00, + 0x4C, 0x52, 0x52, 0x52, 0x3C, 0x00, + 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x14, 0x22, 0x00, 0x00, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, + 0x00, 0x00, 0x22, 0x14, 0x08, 0x00, + 0x00, 0x04, 0x52, 0x0A, 0x04, 0x00, + 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, + 0x7C, 0x12, 0x12, 0x12, 0x7C, 0x00, + 0x7E, 0x4A, 0x4A, 0x4A, 0x34, 0x00, + 0x3C, 0x42, 0x42, 0x42, 0x42, 0x00, + 0x7E, 0x42, 0x42, 0x42, 0x3C, 0x00, + 0x7E, 0x4A, 0x4A, 0x4A, 0x4A, 0x00, + 0x7E, 0x0A, 0x0A, 0x0A, 0x0A, 0x00, + 0x3C, 0x42, 0x42, 0x52, 0x72, 0x00, + 0x7E, 0x08, 0x08, 0x08, 0x7E, 0x00, + 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, + 0x20, 0x40, 0x42, 0x3E, 0x00, 0x00, + 0x7E, 0x10, 0x08, 0x14, 0x62, 0x00, + 0x7E, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x7E, 0x04, 0x08, 0x04, 0x7E, 0x00, + 0x7E, 0x04, 0x08, 0x10, 0x7E, 0x00, + 0x3C, 0x42, 0x42, 0x42, 0x3C, 0x00, + 0x7E, 0x12, 0x12, 0x12, 0x0C, 0x00, + 0x3C, 0x42, 0x52, 0x22, 0x5C, 0x00, + 0x7C, 0x12, 0x12, 0x32, 0x5E, 0x00, + 0x4C, 0x4A, 0x4A, 0x4A, 0x32, 0x00, + 0x02, 0x02, 0x7E, 0x02, 0x02, 0x00, + 0x3E, 0x40, 0x40, 0x40, 0x3E, 0x00, + 0x1E, 0x20, 0x40, 0x20, 0x1E, 0x00, + 0x3E, 0x40, 0x38, 0x40, 0x3E, 0x00, + 0x62, 0x14, 0x08, 0x14, 0x62, 0x00, + 0x06, 0x08, 0x70, 0x08, 0x06, 0x00, + 0x62, 0x52, 0x4A, 0x46, 0x42, 0x00, + 0x00, 0x7E, 0x42, 0x42, 0x00, 0x00, + 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, + 0x00, 0x00, 0x42, 0x42, 0x7E, 0x00, + 0x08, 0x04, 0x02, 0x04, 0x08, 0x00, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x00, 0x00, 0x06, 0x0A, 0x00, 0x00, + 0x60, 0x54, 0x54, 0x54, 0x7C, 0x00, + 0x7E, 0x48, 0x48, 0x48, 0x30, 0x00, + 0x30, 0x48, 0x48, 0x48, 0x48, 0x00, + 0x30, 0x48, 0x48, 0x48, 0x7E, 0x00, + 0x38, 0x54, 0x54, 0x54, 0x58, 0x00, + 0x00, 0x08, 0x7C, 0x0A, 0x00, 0x00, + 0x98, 0xA4, 0xA4, 0xA4, 0x78, 0x00, + 0x7E, 0x08, 0x08, 0x08, 0x70, 0x00, + 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, + 0x20, 0x40, 0x40, 0x3A, 0x00, 0x00, + 0x7E, 0x10, 0x28, 0x44, 0x00, 0x00, + 0x00, 0x00, 0x7E, 0x40, 0x00, 0x00, + 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, + 0x7C, 0x04, 0x04, 0x04, 0x78, 0x00, + 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, + 0xFC, 0x24, 0x24, 0x24, 0x18, 0x00, + 0x18, 0x24, 0x24, 0x24, 0xFC, 0x00, + 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, + 0x48, 0x54, 0x54, 0x54, 0x24, 0x00, + 0x00, 0x04, 0x7E, 0x44, 0x00, 0x00, + 0x3C, 0x40, 0x40, 0x40, 0x7C, 0x00, + 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, + 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, + 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, + 0x5C, 0xA0, 0xA0, 0xA0, 0x7C, 0x00, + 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, + 0xFE, 0xC1, 0xC1, 0xC9, 0xC5, 0xDD, + 0xC5, 0xC9, 0xC1, 0xC1, 0xFE, 0x00, + 0xFC, 0xFE, 0xFE, 0xEE, 0xF6, 0xC6, + 0xF6, 0xEE, 0xFE, 0xFE, 0xFC, 0x00, + 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, + 0x7E, 0xFF, 0x81, 0xBF, 0xBF, 0xBF, + 0xBF, 0xF9, 0xF7, 0x8F, 0xF7, 0xF9, + 0xFF, 0x83, 0xED, 0xED, 0xCD, 0xA3, + 0xFF, 0x7E, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x81, 0xEF, 0xF7, 0xEB, 0x9D, + 0xFF, 0x81, 0xB5, 0xB5, 0xB5, 0xCB, + 0xFF, 0x81, 0xBD, 0xBD, 0xBD, 0xC3, + 0xFF, 0x81, 0xEF, 0xF7, 0xEB, 0x9D, + 0xFF, 0xB3, 0xB5, 0xB5, 0xB5, 0xCD, + 0xFF, 0x81, 0xED, 0xED, 0xED, 0xF3, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0x01, 0x61, 0xF1, 0xF9, 0xFD, + 0x61, 0xF1, 0xF9, 0xFD, 0x01, 0xFE, + 0xFE, 0x01, 0xFD, 0xF9, 0xF1, 0x61, + 0xFD, 0xF9, 0xF1, 0x61, 0x01, 0xFE, + 0xFE, 0x01, 0x01, 0xFD, 0x01, 0x61, + 0xF1, 0xF9, 0xFD, 0x01, 0x01, 0xFE, + 0xFE, 0x01, 0x01, 0xFD, 0xF9, 0xF1, + 0x61, 0x01, 0xFD, 0x01, 0x01, 0xFE, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0x08, 0x04, 0xC4, 0x24, 0x24, + 0x24, 0xC4, 0x04, 0x08, 0xF0, 0x00, + 0xF0, 0xF8, 0xFC, 0x3C, 0xDC, 0xDC, + 0xDC, 0x3C, 0xFC, 0xF8, 0xF0, 0x00, + 0xFE, 0xC1, 0xC1, 0xC9, 0xC5, 0xDD, + 0xC5, 0xC9, 0xC1, 0xC1, 0xFE, 0x00, + 0xFC, 0xFE, 0xFE, 0xEE, 0xF6, 0xC6, + 0xF6, 0xEE, 0xFE, 0xFE, 0xFC, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x81, 0xEF, 0xF7, 0xEB, 0x9D, + 0xFF, 0xB3, 0xB5, 0xB5, 0xB5, 0xCD, + 0xFF, 0x81, 0xED, 0xED, 0xED, 0xF3, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x08, 0x08, 0x09, 0x0B, + 0x08, 0x08, 0x09, 0x0B, 0x08, 0x07, + 0x07, 0x08, 0x0B, 0x09, 0x08, 0x08, + 0x0B, 0x09, 0x08, 0x08, 0x08, 0x07, + 0x07, 0x08, 0x08, 0x0B, 0x08, 0x08, + 0x08, 0x09, 0x0B, 0x08, 0x08, 0x07, + 0x07, 0x08, 0x08, 0x0B, 0x09, 0x08, + 0x08, 0x08, 0x0B, 0x08, 0x08, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x10, 0x13, 0x11, 0x11, + 0x11, 0x13, 0x10, 0x08, 0x07, 0x00, + 0x07, 0x0F, 0x1F, 0x1C, 0x1E, 0x1E, + 0x1E, 0x1C, 0x1F, 0x0F, 0x07, 0x00, + 0xFE, 0x01, 0xF1, 0xF9, 0xFD, 0xFD, + 0x05, 0x05, 0x09, 0xF1, 0x01, 0xFE, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x06, 0x3F, + 0x3F, 0x06, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x18, 0x3F, + 0x3F, 0x18, 0x08, 0x00, 0x00, 0x00, + 0x1C, 0x1C, 0x22, 0x41, 0x7F, 0x00, + 0x10, 0x18, 0x1C, 0x18, 0x10, 0x00, + 0x1C, 0x1C, 0x22, 0x41, 0x7F, 0x00, + 0x04, 0x0C, 0x1C, 0x0C, 0x04, 0x00, + 0x1C, 0x3E, 0x3E, 0x22, 0x1C, 0x00, + 0x10, 0x18, 0x1C, 0x18, 0x10, 0x00, + 0x1C, 0x3E, 0x3E, 0x22, 0x1C, 0x00, + 0x04, 0x0C, 0x1C, 0x0C, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x08, 0x09, 0x0B, 0x0B, + 0x0A, 0x0A, 0x09, 0x08, 0x08, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; diff --git a/keyboards/kbdksp/geulis/geulis.c b/keyboards/kbdksp/geulis/geulis.c new file mode 100644 index 00000000000..9d93fd3e558 --- /dev/null +++ b/keyboards/kbdksp/geulis/geulis.c @@ -0,0 +1,18 @@ + /* Copyright 2022 sendz + * + * 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 "geulis.h" + diff --git a/keyboards/kbdksp/geulis/geulis.h b/keyboards/kbdksp/geulis/geulis.h new file mode 100644 index 00000000000..04718715562 --- /dev/null +++ b/keyboards/kbdksp/geulis/geulis.h @@ -0,0 +1,21 @@ +#pragma once +#include "quantum.h" + +#define LAYOUT( \ + L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \ + L10, L11, L12, L13, L14, L15, L35, R30, R10, R11, R12, R13, R14, R15, \ + L20, L21, L22, L23, L24, L25, L44, L45, R41, R40, R20, R21, R22, R23, R24, R25, \ + L30, L31, L32, L33, L34, R31, R32, R33, R34, R35 \ + ) \ + { \ + { L00, L01, L02, L03, L04, L05 }, \ + { L10, L11, L12, L13, L14, L15 }, \ + { L20, L21, L22, L23, L24, L25 }, \ + { L30, L31, L32, L33, L34, L35 }, \ + { KC_NO, KC_NO, KC_NO, KC_NO, L44, L45 }, \ + { R05, R04, R03, R02, R01, R00 }, \ + { R15, R14, R13, R12, R11, R10 }, \ + { R25, R24, R23, R22, R21, R20 }, \ + { R35, R34, R33, R32, R31, R30 }, \ + { KC_NO, KC_NO, KC_NO, KC_NO, R41, R40 } \ + } diff --git a/keyboards/kbdksp/geulis/halconf.h b/keyboards/kbdksp/geulis/halconf.h new file mode 100644 index 00000000000..62d2b694c51 --- /dev/null +++ b/keyboards/kbdksp/geulis/halconf.h @@ -0,0 +1,8 @@ +// Copyright 2022 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define HAL_USE_I2C TRUE + +#include_next diff --git a/keyboards/kbdksp/geulis/info.json b/keyboards/kbdksp/geulis/info.json new file mode 100644 index 00000000000..15364db0bc3 --- /dev/null +++ b/keyboards/kbdksp/geulis/info.json @@ -0,0 +1,39 @@ +{ + "keyboard_name": "Iteung", + "manufacturer": "KBDKSP", + "url": "tokopedia.com/kbdksp", + "maintainer": "Sendy ", + "processor": "RP2040", + "bootloader": "rp2040", + "usb": { + "vid": "0x7370", + "pid": "0x0287", + "device_version": "0.0.1" + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "rows": ["GP28", "GP15", "GP26", "GP27", "GP14"], + "cols": ["GP9", "GP8", "GP7", "GP4", "GP5", "GP6"] + }, + "encoder": { + "enabled": true, + "rotary": [ + {"pin_a": "GP10", "pin_b": "GP11", "resolution": 2} + ] + }, + "split": { + "enabled": true, + "encoder": { + "right": { + "rotary": [ + {"pin_a": "GP10", "pin_b": "GP11", "resolution": 2} + ] + } + } + }, + "layouts": { + "LAYOUT": { + "layout": [{"label":"0,3", "x":3, "y":1.2}, {"label":"4,3", "x":11, "y":1.2}, {"label":"4,4", "x":10, "y":1.25}, {"label":"0,2", "x":2, "y":1.3499999999999999}, {"label":"0,4", "x":4, "y":1.3499999999999999}, {"label":"4,2", "x":12, "y":1.3499999999999999}, {"label":"0,0", "x":0, "y":1.5}, {"label":"0,1", "x":1, "y":1.5}, {"label":"0,5", "x":5, "y":1.5}, {"label":"4,5", "x":9, "y":1.5}, {"label":"4,1", "x":13, "y":1.5}, {"label":"4,0", "x":14, "y":1.5}, {"label":"1,3", "x":3, "y":2.2}, {"label":"5,3", "x":11, "y":2.2}, {"label":"3,5", "x":6.25, "y":2.25}, {"label":"7,5", "x":7.75, "y":2.25}, {"label":"1,2", "x":2, "y":2.35}, {"label":"1,4", "x":4, "y":2.35}, {"label":"5,4", "x":10, "y":2.35}, {"label":"5,2", "x":12, "y":2.35}, {"label":"1,0", "x":0, "y":2.5}, {"label":"1,1", "x":1, "y":2.5}, {"label":"1,5", "x":5, "y":2.5}, {"label":"5,5", "x":9, "y":2.5}, {"label":"5,1", "x":13, "y":2.5}, {"label":"5,0", "x":14, "y":2.5}, {"label":"2,3", "x":3, "y":3.2}, {"label":"6,3", "x":11, "y":3.2}, {"label":"4,4", "x":6.25, "y":3.25, "w":0.5}, {"label":"4,5", "x":6.75, "y":3.25, "w":0.5}, {"label":"8,5", "x":7.75, "y":3.25, "w":0.5}, {"label":"8,4", "x":8.25, "y":3.25, "w":0.5}, {"label":"2,2", "x":2, "y":3.35}, {"label":"2,4", "x":4, "y":3.35}, {"label":"6,4", "x":10, "y":3.35}, {"label":"6,2", "x":12, "y":3.35}, {"label":"2,0", "x":0, "y":3.5}, {"label":"2,1", "x":1, "y":3.5}, {"label":"2,5", "x":5, "y":3.5}, {"label":"6,5", "x":9, "y":3.5}, {"label":"6,1", "x":13, "y":3.5}, {"label":"6,0", "x":14, "y":3.5}, {"label":"3,1", "x":2.75, "y":4.3500000000000005}, {"label":"3,2", "x":3.75, "y":4.3500000000000005}, {"label":"7,2", "x":10.25, "y":4.3500000000000005}, {"label":"3,0", "x":1.75, "y":4.5}, {"label":"7,1", "x":11, "y":9.85}, {"label":"7,0", "x":11.75, "y":15.35}, {"label":"3,3", "x":0, "y":16.35}, {"label":"3,4", "x":0.1, "y":17.1, "h":1.5}, {"label":"7,4", "x":-1.1, "y":17.85, "h":1.5}, {"label":"7,3", "x":-1.0, "y":18.85}] + } + } +} diff --git a/keyboards/kbdksp/geulis/jpe230.h b/keyboards/kbdksp/geulis/jpe230.h new file mode 100644 index 00000000000..2792f6a3796 --- /dev/null +++ b/keyboards/kbdksp/geulis/jpe230.h @@ -0,0 +1,20 @@ +// Copyright 2022 Jose Pablo Ramirez (@jpe230) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include QMK_KEYBOARD_H + +bool shift_pressed; +bool alt_pressed; +bool ctrl_pressed; +bool gui_pressed; + +/* --------------------------- + * Custom OLED Fncs Prototypes + * --------------------------- + */ +void render_slave_oled(void); +void render_master_oled(void); +void oled_timer_reset(void); +void set_keylog(uint16_t keycode, keyrecord_t *record); diff --git a/keyboards/kbdksp/geulis/keymaps/vial/config.h b/keyboards/kbdksp/geulis/keymaps/vial/config.h new file mode 100644 index 00000000000..338d68ac31b --- /dev/null +++ b/keyboards/kbdksp/geulis/keymaps/vial/config.h @@ -0,0 +1,71 @@ +/* Copyright 2023 KBDKSP + * + * 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 . + */ + +// clang-format off + +#pragma once + +// Vial Support +#define VIAL_KEYBOARD_UID {0xEF, 0xC8, 0x32, 0x24, 0xED, 0x6A, 0x99, 0xC3} + +#define VIAL_ENCODER_DEFAULT { \ + KC_VOLU, KC_VOLD, \ + KC_PGUP, KC_PGDN, \ + KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS \ +} + +#define DYNAMIC_KEYMAP_LAYER_COUNT 10 + +/* --------------------------- + * Common Spit Configuration + * --------------------------- + */ +#define SPLIT_OLED_ENABLE + +/* --------------------------- + * Common Bootmagic Lite + * --------------------------- + */ +#define BOOTMAGIC_LITE_ROW 0 +#define BOOTMAGIC_LITE_COLUMN 0 + +/* --------------------------- + * Common RGB Configuration + * --------------------------- + */ +#ifdef RGB_MATRIX_ENABLE + #define RGB_DISABLE_WHEN_USB_SUSPENDED + #define RGB_DISABLE_TIMEOUT CUSTOM_OLED_TIMEOUT + #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 128 + #define RGB_MATRIX_DEFAULT_HUE 215 + #define RGB_MATRIX_DEFAULT_SAT 255 + #define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS +#endif + +/* --------------------------- + * Common other Configuration + * --------------------------- + */ +#define ENABLE_COMPILE_KEYCODE + + +#define VIAL_UNLOCK_COMBO_ROWS { 0, 0 } +#define VIAL_UNLOCK_COMBO_COLS { 0, 3 } diff --git a/keyboards/kbdksp/geulis/keymaps/vial/keymap.c b/keyboards/kbdksp/geulis/keymaps/vial/keymap.c new file mode 100644 index 00000000000..786db493085 --- /dev/null +++ b/keyboards/kbdksp/geulis/keymaps/vial/keymap.c @@ -0,0 +1,113 @@ +/* Copyright 2020 Josef Adamcik + * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang + * Modification for Vial support by Drew Petersen + * + * 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 . + */ + +// clang-format off + +#include +char wpm_str[10]; +#include QMK_KEYBOARD_H + +// Default keymap. This can be changed in Vial. Use oled.c to change beavior that Vial cannot change. + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* + * QWERTY WINDOWS + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ESC | Q | W | E | R | T | | Y | U | I | O | P | Bspc | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' | + * |------+------+------+------+------+------| | | |------+------+------+------+------+------| + * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ + +[0] = LAYOUT( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_MUTE, XXXXXXX, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LGUI,KC_LALT,KC_LCTL, MO(1), KC_SPC, KC_ENT, MO(2), KC_MINS, KC_EQL, KC_RGUI +), +/* LOWER + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | | | + * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------| + * | Shift| = | - | + | { | } |-------| |-------| [ | ] | ; | : | \ | Shift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ +[1] = LAYOUT( + KC_GRV, _______, _______, _______, _______, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, _______, _______, + _______, _______, RGB_TOG, RGB_MOD, RGB_VAI, _______, _______, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, + KC_CAPS, _______, _______, RGB_RMOD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), +/* RAISE + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Esc | Ins | Pscr | Menu | | | | | PWrd | Up | NWrd | DLine| Bspc | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | LAt | LCtl |LShift| | Caps |-------. ,-------| | Left | Down | Rigth| Del | Bspc | + * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------| + * |Shift | Undo | Cut | Copy | Paste| |-------| |-------| | LStr | | LEnd | | Shift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ +[2] = LAYOUT( + _______, KC_INS, KC_PSCR, KC_APP, XXXXXXX, XXXXXXX, KC_PGUP, _______, KC_UP, _______, _______, KC_BSPC, + _______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, _______, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_BSPC, + _______, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, XXXXXXX, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, _______, XXXXXXX, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), +/* + * COLEMAK + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ESC | Q | W | F | P | G | | J | L | U | Y | ; | Bspc | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | TAB | A | R | S | T | D |-------. ,-------| H | N | E | I | O | ' | + * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------| + * |LShift| Z | X | C | V | B |-------| |-------| K | M | , | . | / |RShift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ + +[3] = LAYOUT( + KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, + KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_MUTE, XXXXXXX, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LGUI, KC_LALT, KC_LCTL, KC_TRNS, KC_ENT, KC_SPC, KC_TRNS, KC_RCTL, KC_RALT, KC_RGUI +), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_WH_D, KC_WH_U) }, + [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + [2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + [3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, +}; +#endif diff --git a/keyboards/kbdksp/geulis/keymaps/vial/rules.mk b/keyboards/kbdksp/geulis/keymaps/vial/rules.mk new file mode 100644 index 00000000000..4cc00fb29f6 --- /dev/null +++ b/keyboards/kbdksp/geulis/keymaps/vial/rules.mk @@ -0,0 +1,4 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes +# VIAL_INSECURE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/kbdksp/geulis/keymaps/vial/vial.json b/keyboards/kbdksp/geulis/keymaps/vial/vial.json new file mode 100644 index 00000000000..6314b01c679 --- /dev/null +++ b/keyboards/kbdksp/geulis/keymaps/vial/vial.json @@ -0,0 +1,391 @@ +{ + "name": "Iteung", + "vendorId": "0x7370", + "productId": "0x0287", + "lighting": "qmk_rgblight", + "matrix": { "rows": 10, "cols": 6 }, + "layouts": { + "keymap": [ + [ + { + "y": 1.2, + "x": 3, + "p": "CHICKLET", + "f": 8, + "fa": [ + 1 + ] + }, + "0,3", + { + "x": 7 + }, + "4,3" + ], + [ + { + "y": -0.9500000000000002, + "x": 6.25, + "f": 3, + "w": 0.5 + }, + "0,0\n\n\n\n\n\n\n\n\ne", + { + "w": 0.5 + }, + "0,1\n\n\n\n\n\n\n\n\ne", + { + "x": 0.5, + "w": 0.5 + }, + "1,1\n\n\n\n\n\n\n\n\ne", + { + "w": 0.5 + }, + "1,0\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "y": -0.9999999999999998, + "x": 10, + "f": 8, + "fa": [ + 1 + ] + }, + "4,4" + ], + [ + { + "y": -0.8999999999999999, + "x": 2 + }, + "0,2", + { + "x": 1 + }, + "0,4", + { + "x": 7 + }, + "4,2" + ], + [ + { + "y": -0.8500000000000001, + "c": "#aaaaaa" + }, + "0,0", + { + "c": "#cccccc" + }, + "0,1", + { + "x": 3 + }, + "0,5", + { + "a": 7, + "f": 6, + "w": 3, + "h": 2.75, + "d": true + }, + "", + { + "a": 4, + "f": 8, + "fa": [ + 1 + ] + }, + "4,5", + { + "x": 3 + }, + "4,1", + { + "c": "#aaaaaa", + "f": 6, + "fa": [ + 1 + ] + }, + "4,0" + ], + [ + { + "y": -0.2999999999999998, + "x": 3, + "c": "#cccccc", + "f": 8, + "fa": [ + 1 + ] + }, + "1,3", + { + "x": 7 + }, + "5,3" + ], + [ + { + "y": -0.9500000000000002, + "x": 6.25 + }, + "3,5", + { + "x": 0.5 + }, + "7,5" + ], + [ + { + "y": -0.8999999999999999, + "x": 2 + }, + "1,2", + { + "x": 1, + "n": true + }, + "1,4", + { + "x": 5, + "n": true + }, + "5,4", + { + "x": 1 + }, + "5,2" + ], + [ + { + "y": -0.8500000000000001, + "c": "#aaaaaa", + "f": 6, + "fa": [ + 1 + ] + }, + "1,0", + { + "c": "#cccccc", + "f": 8, + "fa": [ + 1 + ] + }, + "1,1", + { + "x": 3 + }, + "1,5", + { + "x": 3 + }, + "5,5", + { + "x": 3 + }, + "5,1", + { + "c": "#aaaaaa", + "f": 6, + "fa": [ + 1 + ] + }, + "5,0" + ], + [ + { + "y": -0.2999999999999998, + "x": 3, + "c": "#cccccc", + "f": 8, + "fa": [ + 1 + ] + }, + "2,3", + { + "x": 7 + }, + "6,3" + ], + [ + { + "y": -0.9500000000000002, + "x": 6.25, + "f": 3, + "w": 0.5 + }, + "4,4", + { + "w": 0.5 + }, + "4,5", + { + "x": 0.5, + "w": 0.5 + }, + "8,5", + { + "w": 0.5 + }, + "8,4" + ], + [ + { + "y": -0.8999999999999999, + "x": 2, + "f": 8, + "fa": [ + 1 + ] + }, + "2,2", + { + "x": 1 + }, + "2,4", + { + "x": 5 + }, + "6,4", + { + "x": 1 + }, + "6,2" + ], + [ + { + "y": -0.8500000000000001, + "c": "#aaaaaa", + "f": 5, + "fa": [ + 1 + ] + }, + "2,0", + { + "c": "#cccccc", + "f": 8, + "fa": [ + 1 + ] + }, + "2,1", + { + "x": 3 + }, + "2,5", + { + "x": 3 + }, + "6,5", + { + "x": 3 + }, + "6,1", + { + "c": "#aaaaaa", + "f": 5, + "fa": [ + 1 + ] + }, + "6,0" + ], + [ + { + "y": -0.15000000000000036, + "x": 2.75, + "f": 9, + "fa": [ + 1 + ] + }, + "3,1", + "3,2", + { + "x": 5.5 + }, + "7,2" + ], + [ + { + "y": -0.8499999999999996, + "x": 1.75 + }, + "3,0" + ], + [ + { + "rx": 0.25, + "y": 4.35, + "x": 11 + }, + "7,1" + ], + [ + { + "rx": 0.5, + "y": 4.5, + "x": 11.75 + }, + "7,0" + ], + [ + { + "r": 15, + "rx": 5, + "ry": 4.5, + "c": "#777777" + }, + "3,3" + ], + [ + { + "r": 30, + "rx": 6.25, + "y": -0.25, + "x": 0.09999999999999964, + "c": "#aaaaaa", + "h": 1.5 + }, + "3,4" + ], + [ + { + "r": -30, + "rx": 8.75, + "y": -0.25, + "x": -1.0999999999999996, + "f": 8, + "fa": [ + 1 + ], + "h": 1.5 + }, + "7,4" + ], + [ + { + "r": -15, + "rx": 10, + "x": -1, + "c": "#777777", + "f": 9, + "fa": [ + 1 + ] + }, + "7,3" + ] + ] + } +} diff --git a/keyboards/kbdksp/geulis/mcuconf.h b/keyboards/kbdksp/geulis/mcuconf.h new file mode 100644 index 00000000000..7548f5b4290 --- /dev/null +++ b/keyboards/kbdksp/geulis/mcuconf.h @@ -0,0 +1,11 @@ +// Copyright 2022 Steven Karrmann (@skarrmann) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include_next + +#undef RP_I2C_USE_I2C0 +#undef RP_I2C_USE_I2C1 +#define RP_I2C_USE_I2C0 FALSE +#define RP_I2C_USE_I2C1 TRUE diff --git a/keyboards/kbdksp/geulis/oled/oled_handler.c b/keyboards/kbdksp/geulis/oled/oled_handler.c new file mode 100644 index 00000000000..e2b56e4b9ea --- /dev/null +++ b/keyboards/kbdksp/geulis/oled/oled_handler.c @@ -0,0 +1,42 @@ +// Copyright 2022 Jose Pablo Ramirez (@jpe230) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "jpe230.h" +#ifdef OLED_ENABLE +uint8_t logged_row; +uint8_t logged_col; +uint32_t oled_timer = 0; + +__attribute__ ((weak)) void handle_oled_keypress(uint16_t keycode, keyrecord_t *record) {} + +__attribute__ ((weak)) oled_rotation_t rotate_master(oled_rotation_t rotation) {return rotation;} +__attribute__ ((weak)) oled_rotation_t rotate_slave(oled_rotation_t rotation) {return rotation;} + +void oled_timer_reset(void) { oled_timer = timer_read32(); } + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + + if (!is_keyboard_master()) { + return rotate_slave(rotation); + } + + return rotate_master(rotation); +} + + +void set_keylog(uint16_t keycode, keyrecord_t *record) { + logged_row = record->event.key.row; + logged_col = record->event.key.col; + + handle_oled_keypress(keycode, record); +} + +bool oled_task_user(void) { + if (is_keyboard_master()) { + render_master_oled(); + } else { + render_slave_oled(); + } + return false; +} +#endif \ No newline at end of file diff --git a/keyboards/kbdksp/geulis/oled/rp2040/master/oled_master_handler.c b/keyboards/kbdksp/geulis/oled/rp2040/master/oled_master_handler.c new file mode 100644 index 00000000000..41e76a44e94 --- /dev/null +++ b/keyboards/kbdksp/geulis/oled/rp2040/master/oled_master_handler.c @@ -0,0 +1,38 @@ +// Copyright 2022 Jose Pablo Ramirez (@jpe230) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "jpe230.h" + +// static const char PROGMEM ICON_LAYER[] = {0x80, 0x81, 0x82, 0x83, 0}; + +void render_master_oled(void) { + oled_on(); + + oled_write_P(PSTR(" KBD "), false); + oled_write_P(PSTR(" KSP "), false); + + oled_write_ln_P(PSTR(""), false); + + oled_write_P(PSTR(" ITE "), false); + oled_write_P(PSTR(" UNG "), false); + + oled_write_ln_P(PSTR(""), false); + oled_write_P(PSTR("_____"), false); + oled_write_ln_P(PSTR(""), false); + oled_write_ln_P(PSTR(""), false); + + char layer_string[8] = {0}; + sprintf(layer_string, "LYR %d", get_highest_layer(layer_state)); + oled_write(layer_string, false); + + oled_write_ln_P(PSTR(""), false); + + led_t led_usb_state = host_keyboard_led_state(); + oled_write_P(PSTR("CAPS "), led_usb_state.caps_lock); + oled_write_P(PSTR("SHIFT"), shift_pressed); + oled_write_P(PSTR("CTRL "), ctrl_pressed); + oled_write_P(PSTR("GUI "), gui_pressed); + oled_write_P(PSTR("ALT "), alt_pressed); +} + +oled_rotation_t rotate_master(oled_rotation_t rotation) {return OLED_ROTATION_270;} diff --git a/keyboards/kbdksp/geulis/oled/rp2040/slave/oled_slave_handler.c b/keyboards/kbdksp/geulis/oled/rp2040/slave/oled_slave_handler.c new file mode 100644 index 00000000000..525038bd397 --- /dev/null +++ b/keyboards/kbdksp/geulis/oled/rp2040/slave/oled_slave_handler.c @@ -0,0 +1,120 @@ +// Copyright 2022 Jose Pablo Ramirez (@jpe230) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "jpe230.h" +#include + +char wpm_str[10]; + +// WPM-responsive animation stuff here +# define IDLE_FRAMES 5 +# define IDLE_SPEED 20 // below this wpm value your animation will idle + +// #define PREP_FRAMES 1 // uncomment if >1 + +# define TAP_FRAMES 2 +# define TAP_SPEED 40 // above this wpm value typing animation to trigger + +# define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms +// #define SLEEP_TIMER 60000 // should sleep after this period of 0 wpm, needs fixing +# define ANIM_SIZE 636 // number of bytes in array, minimize for adequate firmware size, max is 1024 + +uint32_t anim_timer = 0; +uint32_t anim_sleep = 0; +uint8_t current_idle_frame = 0; +// uint8_t current_prep_frame = 0; // uncomment if PREP_FRAMES >1 +uint8_t current_tap_frame = 0; + +// Code containing pixel art, contains: +// 5 idle frames, 1 prep frame, and 2 tap frames + +// To make your own pixel art: +// save a png/jpeg of an 128x32 image (resource: https://www.pixilart.com/draw ) +// follow this guide up to and including "CONVERT YOUR IMAGE" https://docs.splitkb.com/hc/en-us/articles/360013811280-How-do-I-convert-an-image-for-use-on-an-OLED-display- +// replace numbers in brackets with your own +// if you start getting errors when compiling make sure you didn't accedentally delete a bracket +static void render_anim(void) { + static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x82, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x01, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x34, 0xc4, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0d, 0x31, 0xc1, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; + static const char PROGMEM prep[][ANIM_SIZE] = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; + static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x98, 0xc0, 0x88, 0x88, 0x8c, 0x9c, 0x1c, 0x1e, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0f, 0x0f, 0x07, 0x03, 0x03, 0x61, 0xf0, 0xf8, 0xfc, 0x60, 0x01, 0x01, 0x01, 0x3c, 0x78, 0xf8, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + }; + + // assumes 1 frame prep stage + void animation_phase(void) { + if (get_current_wpm() <= IDLE_SPEED) { + current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES; + oled_write_raw_P(idle[abs((IDLE_FRAMES - 1) - current_idle_frame)], ANIM_SIZE); + } + if (get_current_wpm() > IDLE_SPEED && get_current_wpm() < TAP_SPEED) { + // oled_write_raw_P(prep[abs((PREP_FRAMES-1)-current_prep_frame)], ANIM_SIZE); // uncomment if IDLE_FRAMES >1 + oled_write_raw_P(prep[0], ANIM_SIZE); // remove if IDLE_FRAMES >1 + } + if (get_current_wpm() >= TAP_SPEED) { + current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES; + oled_write_raw_P(tap[abs((TAP_FRAMES - 1) - current_tap_frame)], ANIM_SIZE); + } + } + if (get_current_wpm() != 000) { + oled_on(); // not essential but turns on animation OLED with any alpha keypress + if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animation_phase(); + } + anim_sleep = timer_read32(); + } else { + if (timer_elapsed32(anim_sleep) > OLED_TIMEOUT) { + oled_off(); + } else { + if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animation_phase(); + } + } + } +} + +static const char PROGMEM KDBKSP[] = {0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0}; + +void render_slave_oled(void) { + oled_on(); + + render_anim(); + + oled_write_P(KDBKSP, false); + + oled_set_cursor(0, 1); + sprintf(wpm_str, "WPM:%03d", get_current_wpm()); // edit the string to change wwhat shows up, edit %03d to change how many digits show up + oled_write(wpm_str, false); +} + +oled_rotation_t rotate_slave(oled_rotation_t rotation) {return OLED_ROTATION_0;} diff --git a/keyboards/kbdksp/geulis/process_record.c b/keyboards/kbdksp/geulis/process_record.c new file mode 100644 index 00000000000..39ecda05f62 --- /dev/null +++ b/keyboards/kbdksp/geulis/process_record.c @@ -0,0 +1,63 @@ +// Copyright 2022 Jose Pablo Ramirez (@jpe230) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "jpe230.h" +#ifdef OLED_ENABLE +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + oled_timer_reset(); + set_keylog(keycode, record); + + switch (keycode) { + case QK_BOOT: + // rgb_matrix_set_color_all(30, 0, 0); + // rgb_matrix_driver.flush(); + oled_off(); + return true; + } + } + return true; +} + +void post_process_record_user(uint16_t keycode, keyrecord_t *record) { +switch (keycode) { + case KC_LSFT: + case KC_RSFT: + if (record->event.pressed) { + shift_pressed = true; + } else { + shift_pressed = false; + } + break; + case KC_LALT: + case KC_RALT: + if (record->event.pressed) { + alt_pressed = true; + } else { + alt_pressed = false; + } + break; + case KC_LCTL: + case KC_RCTL: + if (record->event.pressed) { + ctrl_pressed = true; + } else { + ctrl_pressed = false; + } + break; + case KC_LGUI: + case KC_RGUI: + if (record->event.pressed) { + gui_pressed = true; + } else { + gui_pressed = false; + } + break; + default: + gui_pressed = false; + ctrl_pressed = false; + alt_pressed = false; + shift_pressed = false; + } +} +#endif \ No newline at end of file diff --git a/keyboards/kbdksp/geulis/rules.mk b/keyboards/kbdksp/geulis/rules.mk new file mode 100644 index 00000000000..be8543a9af4 --- /dev/null +++ b/keyboards/kbdksp/geulis/rules.mk @@ -0,0 +1,24 @@ + +MCU = RP2040 +BOARD = GENERIC_RP_RP2040 +# Bootloader selection +BOOTLOADER = rp2040 + +# SPLIT_KEYBOARD = yes +SERIAL_DRIVER = vendor +EXTRAKEY_ENABLE = yes # Audio control and System control +MOUSEKEY_ENABLE = yes + +OLED_ENABLE = yes +OLED_DRIVER = ssd1306 + +RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow +WS2812_DRIVER = vendor + +SRC += oled/oled_handler.c process_record.c + +DEBUG_MATRIX_SCAN_RATE_ENABLE = yes +WPM_ENABLE = yes +CONSOLE_ENABLE = yes +SRC += oled/rp2040/master/oled_master_handler.c \ + oled/rp2040/slave/oled_slave_handler.c diff --git a/keyboards/kbdksp/geulisv/config.h b/keyboards/kbdksp/geulisv/config.h new file mode 100644 index 00000000000..073b67985fb --- /dev/null +++ b/keyboards/kbdksp/geulisv/config.h @@ -0,0 +1,55 @@ + /* Copyright 2024 sendz + * + * 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 "config_rp2040.h" + +#pragma once +#define OLED_DISPLAY_128X32 +#define I2C1_SCL_PIN GP3 +#define I2C1_SDA_PIN GP2 +#define I2C_DRIVER I2CD1 +#define OLED_FONT_H "keyboards/kbdksp/geulisv/fonts/glcdfont.c" + +#define SERIAL_USART_FULL_DUPLEX +#define SERIAL_USART_TX_PIN GP0 +#define SERIAL_USART_RX_PIN GP1 + +#define VBUS_SENSE GP12 +#define ENCODER_RESOLUTION 1 + +#ifdef RGBLIGHT_ENABLE + #define WS2812_DI_PIN GP13 + #define WS2812_PIO_USE_PIO1 // Force the usage of PIO1 peripheral, by default the WS2812 implementation uses the PIO0 peripheral + + #define RGBLIGHT_EFFECT_BREATHING + #define RGBLIGHT_EFFECT_RAINBOW_MOOD + #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + #define RGBLIGHT_EFFECT_SNAKE + #define RGBLIGHT_EFFECT_KNIGHT + #define RGBLIGHT_EFFECT_CHRISTMAS + #define RGBLIGHT_EFFECT_STATIC_GRADIENT + #define RGBLIGHT_EFFECT_RGB_TEST + #define RGBLIGHT_EFFECT_ALTERNATING + #define RGBLIGHT_EFFECT_TWINKLE + + #define RGBLIGHT_LED_COUNT 16 + + #define RGBLED_SPLIT { 8, 8 } + + #define RGBLIGHT_LIMIT_VAL 120 + #define RGBLIGHT_HUE_STEP 10 + #define RGBLIGHT_SAT_STEP 17 + #define RGBLIGHT_VAL_STEP 17 +#endif \ No newline at end of file diff --git a/keyboards/kbdksp/geulisv/config_rp2040.h b/keyboards/kbdksp/geulisv/config_rp2040.h new file mode 100644 index 00000000000..4ada22afd4e --- /dev/null +++ b/keyboards/kbdksp/geulisv/config_rp2040.h @@ -0,0 +1,75 @@ +// Copyright 2022 Jose Pablo Ramirez (@jpe230) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +/* --------------------------- + * RP2040 OLED Configuration + * --------------------------- + */ +#define I2C1_CLOCK_SPEED 400000 +#define OLED_UPDATE_INTERVAL 1 +#define OLED_I2C_TIMEOUT 1 + +/* --------------------------- + * RP2040 Split Configuration + * --------------------------- + */ +#define SPLIT_WPM_ENABLE + +/* --------------------------- + * RP2040 Debounce + * --------------------------- + */ +#undef DEBOUNCE +#define DEBOUNCE 1 + +/* --------------------------- + * RP2040 RGB Configuration + * --------------------------- + */ +#ifdef RGB_MATRIX_ENABLE + #define ENABLE_RGB_MATRIX_ALPHAS_MODS + #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN + #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT + #define ENABLE_RGB_MATRIX_BREATHING + #define ENABLE_RGB_MATRIX_BAND_SAT + #define ENABLE_RGB_MATRIX_BAND_VAL + #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT + #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL + #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT + #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL + #define ENABLE_RGB_MATRIX_CYCLE_ALL + #define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT + #define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN + #define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON + #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN + #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL + #define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL + #define ENABLE_RGB_MATRIX_CYCLE_SPIRAL + #define ENABLE_RGB_MATRIX_DUAL_BEACON + #define ENABLE_RGB_MATRIX_RAINBOW_BEACON + #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS + #define ENABLE_RGB_MATRIX_RAINDROPS + #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS + #define ENABLE_RGB_MATRIX_HUE_BREATHING + #define ENABLE_RGB_MATRIX_HUE_PENDULUM + #define ENABLE_RGB_MATRIX_HUE_WAVE + #define ENABLE_RGB_MATRIX_PIXEL_RAIN + #define ENABLE_RGB_MATRIX_PIXEL_FLOW + #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL + #define ENABLE_RGB_MATRIX_TYPING_HEATMAP + #define ENABLE_RGB_MATRIX_DIGITAL_RAIN + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS + #define ENABLE_RGB_MATRIX_SPLASH + #define ENABLE_RGB_MATRIX_MULTISPLASH + #define ENABLE_RGB_MATRIX_SOLID_SPLASH + #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH +#endif \ No newline at end of file diff --git a/keyboards/kbdksp/geulisv/fonts/glcdfont.c b/keyboards/kbdksp/geulisv/fonts/glcdfont.c new file mode 100755 index 00000000000..fd84399afb5 --- /dev/null +++ b/keyboards/kbdksp/geulisv/fonts/glcdfont.c @@ -0,0 +1,244 @@ + /* Copyright 2020 sendyyeah + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "progmem.h" + +const unsigned char font[] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, + 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, + 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, + 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, + 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, + 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, + 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, + 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, + 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, + 0x26, 0x29, 0x79, 0x29, 0x26, 0x00, + 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, + 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, + 0x5A, 0x3C, 0x66, 0x3C, 0x5A, 0x00, + 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, + 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, + 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, + 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, + 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, + 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, + 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, + 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, + 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, + 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, + 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, + 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, + 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, + 0x14, 0x3E, 0x14, 0x3E, 0x14, 0x00, + 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, + 0x26, 0x16, 0x08, 0x34, 0x32, 0x00, + 0x36, 0x4A, 0x56, 0x20, 0x50, 0x00, + 0x00, 0x0A, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x3C, 0x42, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x42, 0x3C, 0x00, 0x00, + 0x2A, 0x1C, 0x3E, 0x1C, 0x2A, 0x00, + 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, + 0x00, 0xA0, 0x60, 0x00, 0x00, 0x00, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, + 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, + 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, + 0x3C, 0x42, 0x42, 0x42, 0x3C, 0x00, + 0x00, 0x44, 0x7E, 0x40, 0x00, 0x00, + 0x64, 0x52, 0x52, 0x52, 0x4C, 0x00, + 0x22, 0x42, 0x4A, 0x4A, 0x36, 0x00, + 0x38, 0x24, 0x22, 0x7E, 0x20, 0x00, + 0x2E, 0x4A, 0x4A, 0x4A, 0x32, 0x00, + 0x3C, 0x4A, 0x4A, 0x4A, 0x32, 0x00, + 0x02, 0x02, 0x62, 0x1A, 0x06, 0x00, + 0x34, 0x4A, 0x4A, 0x4A, 0x34, 0x00, + 0x4C, 0x52, 0x52, 0x52, 0x3C, 0x00, + 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x14, 0x22, 0x00, 0x00, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, + 0x00, 0x00, 0x22, 0x14, 0x08, 0x00, + 0x00, 0x04, 0x52, 0x0A, 0x04, 0x00, + 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, + 0x7C, 0x12, 0x12, 0x12, 0x7C, 0x00, + 0x7E, 0x4A, 0x4A, 0x4A, 0x34, 0x00, + 0x3C, 0x42, 0x42, 0x42, 0x42, 0x00, + 0x7E, 0x42, 0x42, 0x42, 0x3C, 0x00, + 0x7E, 0x4A, 0x4A, 0x4A, 0x4A, 0x00, + 0x7E, 0x0A, 0x0A, 0x0A, 0x0A, 0x00, + 0x3C, 0x42, 0x42, 0x52, 0x72, 0x00, + 0x7E, 0x08, 0x08, 0x08, 0x7E, 0x00, + 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, + 0x20, 0x40, 0x42, 0x3E, 0x00, 0x00, + 0x7E, 0x10, 0x08, 0x14, 0x62, 0x00, + 0x7E, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x7E, 0x04, 0x08, 0x04, 0x7E, 0x00, + 0x7E, 0x04, 0x08, 0x10, 0x7E, 0x00, + 0x3C, 0x42, 0x42, 0x42, 0x3C, 0x00, + 0x7E, 0x12, 0x12, 0x12, 0x0C, 0x00, + 0x3C, 0x42, 0x52, 0x22, 0x5C, 0x00, + 0x7C, 0x12, 0x12, 0x32, 0x5E, 0x00, + 0x4C, 0x4A, 0x4A, 0x4A, 0x32, 0x00, + 0x02, 0x02, 0x7E, 0x02, 0x02, 0x00, + 0x3E, 0x40, 0x40, 0x40, 0x3E, 0x00, + 0x1E, 0x20, 0x40, 0x20, 0x1E, 0x00, + 0x3E, 0x40, 0x38, 0x40, 0x3E, 0x00, + 0x62, 0x14, 0x08, 0x14, 0x62, 0x00, + 0x06, 0x08, 0x70, 0x08, 0x06, 0x00, + 0x62, 0x52, 0x4A, 0x46, 0x42, 0x00, + 0x00, 0x7E, 0x42, 0x42, 0x00, 0x00, + 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, + 0x00, 0x00, 0x42, 0x42, 0x7E, 0x00, + 0x08, 0x04, 0x02, 0x04, 0x08, 0x00, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x00, 0x00, 0x06, 0x0A, 0x00, 0x00, + 0x60, 0x54, 0x54, 0x54, 0x7C, 0x00, + 0x7E, 0x48, 0x48, 0x48, 0x30, 0x00, + 0x30, 0x48, 0x48, 0x48, 0x48, 0x00, + 0x30, 0x48, 0x48, 0x48, 0x7E, 0x00, + 0x38, 0x54, 0x54, 0x54, 0x58, 0x00, + 0x00, 0x08, 0x7C, 0x0A, 0x00, 0x00, + 0x98, 0xA4, 0xA4, 0xA4, 0x78, 0x00, + 0x7E, 0x08, 0x08, 0x08, 0x70, 0x00, + 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, + 0x20, 0x40, 0x40, 0x3A, 0x00, 0x00, + 0x7E, 0x10, 0x28, 0x44, 0x00, 0x00, + 0x00, 0x00, 0x7E, 0x40, 0x00, 0x00, + 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, + 0x7C, 0x04, 0x04, 0x04, 0x78, 0x00, + 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, + 0xFC, 0x24, 0x24, 0x24, 0x18, 0x00, + 0x18, 0x24, 0x24, 0x24, 0xFC, 0x00, + 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, + 0x48, 0x54, 0x54, 0x54, 0x24, 0x00, + 0x00, 0x04, 0x7E, 0x44, 0x00, 0x00, + 0x3C, 0x40, 0x40, 0x40, 0x7C, 0x00, + 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, + 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, + 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, + 0x5C, 0xA0, 0xA0, 0xA0, 0x7C, 0x00, + 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, + 0xFE, 0xC1, 0xC1, 0xC9, 0xC5, 0xDD, + 0xC5, 0xC9, 0xC1, 0xC1, 0xFE, 0x00, + 0xFC, 0xFE, 0xFE, 0xEE, 0xF6, 0xC6, + 0xF6, 0xEE, 0xFE, 0xFE, 0xFC, 0x00, + 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, + 0x7E, 0xFF, 0x81, 0xBF, 0xBF, 0xBF, + 0xBF, 0xF9, 0xF7, 0x8F, 0xF7, 0xF9, + 0xFF, 0x83, 0xED, 0xED, 0xCD, 0xA3, + 0xFF, 0x7E, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x81, 0xEF, 0xF7, 0xEB, 0x9D, + 0xFF, 0x81, 0xB5, 0xB5, 0xB5, 0xCB, + 0xFF, 0x81, 0xBD, 0xBD, 0xBD, 0xC3, + 0xFF, 0x81, 0xEF, 0xF7, 0xEB, 0x9D, + 0xFF, 0xB3, 0xB5, 0xB5, 0xB5, 0xCD, + 0xFF, 0x81, 0xED, 0xED, 0xED, 0xF3, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0x01, 0x61, 0xF1, 0xF9, 0xFD, + 0x61, 0xF1, 0xF9, 0xFD, 0x01, 0xFE, + 0xFE, 0x01, 0xFD, 0xF9, 0xF1, 0x61, + 0xFD, 0xF9, 0xF1, 0x61, 0x01, 0xFE, + 0xFE, 0x01, 0x01, 0xFD, 0x01, 0x61, + 0xF1, 0xF9, 0xFD, 0x01, 0x01, 0xFE, + 0xFE, 0x01, 0x01, 0xFD, 0xF9, 0xF1, + 0x61, 0x01, 0xFD, 0x01, 0x01, 0xFE, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0x08, 0x04, 0xC4, 0x24, 0x24, + 0x24, 0xC4, 0x04, 0x08, 0xF0, 0x00, + 0xF0, 0xF8, 0xFC, 0x3C, 0xDC, 0xDC, + 0xDC, 0x3C, 0xFC, 0xF8, 0xF0, 0x00, + 0xFE, 0xC1, 0xC1, 0xC9, 0xC5, 0xDD, + 0xC5, 0xC9, 0xC1, 0xC1, 0xFE, 0x00, + 0xFC, 0xFE, 0xFE, 0xEE, 0xF6, 0xC6, + 0xF6, 0xEE, 0xFE, 0xFE, 0xFC, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x81, 0xEF, 0xF7, 0xEB, 0x9D, + 0xFF, 0xB3, 0xB5, 0xB5, 0xB5, 0xCD, + 0xFF, 0x81, 0xED, 0xED, 0xED, 0xF3, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x08, 0x08, 0x09, 0x0B, + 0x08, 0x08, 0x09, 0x0B, 0x08, 0x07, + 0x07, 0x08, 0x0B, 0x09, 0x08, 0x08, + 0x0B, 0x09, 0x08, 0x08, 0x08, 0x07, + 0x07, 0x08, 0x08, 0x0B, 0x08, 0x08, + 0x08, 0x09, 0x0B, 0x08, 0x08, 0x07, + 0x07, 0x08, 0x08, 0x0B, 0x09, 0x08, + 0x08, 0x08, 0x0B, 0x08, 0x08, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x10, 0x13, 0x11, 0x11, + 0x11, 0x13, 0x10, 0x08, 0x07, 0x00, + 0x07, 0x0F, 0x1F, 0x1C, 0x1E, 0x1E, + 0x1E, 0x1C, 0x1F, 0x0F, 0x07, 0x00, + 0xFE, 0x01, 0xF1, 0xF9, 0xFD, 0xFD, + 0x05, 0x05, 0x09, 0xF1, 0x01, 0xFE, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x06, 0x3F, + 0x3F, 0x06, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x18, 0x3F, + 0x3F, 0x18, 0x08, 0x00, 0x00, 0x00, + 0x1C, 0x1C, 0x22, 0x41, 0x7F, 0x00, + 0x10, 0x18, 0x1C, 0x18, 0x10, 0x00, + 0x1C, 0x1C, 0x22, 0x41, 0x7F, 0x00, + 0x04, 0x0C, 0x1C, 0x0C, 0x04, 0x00, + 0x1C, 0x3E, 0x3E, 0x22, 0x1C, 0x00, + 0x10, 0x18, 0x1C, 0x18, 0x10, 0x00, + 0x1C, 0x3E, 0x3E, 0x22, 0x1C, 0x00, + 0x04, 0x0C, 0x1C, 0x0C, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x08, 0x09, 0x0B, 0x0B, + 0x0A, 0x0A, 0x09, 0x08, 0x08, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; diff --git a/keyboards/kbdksp/geulisv/jpe230.h b/keyboards/kbdksp/geulisv/jpe230.h new file mode 100644 index 00000000000..2792f6a3796 --- /dev/null +++ b/keyboards/kbdksp/geulisv/jpe230.h @@ -0,0 +1,20 @@ +// Copyright 2022 Jose Pablo Ramirez (@jpe230) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include QMK_KEYBOARD_H + +bool shift_pressed; +bool alt_pressed; +bool ctrl_pressed; +bool gui_pressed; + +/* --------------------------- + * Custom OLED Fncs Prototypes + * --------------------------- + */ +void render_slave_oled(void); +void render_master_oled(void); +void oled_timer_reset(void); +void set_keylog(uint16_t keycode, keyrecord_t *record); diff --git a/keyboards/kbdksp/geulisv/keyboard.json b/keyboards/kbdksp/geulisv/keyboard.json new file mode 100644 index 00000000000..6d969e2dc92 --- /dev/null +++ b/keyboards/kbdksp/geulisv/keyboard.json @@ -0,0 +1,123 @@ +{ + "manufacturer": "KBDKSP", + "keyboard_name": "Geulis", + "maintainer": "sendz", + "bootloader": "rp2040", + "diode_direction": "COL2ROW", + "build": { + "lto": true + }, + "encoder": { + "enabled": true, + "rotary": [ + {"pin_a": "GP10", "pin_b": "GP11"} + ], + "resolution": 1 + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "oled": true, + "encoder": true, + "wpm": true + }, + "matrix_pins": { + "cols": [ + "GP9", + "GP8", + "GP7", + "GP4", + "GP5", + "GP6" + ], + "rows": [ + "GP28", + "GP15", + "GP26", + "GP27", + "GP14" + ] + }, + "processor": "RP2040", + "url": "", + "usb": { + "device_version": "1.0.0", + "pid": "0x0287", + "vid": "0x7370" + }, + "split": { + "enabled": true + }, + "layouts": { + "LAYOUT_split_3x6_3": { + "layout": [ + {"matrix": [0, 0], "x": 0,"y": 1.5}, + {"matrix": [0, 1], "x": 1,"y": 1.5}, + {"matrix": [0, 2], "x": 2,"y": 1.3499999999999999}, + {"matrix": [0, 3], "x": 3,"y": 1.2}, + {"matrix": [0, 4], "x": 4,"y": 1.3499999999999999}, + {"matrix": [0, 5], "x": 5,"y": 1.5}, + + {"matrix": [5, 5], "x": 9,"y": 1.5}, + {"matrix": [5, 4], "x": 10,"y": 1.25}, + {"matrix": [5, 3], "x": 11,"y": 1.2}, + {"matrix": [5, 2], "x": 12,"y": 1.3499999999999999}, + {"matrix": [5, 1], "x": 13,"y": 1.5}, + {"matrix": [5, 0], "x": 14,"y": 1.5}, + + {"matrix": [1, 0], "x": 0,"y": 2.5}, + {"matrix": [1, 1], "x": 1,"y": 2.5}, + {"matrix": [1, 2], "x": 2,"y": 2.35}, + {"matrix": [1, 3], "x": 3,"y": 2.2}, + {"matrix": [1, 4], "x": 4,"y": 2.35}, + {"matrix": [1, 5], "x": 5,"y": 2.5}, + + {"matrix": [3, 5], "x": 6.25,"y": 2.25}, + {"matrix": [8, 5], "x": 7.75,"y": 2.25}, + + {"matrix": [6, 5], "x": 9,"y": 2.5}, + {"matrix": [6, 4], "x": 10,"y": 2.35}, + {"matrix": [6, 3], "x": 11,"y": 2.2}, + {"matrix": [6, 2], "x": 12,"y": 2.35}, + {"matrix": [6, 1], "x": 13,"y": 2.5}, + {"matrix": [6, 0], "x": 14,"y": 2.5}, + + {"matrix": [2, 0], "x": 0,"y": 3.5}, + {"matrix": [2, 1], "x": 1,"y": 3.5}, + {"matrix": [2, 2], "x": 2,"y": 3.35}, + {"matrix": [2, 3], "x": 3,"y": 3.2}, + {"matrix": [2, 4], "x": 4,"y": 3.35}, + {"matrix": [2, 5], "x": 5,"y": 3.5}, + + {"matrix": [4, 4], "x": 10,"y": 1.25, "w": 0.5}, + {"matrix": [4, 5],"x": 6.75,"y": 3.25, "w": 0.5}, + + {"matrix": [9, 5],"x": 7.75,"y": 3.25, "w": 0.5}, + {"matrix": [9, 4],"x": 8.25,"y": 3.25, "w": 0.5}, + + {"matrix": [7, 5], "x": 9,"y": 3.5}, + {"matrix": [7, 4], "x": 10,"y": 3.35}, + {"matrix": [7, 3], "x": 11,"y": 3.2}, + {"matrix": [7, 2], "x": 12,"y": 3.35}, + {"matrix": [7, 1], "x": 13,"y": 3.5}, + {"matrix": [7, 0], "x": 14,"y": 3.5}, + {"matrix": [3, 0], "x": 1.75,"y": 4.5}, + + {"matrix": [3, 1], "x": 2.75,"y": 4.3500000000000005}, + {"matrix": [3, 2], "x": 3.75,"y": 4.3500000000000005}, + {"matrix": [3, 3], "x": 0,"y": 16.35}, + {"matrix": [3, 4],"x": 0.1,"y": 17.1, "h": 1.5}, + + {"matrix": [8, 4],"x": 0,"y": 17.85, "h": 1.5}, + {"matrix": [8, 3], "x": 0,"y": 18.85}, + {"matrix": [8, 2], "x": 10.25,"y": 4.3500000000000005}, + {"matrix": [8, 1], "x": 11,"y": 9.85}, + {"matrix": [8, 0], "x": 11.75,"y": 15.35} + ] + } + } +} \ No newline at end of file diff --git a/keyboards/kbdksp/geulisv/keymaps/default/keymap.c b/keyboards/kbdksp/geulisv/keymaps/default/keymap.c new file mode 100644 index 00000000000..ffbd1365d02 --- /dev/null +++ b/keyboards/kbdksp/geulisv/keymaps/default/keymap.c @@ -0,0 +1,113 @@ +/* Copyright 2020 Josef Adamcik + * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang + * Modification for Vial support by Drew Petersen + * + * 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 . + */ + +// clang-format off + +#include +char wpm_str[10]; +#include QMK_KEYBOARD_H + +// Default keymap. This can be changed in Vial. Use oled.c to change beavior that Vial cannot change. + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* + * QWERTY WINDOWS + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ESC | Q | W | E | R | T | | Y | U | I | O | P | Bspc | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' | + * |------+------+------+------+------+------| | | |------+------+------+------+------+------| + * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ + +[0] = LAYOUT_split_3x6_3( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_MUTE, XXXXXXX, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LGUI,KC_LALT,KC_LCTL, MO(1), KC_SPC, KC_ENT, MO(2), KC_MINS, KC_EQL, KC_RGUI +), +/* LOWER + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | | | + * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------| + * | Shift| = | - | + | { | } |-------| |-------| [ | ] | ; | : | \ | Shift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ +[1] = LAYOUT_split_3x6_3( + KC_GRV, _______, _______, _______, _______, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, _______, _______, + _______, _______, RGB_TOG, RGB_MOD, RGB_VAI, _______, _______, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, + KC_CAPS, _______, _______, RGB_RMOD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), +/* RAISE + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Esc | Ins | Pscr | Menu | | | | | PWrd | Up | NWrd | DLine| Bspc | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | LAt | LCtl |LShift| | Caps |-------. ,-------| | Left | Down | Rigth| Del | Bspc | + * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------| + * |Shift | Undo | Cut | Copy | Paste| |-------| |-------| | LStr | | LEnd | | Shift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ +[2] = LAYOUT_split_3x6_3( + _______, KC_INS, KC_PSCR, KC_APP, XXXXXXX, XXXXXXX, KC_PGUP, _______, KC_UP, _______, _______, KC_BSPC, + _______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, _______, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_BSPC, + _______, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, XXXXXXX, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, _______, XXXXXXX, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), +/* + * COLEMAK + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ESC | Q | W | F | P | G | | J | L | U | Y | ; | Bspc | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | TAB | A | R | S | T | D |-------. ,-------| H | N | E | I | O | ' | + * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------| + * |LShift| Z | X | C | V | B |-------| |-------| K | M | , | . | / |RShift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ + +[3] = LAYOUT_split_3x6_3( + KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, + KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_MUTE, XXXXXXX, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LGUI, KC_LALT, KC_LCTL, KC_TRNS, KC_ENT, KC_SPC, KC_TRNS, KC_RCTL, KC_RALT, KC_RGUI +), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_WH_D, KC_WH_U) }, + [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + [2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + [3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, +}; +#endif diff --git a/keyboards/kbdksp/geulisv/keymaps/vial/config.h b/keyboards/kbdksp/geulisv/keymaps/vial/config.h new file mode 100644 index 00000000000..39fcfc0bc57 --- /dev/null +++ b/keyboards/kbdksp/geulisv/keymaps/vial/config.h @@ -0,0 +1,16 @@ +#pragma once + +#define VIAL_KEYBOARD_UID {0x3D, 0xDC, 0x35, 0xC3, 0x6D, 0x4A, 0x9C, 0x49} + +#define VIAL_ENCODER_DEFAULT { \ + KC_VOLU, KC_VOLD, \ + KC_PGUP, KC_PGDN, \ + KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS \ +} + +#define DYNAMIC_KEYMAP_LAYER_COUNT 10 diff --git a/keyboards/kbdksp/geulisv/keymaps/vial/keymap.c b/keyboards/kbdksp/geulisv/keymaps/vial/keymap.c new file mode 100644 index 00000000000..ffbd1365d02 --- /dev/null +++ b/keyboards/kbdksp/geulisv/keymaps/vial/keymap.c @@ -0,0 +1,113 @@ +/* Copyright 2020 Josef Adamcik + * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang + * Modification for Vial support by Drew Petersen + * + * 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 . + */ + +// clang-format off + +#include +char wpm_str[10]; +#include QMK_KEYBOARD_H + +// Default keymap. This can be changed in Vial. Use oled.c to change beavior that Vial cannot change. + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* + * QWERTY WINDOWS + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ESC | Q | W | E | R | T | | Y | U | I | O | P | Bspc | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' | + * |------+------+------+------+------+------| | | |------+------+------+------+------+------| + * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ + +[0] = LAYOUT_split_3x6_3( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_MUTE, XXXXXXX, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LGUI,KC_LALT,KC_LCTL, MO(1), KC_SPC, KC_ENT, MO(2), KC_MINS, KC_EQL, KC_RGUI +), +/* LOWER + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | | | + * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------| + * | Shift| = | - | + | { | } |-------| |-------| [ | ] | ; | : | \ | Shift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ +[1] = LAYOUT_split_3x6_3( + KC_GRV, _______, _______, _______, _______, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, _______, _______, + _______, _______, RGB_TOG, RGB_MOD, RGB_VAI, _______, _______, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, + KC_CAPS, _______, _______, RGB_RMOD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), +/* RAISE + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Esc | Ins | Pscr | Menu | | | | | PWrd | Up | NWrd | DLine| Bspc | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | LAt | LCtl |LShift| | Caps |-------. ,-------| | Left | Down | Rigth| Del | Bspc | + * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------| + * |Shift | Undo | Cut | Copy | Paste| |-------| |-------| | LStr | | LEnd | | Shift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ +[2] = LAYOUT_split_3x6_3( + _______, KC_INS, KC_PSCR, KC_APP, XXXXXXX, XXXXXXX, KC_PGUP, _______, KC_UP, _______, _______, KC_BSPC, + _______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, _______, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_BSPC, + _______, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, XXXXXXX, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, _______, XXXXXXX, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), +/* + * COLEMAK + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ESC | Q | W | F | P | G | | J | L | U | Y | ; | Bspc | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | TAB | A | R | S | T | D |-------. ,-------| H | N | E | I | O | ' | + * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------| + * |LShift| Z | X | C | V | B |-------| |-------| K | M | , | . | / |RShift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ + +[3] = LAYOUT_split_3x6_3( + KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, + KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_MUTE, XXXXXXX, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LGUI, KC_LALT, KC_LCTL, KC_TRNS, KC_ENT, KC_SPC, KC_TRNS, KC_RCTL, KC_RALT, KC_RGUI +), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_WH_D, KC_WH_U) }, + [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + [2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + [3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, +}; +#endif diff --git a/keyboards/kbdksp/geulisv/keymaps/vial/rules.mk b/keyboards/kbdksp/geulisv/keymaps/vial/rules.mk new file mode 100644 index 00000000000..8c9cbd98a86 --- /dev/null +++ b/keyboards/kbdksp/geulisv/keymaps/vial/rules.mk @@ -0,0 +1,4 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes +VIAL_INSECURE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/kbdksp/geulisv/keymaps/vial/vial.json b/keyboards/kbdksp/geulisv/keymaps/vial/vial.json new file mode 100644 index 00000000000..bd4bfe2f0f0 --- /dev/null +++ b/keyboards/kbdksp/geulisv/keymaps/vial/vial.json @@ -0,0 +1,394 @@ +{ + "name": "Geulis", + "vendorId": "0x7370", + "productId": "0x0287", + "lighting": "qmk_rgblight", + "matrix": { + "rows": 10, + "cols": 6 + }, + "layouts": { + "keymap": [ + [ + { + "y": 0.2, + "x": 3, + "p": "CHICKLET", + "f": 8, + "fa": [ + 1 + ] + }, + "0,3", + { + "x": 7 + }, + "5,3" + ], + [ + { + "y": -0.95, + "x": 6.25, + "f": 3, + "w": 0.5 + }, + "0,0\n\n\n\n\n\n\n\n\ne", + { + "w": 0.5 + }, + "0,1\n\n\n\n\n\n\n\n\ne", + { + "x": 0.5, + "w": 0.5 + }, + "1,1\n\n\n\n\n\n\n\n\ne", + { + "w": 0.5 + }, + "1,0\n\n\n\n\n\n\n\n\ne", + { + "x": 1.25, + "f": 8, + "fa": [ + 1 + ] + }, + "5,4" + ], + [ + { + "y": -0.9, + "x": 2 + }, + "0,2", + { + "x": 1 + }, + "0,4", + { + "x": 7 + }, + "5,2" + ], + [ + { + "y": -0.8500000000000001, + "c": "#aaaaaa" + }, + "0,0", + { + "c": "#cccccc" + }, + "0,1", + { + "x": 3 + }, + "0,5", + { + "a": 7, + "f": 6, + "w": 3, + "h": 2.75, + "d": true + }, + "", + { + "a": 4, + "f": 8, + "fa": [ + 1 + ] + }, + "5,5", + { + "x": 3 + }, + "5,1", + { + "c": "#aaaaaa", + "f": 6, + "fa": [ + 1 + ] + }, + "5,0" + ], + [ + { + "y": -0.30000000000000004, + "x": 3, + "c": "#cccccc", + "f": 8, + "fa": [ + 1 + ] + }, + "1,3", + { + "x": 7 + }, + "6,3" + ], + [ + { + "y": -0.9500000000000002, + "x": 6.25 + }, + "3,5", + { + "x": 0.5 + }, + "8,5" + ], + [ + { + "y": -0.8999999999999999, + "x": 2 + }, + "1,2", + { + "x": 1, + "n": true + }, + "1,4", + { + "x": 5, + "n": true + }, + "6,4", + { + "x": 1 + }, + "6,2" + ], + [ + { + "y": -0.8500000000000001, + "c": "#aaaaaa", + "f": 6, + "fa": [ + 1 + ] + }, + "1,0", + { + "c": "#cccccc", + "f": 8, + "fa": [ + 1 + ] + }, + "1,1", + { + "x": 3 + }, + "1,5", + { + "x": 3 + }, + "6,5", + { + "x": 3 + }, + "6,1", + { + "c": "#aaaaaa", + "f": 6, + "fa": [ + 1 + ] + }, + "6,0" + ], + [ + { + "y": -0.2999999999999998, + "x": 3, + "c": "#cccccc", + "f": 8, + "fa": [ + 1 + ] + }, + "2,3", + { + "x": 7 + }, + "7,3" + ], + [ + { + "y": -0.9500000000000002, + "x": 6.25, + "f": 3, + "w": 0.5 + }, + "4,4", + { + "w": 0.5 + }, + "4,5", + { + "x": 0.5, + "w": 0.5 + }, + "9,5", + { + "w": 0.5 + }, + "9,4" + ], + [ + { + "y": -0.8999999999999999, + "x": 2, + "f": 8, + "fa": [ + 1 + ] + }, + "2,2", + { + "x": 1 + }, + "2,4", + { + "x": 5 + }, + "7,4", + { + "x": 1 + }, + "7,2" + ], + [ + { + "y": -0.8500000000000001, + "c": "#aaaaaa", + "f": 5, + "fa": [ + 1 + ] + }, + "2,0", + { + "c": "#cccccc", + "f": 8, + "fa": [ + 1 + ] + }, + "2,1", + { + "x": 3 + }, + "2,5", + { + "x": 3 + }, + "7,5", + { + "x": 3 + }, + "7,1", + { + "c": "#aaaaaa", + "f": 5, + "fa": [ + 1 + ] + }, + "7,0" + ], + [ + { + "y": -0.1499999999999999, + "x": 2.75, + "f": 9, + "fa": [ + 1 + ] + }, + "3,1", + "3,2", + { + "x": 5.5 + }, + "8,2" + ], + [ + { + "y": -0.8499999999999996, + "x": 1.75 + }, + "3,0" + ], + [ + { + "rx": 0.25, + "y": 3.35, + "x": 11 + }, + "8,1" + ], + [ + { + "rx": 0.5, + "y": 3.5, + "x": 11.75 + }, + "8,0" + ], + [ + { + "r": 15, + "rx": 5, + "ry": 4.5, + "y": -1, + "x": -0.25, + "c": "#777777" + }, + "3,3" + ], + [ + { + "r": 30, + "rx": 6.25, + "y": -1, + "x": -0.40000000000000036, + "c": "#aaaaaa", + "h": 1.5 + }, + "3,4" + ], + [ + { + "r": -30, + "rx": 8.75, + "y": -1, + "x": -0.5999999999999996, + "f": 8, + "fa": [ + 1 + ], + "h": 1.5 + }, + "8,4" + ], + [ + { + "r": -15, + "rx": 10, + "y": -1, + "x": -0.75, + "c": "#777777", + "f": 9, + "fa": [ + 1 + ] + }, + "8,3" + ] + ] + } +} \ No newline at end of file diff --git a/keyboards/kbdksp/geulisv/mcuconf.h b/keyboards/kbdksp/geulisv/mcuconf.h new file mode 100644 index 00000000000..7548f5b4290 --- /dev/null +++ b/keyboards/kbdksp/geulisv/mcuconf.h @@ -0,0 +1,11 @@ +// Copyright 2022 Steven Karrmann (@skarrmann) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include_next + +#undef RP_I2C_USE_I2C0 +#undef RP_I2C_USE_I2C1 +#define RP_I2C_USE_I2C0 FALSE +#define RP_I2C_USE_I2C1 TRUE diff --git a/keyboards/kbdksp/geulisv/oled/oled_handler.c b/keyboards/kbdksp/geulisv/oled/oled_handler.c new file mode 100644 index 00000000000..e2b56e4b9ea --- /dev/null +++ b/keyboards/kbdksp/geulisv/oled/oled_handler.c @@ -0,0 +1,42 @@ +// Copyright 2022 Jose Pablo Ramirez (@jpe230) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "jpe230.h" +#ifdef OLED_ENABLE +uint8_t logged_row; +uint8_t logged_col; +uint32_t oled_timer = 0; + +__attribute__ ((weak)) void handle_oled_keypress(uint16_t keycode, keyrecord_t *record) {} + +__attribute__ ((weak)) oled_rotation_t rotate_master(oled_rotation_t rotation) {return rotation;} +__attribute__ ((weak)) oled_rotation_t rotate_slave(oled_rotation_t rotation) {return rotation;} + +void oled_timer_reset(void) { oled_timer = timer_read32(); } + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + + if (!is_keyboard_master()) { + return rotate_slave(rotation); + } + + return rotate_master(rotation); +} + + +void set_keylog(uint16_t keycode, keyrecord_t *record) { + logged_row = record->event.key.row; + logged_col = record->event.key.col; + + handle_oled_keypress(keycode, record); +} + +bool oled_task_user(void) { + if (is_keyboard_master()) { + render_master_oled(); + } else { + render_slave_oled(); + } + return false; +} +#endif \ No newline at end of file diff --git a/keyboards/kbdksp/geulisv/oled/rp2040/master/oled_master_handler.c b/keyboards/kbdksp/geulisv/oled/rp2040/master/oled_master_handler.c new file mode 100644 index 00000000000..85e8c4ccfc4 --- /dev/null +++ b/keyboards/kbdksp/geulisv/oled/rp2040/master/oled_master_handler.c @@ -0,0 +1,38 @@ +// Copyright 2022 Jose Pablo Ramirez (@jpe230) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "jpe230.h" + +// static const char PROGMEM ICON_LAYER[] = {0x80, 0x81, 0x82, 0x83, 0}; + +void render_master_oled(void) { + oled_on(); + + oled_write_P(PSTR(" KBD "), false); + oled_write_P(PSTR(" KSP "), false); + + oled_write_ln_P(PSTR(""), false); + + oled_write_P(PSTR(" GEU "), false); + oled_write_P(PSTR(" LIS "), false); + + oled_write_ln_P(PSTR(""), false); + oled_write_P(PSTR("_____"), false); + oled_write_ln_P(PSTR(""), false); + oled_write_ln_P(PSTR(""), false); + + char layer_string[8] = {0}; + sprintf(layer_string, "LYR %d", get_highest_layer(layer_state)); + oled_write(layer_string, false); + + oled_write_ln_P(PSTR(""), false); + + led_t led_usb_state = host_keyboard_led_state(); + oled_write_P(PSTR("CAPS "), led_usb_state.caps_lock); + oled_write_P(PSTR("SHIFT"), shift_pressed); + oled_write_P(PSTR("CTRL "), ctrl_pressed); + oled_write_P(PSTR("GUI "), gui_pressed); + oled_write_P(PSTR("ALT "), alt_pressed); +} + +oled_rotation_t rotate_master(oled_rotation_t rotation) {return OLED_ROTATION_270;} diff --git a/keyboards/kbdksp/geulisv/oled/rp2040/slave/oled_slave_handler.c b/keyboards/kbdksp/geulisv/oled/rp2040/slave/oled_slave_handler.c new file mode 100644 index 00000000000..525038bd397 --- /dev/null +++ b/keyboards/kbdksp/geulisv/oled/rp2040/slave/oled_slave_handler.c @@ -0,0 +1,120 @@ +// Copyright 2022 Jose Pablo Ramirez (@jpe230) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "jpe230.h" +#include + +char wpm_str[10]; + +// WPM-responsive animation stuff here +# define IDLE_FRAMES 5 +# define IDLE_SPEED 20 // below this wpm value your animation will idle + +// #define PREP_FRAMES 1 // uncomment if >1 + +# define TAP_FRAMES 2 +# define TAP_SPEED 40 // above this wpm value typing animation to trigger + +# define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms +// #define SLEEP_TIMER 60000 // should sleep after this period of 0 wpm, needs fixing +# define ANIM_SIZE 636 // number of bytes in array, minimize for adequate firmware size, max is 1024 + +uint32_t anim_timer = 0; +uint32_t anim_sleep = 0; +uint8_t current_idle_frame = 0; +// uint8_t current_prep_frame = 0; // uncomment if PREP_FRAMES >1 +uint8_t current_tap_frame = 0; + +// Code containing pixel art, contains: +// 5 idle frames, 1 prep frame, and 2 tap frames + +// To make your own pixel art: +// save a png/jpeg of an 128x32 image (resource: https://www.pixilart.com/draw ) +// follow this guide up to and including "CONVERT YOUR IMAGE" https://docs.splitkb.com/hc/en-us/articles/360013811280-How-do-I-convert-an-image-for-use-on-an-OLED-display- +// replace numbers in brackets with your own +// if you start getting errors when compiling make sure you didn't accedentally delete a bracket +static void render_anim(void) { + static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x82, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x01, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x34, 0xc4, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0d, 0x31, 0xc1, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; + static const char PROGMEM prep[][ANIM_SIZE] = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; + static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x98, 0xc0, 0x88, 0x88, 0x8c, 0x9c, 0x1c, 0x1e, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0f, 0x0f, 0x07, 0x03, 0x03, 0x61, 0xf0, 0xf8, 0xfc, 0x60, 0x01, 0x01, 0x01, 0x3c, 0x78, 0xf8, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + }; + + // assumes 1 frame prep stage + void animation_phase(void) { + if (get_current_wpm() <= IDLE_SPEED) { + current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES; + oled_write_raw_P(idle[abs((IDLE_FRAMES - 1) - current_idle_frame)], ANIM_SIZE); + } + if (get_current_wpm() > IDLE_SPEED && get_current_wpm() < TAP_SPEED) { + // oled_write_raw_P(prep[abs((PREP_FRAMES-1)-current_prep_frame)], ANIM_SIZE); // uncomment if IDLE_FRAMES >1 + oled_write_raw_P(prep[0], ANIM_SIZE); // remove if IDLE_FRAMES >1 + } + if (get_current_wpm() >= TAP_SPEED) { + current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES; + oled_write_raw_P(tap[abs((TAP_FRAMES - 1) - current_tap_frame)], ANIM_SIZE); + } + } + if (get_current_wpm() != 000) { + oled_on(); // not essential but turns on animation OLED with any alpha keypress + if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animation_phase(); + } + anim_sleep = timer_read32(); + } else { + if (timer_elapsed32(anim_sleep) > OLED_TIMEOUT) { + oled_off(); + } else { + if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animation_phase(); + } + } + } +} + +static const char PROGMEM KDBKSP[] = {0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0}; + +void render_slave_oled(void) { + oled_on(); + + render_anim(); + + oled_write_P(KDBKSP, false); + + oled_set_cursor(0, 1); + sprintf(wpm_str, "WPM:%03d", get_current_wpm()); // edit the string to change wwhat shows up, edit %03d to change how many digits show up + oled_write(wpm_str, false); +} + +oled_rotation_t rotate_slave(oled_rotation_t rotation) {return OLED_ROTATION_0;} diff --git a/keyboards/kbdksp/geulisv/process_record.c b/keyboards/kbdksp/geulisv/process_record.c new file mode 100644 index 00000000000..39ecda05f62 --- /dev/null +++ b/keyboards/kbdksp/geulisv/process_record.c @@ -0,0 +1,63 @@ +// Copyright 2022 Jose Pablo Ramirez (@jpe230) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "jpe230.h" +#ifdef OLED_ENABLE +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + oled_timer_reset(); + set_keylog(keycode, record); + + switch (keycode) { + case QK_BOOT: + // rgb_matrix_set_color_all(30, 0, 0); + // rgb_matrix_driver.flush(); + oled_off(); + return true; + } + } + return true; +} + +void post_process_record_user(uint16_t keycode, keyrecord_t *record) { +switch (keycode) { + case KC_LSFT: + case KC_RSFT: + if (record->event.pressed) { + shift_pressed = true; + } else { + shift_pressed = false; + } + break; + case KC_LALT: + case KC_RALT: + if (record->event.pressed) { + alt_pressed = true; + } else { + alt_pressed = false; + } + break; + case KC_LCTL: + case KC_RCTL: + if (record->event.pressed) { + ctrl_pressed = true; + } else { + ctrl_pressed = false; + } + break; + case KC_LGUI: + case KC_RGUI: + if (record->event.pressed) { + gui_pressed = true; + } else { + gui_pressed = false; + } + break; + default: + gui_pressed = false; + ctrl_pressed = false; + alt_pressed = false; + shift_pressed = false; + } +} +#endif \ No newline at end of file diff --git a/keyboards/kbdksp/geulisv/readme.md b/keyboards/kbdksp/geulisv/readme.md new file mode 100644 index 00000000000..6eafdc0fe6a --- /dev/null +++ b/keyboards/kbdksp/geulisv/readme.md @@ -0,0 +1,27 @@ +# kbdksp/geulisv1 + +![kbdksp/geulisv1](imgur.com image replace me!) + +*A short description of the keyboard/project* + +* Keyboard Maintainer: [KBDKSP](https://github.com/sendz) +* Hardware Supported: *The PCBs, controllers supported* +* Hardware Availability: *Links to where you can find this hardware* + +Make example for this keyboard (after setting up your build environment): + + make kbdksp/geulisv1:default + +Flashing example for this keyboard: + + make kbdksp/geulisv1:default:flash + +See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). + +## Bootloader + +Enter the bootloader in 3 ways: + +* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard +* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead +* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available diff --git a/keyboards/kbdksp/geulisv/rules.mk b/keyboards/kbdksp/geulisv/rules.mk new file mode 100644 index 00000000000..bdb17f8e2e1 --- /dev/null +++ b/keyboards/kbdksp/geulisv/rules.mk @@ -0,0 +1,14 @@ +SERIAL_DRIVER = vendor + +OLED_DRIVER = ssd1306 + +SRC += oled/oled_handler.c process_record.c + +DEBUG_MATRIX_SCAN_RATE_ENABLE = yes + +SRC += oled/rp2040/master/oled_master_handler.c \ + oled/rp2040/slave/oled_slave_handler.c + +RGBLIGHT_ENABLE = yes +RGBLIGHT_DRIVER = ws2812 +WS2812_DRIVER = vendor diff --git a/keyboards/kbdksp/hd48ap/config.h b/keyboards/kbdksp/hd48ap/config.h new file mode 100755 index 00000000000..432ae252a75 --- /dev/null +++ b/keyboards/kbdksp/hd48ap/config.h @@ -0,0 +1,57 @@ + /* Copyright 2022 sendz + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0x7370 +#define PRODUCT_ID 0x3438 +#define DEVICE_VER 0x0001 +#define MANUFACTURER Keyboard Kasep +#define PRODUCT HD48AP + +/* key matrix size */ +#define MATRIX_ROWS 8 +#define MATRIX_COLS 7 + +/* Keyboard Matrix Assignments */ +#define MATRIX_ROW_PINS { D3, D2, D7, E6, B2, B6, B5, B4 } +#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, D5 } +#define UNUSED_PINS + + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE + +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + + +/* COL2ROW, ROW2COL*/ +#define DIODE_DIRECTION COL2ROW + +/* encoder support */ +#define ENCODERS_PAD_A { D4 } // 4 + 4 +#define ENCODERS_PAD_B { C6 } // 4 + 4 +#define ENCODER_RESOLUTION 2 + +#define OLED_FONT_H "fonts/glcdfont.c" +#define OLED_DISPLAY_128X64 diff --git a/keyboards/kbdksp/hd48ap/fonts/glcdfont.c b/keyboards/kbdksp/hd48ap/fonts/glcdfont.c new file mode 100755 index 00000000000..fd84399afb5 --- /dev/null +++ b/keyboards/kbdksp/hd48ap/fonts/glcdfont.c @@ -0,0 +1,244 @@ + /* Copyright 2020 sendyyeah + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "progmem.h" + +const unsigned char font[] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, + 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, + 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, + 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, + 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, + 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, + 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, + 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, + 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, + 0x26, 0x29, 0x79, 0x29, 0x26, 0x00, + 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, + 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, + 0x5A, 0x3C, 0x66, 0x3C, 0x5A, 0x00, + 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, + 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, + 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, + 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, + 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, + 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, + 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, + 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, + 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, + 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, + 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, + 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, + 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, + 0x14, 0x3E, 0x14, 0x3E, 0x14, 0x00, + 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, + 0x26, 0x16, 0x08, 0x34, 0x32, 0x00, + 0x36, 0x4A, 0x56, 0x20, 0x50, 0x00, + 0x00, 0x0A, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x3C, 0x42, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x42, 0x3C, 0x00, 0x00, + 0x2A, 0x1C, 0x3E, 0x1C, 0x2A, 0x00, + 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, + 0x00, 0xA0, 0x60, 0x00, 0x00, 0x00, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, + 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, + 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, + 0x3C, 0x42, 0x42, 0x42, 0x3C, 0x00, + 0x00, 0x44, 0x7E, 0x40, 0x00, 0x00, + 0x64, 0x52, 0x52, 0x52, 0x4C, 0x00, + 0x22, 0x42, 0x4A, 0x4A, 0x36, 0x00, + 0x38, 0x24, 0x22, 0x7E, 0x20, 0x00, + 0x2E, 0x4A, 0x4A, 0x4A, 0x32, 0x00, + 0x3C, 0x4A, 0x4A, 0x4A, 0x32, 0x00, + 0x02, 0x02, 0x62, 0x1A, 0x06, 0x00, + 0x34, 0x4A, 0x4A, 0x4A, 0x34, 0x00, + 0x4C, 0x52, 0x52, 0x52, 0x3C, 0x00, + 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x14, 0x22, 0x00, 0x00, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, + 0x00, 0x00, 0x22, 0x14, 0x08, 0x00, + 0x00, 0x04, 0x52, 0x0A, 0x04, 0x00, + 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, + 0x7C, 0x12, 0x12, 0x12, 0x7C, 0x00, + 0x7E, 0x4A, 0x4A, 0x4A, 0x34, 0x00, + 0x3C, 0x42, 0x42, 0x42, 0x42, 0x00, + 0x7E, 0x42, 0x42, 0x42, 0x3C, 0x00, + 0x7E, 0x4A, 0x4A, 0x4A, 0x4A, 0x00, + 0x7E, 0x0A, 0x0A, 0x0A, 0x0A, 0x00, + 0x3C, 0x42, 0x42, 0x52, 0x72, 0x00, + 0x7E, 0x08, 0x08, 0x08, 0x7E, 0x00, + 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, + 0x20, 0x40, 0x42, 0x3E, 0x00, 0x00, + 0x7E, 0x10, 0x08, 0x14, 0x62, 0x00, + 0x7E, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x7E, 0x04, 0x08, 0x04, 0x7E, 0x00, + 0x7E, 0x04, 0x08, 0x10, 0x7E, 0x00, + 0x3C, 0x42, 0x42, 0x42, 0x3C, 0x00, + 0x7E, 0x12, 0x12, 0x12, 0x0C, 0x00, + 0x3C, 0x42, 0x52, 0x22, 0x5C, 0x00, + 0x7C, 0x12, 0x12, 0x32, 0x5E, 0x00, + 0x4C, 0x4A, 0x4A, 0x4A, 0x32, 0x00, + 0x02, 0x02, 0x7E, 0x02, 0x02, 0x00, + 0x3E, 0x40, 0x40, 0x40, 0x3E, 0x00, + 0x1E, 0x20, 0x40, 0x20, 0x1E, 0x00, + 0x3E, 0x40, 0x38, 0x40, 0x3E, 0x00, + 0x62, 0x14, 0x08, 0x14, 0x62, 0x00, + 0x06, 0x08, 0x70, 0x08, 0x06, 0x00, + 0x62, 0x52, 0x4A, 0x46, 0x42, 0x00, + 0x00, 0x7E, 0x42, 0x42, 0x00, 0x00, + 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, + 0x00, 0x00, 0x42, 0x42, 0x7E, 0x00, + 0x08, 0x04, 0x02, 0x04, 0x08, 0x00, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x00, 0x00, 0x06, 0x0A, 0x00, 0x00, + 0x60, 0x54, 0x54, 0x54, 0x7C, 0x00, + 0x7E, 0x48, 0x48, 0x48, 0x30, 0x00, + 0x30, 0x48, 0x48, 0x48, 0x48, 0x00, + 0x30, 0x48, 0x48, 0x48, 0x7E, 0x00, + 0x38, 0x54, 0x54, 0x54, 0x58, 0x00, + 0x00, 0x08, 0x7C, 0x0A, 0x00, 0x00, + 0x98, 0xA4, 0xA4, 0xA4, 0x78, 0x00, + 0x7E, 0x08, 0x08, 0x08, 0x70, 0x00, + 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, + 0x20, 0x40, 0x40, 0x3A, 0x00, 0x00, + 0x7E, 0x10, 0x28, 0x44, 0x00, 0x00, + 0x00, 0x00, 0x7E, 0x40, 0x00, 0x00, + 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, + 0x7C, 0x04, 0x04, 0x04, 0x78, 0x00, + 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, + 0xFC, 0x24, 0x24, 0x24, 0x18, 0x00, + 0x18, 0x24, 0x24, 0x24, 0xFC, 0x00, + 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, + 0x48, 0x54, 0x54, 0x54, 0x24, 0x00, + 0x00, 0x04, 0x7E, 0x44, 0x00, 0x00, + 0x3C, 0x40, 0x40, 0x40, 0x7C, 0x00, + 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, + 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, + 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, + 0x5C, 0xA0, 0xA0, 0xA0, 0x7C, 0x00, + 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, + 0xFE, 0xC1, 0xC1, 0xC9, 0xC5, 0xDD, + 0xC5, 0xC9, 0xC1, 0xC1, 0xFE, 0x00, + 0xFC, 0xFE, 0xFE, 0xEE, 0xF6, 0xC6, + 0xF6, 0xEE, 0xFE, 0xFE, 0xFC, 0x00, + 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, + 0x7E, 0xFF, 0x81, 0xBF, 0xBF, 0xBF, + 0xBF, 0xF9, 0xF7, 0x8F, 0xF7, 0xF9, + 0xFF, 0x83, 0xED, 0xED, 0xCD, 0xA3, + 0xFF, 0x7E, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x81, 0xEF, 0xF7, 0xEB, 0x9D, + 0xFF, 0x81, 0xB5, 0xB5, 0xB5, 0xCB, + 0xFF, 0x81, 0xBD, 0xBD, 0xBD, 0xC3, + 0xFF, 0x81, 0xEF, 0xF7, 0xEB, 0x9D, + 0xFF, 0xB3, 0xB5, 0xB5, 0xB5, 0xCD, + 0xFF, 0x81, 0xED, 0xED, 0xED, 0xF3, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0x01, 0x61, 0xF1, 0xF9, 0xFD, + 0x61, 0xF1, 0xF9, 0xFD, 0x01, 0xFE, + 0xFE, 0x01, 0xFD, 0xF9, 0xF1, 0x61, + 0xFD, 0xF9, 0xF1, 0x61, 0x01, 0xFE, + 0xFE, 0x01, 0x01, 0xFD, 0x01, 0x61, + 0xF1, 0xF9, 0xFD, 0x01, 0x01, 0xFE, + 0xFE, 0x01, 0x01, 0xFD, 0xF9, 0xF1, + 0x61, 0x01, 0xFD, 0x01, 0x01, 0xFE, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0x08, 0x04, 0xC4, 0x24, 0x24, + 0x24, 0xC4, 0x04, 0x08, 0xF0, 0x00, + 0xF0, 0xF8, 0xFC, 0x3C, 0xDC, 0xDC, + 0xDC, 0x3C, 0xFC, 0xF8, 0xF0, 0x00, + 0xFE, 0xC1, 0xC1, 0xC9, 0xC5, 0xDD, + 0xC5, 0xC9, 0xC1, 0xC1, 0xFE, 0x00, + 0xFC, 0xFE, 0xFE, 0xEE, 0xF6, 0xC6, + 0xF6, 0xEE, 0xFE, 0xFE, 0xFC, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x81, 0xEF, 0xF7, 0xEB, 0x9D, + 0xFF, 0xB3, 0xB5, 0xB5, 0xB5, 0xCD, + 0xFF, 0x81, 0xED, 0xED, 0xED, 0xF3, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x08, 0x08, 0x09, 0x0B, + 0x08, 0x08, 0x09, 0x0B, 0x08, 0x07, + 0x07, 0x08, 0x0B, 0x09, 0x08, 0x08, + 0x0B, 0x09, 0x08, 0x08, 0x08, 0x07, + 0x07, 0x08, 0x08, 0x0B, 0x08, 0x08, + 0x08, 0x09, 0x0B, 0x08, 0x08, 0x07, + 0x07, 0x08, 0x08, 0x0B, 0x09, 0x08, + 0x08, 0x08, 0x0B, 0x08, 0x08, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x10, 0x13, 0x11, 0x11, + 0x11, 0x13, 0x10, 0x08, 0x07, 0x00, + 0x07, 0x0F, 0x1F, 0x1C, 0x1E, 0x1E, + 0x1E, 0x1C, 0x1F, 0x0F, 0x07, 0x00, + 0xFE, 0x01, 0xF1, 0xF9, 0xFD, 0xFD, + 0x05, 0x05, 0x09, 0xF1, 0x01, 0xFE, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x06, 0x3F, + 0x3F, 0x06, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x18, 0x3F, + 0x3F, 0x18, 0x08, 0x00, 0x00, 0x00, + 0x1C, 0x1C, 0x22, 0x41, 0x7F, 0x00, + 0x10, 0x18, 0x1C, 0x18, 0x10, 0x00, + 0x1C, 0x1C, 0x22, 0x41, 0x7F, 0x00, + 0x04, 0x0C, 0x1C, 0x0C, 0x04, 0x00, + 0x1C, 0x3E, 0x3E, 0x22, 0x1C, 0x00, + 0x10, 0x18, 0x1C, 0x18, 0x10, 0x00, + 0x1C, 0x3E, 0x3E, 0x22, 0x1C, 0x00, + 0x04, 0x0C, 0x1C, 0x0C, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x08, 0x09, 0x0B, 0x0B, + 0x0A, 0x0A, 0x09, 0x08, 0x08, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; diff --git a/keyboards/kbdksp/hd48ap/hd48ap.c b/keyboards/kbdksp/hd48ap/hd48ap.c new file mode 100755 index 00000000000..3afd7398bb8 --- /dev/null +++ b/keyboards/kbdksp/hd48ap/hd48ap.c @@ -0,0 +1,17 @@ + /* Copyright 2022 sendz + * + * 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 "hd48ap.h" diff --git a/keyboards/kbdksp/hd48ap/hd48ap.h b/keyboards/kbdksp/hd48ap/hd48ap.h new file mode 100755 index 00000000000..dc152ff10cf --- /dev/null +++ b/keyboards/kbdksp/hd48ap/hd48ap.h @@ -0,0 +1,45 @@ +/* Copyright 2022 sendz + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include "quantum.h" + +/* This is a shortcut to help you visually see your layout. + * + * The first section contains all of the arguments representing the physical + * layout of the board and position of the keys. + * + * The second converts the arguments into a two-dimensional array which + * represents the switch matrix. + */ + +#define LAYOUT_ortho(\ + L00, L10, L01, L11, L02, L12, L03, L13, L04, L14, L05, L15, \ + L20, L30, L21, L31, L22, L32, L23, L33, L24, L34, L25, L35, \ + L56, L40, L50, L41, L51, L42, L52, L43, L53, L44, L54, L45, L55, \ + L76, L60, L70, L61, L71, L62, L72, L63, L73, L64, L74, L65, L75 \ +) \ +{ \ + { L00, L01, L02, L03, L04, L05, KC_NO }, \ + { L10, L11, L12, L13, L14, L15, KC_NO }, \ + { L20, L21, L22, L23, L24, L25, KC_NO }, \ + { L30, L31, L32, L33, L34, L35, KC_NO }, \ + { L40, L41, L42, L43, L44, L45, KC_NO }, \ + { L50, L51, L52, L53, L54, L55, L56 }, \ + { L60, L61, L62, L63, L64, L65, KC_NO }, \ + { L70, L71, L72, L73, L74, L75, L76 } \ +} diff --git a/keyboards/kbdksp/hd48ap/info.json b/keyboards/kbdksp/hd48ap/info.json new file mode 100755 index 00000000000..a7f3f03c54b --- /dev/null +++ b/keyboards/kbdksp/hd48ap/info.json @@ -0,0 +1,256 @@ +{ + "keyboard_name": "HD48AP", + "url": "", + "maintainer": "Keyboard Kasep", + "layouts": { + "LAYOUT_ortho": { + "layout": [ + { + "label": "Tab", + "x": 1.25, + "y": 0 + }, + { + "label": "Q", + "x": 2.25, + "y": 0 + }, + { + "label": "W", + "x": 3.25, + "y": 0 + }, + { + "label": "E", + "x": 4.25, + "y": 0 + }, + { + "label": "R", + "x": 5.25, + "y": 0 + }, + { + "label": "T", + "x": 6.25, + "y": 0 + }, + { + "label": "Y", + "x": 7.25, + "y": 0 + }, + { + "label": "U", + "x": 8.25, + "y": 0 + }, + { + "label": "I", + "x": 9.25, + "y": 0 + }, + { + "label": "O", + "x": 10.25, + "y": 0 + }, + { + "label": "P", + "x": 11.25, + "y": 0 + }, + { + "label": "Back Space", + "x": 12.25, + "y": 0 + }, + { + "label": "Esc", + "x": 1.25, + "y": 1 + }, + { + "label": "A", + "x": 2.25, + "y": 1 + }, + { + "label": "S", + "x": 3.25, + "y": 1 + }, + { + "label": "D", + "x": 4.25, + "y": 1 + }, + { + "label": "F", + "x": 5.25, + "y": 1 + }, + { + "label": "G", + "x": 6.25, + "y": 1 + }, + { + "label": "H", + "x": 7.25, + "y": 1 + }, + { + "label": "J", + "x": 8.25, + "y": 1 + }, + { + "label": "K", + "x": 9.25, + "y": 1 + }, + { + "label": "L", + "x": 10.25, + "y": 1 + }, + { + "label": ";", + "x": 11.25, + "y": 1 + }, + { + "label": "'", + "x": 12.25, + "y": 1 + }, + { + "x": 0, + "y": 2 + }, + { + "label": "Shift", + "x": 1.25, + "y": 2 + }, + { + "label": "Z", + "x": 2.25, + "y": 2 + }, + { + "label": "X", + "x": 3.25, + "y": 2 + }, + { + "label": "C", + "x": 4.25, + "y": 2 + }, + { + "label": "V", + "x": 5.25, + "y": 2 + }, + { + "label": "B", + "x": 6.25, + "y": 2 + }, + { + "label": "N", + "x": 7.25, + "y": 2 + }, + { + "label": "M", + "x": 8.25, + "y": 2 + }, + { + "label": ",", + "x": 9.25, + "y": 2 + }, + { + "label": ".", + "x": 10.25, + "y": 2 + }, + { + "label": "/", + "x": 11.25, + "y": 2 + }, + { + "label": "Return", + "x": 12.25, + "y": 2 + }, + { + "x": 0, + "y": 3 + }, + { + "x": 1.25, + "y": 3 + }, + { + "label": "Ctrl", + "x": 2.25, + "y": 3 + }, + { + "label": "Alt", + "x": 3.25, + "y": 3 + }, + { + "label": "Super", + "x": 4.25, + "y": 3 + }, + { + "label": "⇓", + "x": 5.25, + "y": 3 + }, + { + "x": 6.25, + "y": 3 + }, + { + "x": 7.25, + "y": 3 + }, + { + "label": "⇑", + "x": 8.25, + "y": 3 + }, + { + "label": "←", + "x": 9.25, + "y": 3 + }, + { + "label": "↓", + "x": 10.25, + "y": 3 + }, + { + "label": "↑", + "x": 11.25, + "y": 3 + }, + { + "label": "→", + "x": 12.25, + "y": 3 + } + ] + } + } +} diff --git a/keyboards/kbdksp/hd48ap/keymaps/vial/config.h b/keyboards/kbdksp/hd48ap/keymaps/vial/config.h new file mode 100755 index 00000000000..fab6eb79cf1 --- /dev/null +++ b/keyboards/kbdksp/hd48ap/keymaps/vial/config.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#define VIAL_KEYBOARD_UID {0x66, 0x8F, 0x22, 0x2F, 0x54, 0xB4, 0xD9, 0x99} + +#define VIAL_ENCODER_DEFAULT { \ + KC_VOLU, KC_VOLD, \ + KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, \ +} + +#define DYNAMIC_KEYMAP_LAYER_COUNT 4 diff --git a/keyboards/kbdksp/hd48ap/keymaps/vial/keymap.c b/keyboards/kbdksp/hd48ap/keymaps/vial/keymap.c new file mode 100755 index 00000000000..b5df7efbfaa --- /dev/null +++ b/keyboards/kbdksp/hd48ap/keymaps/vial/keymap.c @@ -0,0 +1,215 @@ +/* Copyright 2022 sendz + * + * 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]; + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _QWERTY = 0, + _LOWER, + _RAISE, + _ADJUST +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QWERTY] = LAYOUT_ortho( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_MUTE, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , + KC_MUTE, KC_LCTL, KC_LALT, KC_LALT, KC_LGUI, _RAISE, _RAISE, KC_SPC, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT + ), + + [_LOWER] = LAYOUT_ortho( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, + _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY + ), + + [_RAISE] = LAYOUT_ortho( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, + _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY + ), + + + [_ADJUST] = LAYOUT_ortho( + _______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL , + _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______, + _______, _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ) +}; + +#ifdef ENCODER_ENABLE + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (index == 0) { /* First encoder */ + if (!clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + } + return false; +} + +#endif + +#ifdef OLED_ENABLE + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + return OLED_ROTATION_180; // flips the display 180 degrees if offhand + + return rotation; +} + +// WPM-responsive animation stuff here +# define IDLE_FRAMES 5 +# define IDLE_SPEED 20 // below this wpm value your animation will idle + +// #define PREP_FRAMES 1 // uncomment if >1 + +# define TAP_FRAMES 2 +# define TAP_SPEED 40 // above this wpm value typing animation to trigger + +# define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms +// #define SLEEP_TIMER 60000 // should sleep after this period of 0 wpm, needs fixing +# define ANIM_SIZE 636 // number of bytes in array, minimize for adequate firmware size, max is 1024 + +uint32_t anim_timer = 0; +uint32_t anim_sleep = 0; +uint8_t current_idle_frame = 0; +// uint8_t current_prep_frame = 0; // uncomment if PREP_FRAMES >1 +uint8_t current_tap_frame = 0; + +// Code containing pixel art, contains: +// 5 idle frames, 1 prep frame, and 2 tap frames + +// To make your own pixel art: +// save a png/jpeg of an 128x32 image (resource: https://www.pixilart.com/draw ) +// follow this guide up to and including "CONVERT YOUR IMAGE" https://docs.splitkb.com/hc/en-us/articles/360013811280-How-do-I-convert-an-image-for-use-on-an-OLED-display- +// replace numbers in brackets with your own +// if you start getting errors when compiling make sure you didn't accedentally delete a bracket +static void render_anim(void) { + static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x82, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x80, 0x00, 0x00, 0x60, 0x60, 0x00, 0x01, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x86, 0x86, 0x40, 0x40, 0x40, 0x40, 0x21, 0x22, 0x22, 0x20, 0x11, 0x11, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x34, 0xc4, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x20, 0x18, 0x04, 0x02, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0d, 0x31, 0xc1, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x04, 0x04, 0x02, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; + static const char PROGMEM prep[][ANIM_SIZE] = {{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}}; + static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = { + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x64, 0x18, 0x04, 0x12, 0xc2, 0xca, 0x24, 0x88, 0xf0, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x41, 0x42, 0x24, 0x98, 0xc0, 0x88, 0x88, 0x8c, 0x9c, 0x1c, 0x1e, 0x0e, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x08, 0x04, 0x02, 0x04, 0x08, 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc1, 0x01, 0x01, 0x02, 0x02, 0x04, 0x84, 0x44, 0x44, 0x42, 0x82, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x80, 0x80, 0x40, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04, 0x04, 0x08, 0x08, 0x10, 0x20, 0x40, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x18, 0x06, 0x01, 0x00, 0x00, 0x0c, 0x03, 0x00, 0x02, 0x18, 0x19, 0x00, 0x05, 0xfe, 0x80, 0x83, 0x83, 0x40, 0x40, 0x40, 0x40, 0x20, 0x21, 0x21, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x08, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x04, 0x08, 0x30, 0x40, 0x80, 0x80, 0x00, 0x00, 0x01, 0x86, 0x98, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x80, 0x80, 0x40, 0x40, 0x40, 0x40, 0x20, 0x20, 0x20, 0x20, 0x10, 0x10, 0x10, 0x10, 0x08, 0x0f, 0x08, 0x08, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0f, 0x0f, 0x07, 0x03, 0x03, 0x61, 0xf0, 0xf8, 0xfc, 0x60, 0x01, 0x01, 0x01, 0x3c, 0x78, 0xf8, 0xf0, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, + }; + + // assumes 1 frame prep stage + void animation_phase(void) { + if (get_current_wpm() <= IDLE_SPEED) { + current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES; + oled_write_raw_P(idle[abs((IDLE_FRAMES - 1) - current_idle_frame)], ANIM_SIZE); + } + if (get_current_wpm() > IDLE_SPEED && get_current_wpm() < TAP_SPEED) { + // oled_write_raw_P(prep[abs((PREP_FRAMES-1)-current_prep_frame)], ANIM_SIZE); // uncomment if IDLE_FRAMES >1 + oled_write_raw_P(prep[0], ANIM_SIZE); // remove if IDLE_FRAMES >1 + } + if (get_current_wpm() >= TAP_SPEED) { + current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES; + oled_write_raw_P(tap[abs((TAP_FRAMES - 1) - current_tap_frame)], ANIM_SIZE); + } + } + if (get_current_wpm() != 000) { + oled_on(); // not essential but turns on animation OLED with any alpha keypress + if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animation_phase(); + } + anim_sleep = timer_read32(); + } else { + if (timer_elapsed32(anim_sleep) > OLED_TIMEOUT) { + oled_off(); + } else { + if (timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) { + anim_timer = timer_read32(); + animation_phase(); + } + } + } +} + + +bool oled_task_user(void) { + + static const char PROGMEM ICON_LAYER[] = {0x80, 0x81, 0x82, 0x83, 0}; + static const char PROGMEM KDBKSP[] = {0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0}; + + oled_write_P(ICON_LAYER, false); + + switch (get_highest_layer(layer_state)) { + case 0: + oled_write_P(PSTR("QWERTY"), false); + break; + case 1: + oled_write_P(PSTR("LOWER "), false); + break; + case 2: + oled_write_P(PSTR("RAISE "), false); + break; + case 3: + oled_write_P(PSTR("ADJUST"), false); + break; + default: + oled_write_P(PSTR("UNDEF "), false); + } + + oled_write_P(PSTR(" "), false); + oled_write_P(KDBKSP, false); + + render_anim(); + oled_set_cursor(0, 1); + sprintf(wpm_str, "WPM:%03d", get_current_wpm()); // edit the string to change wwhat shows up, edit %03d to change how many digits show up + oled_write(wpm_str, false); // writes wpm on top left corner of string + + return false; +} + +#endif diff --git a/keyboards/kbdksp/hd48ap/keymaps/vial/rules.mk b/keyboards/kbdksp/hd48ap/keymaps/vial/rules.mk new file mode 100755 index 00000000000..24842c64247 --- /dev/null +++ b/keyboards/kbdksp/hd48ap/keymaps/vial/rules.mk @@ -0,0 +1,4 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes +VIAL_ENCODERS_ENABLE = yes +VIAL_INSECURE = yes diff --git a/keyboards/kbdksp/hd48ap/keymaps/vial/vial.json b/keyboards/kbdksp/hd48ap/keymaps/vial/vial.json new file mode 100755 index 00000000000..27b3e8c6d00 --- /dev/null +++ b/keyboards/kbdksp/hd48ap/keymaps/vial/vial.json @@ -0,0 +1,108 @@ +{ + "name": "Euy 40 Combo", + "vendorId": "0x5359", + "productId": "0x4534", + "lighting": "none", + "matrix": { + "rows": 8, + "cols": 7 + }, + "layouts": { + "keymap": [ + [ + { + "x": 2.25 + }, + "0,0", + "1,0", + "0,1", + "1,1", + "0,2", + "1,2", + "0,3", + "1,3", + "0,4", + "1,4", + "0,5", + "1,5" + ], + [ + { + "x": 2.25 + }, + "2,0", + "3,0", + "2,1", + "3,1", + "2,2", + "3,2", + "2,3", + "3,3", + "2,4", + "3,4", + "2,5", + "3,5" + ], + [ + "5,6", + { + "h": 0.5 + }, + "0,0\n\n\n\n\n\n\n\n\ne", + { + "x": 0.25 + }, + "4,0", + "5,0", + "4,1", + "5,1", + "4,2", + "5,2", + "4,3", + "5,3", + "4,4", + "5,4", + "4,5", + "5,5" + ], + [ + { + "y": -0.5, + "x": 1, + "h": 0.5 + }, + "0,1\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "y": -0.5, + "x": 2.25 + }, + "6,0", + "7,0", + "6,1", + "7,1", + "6,2", + "7,2\n\n\n0,0", + { + "x": -1, + "w": 2, + "n": true + }, + "7,2\n\n\n0,1", + { + "x": -1 + }, + "6,3\n\n\n0,0", + "7,3", + "6,4", + "7,4", + "6,5", + "7,5" + ] + ], + "labels": [ + ["Spacebar", "All 1u", "2u Center"] + ] + } +} diff --git a/keyboards/kbdksp/hd48ap/rules.mk b/keyboards/kbdksp/hd48ap/rules.mk new file mode 100755 index 00000000000..bae775cf985 --- /dev/null +++ b/keyboards/kbdksp/hd48ap/rules.mk @@ -0,0 +1,15 @@ +# MCU name +MCU = atmega32u4 + +# Bootloader selection +BOOTLOADER = caterina + +EXTRAKEY_ENABLE = yes # Audio control and System control +LTO_ENABLE = yes +ENCODER_ENABLE = yes +OLED_ENABLE = yes +OLED_DRIVER = SSD1306 +WPM_ENABLE = yes +QMK_SETTINGS = no +TAP_DANCE_ENABLE = no +COMBO_ENABLE = no diff --git a/keyboards/kbdksp/iteung/config.h b/keyboards/kbdksp/iteung/config.h new file mode 100644 index 00000000000..a6fad915bc6 --- /dev/null +++ b/keyboards/kbdksp/iteung/config.h @@ -0,0 +1,93 @@ + /* Copyright 2022 sendz + * + * 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 "config_rp2040.h" +#pragma once + +// #include "config_common.h" + +#define OLED_DISPLAY_128X32 +#define I2C1_SCL_PIN GP3 +#define I2C1_SDA_PIN GP2 +#define I2C_DRIVER I2CD1 +#define OLED_BRIGHTNESS 128 +#define OLED_FONT_H "keyboards/kbdksp/iteung/fonts/glcdfont.c" +// #define MASTER_RIGHT + +/* --------------------------- + * Right-half (slave) OLED: eye + WPM + RP2040 + temperature + * --------------------------- + */ + +// Custom split transaction used to push the eye gaze target master -> slave. +#define SPLIT_TRANSACTION_IDS_KB RPC_ID_KB_EYE_SYNC + +// Rotation of the right-half OLED. The left half uses OLED_ROTATION_270. +// If the right screen comes out upside-down, flip this to OLED_ROTATION_90 +// (and, if needed, toggle EYE_INVERT_X / EYE_INVERT_Y below). +#define OLED_SLAVE_ROTATION OLED_ROTATION_270 +#define EYE_INVERT_X 0 +#define EYE_INVERT_Y 0 + +// Eye tuning. +// EYE_INERTIA: how fast the pupil chases the target each frame, 0.0-1.0. +// Higher = snappier / less inertia, lower = slower / more lag. +#define EYE_INERTIA 0.35f +#define EYE_FRAME_MS 50 // eye animation/update interval (ms) -> ~20 fps +#define EYE_RETURN_MS 3000 // return pupil to center after this idle time (ms) +#define EYE_MAX_OFFSET 7 // max pupil travel from center (px) +#define EYE_BLINK_MIN_MS 3000 +#define EYE_BLINK_MAX_MS 5000 +#define EYE_BLINK_DURATION_MS 120 + +#define SERIAL_USART_FULL_DUPLEX +#define SERIAL_USART_TX_PIN GP0 +#define SERIAL_USART_RX_PIN GP1 + +#define VBUS_SENSE GP12 + +#define OLED_TIMEOUT 0 +#define CUSTOM_OLED_TIMEOUT 10000 +#define DIODE_DIRECTION COL2ROW + +#define ANALOG_JOYSTICK_X_AXIS_PIN GP14 +#define ANALOG_JOYSTICK_Y_AXIS_PIN GP15 +#define ANALOG_JOYSTICK_SPEED_REGULATOR 15 + +#ifdef RGBLIGHT_ENABLE + #define WS2812_DI_PIN GP13 + #define WS2812_PIO_USE_PIO1 // Force the usage of PIO1 peripheral, by default the WS2812 implementation uses the PIO0 peripheral + + #define RGBLIGHT_EFFECT_BREATHING + #define RGBLIGHT_EFFECT_RAINBOW_MOOD + #define RGBLIGHT_EFFECT_RAINBOW_SWIRL + #define RGBLIGHT_EFFECT_SNAKE + #define RGBLIGHT_EFFECT_KNIGHT + #define RGBLIGHT_EFFECT_CHRISTMAS + #define RGBLIGHT_EFFECT_STATIC_GRADIENT + #define RGBLIGHT_EFFECT_RGB_TEST + #define RGBLIGHT_EFFECT_ALTERNATING + #define RGBLIGHT_EFFECT_TWINKLE + + #define RGBLIGHT_LED_COUNT 16 + + #define RGBLED_SPLIT { 8, 8 } + + #define RGBLIGHT_LIMIT_VAL 120 + #define RGBLIGHT_HUE_STEP 10 + #define RGBLIGHT_SAT_STEP 17 + #define RGBLIGHT_VAL_STEP 17 +#endif diff --git a/keyboards/kbdksp/iteung/config_rp2040.h b/keyboards/kbdksp/iteung/config_rp2040.h new file mode 100644 index 00000000000..8e7312e6d15 --- /dev/null +++ b/keyboards/kbdksp/iteung/config_rp2040.h @@ -0,0 +1,75 @@ +// Copyright 2022 Jose Pablo Ramirez (@jpe230) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +/* --------------------------- + * RP2040 OLED Configuration + * --------------------------- + */ +#define I2C1_CLOCK_SPEED 400000 +#define OLED_UPDATE_INTERVAL 1 +#define OLED_I2C_TIMEOUT 1 + +/* --------------------------- + * RP2040 Split Configuration + * --------------------------- + */ +#define SPLIT_WPM_ENABLE + +/* --------------------------- + * RP2040 Debounce + * --------------------------- + */ +#undef DEBOUNCE +#define DEBOUNCE 10 + +/* --------------------------- + * RP2040 RGB Configuration + * --------------------------- + */ +#ifdef RGB_MATRIX_ENABLE + #define ENABLE_RGB_MATRIX_ALPHAS_MODS + #define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN + #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT + #define ENABLE_RGB_MATRIX_BREATHING + #define ENABLE_RGB_MATRIX_BAND_SAT + #define ENABLE_RGB_MATRIX_BAND_VAL + #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT + #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL + #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT + #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL + #define ENABLE_RGB_MATRIX_CYCLE_ALL + #define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT + #define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN + #define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON + #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN + #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL + #define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL + #define ENABLE_RGB_MATRIX_CYCLE_SPIRAL + #define ENABLE_RGB_MATRIX_DUAL_BEACON + #define ENABLE_RGB_MATRIX_RAINBOW_BEACON + #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS + #define ENABLE_RGB_MATRIX_RAINDROPS + #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS + #define ENABLE_RGB_MATRIX_HUE_BREATHING + #define ENABLE_RGB_MATRIX_HUE_PENDULUM + #define ENABLE_RGB_MATRIX_HUE_WAVE + #define ENABLE_RGB_MATRIX_PIXEL_RAIN + #define ENABLE_RGB_MATRIX_PIXEL_FLOW + #define ENABLE_RGB_MATRIX_PIXEL_FRACTAL + #define ENABLE_RGB_MATRIX_TYPING_HEATMAP + #define ENABLE_RGB_MATRIX_DIGITAL_RAIN + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS + #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS + #define ENABLE_RGB_MATRIX_SPLASH + #define ENABLE_RGB_MATRIX_MULTISPLASH + #define ENABLE_RGB_MATRIX_SOLID_SPLASH + #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH +#endif \ No newline at end of file diff --git a/keyboards/kbdksp/iteung/fonts/glcdfont.c b/keyboards/kbdksp/iteung/fonts/glcdfont.c new file mode 100755 index 00000000000..fd84399afb5 --- /dev/null +++ b/keyboards/kbdksp/iteung/fonts/glcdfont.c @@ -0,0 +1,244 @@ + /* Copyright 2020 sendyyeah + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#include "progmem.h" + +const unsigned char font[] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, + 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, + 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, + 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, + 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, + 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, + 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, + 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, + 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, + 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, + 0x26, 0x29, 0x79, 0x29, 0x26, 0x00, + 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, + 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, + 0x5A, 0x3C, 0x66, 0x3C, 0x5A, 0x00, + 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, + 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, + 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, + 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, + 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, + 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, + 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, + 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00, + 0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, + 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, + 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, + 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, + 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, + 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, + 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x5E, 0x00, 0x00, 0x00, + 0x00, 0x06, 0x00, 0x06, 0x00, 0x00, + 0x14, 0x3E, 0x14, 0x3E, 0x14, 0x00, + 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, + 0x26, 0x16, 0x08, 0x34, 0x32, 0x00, + 0x36, 0x4A, 0x56, 0x20, 0x50, 0x00, + 0x00, 0x0A, 0x06, 0x00, 0x00, 0x00, + 0x00, 0x3C, 0x42, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x42, 0x3C, 0x00, 0x00, + 0x2A, 0x1C, 0x3E, 0x1C, 0x2A, 0x00, + 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, + 0x00, 0xA0, 0x60, 0x00, 0x00, 0x00, + 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, + 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, + 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, + 0x3C, 0x42, 0x42, 0x42, 0x3C, 0x00, + 0x00, 0x44, 0x7E, 0x40, 0x00, 0x00, + 0x64, 0x52, 0x52, 0x52, 0x4C, 0x00, + 0x22, 0x42, 0x4A, 0x4A, 0x36, 0x00, + 0x38, 0x24, 0x22, 0x7E, 0x20, 0x00, + 0x2E, 0x4A, 0x4A, 0x4A, 0x32, 0x00, + 0x3C, 0x4A, 0x4A, 0x4A, 0x32, 0x00, + 0x02, 0x02, 0x62, 0x1A, 0x06, 0x00, + 0x34, 0x4A, 0x4A, 0x4A, 0x34, 0x00, + 0x4C, 0x52, 0x52, 0x52, 0x3C, 0x00, + 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, + 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, + 0x00, 0x08, 0x14, 0x22, 0x00, 0x00, + 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, + 0x00, 0x00, 0x22, 0x14, 0x08, 0x00, + 0x00, 0x04, 0x52, 0x0A, 0x04, 0x00, + 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, + 0x7C, 0x12, 0x12, 0x12, 0x7C, 0x00, + 0x7E, 0x4A, 0x4A, 0x4A, 0x34, 0x00, + 0x3C, 0x42, 0x42, 0x42, 0x42, 0x00, + 0x7E, 0x42, 0x42, 0x42, 0x3C, 0x00, + 0x7E, 0x4A, 0x4A, 0x4A, 0x4A, 0x00, + 0x7E, 0x0A, 0x0A, 0x0A, 0x0A, 0x00, + 0x3C, 0x42, 0x42, 0x52, 0x72, 0x00, + 0x7E, 0x08, 0x08, 0x08, 0x7E, 0x00, + 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, + 0x20, 0x40, 0x42, 0x3E, 0x00, 0x00, + 0x7E, 0x10, 0x08, 0x14, 0x62, 0x00, + 0x7E, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x7E, 0x04, 0x08, 0x04, 0x7E, 0x00, + 0x7E, 0x04, 0x08, 0x10, 0x7E, 0x00, + 0x3C, 0x42, 0x42, 0x42, 0x3C, 0x00, + 0x7E, 0x12, 0x12, 0x12, 0x0C, 0x00, + 0x3C, 0x42, 0x52, 0x22, 0x5C, 0x00, + 0x7C, 0x12, 0x12, 0x32, 0x5E, 0x00, + 0x4C, 0x4A, 0x4A, 0x4A, 0x32, 0x00, + 0x02, 0x02, 0x7E, 0x02, 0x02, 0x00, + 0x3E, 0x40, 0x40, 0x40, 0x3E, 0x00, + 0x1E, 0x20, 0x40, 0x20, 0x1E, 0x00, + 0x3E, 0x40, 0x38, 0x40, 0x3E, 0x00, + 0x62, 0x14, 0x08, 0x14, 0x62, 0x00, + 0x06, 0x08, 0x70, 0x08, 0x06, 0x00, + 0x62, 0x52, 0x4A, 0x46, 0x42, 0x00, + 0x00, 0x7E, 0x42, 0x42, 0x00, 0x00, + 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, + 0x00, 0x00, 0x42, 0x42, 0x7E, 0x00, + 0x08, 0x04, 0x02, 0x04, 0x08, 0x00, + 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, + 0x00, 0x00, 0x06, 0x0A, 0x00, 0x00, + 0x60, 0x54, 0x54, 0x54, 0x7C, 0x00, + 0x7E, 0x48, 0x48, 0x48, 0x30, 0x00, + 0x30, 0x48, 0x48, 0x48, 0x48, 0x00, + 0x30, 0x48, 0x48, 0x48, 0x7E, 0x00, + 0x38, 0x54, 0x54, 0x54, 0x58, 0x00, + 0x00, 0x08, 0x7C, 0x0A, 0x00, 0x00, + 0x98, 0xA4, 0xA4, 0xA4, 0x78, 0x00, + 0x7E, 0x08, 0x08, 0x08, 0x70, 0x00, + 0x00, 0x00, 0x7A, 0x00, 0x00, 0x00, + 0x20, 0x40, 0x40, 0x3A, 0x00, 0x00, + 0x7E, 0x10, 0x28, 0x44, 0x00, 0x00, + 0x00, 0x00, 0x7E, 0x40, 0x00, 0x00, + 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, + 0x7C, 0x04, 0x04, 0x04, 0x78, 0x00, + 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, + 0xFC, 0x24, 0x24, 0x24, 0x18, 0x00, + 0x18, 0x24, 0x24, 0x24, 0xFC, 0x00, + 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, + 0x48, 0x54, 0x54, 0x54, 0x24, 0x00, + 0x00, 0x04, 0x7E, 0x44, 0x00, 0x00, + 0x3C, 0x40, 0x40, 0x40, 0x7C, 0x00, + 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, + 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, + 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, + 0x5C, 0xA0, 0xA0, 0xA0, 0x7C, 0x00, + 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, + 0xFE, 0xC1, 0xC1, 0xC9, 0xC5, 0xDD, + 0xC5, 0xC9, 0xC1, 0xC1, 0xFE, 0x00, + 0xFC, 0xFE, 0xFE, 0xEE, 0xF6, 0xC6, + 0xF6, 0xEE, 0xFE, 0xFE, 0xFC, 0x00, + 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, + 0x7E, 0xFF, 0x81, 0xBF, 0xBF, 0xBF, + 0xBF, 0xF9, 0xF7, 0x8F, 0xF7, 0xF9, + 0xFF, 0x83, 0xED, 0xED, 0xCD, 0xA3, + 0xFF, 0x7E, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x81, 0xEF, 0xF7, 0xEB, 0x9D, + 0xFF, 0x81, 0xB5, 0xB5, 0xB5, 0xCB, + 0xFF, 0x81, 0xBD, 0xBD, 0xBD, 0xC3, + 0xFF, 0x81, 0xEF, 0xF7, 0xEB, 0x9D, + 0xFF, 0xB3, 0xB5, 0xB5, 0xB5, 0xCD, + 0xFF, 0x81, 0xED, 0xED, 0xED, 0xF3, + 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFE, 0x01, 0x61, 0xF1, 0xF9, 0xFD, + 0x61, 0xF1, 0xF9, 0xFD, 0x01, 0xFE, + 0xFE, 0x01, 0xFD, 0xF9, 0xF1, 0x61, + 0xFD, 0xF9, 0xF1, 0x61, 0x01, 0xFE, + 0xFE, 0x01, 0x01, 0xFD, 0x01, 0x61, + 0xF1, 0xF9, 0xFD, 0x01, 0x01, 0xFE, + 0xFE, 0x01, 0x01, 0xFD, 0xF9, 0xF1, + 0x61, 0x01, 0xFD, 0x01, 0x01, 0xFE, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xF0, 0x08, 0x04, 0xC4, 0x24, 0x24, + 0x24, 0xC4, 0x04, 0x08, 0xF0, 0x00, + 0xF0, 0xF8, 0xFC, 0x3C, 0xDC, 0xDC, + 0xDC, 0x3C, 0xFC, 0xF8, 0xF0, 0x00, + 0xFE, 0xC1, 0xC1, 0xC9, 0xC5, 0xDD, + 0xC5, 0xC9, 0xC1, 0xC1, 0xFE, 0x00, + 0xFC, 0xFE, 0xFE, 0xEE, 0xF6, 0xC6, + 0xF6, 0xEE, 0xFE, 0xFE, 0xFC, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x81, 0xEF, 0xF7, 0xEB, 0x9D, + 0xFF, 0xB3, 0xB5, 0xB5, 0xB5, 0xCD, + 0xFF, 0x81, 0xED, 0xED, 0xED, 0xF3, + 0xFF, 0x01, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x08, 0x08, 0x09, 0x0B, + 0x08, 0x08, 0x09, 0x0B, 0x08, 0x07, + 0x07, 0x08, 0x0B, 0x09, 0x08, 0x08, + 0x0B, 0x09, 0x08, 0x08, 0x08, 0x07, + 0x07, 0x08, 0x08, 0x0B, 0x08, 0x08, + 0x08, 0x09, 0x0B, 0x08, 0x08, 0x07, + 0x07, 0x08, 0x08, 0x0B, 0x09, 0x08, + 0x08, 0x08, 0x0B, 0x08, 0x08, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x10, 0x13, 0x11, 0x11, + 0x11, 0x13, 0x10, 0x08, 0x07, 0x00, + 0x07, 0x0F, 0x1F, 0x1C, 0x1E, 0x1E, + 0x1E, 0x1C, 0x1F, 0x0F, 0x07, 0x00, + 0xFE, 0x01, 0xF1, 0xF9, 0xFD, 0xFD, + 0x05, 0x05, 0x09, 0xF1, 0x01, 0xFE, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x06, 0x3F, + 0x3F, 0x06, 0x04, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x08, 0x18, 0x3F, + 0x3F, 0x18, 0x08, 0x00, 0x00, 0x00, + 0x1C, 0x1C, 0x22, 0x41, 0x7F, 0x00, + 0x10, 0x18, 0x1C, 0x18, 0x10, 0x00, + 0x1C, 0x1C, 0x22, 0x41, 0x7F, 0x00, + 0x04, 0x0C, 0x1C, 0x0C, 0x04, 0x00, + 0x1C, 0x3E, 0x3E, 0x22, 0x1C, 0x00, + 0x10, 0x18, 0x1C, 0x18, 0x10, 0x00, + 0x1C, 0x3E, 0x3E, 0x22, 0x1C, 0x00, + 0x04, 0x0C, 0x1C, 0x0C, 0x04, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0x08, 0x08, 0x09, 0x0B, 0x0B, + 0x0A, 0x0A, 0x09, 0x08, 0x08, 0x07, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +}; diff --git a/keyboards/kbdksp/iteung/halconf.h b/keyboards/kbdksp/iteung/halconf.h new file mode 100644 index 00000000000..3050c616a71 --- /dev/null +++ b/keyboards/kbdksp/iteung/halconf.h @@ -0,0 +1,9 @@ +// Copyright 2022 QMK +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#define HAL_USE_I2C TRUE +#define HAL_USE_ADC TRUE + +#include_next diff --git a/keyboards/kbdksp/iteung/jpe230.h b/keyboards/kbdksp/iteung/jpe230.h new file mode 100644 index 00000000000..58dc5d8cd22 --- /dev/null +++ b/keyboards/kbdksp/iteung/jpe230.h @@ -0,0 +1,30 @@ +// Copyright 2022 Jose Pablo Ramirez (@jpe230) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include QMK_KEYBOARD_H + +bool shift_pressed; +bool alt_pressed; +bool ctrl_pressed; +bool gui_pressed; + +/* --------------------------- + * Eye gaze target (right-half OLED) + * --------------------------- + * Range -100..100. On the master these are computed from the last keypress; + * they are then pushed to the slave over RPC_ID_KB_EYE_SYNC. The slave eases + * the rendered pupil toward this target. + */ +extern int8_t g_eye_tx; +extern int8_t g_eye_ty; + +/* --------------------------- + * Custom OLED Fncs Prototypes + * --------------------------- + */ +void render_slave_oled(void); +void render_master_oled(void); +void oled_timer_reset(void); +void set_keylog(uint16_t keycode, keyrecord_t *record); diff --git a/keyboards/kbdksp/iteung/keyboard.json b/keyboards/kbdksp/iteung/keyboard.json new file mode 100644 index 00000000000..ed24a250ebd --- /dev/null +++ b/keyboards/kbdksp/iteung/keyboard.json @@ -0,0 +1,140 @@ +{ + "keyboard_name": "Iteung", + "manufacturer": "KBDKSP", + "url": "tokopedia.com/kbdksp", + "maintainer": "Sendy ", + "processor": "RP2040", + "bootloader": "rp2040", + "usb": { + "vid": "0x7370", + "pid": "0x0287", + "device_version": "1.1.0" + }, + "diode_direction": "COL2ROW", + "matrix_pins": { + "rows": ["GP29", "GP28", "GP15", "GP26", "GP27", "GP14"], + "cols": ["GP9", "GP8", "GP7", "GP4", "GP5", "GP6"] + }, + "build": { + "lto": true + }, + "features": { + "bootmagic": true, + "command": false, + "console": false, + "extrakey": true, + "mousekey": true, + "nkro": true, + "oled": true, + "encoder": true, + "wpm": true + }, + "encoder": { + "enabled": true, + "rotary": [ + {"pin_a": "GP10", "pin_b": "GP11" } + ], + "resolution": 1 + }, + "split": { + "enabled": true, + "encoder": { + "right": { + "rotary": [ + {"pin_a": "GP10", "pin_b": "GP11", "resolution": 1} + ] + } + } + }, + "layouts": { + "LAYOUT_split_4x6": { + "layout": [ + + {"matrix":[0, 0], "x":0, "y":0.5}, + {"matrix":[0, 1], "x":1, "y":0.5}, + {"matrix":[0, 2], "x":2, "y":0.35000000000000003}, + {"matrix":[0, 3], "x":3, "y":0.2}, + {"matrix":[0, 4], "x":4, "y":0.35000000000000003}, + {"matrix":[0, 5], "x":5, "y":0.5}, + + {"matrix":[6, 5], "x":9, "y":0.5}, + {"matrix":[6, 4], "x":10, "y":0.25000000000000006}, + {"matrix":[6, 3], "x":11, "y":0.2}, + {"matrix":[6, 2], "x":12, "y":0.35000000000000003}, + {"matrix":[6, 1], "x":13, "y":0.5}, + {"matrix":[6, 0], "x":14, "y":0.5}, + + + + {"matrix":[1, 0], "x":0, "y":1.5}, + {"matrix":[1, 1], "x":1, "y":1.5}, + {"matrix":[1, 2], "x":2, "y":1.35}, + {"matrix":[1, 3], "x":3, "y":1.2}, + {"matrix":[1, 4], "x":4, "y":1.35}, + {"matrix":[1, 5], "x":5, "y":1.5}, + + {"matrix":[7, 5], "x":9, "y":1.5}, + {"matrix":[7, 4], "x":10, "y":1.25}, + {"matrix":[7, 3], "x":11, "y":1.2}, + {"matrix":[7, 2], "x":12, "y":1.35}, + {"matrix":[7, 1], "x":13, "y":1.5}, + {"matrix":[7, 0], "x":14, "y":1.5}, + + + + {"matrix":[2, 0], "x":0, "y":2.5}, + {"matrix":[2, 1], "x":1, "y":2.5}, + {"matrix":[2, 2], "x":2, "y":2.35}, + {"matrix":[2, 3], "x":3, "y":2.2}, + {"matrix":[2, 4], "x":4, "y":2.35}, + {"matrix":[2, 5], "x":5, "y":2.5}, + + {"matrix":[4, 5], "x":6.25, "y":2.0}, + {"matrix":[10, 5], "x":7.75, "y":2.0}, + + {"matrix":[8, 5], "x":9, "y":2.5}, + {"matrix":[8, 4], "x":10, "y":2.35}, + {"matrix":[8, 3], "x":11, "y":2.2}, + {"matrix":[8, 2], "x":12, "y":2.35}, + {"matrix":[8, 1], "x":13, "y":2.5}, + {"matrix":[8, 0], "x":14, "y":2.5}, + + + + {"matrix":[3, 0], "x":0, "y":3.5}, + {"matrix":[3, 1], "x":1, "y":3.5}, + {"matrix":[3, 2], "x":2, "y":3.35}, + {"matrix":[3, 3], "x":3, "y":3.2}, + {"matrix":[3, 4], "x":4, "y":3.35}, + {"matrix":[3, 5], "x":5, "y":3.5}, + + {"matrix":[5, 4], "x":6.25, "y":3.0, "w":0.5}, + {"matrix":[5, 5], "x":6.75, "y":3.0, "w":0.5}, + + {"matrix":[11, 5], "x":7.75, "y":3.0, "w":0.5}, + {"matrix":[11, 4], "x":8.25, "y":3.0, "w":0.5}, + + {"matrix":[9, 5], "x":9, "y":3.5}, + {"matrix":[9, 4], "x":10, "y":3.35}, + {"matrix":[9, 3], "x":11, "y":3.2}, + {"matrix":[9, 2], "x":12, "y":3.35}, + {"matrix":[9, 1], "x":13, "y":3.5}, + {"matrix":[9, 0], "x":14, "y":3.5}, + + + + {"matrix":[4, 0], "x":1.75, "y":4.5}, + {"matrix":[4, 1], "x":2.75, "y":4.3500000000000005}, + {"matrix":[4, 2], "x":3.75, "y":4.3500000000000005}, + {"matrix":[4, 3], "x":0, "y":16.35}, + {"matrix":[4, 4], "x":0.1, "y":17.1, "h":1.5}, + + {"matrix":[10, 4], "x":4.25, "y":26.1, "h":1.5}, + {"matrix":[10, 3], "x":7.5, "y":25.1}, + {"matrix":[10, 2], "x":10.25, "y":4.3500000000000005}, + {"matrix":[10, 1], "x":11, "y":9.85}, + {"matrix":[10, 0], "x":11.75, "y":15.35} + ] + } + } +} diff --git a/keyboards/kbdksp/iteung/keymaps/vial/config.h b/keyboards/kbdksp/iteung/keymaps/vial/config.h new file mode 100644 index 00000000000..2ed9432399f --- /dev/null +++ b/keyboards/kbdksp/iteung/keymaps/vial/config.h @@ -0,0 +1,70 @@ +/* Copyright 2023 sendz + * + * 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 . + */ + +// clang-format off + +#pragma once + +// Vial Support +#define VIAL_KEYBOARD_UID {0x6C, 0x4E, 0xA2, 0x1E, 0x08, 0xE7, 0xF3, 0x09} + +#define VIAL_ENCODER_DEFAULT { \ + KC_VOLU, KC_VOLD, \ + KC_PGUP, KC_PGDN, \ + KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS, \ + KC_TRNS, KC_TRNS \ +} + +#define DYNAMIC_KEYMAP_LAYER_COUNT 10 + +/* --------------------------- + * Common Spit Configuration + * --------------------------- + */ +#define SPLIT_OLED_ENABLE + +/* --------------------------- + * Common Bootmagic Lite + * --------------------------- + */ +#define BOOTMAGIC_LITE_ROW 0 +#define BOOTMAGIC_LITE_COLUMN 0 + +/* --------------------------- + * Common RGB Configuration + * --------------------------- + */ +#ifdef RGB_MATRIX_ENABLE + #define RGB_DISABLE_WHEN_USB_SUSPENDED + #define RGB_DISABLE_TIMEOUT CUSTOM_OLED_TIMEOUT + #define RGB_MATRIX_MAXIMUM_BRIGHTNESS 128 + #define RGB_MATRIX_DEFAULT_HUE 215 + #define RGB_MATRIX_DEFAULT_SAT 255 + #define RGB_MATRIX_DEFAULT_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS +#endif + +/* --------------------------- + * Common other Configuration + * --------------------------- + */ +#define ENABLE_COMPILE_KEYCODE + +#define VIAL_UNLOCK_COMBO_ROWS { 0, 0 } +#define VIAL_UNLOCK_COMBO_COLS { 0, 3 } diff --git a/keyboards/kbdksp/iteung/keymaps/vial/keymap.c b/keyboards/kbdksp/iteung/keymaps/vial/keymap.c new file mode 100644 index 00000000000..f73884cf1f9 --- /dev/null +++ b/keyboards/kbdksp/iteung/keymaps/vial/keymap.c @@ -0,0 +1,125 @@ +/* Copyright 2020 Josef Adamcik + * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang + * Modification for Vial support by Drew Petersen + * + * 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 . + */ + +// clang-format off + +#include +char wpm_str[10]; +#include QMK_KEYBOARD_H + +// Default keymap. This can be changed in Vial. Use oled.c to change beavior that Vial cannot change. + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* + * QWERTY + * ,-----------------------------------------. ,-----------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ESC | Q | W | E | R | T | | Y | U | I | O | P | Bspc | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' | + * |------+------+------+------+------+------| | | |------+------+------+------+------+------| + * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ + +[0] = LAYOUT_split_4x6( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_MUTE, XXXXXXX,KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LGUI,KC_LALT,KC_LCTL, MO(1), KC_SPC, KC_ENT, MO(2), KC_MINS, KC_EQL, KC_RGUI +), +/* LOWER + * ,-----------------------------------------. ,-----------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | | | + * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------| + * | Shift| = | - | + | { | } |-------| |-------| [ | ] | ; | : | \ | Shift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ +[1] = LAYOUT_split_4x6( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_GRV, _______, _______, _______, _______, _______, KC_PGUP, KC_HOME, KC_UP, KC_END, _______, _______, + _______, _______, RGB_TOG, RGB_MOD, RGB_VAI, _______, _______, _______,KC_PGDN, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, + KC_CAPS, _______, _______, RGB_RMOD,RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), +/* RAISE + * ,----------------------------------------. ,-----------------------------------------. + * | | | | | | | | | | | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Esc | Ins | Pscr | Menu | | | | | PWrd | Up | NWrd | DLine| Bspc | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | LAt | LCtl |LShift| | Caps |-------. ,-------| | Left | Down | Rigth| Del | Bspc | + * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------| + * |Shift | Undo | Cut | Copy | Paste| |-------| |-------| | LStr | | LEnd | | Shift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ +[2] = LAYOUT_split_4x6( + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_INS, KC_PSCR, KC_APP,XXXXXXX, XXXXXXX, KC_PGUP, _______, KC_UP, _______, _______, KC_BSPC, + _______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, _______, _______, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_BSPC, + _______, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE,XXXXXXX, _______, _______, _______, _______, XXXXXXX, _______, XXXXXXX, _______, XXXXXXX, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), +/* + * COLEMAK + * ,-----------------------------------------. ,-----------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ESC | Q | W | F | P | G | | J | L | U | Y | ; | Bspc | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | TAB | A | R | S | T | D |-------. ,-------| H | N | E | I | O | ' | + * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------| + * |LShift| Z | X | C | V | B |-------| |-------| K | M | , | . | / |RShift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ + +[3] = LAYOUT_split_4x6( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, + KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, + KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_MUTE, XXXXXXX, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, _______, _______, _______, _______, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LGUI, KC_LALT, KC_LCTL, KC_TRNS, KC_ENT, KC_SPC, KC_TRNS, KC_RCTL, KC_RALT, KC_RGUI +), +}; + +#if defined(ENCODER_MAP_ENABLE) +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_WH_D, KC_WH_U) }, + [1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + [2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, + [3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS), ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }, +}; +#endif diff --git a/keyboards/kbdksp/iteung/keymaps/vial/rules.mk b/keyboards/kbdksp/iteung/keymaps/vial/rules.mk new file mode 100644 index 00000000000..8c9cbd98a86 --- /dev/null +++ b/keyboards/kbdksp/iteung/keymaps/vial/rules.mk @@ -0,0 +1,4 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes +VIAL_INSECURE = yes +ENCODER_MAP_ENABLE = yes diff --git a/keyboards/kbdksp/iteung/keymaps/vial/vial.json b/keyboards/kbdksp/iteung/keymaps/vial/vial.json new file mode 100644 index 00000000000..98d0f87c577 --- /dev/null +++ b/keyboards/kbdksp/iteung/keymaps/vial/vial.json @@ -0,0 +1,460 @@ +{ + "name": "Iteung", + "vendorId": "0x7370", + "productId": "0x0287", + "lighting": "qmk_rgblight", + "matrix": { "rows": 12, "cols": 6 }, + "layouts": { + "keymap": [ + [ + { + "y": 0.19999999999999996, + "x": 3, + "p": "CHICKLET", + "f": 8, + "fa": [ + 1 + ] + }, + "0,3", + { + "x": 7 + }, + "6,3" + ], + [ + { + "y": -0.95, + "x": 10 + }, + "6,4" + ], + [ + { + "y": -0.9, + "x": 2 + }, + "0,2", + { + "x": 1 + }, + "0,4", + { + "x": 7 + }, + "6,2" + ], + [ + { + "y": -0.85, + "c": "#aaaaaa", + "f": 9, + "fa": [ + 1 + ] + }, + "0,0", + { + "c": "#cccccc", + "f": 8, + "fa": [ + 1 + ] + }, + "0,1", + { + "x": 3 + }, + "0,5", + { + "x": 3 + }, + "6,5", + { + "x": 3 + }, + "6,1", + { + "c": "#aaaaaa", + "f": 6, + "fa": [ + 1 + ] + }, + "6,0" + ], + [ + { + "y": -0.5, + "x": 6.25, + "c": "#cccccc", + "f": 3, + "w": 0.5 + }, + "0,0\n\n\n\n\n\n\n\n\ne", + { + "w": 0.5 + }, + "0,1\n\n\n\n\n\n\n\n\ne", + { + "x": 0.5, + "w": 0.5 + }, + "1,1\n\n\n\n\n\n\n\n\ne", + { + "w": 0.5 + }, + "1,0\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "y": -0.8, + "x": 3, + "f": 8, + "fa": [ + 1 + ] + }, + "1,3", + { + "x": 7 + }, + "7,3" + ], + [ + { + "y": -0.95, + "x": 10 + }, + "7,4" + ], + [ + { + "y": -0.8999999999999999, + "x": 2 + }, + "1,2", + { + "x": 1 + }, + "1,4", + { + "x": 7 + }, + "7,2" + ], + [ + { + "y": -0.8500000000000001, + "c": "#aaaaaa" + }, + "1,0", + { + "c": "#cccccc" + }, + "1,1", + { + "x": 3 + }, + "1,5", + { + "a": 7, + "f": 6, + "w": 3, + "h": 2.75, + "d": true + }, + "", + { + "a": 4, + "f": 8, + "fa": [ + 1 + ] + }, + "7,5", + { + "x": 3 + }, + "7,1", + { + "c": "#aaaaaa", + "f": 6, + "fa": [ + 1 + ] + }, + "7,0" + ], + [ + { + "y": -0.5, + "x": 6.25, + "c": "#cccccc", + "f": 8, + "fa": [ + 1 + ] + }, + "4,5", + { + "x": 0.5 + }, + "9,5" + ], + [ + { + "y": -0.7999999999999998, + "x": 3 + }, + "2,3", + { + "x": 7 + }, + "8,3" + ], + [ + { + "y": -0.8500000000000001, + "x": 2 + }, + "2,2", + { + "x": 1, + "n": true + }, + "2,4", + { + "x": 5, + "n": true + }, + "8,4", + { + "x": 1 + }, + "8,2" + ], + [ + { + "y": -0.8500000000000001, + "c": "#aaaaaa", + "f": 6, + "fa": [ + 1 + ] + }, + "2,0", + { + "c": "#cccccc", + "f": 8, + "fa": [ + 1 + ] + }, + "2,1", + { + "x": 3 + }, + "2,5", + { + "x": 3 + }, + "8,5", + { + "x": 3 + }, + "8,1", + { + "c": "#aaaaaa", + "f": 6, + "fa": [ + 1 + ] + }, + "8,0" + ], + [ + { + "y": -0.5, + "x": 6.25, + "c": "#cccccc", + "f": 3, + "w": 0.5 + }, + "5,4", + { + "w": 0.5 + }, + "5,5", + { + "x": 0.5, + "w": 0.5 + }, + "11,5", + { + "w": 0.5 + }, + "11,4" + ], + [ + { + "y": -0.7999999999999998, + "x": 3, + "f": 8, + "fa": [ + 1 + ] + }, + "3,3", + { + "x": 7 + }, + "9,3" + ], + [ + { + "y": -0.8500000000000001, + "x": 2 + }, + "3,2", + { + "x": 1 + }, + "3,4", + { + "x": 5 + }, + "9,4", + { + "x": 1 + }, + "9,2" + ], + [ + { + "y": -0.8500000000000001, + "c": "#aaaaaa", + "f": 5, + "fa": [ + 1 + ] + }, + "3,0", + { + "c": "#cccccc", + "f": 8, + "fa": [ + 1 + ] + }, + "3,1", + { + "x": 3 + }, + "3,5", + { + "x": 3 + }, + "9,5", + { + "x": 3 + }, + "9,1", + { + "c": "#aaaaaa", + "f": 5, + "fa": [ + 1 + ] + }, + "9,0" + ], + [ + { + "y": -0.15000000000000036, + "x": 2.75, + "f": 9, + "fa": [ + 1 + ] + }, + "4,1", + "4,2", + { + "x": 5.5 + }, + "10,2" + ], + [ + { + "y": -0.8499999999999996, + "x": 1.75 + }, + "4,0" + ], + [ + { + "rx": 0.25, + "y": 4.35, + "x": 11 + }, + "10,1" + ], + [ + { + "rx": 0.5, + "y": 4.5, + "x": 11.75 + }, + "10,0" + ], + [ + { + "r": 15, + "rx": 5, + "ry": 4.5, + "c": "#777777" + }, + "4,3" + ], + [ + { + "r": 30, + "rx": 6.25, + "y": -0.25, + "x": 0.09999999999999964, + "c": "#aaaaaa", + "h": 1.5 + }, + "4,4" + ], + [ + { + "r": -30, + "rx": 8.75, + "y": -0.25, + "x": -1.0999999999999996, + "f": 8, + "fa": [ + 1 + ], + "h": 1.5 + }, + "10,4" + ], + [ + { + "r": -15, + "rx": 10, + "x": -1, + "c": "#777777", + "f": 9, + "fa": [ + 1 + ] + }, + "10,3" + ] + ] + } +} diff --git a/keyboards/kbdksp/iteung/mcuconf.h b/keyboards/kbdksp/iteung/mcuconf.h new file mode 100644 index 00000000000..293688396b8 --- /dev/null +++ b/keyboards/kbdksp/iteung/mcuconf.h @@ -0,0 +1,14 @@ +// Copyright 2022 Steven Karrmann (@skarrmann) +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include_next + +#undef RP_I2C_USE_I2C0 +#undef RP_I2C_USE_I2C1 +#define RP_I2C_USE_I2C0 FALSE +#define RP_I2C_USE_I2C1 TRUE + +#undef RP_ADC_USE_ADC1 +#define RP_ADC_USE_ADC1 TRUE \ No newline at end of file diff --git a/keyboards/kbdksp/iteung/oled/oled_handler.c b/keyboards/kbdksp/iteung/oled/oled_handler.c new file mode 100644 index 00000000000..3f89d8d5dba --- /dev/null +++ b/keyboards/kbdksp/iteung/oled/oled_handler.c @@ -0,0 +1,115 @@ +// Copyright 2022 Jose Pablo Ramirez (@jpe230) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "jpe230.h" +#include "transactions.h" +#ifdef OLED_ENABLE +uint8_t logged_row; +uint8_t logged_col; +uint32_t oled_timer = 0; + +// Eye gaze target, shared with the slave OLED renderer (see jpe230.h). +int8_t g_eye_tx = 0; +int8_t g_eye_ty = 0; +// Timestamp of the last keypress on the master, used to recenter the eye. +static uint32_t eye_input_timer = 0; + +// Map a keypress (matrix position) to an eye gaze target. +// Horizontal: derived from the key's physical column relative to board center. +// Left half -> look left, right half -> look right. +// Vertical: derived from the matrix row. +// number row -> up, home row -> ~neutral, bottom row / thumbs -> down. +// This reproduces: 6 -> up-right, n -> down-right, w -> left, b -> down-left. +static void eye_set_target_from_key(keyrecord_t *record) { + uint8_t row = record->event.key.row; // logical row 0..11 (left 0-5, right 6-11) + uint8_t col = record->event.key.col; // 0..5 + bool right = row >= 6; + uint8_t vis_row = row % 6; // 0 num, 1 top, 2 home, 3 bottom, 4/5 thumb + + // Physical x across the whole board (0=far left .. 14=far right), center = 7. + // Left half: x = col (0..5). Right half: x = 14 - col (9..14). + int16_t phys_x = right ? (14 - (int16_t)col) : (int16_t)col; + int16_t tx = (phys_x - 7) * 100 / 7; // -100..100 + + int16_t ty; + switch (vis_row) { + case 0: ty = -100; break; // number row -> up + case 1: ty = -10; break; // top alpha -> ~neutral + case 2: ty = 25; break; // home row -> slightly down + case 3: ty = 80; break; // bottom row -> down + default: ty = 100; break; // thumb cluster -> down + } + + if (tx > 100) tx = 100; else if (tx < -100) tx = -100; + g_eye_tx = (int8_t)tx; + g_eye_ty = (int8_t)ty; + eye_input_timer = timer_read32(); +} + +// Slave-side: receive the gaze target pushed by the master. +static void eye_sync_handler(uint8_t in_buflen, const void *in_data, uint8_t out_buflen, void *out_data) { + if (in_buflen >= 2) { + const int8_t *d = (const int8_t *)in_data; + g_eye_tx = d[0]; + g_eye_ty = d[1]; + } +} + +void keyboard_post_init_kb(void) { + transaction_register_rpc(RPC_ID_KB_EYE_SYNC, eye_sync_handler); + keyboard_post_init_user(); +} + +void housekeeping_task_kb(void) { + if (is_keyboard_master()) { + static uint32_t last_send = 0; + // Recenter the eye after a period of no typing. + if (timer_elapsed32(eye_input_timer) > EYE_RETURN_MS) { + g_eye_tx = 0; + g_eye_ty = 0; + } + if (timer_elapsed32(last_send) > 50) { + int8_t payload[2] = {g_eye_tx, g_eye_ty}; + if (transaction_rpc_send(RPC_ID_KB_EYE_SYNC, sizeof(payload), payload)) { + last_send = timer_read32(); + } + } + } + housekeeping_task_user(); +} + +__attribute__ ((weak)) void handle_oled_keypress(uint16_t keycode, keyrecord_t *record) {} + +__attribute__ ((weak)) oled_rotation_t rotate_master(oled_rotation_t rotation) {return rotation;} +__attribute__ ((weak)) oled_rotation_t rotate_slave(oled_rotation_t rotation) {return rotation;} + +void oled_timer_reset(void) { oled_timer = timer_read32(); } + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + + if (!is_keyboard_master()) { + return rotate_slave(rotation); + } + + return rotate_master(rotation); +} + + +void set_keylog(uint16_t keycode, keyrecord_t *record) { + logged_row = record->event.key.row; + logged_col = record->event.key.col; + + eye_set_target_from_key(record); + + handle_oled_keypress(keycode, record); +} + +bool oled_task_user(void) { + if (is_keyboard_master()) { + render_master_oled(); + } else { + render_slave_oled(); + } + return false; +} +#endif \ No newline at end of file diff --git a/keyboards/kbdksp/iteung/oled/rp2040/master/oled_master_handler.c b/keyboards/kbdksp/iteung/oled/rp2040/master/oled_master_handler.c new file mode 100644 index 00000000000..41e76a44e94 --- /dev/null +++ b/keyboards/kbdksp/iteung/oled/rp2040/master/oled_master_handler.c @@ -0,0 +1,38 @@ +// Copyright 2022 Jose Pablo Ramirez (@jpe230) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "jpe230.h" + +// static const char PROGMEM ICON_LAYER[] = {0x80, 0x81, 0x82, 0x83, 0}; + +void render_master_oled(void) { + oled_on(); + + oled_write_P(PSTR(" KBD "), false); + oled_write_P(PSTR(" KSP "), false); + + oled_write_ln_P(PSTR(""), false); + + oled_write_P(PSTR(" ITE "), false); + oled_write_P(PSTR(" UNG "), false); + + oled_write_ln_P(PSTR(""), false); + oled_write_P(PSTR("_____"), false); + oled_write_ln_P(PSTR(""), false); + oled_write_ln_P(PSTR(""), false); + + char layer_string[8] = {0}; + sprintf(layer_string, "LYR %d", get_highest_layer(layer_state)); + oled_write(layer_string, false); + + oled_write_ln_P(PSTR(""), false); + + led_t led_usb_state = host_keyboard_led_state(); + oled_write_P(PSTR("CAPS "), led_usb_state.caps_lock); + oled_write_P(PSTR("SHIFT"), shift_pressed); + oled_write_P(PSTR("CTRL "), ctrl_pressed); + oled_write_P(PSTR("GUI "), gui_pressed); + oled_write_P(PSTR("ALT "), alt_pressed); +} + +oled_rotation_t rotate_master(oled_rotation_t rotation) {return OLED_ROTATION_270;} diff --git a/keyboards/kbdksp/iteung/oled/rp2040/slave/oled_slave_handler.c b/keyboards/kbdksp/iteung/oled/rp2040/slave/oled_slave_handler.c new file mode 100644 index 00000000000..d466846a517 --- /dev/null +++ b/keyboards/kbdksp/iteung/oled/rp2040/slave/oled_slave_handler.c @@ -0,0 +1,200 @@ +// Copyright 2022 Jose Pablo Ramirez (@jpe230) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "jpe230.h" +#include "transactions.h" +#include +#include +#include + +/* --------------------------------------------------------------------------- + * Right-half (slave) OLED, rendered vertically (32 wide x 128 tall). + * + * [ animated eye ] pupil tracks the last typed key, blinks, recenters + * ----- + * WPM + * 000 live WPM, never blanks (shows 000 when idle) + * ----- + * RP "RP2040" stacked (only 5 chars fit per line) + * 2040 + * 23C RP2040 internal die temperature + * ------------------------------------------------------------------------- */ + +// Eye geometry (logical coordinates, in the rotated 32x128 frame). +#define EYE_CX 16 // eye center x +#define EYE_CY 19 // eye center y +#define EYE_R 15 // eyeball radius +#define EYE_PR 5 // pupil radius +#define EYE_REGION_BOTTOM 38 // clear/redraw the eye within y = 0..EYE_REGION_BOTTOM + +// Text rows (8 px each). Rows 0..4 are the eye; rows 5..6 are a blank gap. +#define ROW_DIV1 7 +#define ROW_WPM_LABEL 8 +#define ROW_WPM_VALUE 9 +#define ROW_DIV2 10 +#define ROW_RP1 11 +#define ROW_RP2 12 +#define ROW_TEMP 13 + +/* ------------------------------ Temperature ------------------------------ */ +// RP2040 on-die temperature sensor is wired to ADC channel 4. ChibiOS does +// not expose it through QMK's analog wrapper, so drive the ADC directly. + +static const ADCConfig adc_cfg = {0, 0, false}; +static const ADCConversionGroup adc_grp = { + false, // not circular (one-shot) + 1, // one channel + NULL, // end callback + NULL, // error callback + RP_ADC_CHTS, // channel mask: temperature sensor (CH4) +}; +static adcsample_t adc_buf[1]; +static bool adc_started = false; + +static int read_temp_c(void) { + if (!adc_started) { + adcStart(&ADCD1, &adc_cfg); + adcRPEnableTS(&ADCD1); + adc_started = true; + } + adcConvert(&ADCD1, &adc_grp, adc_buf, 1); + // 12-bit sample over 3.3V reference; datasheet transfer function. + float voltage = adc_buf[0] * (3.3f / 4096.0f); + float temp_c = 27.0f - (voltage - 0.706f) / 0.001721f; + return (int)(temp_c + 0.5f); +} + +/* --------------------------------- Eye ----------------------------------- */ + +static float pupil_x = 0.0f; // current eased pupil offset (px) +static float pupil_y = 0.0f; +static bool blinking = false; +static uint32_t blink_timer = 0; // time since last blink ended / started +static uint32_t blink_len = EYE_BLINK_MIN_MS; + +static void eye_clear_region(void) { + for (uint8_t y = 0; y <= EYE_REGION_BOTTOM; y++) { + for (uint8_t x = 0; x < 32; x++) { + oled_write_pixel(x, y, false); + } + } +} + +static void eye_draw(int16_t px, int16_t py, bool closed) { + eye_clear_region(); + + if (closed) { + // Closed eye: a short horizontal lid line. + for (uint8_t x = EYE_CX - 11; x <= EYE_CX + 11; x++) { + oled_write_pixel(x, EYE_CY, true); + oled_write_pixel(x, EYE_CY + 1, true); + } + return; + } + + // Eyeball outline (ring). + for (int16_t y = -EYE_R; y <= EYE_R; y++) { + for (int16_t x = -EYE_R; x <= EYE_R; x++) { + int16_t d2 = x * x + y * y; + if (d2 <= EYE_R * EYE_R && d2 >= (EYE_R - 1) * (EYE_R - 1)) { + oled_write_pixel(EYE_CX + x, EYE_CY + y, true); + } + } + } + + // Filled pupil, offset by the eased gaze. + int16_t cx = EYE_CX + px; + int16_t cy = EYE_CY + py; + for (int16_t y = -EYE_PR; y <= EYE_PR; y++) { + for (int16_t x = -EYE_PR; x <= EYE_PR; x++) { + if (x * x + y * y <= EYE_PR * EYE_PR) { + oled_write_pixel(cx + x, cy + y, true); + } + } + } +} + +static void eye_update_and_draw(void) { + // Resolve the gaze target into a pixel offset, honoring optional inversion. + float tx = g_eye_tx / 100.0f * EYE_MAX_OFFSET; + float ty = g_eye_ty / 100.0f * EYE_MAX_OFFSET; +#if EYE_INVERT_X + tx = -tx; +#endif +#if EYE_INVERT_Y + ty = -ty; +#endif + + // Inertia: ease the pupil toward the target. + pupil_x += (tx - pupil_x) * EYE_INERTIA; + pupil_y += (ty - pupil_y) * EYE_INERTIA; + + // Blink scheduling (semi-random interval). + if (blinking) { + if (timer_elapsed32(blink_timer) > EYE_BLINK_DURATION_MS) { + blinking = false; + blink_timer = timer_read32(); + blink_len = EYE_BLINK_MIN_MS + (rand() % (EYE_BLINK_MAX_MS - EYE_BLINK_MIN_MS + 1)); + } + } else if (timer_elapsed32(blink_timer) > blink_len) { + blinking = true; + blink_timer = timer_read32(); + } + + eye_draw((int16_t)(pupil_x + (pupil_x >= 0 ? 0.5f : -0.5f)), + (int16_t)(pupil_y + (pupil_y >= 0 ? 0.5f : -0.5f)), + blinking); +} + +/* ------------------------------- Render ---------------------------------- */ + +void render_slave_oled(void) { + static uint32_t frame_timer = 0; + static uint32_t temp_timer = 0; + static int temp_c = 0; + + oled_on(); // ever-present: never sleep the eye + + if (timer_elapsed32(frame_timer) < EYE_FRAME_MS) { + return; + } + frame_timer = timer_read32(); + + eye_update_and_draw(); + + char buf[8]; + + // Section divider. + oled_set_cursor(0, ROW_DIV1); + oled_write_P(PSTR("-----"), false); + + // WPM. + oled_set_cursor(0, ROW_WPM_LABEL); + oled_write_P(PSTR("WPM"), false); + snprintf(buf, sizeof(buf), "%03d", get_current_wpm()); + oled_set_cursor(0, ROW_WPM_VALUE); + oled_write(buf, false); + + // Section divider. + oled_set_cursor(0, ROW_DIV2); + oled_write_P(PSTR("-----"), false); + + // RP2040 (stacked: "RP2040" does not fit in 5 chars per line). + oled_set_cursor(0, ROW_RP1); + oled_write_P(PSTR("RP"), false); + oled_set_cursor(0, ROW_RP2); + oled_write_P(PSTR("2040"), false); + + // Temperature (refreshed ~1 Hz). + if (timer_elapsed32(temp_timer) > 1000 || temp_timer == 0) { + temp_c = read_temp_c(); + temp_timer = timer_read32(); + } + char tmp[8]; + snprintf(tmp, sizeof(tmp), "%dC", temp_c); + snprintf(buf, sizeof(buf), "%-5s", tmp); // left-justify, pad to clear stale chars + oled_set_cursor(0, ROW_TEMP); + oled_write(buf, false); +} + +oled_rotation_t rotate_slave(oled_rotation_t rotation) { return OLED_SLAVE_ROTATION; } diff --git a/keyboards/kbdksp/iteung/process_record.c b/keyboards/kbdksp/iteung/process_record.c new file mode 100644 index 00000000000..39ecda05f62 --- /dev/null +++ b/keyboards/kbdksp/iteung/process_record.c @@ -0,0 +1,63 @@ +// Copyright 2022 Jose Pablo Ramirez (@jpe230) +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "jpe230.h" +#ifdef OLED_ENABLE +bool process_record_user(uint16_t keycode, keyrecord_t *record) { + if (record->event.pressed) { + oled_timer_reset(); + set_keylog(keycode, record); + + switch (keycode) { + case QK_BOOT: + // rgb_matrix_set_color_all(30, 0, 0); + // rgb_matrix_driver.flush(); + oled_off(); + return true; + } + } + return true; +} + +void post_process_record_user(uint16_t keycode, keyrecord_t *record) { +switch (keycode) { + case KC_LSFT: + case KC_RSFT: + if (record->event.pressed) { + shift_pressed = true; + } else { + shift_pressed = false; + } + break; + case KC_LALT: + case KC_RALT: + if (record->event.pressed) { + alt_pressed = true; + } else { + alt_pressed = false; + } + break; + case KC_LCTL: + case KC_RCTL: + if (record->event.pressed) { + ctrl_pressed = true; + } else { + ctrl_pressed = false; + } + break; + case KC_LGUI: + case KC_RGUI: + if (record->event.pressed) { + gui_pressed = true; + } else { + gui_pressed = false; + } + break; + default: + gui_pressed = false; + ctrl_pressed = false; + alt_pressed = false; + shift_pressed = false; + } +} +#endif \ No newline at end of file diff --git a/keyboards/kbdksp/iteung/rules.mk b/keyboards/kbdksp/iteung/rules.mk new file mode 100644 index 00000000000..c6bdcba90f9 --- /dev/null +++ b/keyboards/kbdksp/iteung/rules.mk @@ -0,0 +1,18 @@ +# SPLIT_KEYBOARD = yes +SERIAL_DRIVER = vendor + +OLED_DRIVER = ssd1306 + +SRC += oled/oled_handler.c process_record.c + +DEBUG_MATRIX_SCAN_RATE_ENABLE = yes + +SRC += oled/rp2040/master/oled_master_handler.c \ + oled/rp2040/slave/oled_slave_handler.c +# POINTING_DEVICE_ENABLE = yes +# POINTING_DEVICE_DRIVER = analog_joystick +# ANALOG_DRIVER_REQUIRED = yes + +RGBLIGHT_ENABLE = yes +RGBLIGHT_DRIVER = ws2812 +WS2812_DRIVER = vendor diff --git a/keyboards/sendyyeah/euy40/config.h b/keyboards/sendyyeah/euy40/config.h new file mode 100644 index 00000000000..b2e684aa731 --- /dev/null +++ b/keyboards/sendyyeah/euy40/config.h @@ -0,0 +1,62 @@ + /* Copyright 2022 sendyyeah + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include "config_common.h" + +/* USB Device descriptor parameter */ +#define VENDOR_ID 0x5359 +#define PRODUCT_ID 0x4534 +#define DEVICE_VER 0x0001 +#define MANUFACTURER sendyyeah +#define PRODUCT Euy40 Combo + +/* key matrix size */ +#define MATRIX_ROWS 16 +#define MATRIX_COLS 6 + +/* Keyboard Matrix Assignments */ +#define MATRIX_ROW_PINS { F4, F5, F6, F7, B1, B3, B2, B6 } +#define MATRIX_COL_PINS { D1, D0, D4, C6, D7, E6 } +#define UNUSED_PINS + + +/* Set 0 if debouncing isn't needed */ +#define DEBOUNCE 5 + +/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */ +#define LOCKING_SUPPORT_ENABLE + +/* Locking resynchronize hack */ +#define LOCKING_RESYNC_ENABLE + + +/* COL2ROW, ROW2COL*/ +#define DIODE_DIRECTION COL2ROW + + +/* + * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN. + */ +#define SOFT_SERIAL_PIN D3 // or D1, D2, D3, E6 + +/* encoder support */ +#define ENCODERS_PAD_A { B4 } +#define ENCODERS_PAD_B { B5 } +#define ENCODERS_PAD_A_RIGHT { B4 } +#define ENCODERS_PAD_B_RIGHT { B5 } +#define ENCODER_RESOLUTION 2 diff --git a/keyboards/sendyyeah/euy40/euy40.c b/keyboards/sendyyeah/euy40/euy40.c new file mode 100644 index 00000000000..8f9fd8627b2 --- /dev/null +++ b/keyboards/sendyyeah/euy40/euy40.c @@ -0,0 +1,17 @@ + /* Copyright 2022 sendyyeah + * + * 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 "euy40.h" diff --git a/keyboards/sendyyeah/euy40/euy40.h b/keyboards/sendyyeah/euy40/euy40.h new file mode 100644 index 00000000000..9341da02ad1 --- /dev/null +++ b/keyboards/sendyyeah/euy40/euy40.h @@ -0,0 +1,78 @@ +/* Copyright 2022 sendyyeah + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +#pragma once + +#include "quantum.h" + +/* This is a shortcut to help you visually see your layout. + * + * The first section contains all of the arguments representing the physical + * layout of the board and position of the keys. + * + * The second converts the arguments into a two-dimensional array which + * represents the switch matrix. + */ + +#define LAYOUT_ortho_macropad(\ + L00, L10, L01, L11, L02, L12, L03, L13, L04, L14, L05, L15, R00, R10, R01, R11, \ + L20, L30, L21, L31, L22, L32, L23, L33, L24, L34, L25, L35, R20, R30, R21, R31, \ + L40, L50, L41, L51, L42, L52, L43, L53, L44, L54, L45, L55, R40, R50, R41, R51, \ + L60, L70, L61, L71, L62, L72, L63, L73, L64, L74, L65, L75, R60, R70, R61, R71 \ +) \ +{ \ + { L00, L01, L02, L03, L04, L05 }, \ + { L10, L11, L12, L13, L14, L15 }, \ + { L20, L21, L22, L23, L24, L25 }, \ + { L30, L31, L32, L33, L34, L35 }, \ + { L40, L41, L42, L43, L44, L45 }, \ + { L50, L51, L52, L53, L54, L55 }, \ + { L60, L61, L62, L63, L64, L65 }, \ + { L70, L71, L72, L73, L74, L75 }, \ + { R00, R01, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { R10, R11, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { R20, R21, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { R30, R31, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { R40, R41, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { R50, R51, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { R60, R61, KC_NO, KC_NO, KC_NO, KC_NO }, \ + { R70, R71, KC_NO, KC_NO, KC_NO, KC_NO } \ +} + +#define LAYOUT_ortho_longboi(\ + L00, L10, L01, L11, L02, L12, L03, L13, L04, L14, L05, L15, R00, R10, R01, R11, R02, R12, R03, R13, R04, R14, R05, R15, \ + L20, L30, L21, L31, L22, L32, L23, L33, L24, L34, L25, L35, R20, R30, R21, R31, R22, R32, R23, R33, R24, R34, R25, R35, \ + L40, L50, L41, L51, L42, L52, L43, L53, L44, L54, L45, L55, R40, R50, R41, R51, R42, R52, R43, R53, R44, R54, R45, R55, \ + L60, L70, L61, L71, L62, L72, L63, L73, L64, L74, L65, L75, R60, R70, R61, R71, R62, R72, R63, R73, R64, R74, R65, R75 \ +) \ +{ \ + { L00, L01, L02, L03, L04, L05 }, \ + { L10, L11, L12, L13, L14, L15 }, \ + { L20, L21, L22, L23, L24, L25 }, \ + { L30, L31, L32, L33, L34, L35 }, \ + { L40, L41, L42, L43, L44, L45 }, \ + { L50, L51, L52, L53, L54, L55 }, \ + { L60, L61, L62, L63, L64, L65 }, \ + { L70, L71, L72, L73, L74, L75 }, \ + { R00, R01, R02, R03, R04, R05 }, \ + { R10, R11, R12, R13, R14, R15 }, \ + { R20, R21, R22, R23, R24, R25 }, \ + { R30, R31, R32, R33, R34, R35 }, \ + { R40, R41, R42, R43, R44, R45 }, \ + { R50, R51, R52, R53, R54, R55 }, \ + { R60, R61, R62, R63, R64, R65 }, \ + { R70, R71, R72, R73, R74, R75 }, \ +} diff --git a/keyboards/sendyyeah/euy40/info.json b/keyboards/sendyyeah/euy40/info.json new file mode 100644 index 00000000000..91625c27551 --- /dev/null +++ b/keyboards/sendyyeah/euy40/info.json @@ -0,0 +1,10 @@ +{ + "keyboard_name": "Euy40 Series", + "url": "", + "maintainer": "sendz", + "layouts": { + "LAYOUT_ortho_4x16": { + "layout": [{"label":"Tab", "x":0, "y":0}, {"label":"Q", "x":1, "y":0}, {"label":"W", "x":2, "y":0}, {"label":"E", "x":3, "y":0}, {"label":"R", "x":4, "y":0}, {"label":"T", "x":5, "y":0}, {"label":"Y", "x":6, "y":0}, {"label":"U", "x":7, "y":0}, {"label":"I", "x":8, "y":0}, {"label":"O", "x":9, "y":0}, {"label":"P", "x":10, "y":0}, {"label":"Back Space", "x":11, "y":0}, {"x":12.5, "y":0}, {"x":13.5, "y":0}, {"x":14.5, "y":0}, {"x":15.5, "y":0}, {"label":"Esc", "x":0, "y":1}, {"label":"A", "x":1, "y":1}, {"label":"S", "x":2, "y":1}, {"label":"D", "x":3, "y":1}, {"label":"F", "x":4, "y":1}, {"label":"G", "x":5, "y":1}, {"label":"H", "x":6, "y":1}, {"label":"J", "x":7, "y":1}, {"label":"K", "x":8, "y":1}, {"label":"L", "x":9, "y":1}, {"label":";", "x":10, "y":1}, {"label":"'", "x":11, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1}, {"x":14.5, "y":1}, {"x":15.5, "y":1}, {"label":"Shift", "x":0, "y":2}, {"label":"Z", "x":1, "y":2}, {"label":"X", "x":2, "y":2}, {"label":"C", "x":3, "y":2}, {"label":"V", "x":4, "y":2}, {"label":"B", "x":5, "y":2}, {"label":"N", "x":6, "y":2}, {"label":"M", "x":7, "y":2}, {"label":",", "x":8, "y":2}, {"label":".", "x":9, "y":2}, {"label":"/", "x":10, "y":2}, {"label":"Return", "x":11, "y":2}, {"x":12.5, "y":2}, {"x":13.5, "y":2}, {"x":14.5, "y":2}, {"x":15.5, "y":2}, {"x":0, "y":3}, {"label":"Ctrl", "x":1, "y":3}, {"label":"Alt", "x":2, "y":3}, {"label":"Super", "x":3, "y":3}, {"label":"⇓", "x":4, "y":3}, {"x":5, "y":3}, {"x":6, "y":3}, {"label":"⇑", "x":7, "y":3}, {"label":"←", "x":8, "y":3}, {"label":"↓", "x":9, "y":3}, {"label":"↑", "x":10, "y":3}, {"label":"→", "x":11, "y":3}, {"x":12.5, "y":3}, {"x":13.5, "y":3}, {"x":14.5, "y":3}, {"x":15.5, "y":3}] + } + } +} diff --git a/keyboards/sendyyeah/euy40/keymaps/combo_longboi/config.h b/keyboards/sendyyeah/euy40/keymaps/combo_longboi/config.h new file mode 100644 index 00000000000..9cdc6a77d43 --- /dev/null +++ b/keyboards/sendyyeah/euy40/keymaps/combo_longboi/config.h @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +#define VIAL_KEYBOARD_UID {0xBB, 0x25, 0x78, 0x78, 0xFD, 0x38, 0xB3, 0x6D} + +#define VIAL_ENCODER_DEFAULT { KC_VOLU, KC_VOLD, KC_PGUP, KC_PGDOWN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS } + +#define DYNAMIC_KEYMAP_LAYER_COUNT 3 diff --git a/keyboards/sendyyeah/euy40/keymaps/combo_longboi/keymap.c b/keyboards/sendyyeah/euy40/keymaps/combo_longboi/keymap.c new file mode 100644 index 00000000000..a59041f7e9a --- /dev/null +++ b/keyboards/sendyyeah/euy40/keymaps/combo_longboi/keymap.c @@ -0,0 +1,68 @@ +/* Copyright 2022 sendyyeah + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _QWERTY = 0, + _LOWER, + _RAISE, + _ADJUST +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QWERTY] = LAYOUT_ortho_longboi( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_LCTL, KC_LALT, KC_LALT, KC_LGUI, _RAISE, _RAISE, KC_SPC, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [_LOWER] = LAYOUT_ortho_longboi( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ + ), + + [_RAISE] = LAYOUT_ortho_longboi( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_NLCK + ) +}; + +#ifdef ENCODER_ENABLE + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (index == 0) { /* First encoder */ + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + } else if (index == 1) { /* Second encoder */ + if (clockwise) { + tap_code_delay(KC_PGDOWN, 10); + } else { + tap_code_delay(KC_PGUP, 10); + } + } + return false; +} + +#endif diff --git a/keyboards/sendyyeah/euy40/keymaps/combo_longboi/rules.mk b/keyboards/sendyyeah/euy40/keymaps/combo_longboi/rules.mk new file mode 100644 index 00000000000..24842c64247 --- /dev/null +++ b/keyboards/sendyyeah/euy40/keymaps/combo_longboi/rules.mk @@ -0,0 +1,4 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes +VIAL_ENCODERS_ENABLE = yes +VIAL_INSECURE = yes diff --git a/keyboards/sendyyeah/euy40/keymaps/combo_longboi/vial.json b/keyboards/sendyyeah/euy40/keymaps/combo_longboi/vial.json new file mode 100644 index 00000000000..47de4d39e2c --- /dev/null +++ b/keyboards/sendyyeah/euy40/keymaps/combo_longboi/vial.json @@ -0,0 +1,225 @@ +{ + "name": "Euy 40 Combo", + "vendorId": "0x5359", + "productId": "0x4534", + "lighting": "none", + "matrix": { + "rows": 16, + "cols": 12 + }, + "layouts": { + "keymap": [ + { + "name": "Euy Combo Longboi" + }, + [ + { + "x": 2.25, + "c": "#aaaaaa" + }, + "0,0", + { + "c": "#cccccc" + }, + "1,0", + "0,1", + "1,1", + "0,2", + "1,2", + "0,3", + "1,3", + "0,4", + "1,4", + "0,5", + { + "c": "#aaaaaa" + }, + "1,5", + { + "x": 3, + "c": "#cccccc" + }, + "8,0", + "9,0", + "8,1", + "9,1", + "8,2", + "9,2", + "8,3", + "9,3", + "8,4", + "9,4", + "8,5", + "9,5" + ], + [ + { + "x": 2.25, + "c": "#aaaaaa" + }, + "2,0", + { + "c": "#cccccc" + }, + "3,0", + "2,1", + "3,1", + "2,2", + "3,2", + "2,3", + "3,3", + "2,4", + "3,4", + "2,5", + "3,5", + { + "x": 3 + }, + "10,0", + "11,0", + "10,1", + "11,1", + "10,2", + "11,2", + "10,3", + "11,3", + "10,4", + "11,4", + "10,5", + "11,5" + ], + [ + "0,0\n\n\n\n\n\n\n\n\ne", + "0,1\n\n\n\n\n\n\n\n\ne", + { + "x": 0.25, + "c": "#aaaaaa" + }, + "4,0", + { + "c": "#cccccc" + }, + "5,0", + "4,1", + "5,1", + "4,2", + "5,2", + "4,3", + "5,3", + "4,4", + "5,4", + "4,5", + { + "c": "#aaaaaa" + }, + "5,5", + { + "x": 0.75, + "c": "#cccccc" + }, + "1,0\n\n\n\n\n\n\n\n\ne", + "1,1\n\n\n\n\n\n\n\n\ne", + { + "x": 0.25 + }, + "12,0", + "13,0", + "12,1", + "13,1", + "12,2", + "13,2", + "12,3", + "13,3", + "12,4", + "13,4", + "12,5", + "13,5" + ], + [ + { + "x": 2.25, + "c": "#aaaaaa" + }, + "6,0", + "7,0", + "6,1", + "7,1", + "6,2\n\n\n0,0", + { + "c": "#cccccc" + }, + "7,2\n\n\n0,0", + "6,3\n\n\n0,0", + { + "c": "#aaaaaa" + }, + "7,3\n\n\n0,0", + "6,4", + "7,4", + "6,5", + "7,5", + { + "x": 3, + "c": "#cccccc" + }, + "14,0", + "15,0", + "14,1", + "15,1", + "14,2\n\n\n1,0", + "15,2\n\n\n1,0", + "14,3\n\n\n1,0", + "15,3\n\n\n1,0", + "14,4", + "15,4", + "14,5", + "15,5" + ], + [ + { + "y": 0.25, + "x": 6.25 + }, + "6,2\n\n\n0,1", + { + "w": 2 + }, + "7,2\n\n\n0,1", + "7,3\n\n\n0,1", + { + "x": 11 + }, + "14,2\n\n\n1,1", + { + "w": 2 + }, + "15,2\n\n\n1,1", + "15,3\n\n\n1,1" + ], + [ + { + "x": 6.25, + "w": 2 + }, + "6,2\n\n\n0,2", + { + "w": 2 + }, + "6,3\n\n\n0,2", + { + "x": 11, + "w": 2 + }, + "14,2\n\n\n1,2", + { + "w": 2 + }, + "14,3\n\n\n1,2" + ] + ], + "labels": [ + ["Left Bottom Row", "All 1u", "2u Center", "2u + 2u Center"], + ["Right Bottom Row", "All 1u", "2u Center", "2u + 2u Center"] + ] + } +} diff --git a/keyboards/sendyyeah/euy40/keymaps/combo_macropad/config.h b/keyboards/sendyyeah/euy40/keymaps/combo_macropad/config.h new file mode 100644 index 00000000000..94189fdfdc2 --- /dev/null +++ b/keyboards/sendyyeah/euy40/keymaps/combo_macropad/config.h @@ -0,0 +1,13 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#pragma once + +/* Split hand configration */ +#define SPLIT_HAND_MATRIX_GRID D4, F4 +#define SPLIT_HAND_MATRIX_GRID_LOW_IS_RIGHT + +#define VIAL_KEYBOARD_UID {0xBB, 0x25, 0x78, 0x78, 0xFD, 0x38, 0xB3, 0x6D} + +#define VIAL_ENCODER_DEFAULT { KC_VOLU, KC_VOLD, KC_PGUP, KC_PGDOWN, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS } + +#define DYNAMIC_KEYMAP_LAYER_COUNT 3 diff --git a/keyboards/sendyyeah/euy40/keymaps/combo_macropad/keymap.c b/keyboards/sendyyeah/euy40/keymaps/combo_macropad/keymap.c new file mode 100644 index 00000000000..bd6db2b642f --- /dev/null +++ b/keyboards/sendyyeah/euy40/keymaps/combo_macropad/keymap.c @@ -0,0 +1,68 @@ +/* Copyright 2022 sendyyeah + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _QWERTY = 0, + _LOWER, + _RAISE, + _ADJUST +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QWERTY] = LAYOUT_ortho_macropad( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_P7, KC_P8, KC_P9, KC_PMNS, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , KC_P1, KC_P2, KC_P3, KC_PENT, + KC_LCTL, KC_LALT, KC_LALT, KC_LGUI, _RAISE, _RAISE, KC_SPC, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_P0, KC_PDOT, KC_PSLS, KC_PAST + ), + + [_LOWER] = LAYOUT_ortho_macropad( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, _______, _______, _______, _______, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, _______, _______, _______, _______, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, _______, _______, KC_NLCK + ), + + [_RAISE] = LAYOUT_ortho_macropad( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, _______, _______, _______, _______, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______, _______, _______, _______, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, _______, _______, KC_NLCK + ) +}; + +#ifdef ENCODER_ENABLE + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (index == 0) { /* First encoder */ + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + } else if (index == 1) { /* Second encoder */ + if (clockwise) { + tap_code_delay(KC_PGDOWN, 10); + } else { + tap_code_delay(KC_PGUP, 10); + } + } + return false; +} + +#endif diff --git a/keyboards/sendyyeah/euy40/keymaps/combo_macropad/rules.mk b/keyboards/sendyyeah/euy40/keymaps/combo_macropad/rules.mk new file mode 100644 index 00000000000..24842c64247 --- /dev/null +++ b/keyboards/sendyyeah/euy40/keymaps/combo_macropad/rules.mk @@ -0,0 +1,4 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes +VIAL_ENCODERS_ENABLE = yes +VIAL_INSECURE = yes diff --git a/keyboards/sendyyeah/euy40/keymaps/combo_macropad/vial.json b/keyboards/sendyyeah/euy40/keymaps/combo_macropad/vial.json new file mode 100644 index 00000000000..d688c2cc985 --- /dev/null +++ b/keyboards/sendyyeah/euy40/keymaps/combo_macropad/vial.json @@ -0,0 +1,174 @@ +{ + "name": "Euy 40 Combo", + "vendorId": "0x5359", + "productId": "0x4534", + "lighting": "none", + "matrix": { + "rows": 16, + "cols": 6 + }, + "layouts": { + "keymap": [ + { + "name": "Euy Combo" + }, + [ + { + "x": 2.25, + "c": "#aaaaaa" + }, + "0,0", + { + "c": "#cccccc" + }, + "1,0", + "0,1", + "1,1", + "0,2", + "1,2", + "0,3", + "1,3", + "0,4", + "1,4", + "0,5", + { + "c": "#aaaaaa" + }, + "1,5", + { + "x": 0.5, + "c": "#cccccc" + }, + "8,0", + "9,0", + "8,1", + "9,1" + ], + [ + { + "x": 2.25, + "c": "#aaaaaa" + }, + "2,0", + { + "c": "#cccccc" + }, + "3,0", + "2,1", + "3,1", + "2,2", + "3,2", + "2,3", + "3,3", + "2,4", + "3,4", + "2,5", + "3,5", + { + "x": 0.5 + }, + "10,0", + "11,0", + "10,1", + "11,1" + ], + [ + "0,0\n\n\n\n\n\n\n\n\ne", + "0,1\n\n\n\n\n\n\n\n\ne", + { + "x": 0.25, + "c": "#aaaaaa" + }, + "4,0", + { + "c": "#cccccc" + }, + "5,0", + "4,1", + "5,1", + "4,2", + "5,2", + "4,3", + "5,3", + "4,4", + "5,4", + "4,5", + { + "c": "#aaaaaa" + }, + "5,5", + { + "x": 0.5, + "c": "#cccccc" + }, + "12,0", + "13,0", + "12,1", + "13,1", + { + "x": 0.25 + }, + "1,0\n\n\n\n\n\n\n\n\ne", + "1,1\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "x": 2.25, + "c": "#aaaaaa" + }, + "6,0", + "7,0", + "6,1", + "7,1", + "6,2\n\n\n0,0", + { + "c": "#cccccc" + }, + "7,2\n\n\n0,0", + "6,3\n\n\n0,0", + { + "c": "#aaaaaa" + }, + "7,3\n\n\n0,0", + "6,4", + "7,4", + "6,5", + "7,5", + { + "x": 0.5, + "c": "#cccccc" + }, + "14,0", + "15,0", + "14,1", + "15,1" + ], + [ + { + "y": 0.25, + "x": 6.25 + }, + "6,2\n\n\n0,1", + { + "w": 2 + }, + "7,2\n\n\n0,1", + "7,3\n\n\n0,1" + ], + [ + { + "x": 6.25, + "w": 2 + }, + "6,2\n\n\n0,2", + { + "w": 2 + }, + "6,3\n\n\n0,2" + ] + ], + "labels": [ + ["Bottom Row", "All 1u", "2u Center", "2u + 2u Center"] + ] + } +} diff --git a/keyboards/sendyyeah/euy40/keymaps/default/keymap.c b/keyboards/sendyyeah/euy40/keymaps/default/keymap.c new file mode 100644 index 00000000000..5f1d1f4bb61 --- /dev/null +++ b/keyboards/sendyyeah/euy40/keymaps/default/keymap.c @@ -0,0 +1,76 @@ +/* Copyright 2022 sendyyeah + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include QMK_KEYBOARD_H + +// Defines names for use in layer keycodes and the keymap +enum layer_names { + _QWERTY = 0, + _LOWER, + _RAISE, + _ADJUST +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + [_QWERTY] = LAYOUT_ortho_macropad( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, KC_P7, KC_P8, KC_P9, KC_PMNS, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_P4, KC_P5, KC_P6, KC_PPLS, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT , KC_P1, KC_P2, KC_P3, KC_PENT, + KC_LCTL, KC_LALT, KC_LALT, KC_LGUI, _RAISE, _RAISE, KC_SPC, KC_SPC, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_P0, KC_PDOT, KC_PSLS, KC_PAST + ), + + [_LOWER] = LAYOUT_ortho_macropad( + KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, _______, _______, _______, _______, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, _______, _______, _______, _______, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, _______, _______, KC_NLCK + ), + + [_RAISE] = LAYOUT_ortho_macropad( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, _______, _______, _______, _______, + KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, _______, _______, _______, _______, + _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY, _______, _______, _______, KC_NLCK + ), + + + [_ADJUST] = LAYOUT_ortho_macropad( + _______, RESET, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL , _______, _______, _______, _______, + _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, _______, _______, _______, _______, _______, _______, _______, _______, _______, + _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______, _______, _______, _______, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_NLCK + ) +}; + +#ifdef ENCODER_ENABLE + +bool encoder_update_user(uint8_t index, bool clockwise) { + if (index == 0) { /* First encoder */ + if (clockwise) { + tap_code_delay(KC_VOLU, 10); + } else { + tap_code_delay(KC_VOLD, 10); + } + } else if (index == 1) { /* Second encoder */ + if (clockwise) { + tap_code_delay(KC_PGDOWN, 10); + } else { + tap_code_delay(KC_PGUP, 10); + } + } + return false; +} + +#endif diff --git a/keyboards/sendyyeah/euy40/rules.mk b/keyboards/sendyyeah/euy40/rules.mk new file mode 100644 index 00000000000..717cb5b9fd2 --- /dev/null +++ b/keyboards/sendyyeah/euy40/rules.mk @@ -0,0 +1,10 @@ +# MCU name +MCU = atmega32u4 + +# Bootloader selection +BOOTLOADER = caterina + +EXTRAKEY_ENABLE = yes # Audio control and System control +SPLIT_KEYBOARD = yes +LTO_ENABLE = yes +ENCODER_ENABLE = yes diff --git a/keyboards/sofle/keymaps/vial/config.h b/keyboards/sofle/keymaps/vial/config.h new file mode 100644 index 00000000000..0cc40f6a5ad --- /dev/null +++ b/keyboards/sofle/keymaps/vial/config.h @@ -0,0 +1,52 @@ +/* Copyright 2020 Josef Adamcik + * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang + * + * 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 + +/* By default left side is selected as master, +see https://docs.qmk.fm/#/feature_split_keyboard?id=setting-handedness +for more options. */ + +#if defined(KEYBOARD_sofle_rev1) +// Add RGB underglow and top facing lighting +# define WS2812_DI_PIN D3 +# define RGBLED_NUM 70 +# define RGBLED_SPLIT \ + { 36, 36 } +# ifdef RGB_MATRIX_ENABLE +# define RGB_MATRIX_LED_COUNT RGBLED_NUM +# define RGB_MATRIX_SPLIT RGBLED_SPLIT +# define SPLIT_TRANSPORT_MIRROR +# else +# define RGBLIGHT_EFFECT_BREATHING +# define RGBLIGHT_EFFECT_RAINBOW_MOOD +# define RGBLIGHT_EFFECT_RAINBOW_SWIRL +# define RGBLIGHT_EFFECT_SNAKE +# define RGBLIGHT_EFFECT_KNIGHT +# define RGBLIGHT_EFFECT_CHRISTMAS +# define RGBLIGHT_EFFECT_STATIC_GRADIENT +# define RGBLIGHT_EFFECT_RGB_TEST +# define RGBLIGHT_EFFECT_ALTERNATING +# define RGBLIGHT_EFFECT_TWINKLE +# define RGBLIGHT_LIMIT_VAL 120 +# define RGBLIGHT_HUE_STEP 10 +# define RGBLIGHT_SAT_STEP 17 +# define RGBLIGHT_VAL_STEP 17 +# endif +#endif + +#define VIAL_KEYBOARD_UID {0x25, 0xCF, 0x7A, 0xB8, 0xFD, 0xE3, 0xAA, 0x69} diff --git a/keyboards/sofle/keymaps/vial/keymap.c b/keyboards/sofle/keymaps/vial/keymap.c new file mode 100644 index 00000000000..21717a7a6c2 --- /dev/null +++ b/keyboards/sofle/keymaps/vial/keymap.c @@ -0,0 +1,119 @@ + /* Copyright 2020 Josef Adamcik + * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang + * + * 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 "oled.c" + +#ifdef ENCODER_MAP_ENABLE +const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { + [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_PGDN, KC_PGUP) }, + [1] = { ENCODER_CCW_CW(_______, _______), ENCODER_CCW_CW(_______, _______) }, + [2] = { ENCODER_CCW_CW(RGB_HUD, RGB_HUI), ENCODER_CCW_CW(RGB_SAD, RGB_SAI) }, + [3] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI), ENCODER_CCW_CW(RGB_RMOD, RGB_MOD)} +}; +#endif + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { +/* + * QWERTY + * ,-----------------------------------------. ,-----------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ESC | Q | W | E | R | T | | Y | U | I | O | P | Bspc | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | A | S | D | F | G |-------. ,-------| H | J | K | L | ; | ' | + * |------+------+------+------+------+------| | | |------+------+------+------+------+------| + * |LShift| Z | X | C | V | B |-------| |-------| N | M | , | . | / |RShift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ + +[0] = LAYOUT( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, XXXXXXX,KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LGUI,KC_LALT,KC_LCTL, MO(2), KC_ENT, KC_SPC, MO(3), KC_RCTL, KC_RALT, KC_RGUI +), +/* + * COLEMAK + * ,-----------------------------------------. ,-----------------------------------------. + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | ` | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ESC | Q | W | F | P | G | | J | L | U | Y | ; | Bspc | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | TAB | A | R | S | T | D |-------. ,-------| H | N | E | I | O | ' | + * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------| + * |LShift| Z | X | C | V | B |-------| |-------| K | M | , | . | / |RShift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `-----------------------------------' '------''---------------------------' + */ + +[1] = LAYOUT( + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_GRV, + KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, + KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT, + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, XXXXXXX,KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, + KC_LGUI,KC_LALT,KC_LCTL,KC_TRNS, KC_ENT, KC_SPC, KC_TRNS, KC_RCTL, KC_RALT, KC_RGUI +), +/* LOWER + * ,-----------------------------------------. ,-----------------------------------------. + * | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | ! | @ | # | $ | % |-------. ,-------| ^ | & | * | ( | ) | | | + * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------| + * | Shift| = | - | + | { | } |-------| |-------| [ | ] | ; | : | \ | Shift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ +[2] = LAYOUT( + _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, + KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_F12, + _______, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE, + _______, KC_EQL, KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, _______, _______, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +), +/* RAISE + * ,----------------------------------------. ,-----------------------------------------. + * | | | | | | | | | | | | | | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Esc | Ins | Pscr | Menu | | | | | PWrd | Up | NWrd | DLine| Bspc | + * |------+------+------+------+------+------| |------+------+------+------+------+------| + * | Tab | LAt | LCtl |LShift| | Caps |-------. ,-------| | Left | Down | Rigth| Del | Bspc | + * |------+------+------+------+------+------| MUTE | | |------+------+------+------+------+------| + * |Shift | Undo | Cut | Copy | Paste| |--------| |-------| | LStr | | LEnd | | Shift| + * `-----------------------------------------/ / \ \-----------------------------------------' + * | LGUI | LAlt | LCTR |LOWER | /Enter / \Space \ |RAISE | RCTR | RAlt | RGUI | + * | | | | |/ / \ \ | | | | | + * `----------------------------------' '------''---------------------------' + */ +[3] = LAYOUT( + _______, _______ , _______ , _______ , _______ , _______, _______, _______ , _______, _______ , _______ ,_______, + _______, KC_INS, KC_PSCR, KC_APP, XXXXXXX, XXXXXXX, KC_PGUP, _______, KC_UP, _______,_______, KC_BSPC, + _______, KC_LALT, KC_LCTL, KC_LSFT, XXXXXXX, KC_CAPS, KC_PGDN, KC_LEFT, KC_DOWN, KC_RGHT, KC_DEL, KC_BSPC, + _______,KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, XXXXXXX, _______, _______, XXXXXXX, _______, XXXXXXX, _______, XXXXXXX, _______, + _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ +) +}; diff --git a/keyboards/sofle/keymaps/vial/oled.c b/keyboards/sofle/keymaps/vial/oled.c new file mode 100644 index 00000000000..74f06cedc54 --- /dev/null +++ b/keyboards/sofle/keymaps/vial/oled.c @@ -0,0 +1,85 @@ + /* Copyright 2020 Josef Adamcik + * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang + * + * 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 . + */ + +//Sets up what the OLED screens display. + +#ifdef OLED_ENABLE + +static void render_logo(void) { + static const char PROGMEM qmk_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,0 + }; + + oled_write_P(qmk_logo, false); +} + +static void print_status_narrow(void) { + // Print current mode + oled_write_P(PSTR("\n\n"), false); + + switch (get_highest_layer(layer_state)) { + case 0: + oled_write_ln_P(PSTR("Qwrt"), false); + break; + case 1: + oled_write_ln_P(PSTR("Clmk"), false); + break; + default: + oled_write_P(PSTR("Mod\n"), false); + break; + } + oled_write_P(PSTR("\n\n"), false); + // Print current layer + oled_write_ln_P(PSTR("LAYER"), false); + switch (get_highest_layer(layer_state)) { + case 0: + case 1: + oled_write_P(PSTR("Base\n"), false); + break; + case 2: + oled_write_P(PSTR("Raise"), false); + break; + case 3: + oled_write_P(PSTR("Lower"), false); + break; + default: + oled_write_ln_P(PSTR("Undef"), false); + } + oled_write_P(PSTR("\n\n"), false); + led_t led_usb_state = host_keyboard_led_state(); + oled_write_ln_P(PSTR("CPSLK"), led_usb_state.caps_lock); +} + +oled_rotation_t oled_init_user(oled_rotation_t rotation) { + if (is_keyboard_master()) { + return OLED_ROTATION_270; + } + return rotation; +} + +bool oled_task_user(void) { + if (is_keyboard_master()) { + print_status_narrow(); + } else { + render_logo(); + } + return false; +} + +#endif diff --git a/keyboards/sofle/keymaps/vial/readme.md b/keyboards/sofle/keymaps/vial/readme.md new file mode 100644 index 00000000000..8470c69bcfb --- /dev/null +++ b/keyboards/sofle/keymaps/vial/readme.md @@ -0,0 +1,14 @@ +# VIA keymap for Sofle + +Layout in [Keyboard Layout Editor](http://www.keyboard-layout-editor.com/#/gists/76efb423a46cbbea75465cb468eef7ff) and [adjust layer](http://www.keyboard-layout-editor.com/#/gists/4bcf66f922cfd54da20ba04905d56bd4) + + +Features: + +- Symmetric modifiers (CMD/Super, Alt/Opt, Ctrl, Shift) +- Modes for Qwerty and Colemak support +- The OLED on master half shows selected mode and caps lock state and is rotated. +- Left encoder controls volume up/down/mute. Right encoder PGUP/PGDOWN. +- Via support +- RGB underglow support + diff --git a/keyboards/sofle/keymaps/vial/rules.mk b/keyboards/sofle/keymaps/vial/rules.mk new file mode 100644 index 00000000000..5ad6ac7bb74 --- /dev/null +++ b/keyboards/sofle/keymaps/vial/rules.mk @@ -0,0 +1,10 @@ +OLED_ENABLE = yes +OLED_DRIVER = SSD1306 +ENCODER_ENABLE = yes +CONSOLE_ENABLE = no +EXTRAKEY_ENABLE = yes +VIA_ENABLE = yes +VIAL_ENABLE = yes +LTO_ENABLE = yes +RGBLIGHT_ENABLE = yes +ENCODER_MAP_ENABLE = yes \ No newline at end of file diff --git a/keyboards/sofle/keymaps/vial/vial.json b/keyboards/sofle/keymaps/vial/vial.json new file mode 100644 index 00000000000..7f164b8beb4 --- /dev/null +++ b/keyboards/sofle/keymaps/vial/vial.json @@ -0,0 +1,437 @@ +{ + "name": "Sofle", + "vendorId": "0xFC32", + "productId": "0x0287", + "keycodes": ["qmk_lighting"], + "menus": ["qmk_rgblight"], + "matrix": {"rows": 10, "cols": 6}, + "layouts": { + "keymap": [ + [ + { + "y": 0.2, + "x": 3, + "p": "CHICKLET", + "f": 8, + "fa": [ + 1 + ] + }, + "0,3", + { + "x": 7 + }, + "5,3" + ], + [ + { + "y": -0.95, + "x": 10 + }, + "5,4" + ], + [ + { + "y": -0.9, + "x": 2 + }, + "0,2", + { + "x": 1 + }, + "0,4", + { + "x": 7 + }, + "5,2" + ], + [ + { + "y": -0.85, + "c": "#aaaaaa", + "f": 9, + "fa": [ + 1 + ] + }, + "0,0", + { + "c": "#cccccc", + "f": 8, + "fa": [ + 1 + ] + }, + "0,1", + { + "x": 3 + }, + "0,5", + { + "x": 3 + }, + "5,5", + { + "x": 3 + }, + "5,1", + { + "c": "#aaaaaa", + "f": 6, + "fa": [ + 1 + ] + }, + "5,0" + ], + [ + { + "y": -0.30000000000000004, + "x": 3, + "c": "#cccccc", + "f": 8, + "fa": [ + 1 + ] + }, + "1,3", + { + "x": 7 + }, + "6,3" + ], + [ + { + "y": -0.9500000000000002, + "x": 6.25, + "f": 3 + }, + "0,0\n\n\n\n\n\n\n\n\ne", + { + "x": 0.5 + }, + "1,0\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "y": -0.9999999999999998, + "x": 10, + "f": 8, + "fa": [ + 1 + ] + }, + "6,4" + ], + [ + { + "y": -0.8999999999999999, + "x": 2 + }, + "1,2", + { + "x": 1 + }, + "1,4", + { + "x": 7 + }, + "6,2" + ], + [ + { + "y": -0.8500000000000001, + "c": "#aaaaaa" + }, + "1,0", + { + "c": "#cccccc" + }, + "1,1", + { + "x": 3 + }, + "1,5", + { + "x": 3 + }, + "6,5", + { + "x": 3 + }, + "6,1", + { + "c": "#aaaaaa", + "f": 6, + "fa": [ + 1 + ] + }, + "6,0" + ], + [ + { + "y": -0.2999999999999998, + "x": 3, + "c": "#cccccc", + "f": 8, + "fa": [ + 1 + ] + }, + "2,3", + { + "x": 7 + }, + "7,3" + ], + [ + { + "y": -0.9500000000000002, + "x": 6.25, + "f": 3 + }, + "0,1\n\n\n\n\n\n\n\n\ne", + { + "x": 0.5 + }, + "1,1\n\n\n\n\n\n\n\n\ne" + ], + [ + { + "y": -0.8999999999999999, + "x": 2, + "f": 8, + "fa": [ + 1 + ] + }, + "2,2", + { + "x": 1, + "n": true + }, + "2,4", + { + "x": 5, + "n": true + }, + "7,4", + { + "x": 1 + }, + "7,2" + ], + [ + { + "y": -0.8500000000000001, + "c": "#aaaaaa", + "f": 6, + "fa": [ + 1 + ] + }, + "2,0", + { + "c": "#cccccc", + "f": 8, + "fa": [ + 1 + ] + }, + "2,1", + { + "x": 3 + }, + "2,5", + { + "x": 3 + }, + "7,5", + { + "x": 3 + }, + "7,1", + { + "c": "#aaaaaa", + "f": 6, + "fa": [ + 1 + ] + }, + "7,0" + ], + [ + { + "y": -0.2999999999999998, + "x": 3, + "c": "#cccccc", + "f": 8, + "fa": [ + 1 + ] + }, + "3,3", + { + "x": 7 + }, + "8,3" + ], + [ + { + "y": -0.9500000000000002, + "x": 6.25 + }, + "4,5", + { + "x": 0.5 + }, + "9,5" + ], + [ + { + "y": -0.8999999999999999, + "x": 2 + }, + "3,2", + { + "x": 1 + }, + "3,4", + { + "x": 5 + }, + "8,4", + { + "x": 1 + }, + "8,2" + ], + [ + { + "y": -0.8500000000000001, + "c": "#aaaaaa", + "f": 5, + "fa": [ + 1 + ] + }, + "3,0", + { + "c": "#cccccc", + "f": 8, + "fa": [ + 1 + ] + }, + "3,1", + { + "x": 3 + }, + "3,5", + { + "x": 3 + }, + "8,5", + { + "x": 3 + }, + "8,1", + { + "c": "#aaaaaa", + "f": 5, + "fa": [ + 1 + ] + }, + "8,0" + ], + [ + { + "y": -0.15000000000000036, + "x": 2.75, + "f": 9, + "fa": [ + 1 + ] + }, + "4,1", + "4,2", + { + "x": 5.5 + }, + "9,2" + ], + [ + { + "y": -0.8499999999999996, + "x": 1.75 + }, + "4,0" + ], + [ + { + "rx": 0.25, + "y": 4.35, + "x": 11 + }, + "9,1" + ], + [ + { + "rx": 0.5, + "y": 4.5, + "x": 11.75 + }, + "9,0" + ], + [ + { + "r": 15, + "rx": 5, + "ry": 4.5, + "c": "#777777" + }, + "4,3" + ], + [ + { + "r": 30, + "rx": 6.25, + "y": -0.25, + "x": 0.09999999999999964, + "c": "#aaaaaa", + "h": 1.5 + }, + "4,4" + ], + [ + { + "r": -30, + "rx": 8.75, + "y": -0.25, + "x": -1.0999999999999996, + "f": 8, + "fa": [ + 1 + ], + "h": 1.5 + }, + "9,4" + ], + [ + { + "r": -15, + "rx": 10, + "x": -1, + "c": "#777777", + "f": 9, + "fa": [ + 1 + ] + }, + "9,3" + ] + ] + } + } \ No newline at end of file diff --git a/keyboards/tanuki/keymaps/vial/config.h b/keyboards/tanuki/keymaps/vial/config.h new file mode 100644 index 00000000000..e9ba90d343e --- /dev/null +++ b/keyboards/tanuki/keymaps/vial/config.h @@ -0,0 +1,3 @@ +#pragma once + +#define VIAL_KEYBOARD_UID {0xF5, 0xFA, 0x6D, 0xFC, 0x81, 0x4A, 0xE9, 0x7E} \ No newline at end of file diff --git a/keyboards/tanuki/keymaps/vial/keymap.c b/keyboards/tanuki/keymaps/vial/keymap.c new file mode 100644 index 00000000000..e4987ef8cb2 --- /dev/null +++ b/keyboards/tanuki/keymaps/vial/keymap.c @@ -0,0 +1,120 @@ +#include QMK_KEYBOARD_H + +// custom type to store stuff in EEPROM +typedef union { + uint32_t raw; + struct { + bool layer_rgb :1; + }; +} user_config_t; + +user_config_t user_config; + +// Layer definitions +#define _BL 0 +#define _DL 1 +#define _UL 2 +#define _GL 3 +#define _BK 4 + +// Custom keycode to toggle normal RGB or per-layer RGB +enum custom_keycodes { + CUSTRGB = SAFE_RANGE, +}; + +const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { + +[_BL] = LAYOUT( + KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, + KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, TG(_GL), + KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_QUOT, KC_SLSH, KC_ENT, + KC_LCTL, KC_LALT, KC_COMMA, LT(_DL,KC_SPC), LT(_UL,KC_SPC), KC_DOT, KC_LGUI), + +[_DL] = LAYOUT( + KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, + KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, + KC_TRNS, KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS), + +[_UL] = LAYOUT( + KC_GRV, KC_LBRC, KC_RBRC, KC_LCBR, KC_RCBR, KC_PIPE, KC_BSLS, KC_PLUS, KC_UNDS, KC_MINS, KC_EQL, KC_DEL, + KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS, + KC_TRNS, CUSTRGB, RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SAD, RGB_VAD, KC_TRNS, KC_TRNS, + KC_TRNS, RGB_MOD, RGB_HUI, KC_TRNS, KC_TRNS, RGB_SAI, RGB_VAI), + +[_GL] = LAYOUT( + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, + KC_TRNS, KC_TRNS, KC_TRNS, KC_SPC, KC_SPC, KC_TRNS, KC_TRNS) + +}; + +void keyboard_post_init_user(void) { + user_config.raw = eeconfig_read_user(); + if(user_config.layer_rgb) { + rgblight_enable_noeeprom(); + rgblight_mode_noeeprom(1); + rgblight_sethsv_noeeprom(0,10,255); + } +} + +layer_state_t layer_state_set_user(layer_state_t state) { + // This code switches underglow color by active layer, if the user has enabled the feature + if(user_config.layer_rgb) { + switch (get_highest_layer(state)) { + case _BL: + rgblight_sethsv_noeeprom(0,10,255); + rgblight_mode_noeeprom(1); + break; + case _DL: + rgblight_sethsv_noeeprom(130,200,255); + rgblight_mode_noeeprom(1); + break; + case _UL: + rgblight_sethsv_noeeprom(170,200,255); + rgblight_mode_noeeprom(1); + break; + case _GL: + rgblight_sethsv_noeeprom(0,180,255); + rgblight_mode_noeeprom(1); + break; + } + } + return state; +} + +bool process_record_user (uint16_t keycode, keyrecord_t *record) { + switch (keycode) { + case CUSTRGB: // if the user toggled per-layer RGB, update the config and refresh the RGB color + if(record->event.pressed) { + user_config.layer_rgb ^= 1; + eeconfig_update_user(user_config.raw); + if (user_config.layer_rgb) { + layer_state_set(layer_state); + } + } + return false; + break; + case RGB_MOD: + case RGB_SAD: + case RGB_SAI: + case RGB_HUI: + case RGB_VAD: + case RGB_VAI: + if(user_config.layer_rgb && record->event.pressed) { + return false; // if layer RGB is on, ignore attempts to change RGB settings + } + break; + } + return true; +} + +void eeconfig_init_user(void) { // in case EEPROM is reset, set up our custom config + user_config.raw = 0; + user_config.layer_rgb = true; // enable per-layer RGB by default + eeconfig_update_user(user_config.raw); + rgblight_enable(); + rgblight_sethsv(0,10,255); + rgblight_mode(1); +} diff --git a/keyboards/tanuki/keymaps/vial/rules.mk b/keyboards/tanuki/keymaps/vial/rules.mk new file mode 100644 index 00000000000..e8a66cb4bbe --- /dev/null +++ b/keyboards/tanuki/keymaps/vial/rules.mk @@ -0,0 +1,5 @@ +VIA_ENABLE = yes +VIAL_ENABLE = yes +LTO_ENABLE = yes +VIAL_INSECURE = yes +QMK_SETTINGS = no \ No newline at end of file diff --git a/keyboards/tanuki/keymaps/vial/vial.json b/keyboards/tanuki/keymaps/vial/vial.json new file mode 100644 index 00000000000..0d6561348de --- /dev/null +++ b/keyboards/tanuki/keymaps/vial/vial.json @@ -0,0 +1,18 @@ +{ + "name": "Tanuki", + "vendorId": "0xFEED", + "productId": "0x6464", + "lighting": "qmk_rgblight", + "matrix": { + "rows": 4, + "cols": 11 + }, + "layouts": { + "keymap": [ + [{"c":"#777777"},"3,1",{"c":"#cccccc"},"0,0","0,1","0,2","0,3","0,4","0,5","0,6","0,7","0,8","0,9",{"c":"#aaaaaa","w":1.25},"0,10"], + [{"w":1.25},"3,0",{"c":"#cccccc"},"1,0","1,1","1,2","1,3","1,4","1,5","1,6","1,7","1,8","1,9","1,10"], + [{"x":0.25,"c":"#aaaaaa","w":1.5},"2,0",{"c":"#cccccc"},"2,1","2,2","2,3","2,4","2,5","2,6","2,7","2,8","2,9",{"c":"#777777","w":1.25},"2,10"], + [{"x":1.25,"c":"#aaaaaa","w":1.25},"3,2","3,3",{"c":"#cccccc"},"3,4",{"w":2},"3,5",{"w":2},"3,6","3,8",{"c":"#aaaaaa","w":1.25},"3,9"] + ] + } +} \ No newline at end of file