Remove broken userspace and keymaps (#18806)
48 files changed, 0 insertions(+), 4810 deletions(-) D keyboards/splitkb/kyria/keymaps/bbaserdem/config.h D keyboards/splitkb/kyria/keymaps/bbaserdem/keymap.c D keyboards/splitkb/kyria/keymaps/bbaserdem/readme.md D keyboards/splitkb/kyria/keymaps/bbaserdem/rules.mk D layouts/community/ortho_3x10/bbaserdem/config.h D layouts/community/ortho_3x10/bbaserdem/keymap.c D layouts/community/ortho_3x10/bbaserdem/readme.md D layouts/community/ortho_3x10/bbaserdem/rules.mk D layouts/community/ortho_4x12/bbaserdem/config.h D layouts/community/ortho_4x12/bbaserdem/keymap.c D layouts/community/ortho_4x12/bbaserdem/readme.md D layouts/community/ortho_4x12/bbaserdem/rules.mk D layouts/community/split_3x5_3/bbaserdem/config.h D layouts/community/split_3x5_3/bbaserdem/keymap.c D layouts/community/split_3x5_3/bbaserdem/readme.md D layouts/community/split_3x5_3/bbaserdem/rules.mk D layouts/community/split_3x6_3/bbaserdem/chconf.h D layouts/community/split_3x6_3/bbaserdem/config.h D layouts/community/split_3x6_3/bbaserdem/halconf.h D layouts/community/split_3x6_3/bbaserdem/keymap.c D layouts/community/split_3x6_3/bbaserdem/mcuconf.h D layouts/community/split_3x6_3/bbaserdem/readme.md D layouts/community/split_3x6_3/bbaserdem/rules.mk D layouts/community/split_3x6_3/bbaserdem/ssd1306.c D users/bbaserdem/.gitignore D users/bbaserdem/bb-audio.c D users/bbaserdem/bb-audio.h D users/bbaserdem/bb-backlight.c D users/bbaserdem/bb-backlight.h D users/bbaserdem/bb-encoder.c D users/bbaserdem/bb-encoder.h D users/bbaserdem/bb-macro.c D users/bbaserdem/bb-macro.h D users/bbaserdem/bb-oled-extra.c D users/bbaserdem/bb-oled-extra.h D users/bbaserdem/bb-oled.c D users/bbaserdem/bb-oled.h D users/bbaserdem/bb-rgb.c D users/bbaserdem/bb-rgb.h D users/bbaserdem/bb-underglow.c D users/bbaserdem/bb-underglow.h D users/bbaserdem/bbaserdem.c D users/bbaserdem/bbaserdem.h D users/bbaserdem/config.h D users/bbaserdem/keymap-bitmaps/.gitignore D users/bbaserdem/keymap-bitmaps/cropBmp D users/bbaserdem/readme.md D users/bbaserdem/rules.mk
D keyboards/splitkb/kyria/keymaps/bbaserdem/config.h => keyboards/splitkb/kyria/keymaps/bbaserdem/config.h +0 -32
@@ 1,32 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #pragma once // Kyria specific #ifdef KEYBOARD_splitkb_kyria_rev1 // Split definition; use the following to flash; // pro-micro: avrdude-split-left/right // elite-c: dfu-split-left/right # define ENCODER_DIRECTION_FLIP # define EE_HANDS // Make sure kyria has bigger oled display # ifdef OLED_ENABLE # define OLED_DISPLAY_128X64 # endif #endif
D keyboards/splitkb/kyria/keymaps/bbaserdem/keymap.c => keyboards/splitkb/kyria/keymaps/bbaserdem/keymap.c +0 -109
@@ 1,109 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #include QMK_KEYBOARD_H #include "bbaserdem.h" #define LAYOUT_split_3x6_5_wrapper(...) LAYOUT_split_3x6_5(__VA_ARGS__) /* F layout * ┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐ * │ W │ F │ G │ Ğ │ I │ O │ │ D │ R │ N │ H │ P │ Q │ * ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤ * │ X │ A │ S │ D │ F │ G │ │ T │ K │ M │ L │ Y │ Ş │ * ├───┼───┼───┼───┼───┼───┼───┬───┐ ┌───┬───┼───┼───┼───┼───┼───┼───┤ * │* +│ J │ Ö │ V │ C │ Ç │ │ │ │ │ │ Z │ S │ B │. :│, ;│< >│ * └───┴───┴───┼───┼───┼───┤Esc│Shf│ │Shf│Del├───┼───┼───┼───┴───┴───┘ * │En1│Tab│Ent│ │ │ │ │ │Spc│Bsp│En2│ * └───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┘ */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_BASE] = LAYOUT_split_3x6_5_wrapper( _BL1_1_,_BL1_5_, _BR1_5_,_BR1_1_, _BL2_1_,_BL2_5_, _BR2_5_,_BR2_1_, _BL3_1_,_BL3_5_,xxx2xxx,xxx2xxx,_BR3_5_,_BR3_1_, BB_ENC0, _BL4_3_,KC_LSFT,KC_RSFT,_BR4_3_,BB_ENC1 ), [_CHAR] = LAYOUT_split_3x6_5_wrapper( XXXXXXX,_CL1_5_, _CR1_5_,XXXXXXX, XXXXXXX,_CL2_5_, _CR2_5_,XXXXXXX, XXXXXXX,_CL3_5_,xxx2xxx,xxx2xxx,_CR3_5_,XXXXXXX, _______,_CL4_3_,_______,_______,_CR4_3_,_______ ), [_GAME] = LAYOUT_split_3x6_5_wrapper( _GA1_1_,_GA1_5_, ___5___,___1___, _GA2_1_,_GA2_5_, ___5___,___1___, _GA3_1_,_GA3_5_,xxx2xxx,xxx2xxx,___5___,___1___, _______,_GA4_3_,_______,_______,___3___,_______ ), [_MEDI] = LAYOUT_split_3x6_5_wrapper( ___1___,___5___, _ME1_5_,___1___, ___1___,___5___, _ME2_5_,___1___, ___1___,___5___,xxx2xxx,xxx2xxx,_ME3_5_,___1___, ___1___,___3___,_______,_______,_ME4_3_,___1___ ), [_NAVI] = LAYOUT_split_3x6_5_wrapper( ___1___,___5___, _NA1_5_,___1___, ___1___,___5___, _NA2_5_,___1___, ___1___,___5___,xxx2xxx,xxx2xxx,_NA3_5_,___1___, ___1___,___3___,_______,_______,_NA4_3_,___1___ ), [_SYMB] = LAYOUT_split_3x6_5_wrapper( ___1___,___5___, _SY1_5_,___1___, ___1___,___5___, _SY2_5_,___1___, ___1___,___5___,xxx2xxx,xxx2xxx,_SY3_5_,___1___, ___1___,___3___,_______,_______,_SY4_3_,___1___ ), [_NUMB] = LAYOUT_split_3x6_5_wrapper( ___1___,_NU1_5_, ___5___,___1___, ___1___,_NU2_5_, ___5___,___1___, ___1___,_NU3_5_,xxx2xxx,xxx2xxx,___5___,___1___, ___1___,_NU4_3_,_______,_______,___3___,___1___ ), [_FUNC] = LAYOUT_split_3x6_5_wrapper( ___1___,_FU1_5_, ___5___,___1___, ___1___,_FU2_5_, ___5___,___1___, ___1___,_FU3_5_,xxx2xxx,xxx2xxx,___5___,___1___, ___1___,_FU4_3_,_______,_______,___3___,___1___ ), [_MOUS] = LAYOUT_split_3x6_5_wrapper( ___1___,_MO1_5_, ___5___,___1___, ___1___,_MO2_5_, ___5___,___1___, ___1___,_MO3_5_,xxx2xxx,xxx2xxx,___5___,___1___, ___1___,_MO4_3_,_______,_______,___3___,___1___ ), [_MUSI] = LAYOUT_split_3x6_5_wrapper( _MU_12_,_MU_12_, _MU_06_,xxx2xxx,xxx2xxx,_MU_06_, MU_TOG,_MUL_3_,_MU_02_,_MUR_3_,___1___ ) }; #ifdef KEYBOARD_splitkb_kyria_rev1 // Kyria specific code #ifdef OLED_ENABLE // Kyria's oled screen // Rotate the display on kyria oled_rotation_t oled_init_user(oled_rotation_t rotation) { return OLED_ROTATION_180; } // For kyria; print logo, and allow default status printing bool oled_task_keymap(void) { render_qmk_logo(0, 0); render_status_lite(4, 0); return false; } #endif //OLED_ENABLE #endif //KEYBOARD_splitkb_kyria_rev1
D keyboards/splitkb/kyria/keymaps/bbaserdem/readme.md => keyboards/splitkb/kyria/keymaps/bbaserdem/readme.md +0 -32
@@ 1,32 0,0 @@ This folder contains my Kyria (`split_3x6_5`) board layout. Check out the [user readme](../../../../../users/bbaserdem/readme.md) for more info. # Kyria I use a rev 1.3 PCB as a daily driver. ## Hardware * Using a modified High-profile case; with metal switch plate. * Currently using a Pro-Micro and an Elite-C as microcontrollers. * Using Gateron Silent Black Ink with Progressive springs (100g), lubed. * Have mill-max sockets for hotswap feature. * All microcontrollers and OLED's are socketed for easy removal. ## Features * Use two thumb keys in the 2u layout. * Have rotary encoders in the outermost keys of the thumb cluster. * Have underglow leds soldered. ## Issues * Stabilizers squiek, and need lubing. * The double tap buttons (home row; left leader the most) don't contact well. ## Todo * Switch to Proton C conversion with a game plan. * Lube stabilizers. * Get tenting puck. * (Not depending on me) migrate this code to layouts.
D keyboards/splitkb/kyria/keymaps/bbaserdem/rules.mk => keyboards/splitkb/kyria/keymaps/bbaserdem/rules.mk +0 -30
@@ 1,30 0,0 @@ # Copyright 2021 Batuhan Başerdem # <baserdem.batuhan@gmail.com> @bbaserdem # # 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 <http://www.gnu.org/licenses/>. # Kyria hardware ifneq (,$(findstring splitkb/kyria/rev1,$(KEYBOARD))) # Elective features ENCODER_ENABLE = yes OLED_ENABLE = yes # Nonexistent features AUDIO_ENABLE = no BACKLIGHT_ENABLE = no RGB_MATRIX_ENABLE = no # Space savers NKRO_ENABLE = no VELOCIKEY_ENABLE = no WPM_ENABLE = no endif
D layouts/community/ortho_3x10/bbaserdem/config.h => layouts/community/ortho_3x10/bbaserdem/config.h +0 -21
@@ 1,21 0,0 @@ /* Copyright 2019 Batuhan Başerdem <baserdem.batuhan@gmail.com> @bbaserdem 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 <http://www.gnu.org/licenses/>. */ #pragma once // Gherkin specific #ifdef KEYBOARD_40percentclub_gherkin #define MUSIC_MAP #define RGB_DI_PIN F6 #define RGB_MATRIX_LED_COUNT 10 #endif
D layouts/community/ortho_3x10/bbaserdem/keymap.c => layouts/community/ortho_3x10/bbaserdem/keymap.c +0 -98
@@ 1,98 0,0 @@ /* Copyright 2019 Batuhan Başerdem <baserdem.batuhan@gmail.com> @bbaserdem 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 <http://www.gnu.org/licenses/>. */ #include QMK_KEYBOARD_H #include "bbaserdem.h" #ifdef KEYBOARD_40percentclub_gherkin // Flip it #undef LAYOUT_ortho_3x10 #define LAYOUT_ortho_3x10( \ K00, K01, K02, K03, K04, K05, K10, K11, K12, K13 , \ K14, K15, K20, K21, K22, K23, K24, K25, K30, K31 , \ K32, K33, K34, K35, K40, K41, K42, K43, K44, K45 \ ) { \ { K45, K44, K43, K42, K41, K40 }, \ { K35, K34, K33, K32, K31, K30 }, \ { K25, K24, K23, K22, K21, K20 }, \ { K15, K14, K13, K12, K11, K10 }, \ { K05, K04, K03, K02, K01, K00 } \ } #endif const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { /* Game pad * ,-----------------------------------------------------------. * | Esc | 1 | 2 | 3 | 4 | 5 | 6 | F1 | F2 | F3 | * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----| * |AdjsL| Q | W | E | R | Ent | Tab | Ctr | |^| | Alt | * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----| * |Music| A | S | D | F | Spc |Shift| <-- | |v| | --> | * `-----------------------------------------------------------' */ [_BASE] = LAYOUT_ortho_3x10( KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_F1, KC_F2, KC_F3, MO(_MEDI), KC_Q, KC_W, KC_E, KC_R, KC_ENT, KC_TAB, KC_LCTL,KC_UP, KC_LALT, MU_TOG, KC_A, KC_S, KC_D, KC_F, KC_SPC, KC_LSFT,KC_LEFT,KC_DOWN,KC_RGHT ), /* Adjust * ,-----------------------------------------------------------. * | Esc |RGBTg|HueUp|HueDn|SatUp|SatDn|ValUp|ValDn|ModNx|ModPr| * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----| * | |BltTg|Breth|BriUp|BriDn| | |Veloc|SpdUp|SpdDn| * |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----| * |Music| | | | | | | |EEprm|Reset| * `-----------------------------------------------------------' */ [_MEDI] = LAYOUT_ortho_3x10( CK_TOGG,RGB_TOG,RGB_HUI,RGB_HUD,RGB_SAI,RGB_SAD,RGB_VAI,RGB_VAD,RGB_MOD,RGB_RMOD, _______,BL_TOGG,BL_BRTG,BL_INC, BL_DEC, XXXXXXX,XXXXXXX,VLK_TOG,RGB_SPI,RGB_SPD, AU_TOG, XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,XXXXXXX,EE_CLR,QK_BOOT ), [_MUSI] = LAYOUT_ortho_3x10_wrapper( MU_FAST,_MU_08_,MU_REC, MU_SLOW,_MU_08_,MU_STOP, MU_TOG, _MU_08_,MU_PLAY ), }; // Music map, guitar like. #ifdef AUDIO_ENABLE const uint8_t music_map[MATRIX_ROWS][MATRIX_COLS] = LAYOUT_ortho_3x10( 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ); #endif // RGB matrix code #ifdef RGB_MATRIX_ENABLE // Gherkin #if defined(KEYBOARD_40percentclub_gherkin) led_config_t g_led_config = { { // Key Matrix to LED Index { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED}, { NO_LED, NO_LED, NO_LED, NO_LED, NO_LED} }, { // LED Index to Physical Position {224, 0}, {168, 0}, {112, 0}, { 56, 0}, { 0, 0}, { 0, 64}, { 56, 64}, {112, 64}, {168, 64}, {224, 64}, }, { // LED Index to Flag 2,2,2,2,2,2,2,2,2,2 }}; // Disable layer switching bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {return true;} #endif // Gherkin #endif // RGB Matrix
D layouts/community/ortho_3x10/bbaserdem/readme.md => layouts/community/ortho_3x10/bbaserdem/readme.md +0 -19
@@ 1,19 0,0 @@ This folder contains my [3x10\_ortho](../../../default/ortho_3x10) board layouts Check out the [user readme](../../../../users/bbaserdem/readme.md) for more info. # Gherkin I use [Gherkin](../../../../keyboards/40percentclub/gherkin/readme.md). It is used as a game pad, and key layout is inspired by spare keys I had lying around. The firmware is very simple, and only includes one layer keymap, and RGB effects. ## Status * [x] Layout adapted * [x] Tested build * [x] Confirmed on board ## Build Build command: `CFLAGS="-Wno-error=deprecated" <FILL-IN-LATER>`
D layouts/community/ortho_3x10/bbaserdem/rules.mk => layouts/community/ortho_3x10/bbaserdem/rules.mk +0 -23
@@ 1,23 0,0 @@ # Copyright 2019 Batuhan Başerdem <baserdem.batuhan@gmail.com> @bbaserdem # 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 <http://www.gnu.org/licenses/>. # This small layout is a macro-pad; does not need userspace # Gherkin has both RGB strip and LED lights ifneq (,$(findstring 40percentclub/gherkin,$(KEYBOARD))) CONVERT_TO_PROTON_C = yes RGB_MATRIX_ENABLE = yes RGB_MATRIX_DRIVER = WS2812 AUDIO_ENABLE = yes BACKLIGHT_ENABLE = yes VELOCIKEY_ENABLE = yes endif
D layouts/community/ortho_4x12/bbaserdem/config.h => layouts/community/ortho_4x12/bbaserdem/config.h +0 -26
@@ 1,26 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #pragma once // Code pertaining to planck rev6 #ifdef KEYBOARD_planck_rev6 // Encoder I use; # ifdef ENCODER_RESOLUTION # undef ENCODER_RESOLUTION # endif # define ENCODER_RESOLUTION 2 #endif
D layouts/community/ortho_4x12/bbaserdem/keymap.c => layouts/community/ortho_4x12/bbaserdem/keymap.c +0 -88
@@ 1,88 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #include QMK_KEYBOARD_H #include "bbaserdem.h" const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { // Base layer [_BASE] = LAYOUT_ortho_4x12_wrapper( _BL1_5_,_BL1_1_,_BR1_1_,_BR1_5_, _BL2_5_,_BL2_1_,_BR2_1_,_BR2_5_, _BL3_5_,_BL3_1_,_BR3_1_,_BR3_5_, BB_ENC0,KC_DOWN,KC_UP, _BL4_3_,_BR4_3_,KC_LEFT,KC_RGHT,RGB_TOG ), // Extra characters overlay [_CHAR] = LAYOUT_ortho_4x12_wrapper( _CL1_5_,xxx2xxx,_CR1_5_, _CL2_5_,xxx2xxx,_CR2_5_, _CL3_5_,xxx2xxx,_CR3_5_, ___3___,_CL4_3_,_CR4_3_,___3___ ), // Game layer: left_half [_GAME] = LAYOUT_ortho_4x12_wrapper( _GA1_5_,_GA1_1_,___6___, _GA2_5_,_GA2_1_,___6___, _GA3_5_,_GA3_1_,___6___, ___3___,_GA4_3_,___6___ ), // Media layer: right_half [_MEDI] = LAYOUT_ortho_4x12_wrapper( ___6___,xxx1xxx,_ME1_5_, ___6___,xxx1xxx,_ME2_5_, ___6___,xxx1xxx,_ME3_5_, ___6___,_ME4_3_,___3___ ), // Navigation layer: right_half [_NAVI] = LAYOUT_ortho_4x12_wrapper( ___6___,xxx1xxx,_NA1_5_, ___6___,xxx1xxx,_NA2_5_, ___6___,xxx1xxx,_NA3_5_, ___6___,_NA4_3_,___3___ ), // Symbol layer: right_half [_SYMB] = LAYOUT_ortho_4x12_wrapper( ___6___,xxx1xxx,_SY1_5_, ___6___,xxx1xxx,_SY2_5_, ___6___,xxx1xxx,_SY3_5_, ___6___,_SY4_3_,___3___ ), // Number layer: left_half [_NUMB] = LAYOUT_ortho_4x12_wrapper( xxx1xxx,_NU1_5_,___6___, xxx1xxx,_NU2_5_,___6___, xxx1xxx,_NU3_5_,___6___, ___3___,_NU4_3_,___6___ ), // Function layer: left_half [_FUNC] = LAYOUT_ortho_4x12_wrapper( _FU1_5_,xxx1xxx,___6___, _FU2_5_,xxx1xxx,___6___, _FU3_5_,xxx1xxx,___6___, ___3___,_FU4_3_,___6___ ), // Mouse layer: left_half [_MOUS] = LAYOUT_ortho_4x12_wrapper( _MO1_5_,xxx1xxx,___6___, _MO2_5_,xxx1xxx,___6___, _MO3_5_,xxx1xxx,___6___, ___3___,_MO4_3_,___6___ ), // Music layer: everything [_MUSI] = LAYOUT_ortho_4x12_wrapper( _MU_12_,_MU_12_,_MU_12_, ___1___,_MU_02_,_MUL_3_,_MUR_3_,_MU_02_,___1___) };
D layouts/community/ortho_4x12/bbaserdem/readme.md => layouts/community/ortho_4x12/bbaserdem/readme.md +0 -12
@@ 1,12 0,0 @@ This folder contains my [4x12\_ortho](../../../default/ortho_4x12) board layouts Check out the [user readme](../../../../users/bbaserdem/readme.md) for more info. # Planck Light I use a couple [planck](../../../../keyboards/planck/readme.md) keyboards. To sell soon; don't use them anymore, but will keep the light version. # JJ40 A planck rev4 replacement; for my acrylic planck case which used to host a now defunct rev4.
D layouts/community/ortho_4x12/bbaserdem/rules.mk => layouts/community/ortho_4x12/bbaserdem/rules.mk +0 -26
@@ 1,26 0,0 @@ # Copyright 2021 Batuhan Başerdem # <baserdem.batuhan@gmail.com> @bbaserdem # # 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 <http://www.gnu.org/licenses/>. # Planck rev6 has both RGBLIGHT and RGB_MATRIX enabled ifneq (,$(findstring planck/rev6,$(KEYBOARD))) RGB_MATRIX_ENABLE = yes RGBLIGHT_ENABLE = no endif # JJ40 here ifneq (,$(findstring jj40,$(KEYBOARD))) RGB_MATRIX_ENABLE = yes endif
D layouts/community/split_3x5_3/bbaserdem/config.h => layouts/community/split_3x5_3/bbaserdem/config.h +0 -35
@@ 1,35 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #pragma once // Split definition; use the following to flash; // pro-micro: avrdude-split-left/right // elite-c: dfu-split-left/right #define EE_HANDS #ifdef KEYBOARD_crkbd_rev1 // Corne overrides # ifdef RGBLED_NUM # undef RGBLED_NUM # endif # ifdef RGB_MATRIX_LED_COUNT # undef RGB_MATRIX_LED_COUNT # endif # define RGBLED_NUM 48 # define RGB_MATRIX_LED_COUNT RGBLED_NUM #endif // KEYBOARD_crkbd_rev1
D layouts/community/split_3x5_3/bbaserdem/keymap.c => layouts/community/split_3x5_3/bbaserdem/keymap.c +0 -117
@@ 1,117 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #include QMK_KEYBOARD_H #include "bbaserdem.h" /* D layout * ┌───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┐ * │' "│, <│. >│ P │ Y │ │ F │ G │ C │ R │ L │ * ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤ * │ A │ O │ E │ U │ I │ │ D │ H │ T │ N │ S │ * ├───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┤ * │; :│ Q │ J │ K │ X │ │ B │ M │ W │ V │ Z │ * └───┴───┴───┼───┼───┼───┐ ┌───┼───┼───┼───┴───┴───┘ * │Del│Tab│Spc│ │Ent│Esc│Bsp│ * └───┴───┴───┘ └───┴───┴───┘ */ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_BASE] = LAYOUT_split_3x5_3_wrapper( _BL1_5_,_BR1_5_, _BL2_5_,_BR2_5_, _BL3_5_,_BR3_5_, _BL4_3_,_BR4_3_ ), [_CHAR] = LAYOUT_split_3x5_3_wrapper( _CL1_5_,_CR1_5_, _CL2_5_,_CR2_5_, _CL3_5_,_CR3_5_, _CL4_3_,_CR4_3_ ), [_GAME] = LAYOUT_split_3x5_3_wrapper( _GA1_5_,___5___, _GA2_5_,___5___, _GA3_5_,___5___, _GA4_3_,___3___ ), [_MEDI] = LAYOUT_split_3x5_3_wrapper( ___5___,_ME1_5_, ___5___,_ME2_5_, ___5___,_ME3_5_, ___3___,_ME4_3_ ), [_NAVI] = LAYOUT_split_3x5_3_wrapper( ___5___,_NA1_5_, ___5___,_NA2_5_, ___5___,_NA3_5_, ___3___,_NA4_3_ ), [_SYMB] = LAYOUT_split_3x5_3_wrapper( ___5___,_SY1_5_, ___5___,_SY2_5_, ___5___,_SY3_5_, ___3___,_SY4_3_ ), [_NUMB] = LAYOUT_split_3x5_3_wrapper( _NU1_5_,___5___, _NU2_5_,___5___, _NU3_5_,___5___, _NU4_3_,___3___ ), [_FUNC] = LAYOUT_split_3x5_3_wrapper( _FU1_5_,___5___, _FU2_5_,___5___, _FU3_5_,___5___, _FU4_3_,___3___ ), [_MOUS] = LAYOUT_split_3x5_3_wrapper( _MO1_5_,___5___, _MO2_5_,___5___, _MO3_5_,___5___, _MO4_3_,___3___ ), [_MUSI] = LAYOUT_split_3x5_3_wrapper( _MU_10_, _MU_10_, _MU_10_, _MUL_3_,_MUR_3_ ) }; // RGB Matrix configuration #ifdef RGB_MATRIX_ENABLE // crkbd #ifdef KEYBOARD_crkbd_rev1 /* This is left-right for crkbd indicator light * ┌──┬──┬──┬──┬──┐ ┌──┬──┬──┬──┬──┐ * │23│18│17│10│09│ │33│34│41│42│47│ * ├02┼──┼01┼──┼00┤ ├24┼──┼25┼──┼26┤ * │22│19│16│11│08│ │32│35│40│43│46│ * ├03┼──┼04┼──┼05┤ ├29┼──┼28┼──┼27┤ * │21│20│15│12│07│ │31│36│39│44│45│ * └──┴──┴──┼──┼──┼──┐┌──┼──┼──┼──┴──┴──┘ * │14│13│06││30│37│38│ * └──┴──┴──┘└──┴──┴──┘ */ // End of differentiations #endif // KEYBOARD_crkbd_rev1 // End of code for the RGB_MATRIX setup #endif // RGB_MATRIX_ENABLE
D layouts/community/split_3x5_3/bbaserdem/readme.md => layouts/community/split_3x5_3/bbaserdem/readme.md +0 -18
@@ 1,18 0,0 @@ This folder contains my [split\_3x5\_3](../../../default/split_3x5_3) board layouts Check out the [user readme](../../../../users/bbaserdem/readme.md) for more info. # Crkbd Using a no 6th column crkbd (rev 2.1 choc) as a mobile keyboard. This version uses ProMicro as controllers; can't have OLED and RGB at the same time. ## Build QMK cli commands no longer works with Archlinux (2021 Sep.) on my PC for flashing promicro. In the past; I used to flash Pro Micro explicitly using the following line, for referance. ``` sudo avrdude -p atmgea34u4 -P "$(ls /dev/ttyACM*)" -c avr109 -D -U flash:w:<hexfile>.hex ```
D layouts/community/split_3x5_3/bbaserdem/rules.mk => layouts/community/split_3x5_3/bbaserdem/rules.mk +0 -22
@@ 1,22 0,0 @@ # Copyright 2021 Batuhan Başerdem # <baserdem.batuhan@gmail.com> @bbaserdem # # 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 <http://www.gnu.org/licenses/>. # Corne keyboard ifneq (,$(findstring crkbd/rev1,$(KEYBOARD))) RGBLIGHT_ENABLE = no RGB_MATRIX_ENABLE = yes OLED_ENABLE = no endif
D layouts/community/split_3x6_3/bbaserdem/chconf.h => layouts/community/split_3x6_3/bbaserdem/chconf.h +0 -23
@@ 1,23 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ // Code pertaining the ARM crkbd version #ifdef KEYBOARD_crkbd_rev1 # define CH_CFG_ST_RESOLUTION 16 # define CH_CFG_ST_FREQUENCY 10000 # include_next "chconf.h" #endif // KEYBOARD_crkbd_rev1
D layouts/community/split_3x6_3/bbaserdem/config.h => layouts/community/split_3x6_3/bbaserdem/config.h +0 -77
@@ 1,77 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #pragma once // Split definition; use the following to flash; // pro-micro: avrdude-split-left/right // elite-c: dfu-split-left/right // Code pertaining to Corne ARM; from Waffle's keymap #ifdef KEYBOARD_crkbd_rev1 // Use EE_HANDS to determine handedness # define EE_HANDS // Rebrand the PCB # undef PRODUCT # define PRODUCT "Protorne Keyboard" # undef MANUFACTURER # define MANUFACTURER "Waffles" // Remove OLED definitions? # undef USE_I2C # undef SSD1306OLED // Audio output on pin A5 (actualy will be output on B1 using keymap init) # ifdef AUDIO_ENABLE # define AUDIO_PIN A5 # define MUSIC_MAP # endif // Set serial pin as D3 for sure # undef SOFT_SERIAL_PIN # define SOFT_SERIAL_PIN D3 # define SERIAL_USART_SPEED 921600 # define SERIAL_USART_DRIVER SD1 # define SERIAL_USART_TX_PAL_MODE 7 // Things to make RGB matrix work on the waffle board # undef RGBLED_NUM # define RGBLED_NUM 54 # undef RGB_DI_PIN # define RGB_DI_PIN B5 # ifdef RGB_MATRIX_ENABLE # define RGB_MATRIX_MAXIMUM_BRIGHTNESS 100 # define RGB_MATRIX_SPLIT { 27, 27 } # endif # define WS2812_PWM_DRIVER PWMD3 # define WS2812_PWM_CHANNEL 3 # define WS2812_PWM_PAL_MODE 2 # define WS2812_DMA_STREAM STM32_DMA1_STREAM3 # define WS2812_DMA_CHANNEL 3 // OLED related code # ifdef OLED_ENABLE # define OLED_UPDATE_INTERVAL 100 # endif // Encoder definitons # define ENCODERS_PAD_A { B2 } # define ENCODERS_PAD_B { B6 } # define ENCODER_RESOLUTIONS { 4 } # define ENCODERS_PAD_A_RIGHT { B2 } # define ENCODERS_PAD_B_RIGHT { B6 } # define ENCODER_RESOLUTIONS_RIGHT { 2 } #endif
D layouts/community/split_3x6_3/bbaserdem/halconf.h => layouts/community/split_3x6_3/bbaserdem/halconf.h +0 -24
@@ 1,24 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #pragma once #ifdef KEYBOARD_crkbd_rev1 // #define HAL_USE_DAC TRUE # define HAL_USE_PWM TRUE # define HAL_USE_SERIAL TRUE # include_next <halconf.h> #endif
D layouts/community/split_3x6_3/bbaserdem/keymap.c => layouts/community/split_3x6_3/bbaserdem/keymap.c +0 -191
@@ 1,191 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #include QMK_KEYBOARD_H #include "bbaserdem.h" #ifdef KEYBOARD_crkbd_rev1 # include "bb-oled-extra.h" #endif // KEYBOARD_crkbd_rev1 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { [_BASE] = LAYOUT_split_3x6_3_wrapper( BB_ENC0,_BL1_5_,_BR1_5_,BB_ENC1, _BL2_1_,_BL2_5_,_BR2_5_,_BR2_1_, _BL3_1_,_BL3_5_,_BR3_5_,_BR3_1_, _BL4_3_,_BR4_3_ ), [_CHAR] = LAYOUT_split_3x6_3_wrapper( _______,_CL1_5_,_CR1_5_,_______, XXXXXXX,_CL2_5_,_CR2_5_,XXXXXXX, XXXXXXX,_CL3_5_,_CR3_5_,XXXXXXX, _CL4_3_,_CR4_3_ ), [_GAME] = LAYOUT_split_3x6_3_wrapper( _______,_GA1_5_,___6___, _GA2_1_,_GA2_5_,___6___, _GA3_1_,_GA3_5_,___6___, _GA4_3_,___3___ ), [_MEDI] = LAYOUT_split_3x6_3_wrapper( ___6___,_ME1_5_,_______, ___6___,_ME2_5_,xxx1xxx, ___6___,_ME3_5_,xxx1xxx, ___3___,_ME4_3_ ), [_NAVI] = LAYOUT_split_3x6_3_wrapper( ___6___,_NA1_5_,_______, ___6___,_NA2_5_,xxx1xxx, ___6___,_NA3_5_,xxx1xxx, ___3___,_NA4_3_ ), [_SYMB] = LAYOUT_split_3x6_3_wrapper( ___6___,_SY1_5_,_______, ___6___,_SY2_5_,xxx1xxx, ___6___,_SY3_5_,xxx1xxx, ___3___,_SY4_3_ ), [_NUMB] = LAYOUT_split_3x6_3_wrapper( _______,_NU1_5_,___6___, xxx1xxx,_NU2_5_,___6___, xxx1xxx,_NU3_5_,___6___, _NU4_3_,___3___ ), [_FUNC] = LAYOUT_split_3x6_3_wrapper( _______,_FU1_5_,___6___, xxx1xxx,_FU2_5_,___6___, xxx1xxx,_FU3_5_,___6___, _FU4_3_,___3___ ), [_MOUS] = LAYOUT_split_3x6_3_wrapper( _______,_MO1_5_,___6___, xxx1xxx,_MO2_5_,___6___, xxx1xxx,_MO3_5_,___6___, _MO4_3_,___3___ ), [_MUSI] = LAYOUT_split_3x6_3_wrapper( _MU_12_, _MU_12_, _MU_12_, _MUL_3_,_MUR_3_ ) }; // crkbd #ifdef KEYBOARD_crkbd_rev1 #ifdef AUDIO_ENABLE const uint8_t music_map[MATRIX_ROWS][MATRIX_COLS] = LAYOUT_split_3x6_3( 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0, 0, 0, 0, 0 ); #endif // AUDIO_ENABLE void keyboard_pre_init_keymap(void) { # ifdef AUDIO_ENABLE //thank you to @sigprof for this // Set audio pins to analog mode palSetLineMode(A5, PAL_MODE_INPUT_ANALOG); palSetLineMode(B1, PAL_MODE_INPUT_ANALOG); # endif // AUDIO_ENABLE # ifdef RGB_MATRIX_ENABLE // Led locations are different on protorne; need to be fixed g_led_config = (led_config_t) { { // Logical Layout // 0 1 2 3 4 5 COLS // -LEFT ROWS // 16 17 18 19 20 21 0 // 15 14 13 12 11 10 1 // 04 05 06 07 08 09 2 // 03 02 01 3 // -Right // 21 20 19 18 17 16 4 // 10 11 12 13 14 15 5 // 09 08 07 06 05 04 6 // 01 02 03 7 { 15, 16, 17, 18, 19, 20}, { 14, 13, 12, 11, 10, 9 }, { 3, 4, 5, 6, 7, 8 }, { NO_LED, NO_LED, NO_LED, 2, 1, 0 }, { 47, 46, 45, 44, 43, 42 }, { 36, 37, 38, 39, 40, 41 }, { 35, 34, 33, 32, 31, 30 }, { NO_LED, NO_LED, NO_LED, 27, 28, 29 } }, { // Physical Layout // LEFT RIGHT // 16 17 18 19 20 21 16 17 18 19 20 21 // 24 23 22 24 23 22 // 15 14 13 12 11 10 15 14 13 12 11 10 // 25 27 // 04 05 06 07 08 09 04 05 06 07 08 09 // 26 27 25 26 // 03 02 01 03 02 01 { 95, 63 }, { 80, 58 }, { 60, 55 }, { 0, 41 }, { 16, 42 }, { 33, 37 }, { 50, 35 }, { 68, 37 }, { 85, 39 }, { 85, 21 }, { 68, 19 }, { 50, 13 }, { 33, 20 }, { 16, 24 }, { 0, 24 }, { 0, 7 }, { 16, 7 }, { 33, 3 }, { 50, 0 }, { 68, 2 }, { 85, 4 }, { 85, 16 }, { 50, 13 }, { 16, 20 }, { 16, 38 }, { 50, 48 }, { 85, 52 }, { 164, 55 }, { 144, 58 }, { 129, 63 }, { 139, 39 }, { 156, 37 }, { 174, 35 }, { 191, 37 }, { 208, 42 }, { 224, 41 }, { 224, 24 }, { 208, 24 }, { 191, 20 }, { 174, 13 }, { 156, 19 }, { 139, 21 }, { 139, 4 }, { 156, 2 }, { 174, 0 }, { 191, 3 }, { 208, 7 }, { 224, 7 }, { 208, 20 }, { 174, 13 }, { 139, 16 }, { 139, 52 }, { 174, 48 }, { 208, 38 } }, { // (x---)8 stands for indicator // (-x--)4 stands for per-key led // (--x-)2 stands for underglow led // (---1)1 stands for modifier key 12, 12, 12, 4, 4, 5, 4, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 10, 10, 10, 10, 10, 10, 12, 12, 12, 4, 4, 4, 5, 4, 4, 4, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 10, 10, 10, 10, 10, 10 } }; # endif // RGB_MATRIX_ENABLE } // Enable OPAMP1 as A5 → B1 follower #ifdef AUDIO_ENABLE void keyboard_post_init_keymap(void) { OPAMP3->CSR = OPAMP3_CSR_VMSEL_1 | OPAMP3_CSR_VMSEL_0 | OPAMP3_CSR_VPSEL_0 | OPAMP3_CSR_OPAMP3EN; } #endif // AUDIO_ENABLE #ifdef OLED_ENABLE // Flip the display on the right half oled_rotation_t oled_init_user(oled_rotation_t rotation) { if (!is_keyboard_left()) { return OLED_ROTATION_180; } return rotation; } bool oled_task_keymap(void) { if (is_keyboard_left()) { render_status_left(0, 0); } else { render_status_right(0, 0); } return false; } #endif // OLED_ENABLE #endif // KEYBOARD_crkbd_rev1
D layouts/community/split_3x6_3/bbaserdem/mcuconf.h => layouts/community/split_3x6_3/bbaserdem/mcuconf.h +0 -25
@@ 1,25 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #pragma once #ifdef KEYBOARD_crkbd_rev1 # include_next <mcuconf.h> # undef STM32_PWM_USE_TIM3 # define STM32_PWM_USE_TIM3 TRUE # undef STM32_SERIAL_USE_USART1 # define STM32_SERIAL_USE_USART1 TRUE #endif
D layouts/community/split_3x6_3/bbaserdem/readme.md => layouts/community/split_3x6_3/bbaserdem/readme.md +0 -15
@@ 1,15 0,0 @@ This folder contains my [split\_3x6\_3](../../../default/split_3x6_3) board layouts Check out the [user readme](../../../../users/bbaserdem/readme.md) for more info. # Crkbd Using [this](https://github.com/ItsWaffIe/waffle_corne) Proton-C compatible PCB. Applying the similar keymap to [@waffle](https://github.com/ItsWaffIe/waffle_corne); using their `crkbd:rev1:arm` build. ## Build Build commands; * For ARM: `CFLAGS="-Wno-error=deprecated" qmk flash -kb crkdb/rev1 -km bbaserdem -bl dfu-util-split-{left,right}`
D layouts/community/split_3x6_3/bbaserdem/rules.mk => layouts/community/split_3x6_3/bbaserdem/rules.mk +0 -47
@@ 1,47 0,0 @@ # Copyright 2021 Batuhan Başerdem # <baserdem.batuhan@gmail.com> @bbaserdem # # 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 <http://www.gnu.org/licenses/>. # Corne keyboard; with ARM ifneq (,$(findstring crkbd/rev1,$(KEYBOARD))) # Proton C conversion MCU = STM32F303 CTPC = yes # BOARD = QMK_PROTON_C # BOOTLOADER = stm32-dfu # My usual features AUDIO_ENABLE = yes BACKLIGHT_ENABLE = no ENCODER_ENABLE = yes RGB_MATRIX_ENABLE = yes OLED_ENABLE = yes # Features that take otherwise too much space WPM_ENABLE = yes NKRO_ENABLE = yes # Config SERIAL_DRIVER = usart WS2812_DRIVER = pwm AUDIO_DRIVER = dac_basic SPLIT_KEYBOARD = yes # These are from waffle DEBUG_MATRIX_SCAN_RATE_ENABLE = no # output matrix scan rate in qmk console/qmk toolbox QUANTUM_LIB_SRC += i2c_master.c #drivers/chibios/i2cmaster.h needs patch - see lines 27/28 VIA_ENABLE = no # COMMAND_ENABLE = no # CONSOLE_ENABLE = no # BOOTMAGIC_ENABLE = lite # LTO_ENABLE = yes # PIMORONI_TRACKBALL = no endif
D layouts/community/split_3x6_3/bbaserdem/ssd1306.c => layouts/community/split_3x6_3/bbaserdem/ssd1306.c +0 -16
@@ 1,16 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */
D users/bbaserdem/.gitignore => users/bbaserdem/.gitignore +0 -2
D users/bbaserdem/bb-audio.c => users/bbaserdem/bb-audio.c +0 -82
@@ 1,82 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #include "bb-audio.h" /* AUDIO * This contains some audio related stuff. * There is no need to wrap this up with preprocessor commands; * This is only called if audio is enabled */ float tone_game_intro[][2] = GAME_ON_SONG; float tone_game_outro[][2] = GAME_OFF_SONG; // Audio playing when layer changes layer_state_t layer_state_set_audio(layer_state_t state) { // Get this layer static bool prev_game = false; // If entering the game layer; play the intro sound if (layer_state_cmp(state, _GAME) && (!prev_game)) { stop_all_notes(); PLAY_SONG(tone_game_intro); prev_game = true; } // If exiting the game layer; play the outro sound if ((!layer_state_cmp(state, _GAME)) && prev_game) { stop_all_notes(); PLAY_SONG(tone_game_outro); prev_game = false; } return state; } // Audio layer switch; add the music layer on top of this bool process_record_audio(uint16_t keycode, keyrecord_t *record) { switch (keycode) { case MU_TOG: if (!record->event.pressed) { // On release, exit music mode if enabled if (layer_state_is(_MUSI)) { layer_off(_MUSI); // If not enabled; turn off all layers and load music layer } else { layer_clear(); layer_on(_MUSI); } } return true; break; case MU_ON: if (!record->event.pressed) { // On release, enter music mode layer_clear(); layer_on(_MUSI); } return true; break; case MU_OFF: if (!record->event.pressed) { // On release, exit music mode layer_off(_MUSI); } return true; break; } return true; }
D users/bbaserdem/bb-audio.h => users/bbaserdem/bb-audio.h +0 -28
@@ 1,28 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #pragma once #include "bbaserdem.h" /* AUDIO * Some functions to hook to some modes */ // Hook to layer change effects layer_state_t layer_state_set_audio(layer_state_t state); // Hook to audio keycodes bool process_record_audio(uint16_t keycode, keyrecord_t *record);
D users/bbaserdem/bb-backlight.c => users/bbaserdem/bb-backlight.c +0 -30
@@ 1,30 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #include "bb-backlight.h" /* Replaced functions with noeeprom varieties; I don't need retention across * booting. */ // Backlight LEDs void keyboard_post_init_backlight(void) { backlight_enable(); backlight_level(2); # ifdef BACKLIGHT_BREATHING breathing_enable(); # endif // BACKLIGHT_BREATHING }
D users/bbaserdem/bb-backlight.h => users/bbaserdem/bb-backlight.h +0 -23
@@ 1,23 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #pragma once #include "bbaserdem.h" /* Hooks for backlight definitions */ void keyboard_post_init_backlight(void);
D users/bbaserdem/bb-encoder.c => users/bbaserdem/bb-encoder.c +0 -514
@@ 1,514 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #include "bb-encoder.h" // Need this to call velocikey activation #ifdef VELOCIKEY_ENABLE # include "velocikey.h" #endif // VELOCIKEY_ENABLE // Need memcpy and memcmp from string.h along with transfer stuff #ifdef OLED_ENABLE # include <string.h> #endif // OLED_ENABLE /* ROTARY ENCODER * This contains my general rotary encoder code * Encoders each have a list of different modes they can be in. * Each mode also have an on click action as well. * Modes can be cycled using either shift-click or ctrl-click * Modes can be reset using OS click * Some modes are only accessible through some keymap layers */ // Default state for the encoders void reset_encoder_state(void) { userspace_config.e0base = 0; userspace_config.e0point = 0; userspace_config.e0rgb = 0; userspace_config.e1base = 1; userspace_config.e1point = 1; userspace_config.e1rgb = 1; } // Encoder scroll functionality bool encoder_update_user(uint8_t index, bool clockwise) { uint8_t this_number; // Differentiate layer roles switch (get_highest_layer(layer_state)) { # ifdef RGB_MATRIX_ENABLE case _MEDI: // Get correct index if (index == 0) { this_number = userspace_config.e0rgb; } else if (index == 1) { this_number = userspace_config.e1rgb; } else { this_number = 128; } switch(this_number) { case 0: // Effect the RGB mode if (clockwise) { rgb_matrix_step_noeeprom(); } else { rgb_matrix_step_reverse_noeeprom(); } break; case 1: // Effect the RGB hue if (clockwise) { rgb_matrix_increase_hue_noeeprom(); } else { rgb_matrix_decrease_hue_noeeprom(); } break; case 2: // Effect the RGB saturation if (clockwise) { rgb_matrix_increase_sat_noeeprom(); } else { rgb_matrix_decrease_sat_noeeprom(); } break; case 3: // Effect the RGB brightness if (clockwise) { rgb_matrix_increase_val_noeeprom(); } else { rgb_matrix_decrease_val_noeeprom(); } break; case 4: // Effect the RGB effect speed if (clockwise) { rgb_matrix_increase_speed_noeeprom(); } else { rgb_matrix_decrease_speed_noeeprom(); } break; } break; # endif // RGB_MATRIX_ENABLE # ifdef MOUSEKEY_ENABLE case _MOUS: // Get correct index if (index == 0) { this_number = userspace_config.e0point; } else if (index == 1) { this_number = userspace_config.e1point; } else { this_number = 128; } switch(this_number) { case 0: // Move mouse on horizontal axis if (clockwise) { tap_code(KC_MS_R); } else { tap_code(KC_MS_L); } break; case 1: // Move mouse on vertical axis if (clockwise) { tap_code(KC_MS_D); } else { tap_code(KC_MS_U); } break; case 2: // Move mouse wheel on vertical axis if (clockwise) { tap_code(KC_WH_D); } else { tap_code(KC_WH_U); } break; case 3: // Move mouse on horizontal axis if (clockwise) { tap_code(KC_WH_R); } else { tap_code(KC_WH_L); } break; } break; # endif // MOUSEKEY_ENABLE default: // Get correct index if (index == 0) { this_number = userspace_config.e0base; } else if (index == 1) { this_number = userspace_config.e1base; } else { this_number = 128; } switch(this_number) { case 0: // Volume if (clockwise) { tap_code16(KC_VOLU); } else { tap_code16(KC_VOLD); } break; case 1: // Song change if (clockwise) { tap_code16(KC_MNXT); } else { tap_code16(KC_MPRV); } break; case 2: // Move to audio sink if (clockwise) { tap_code16(KC_F13); } else { tap_code16(S(KC_F13)); } break; case 3: // Volume of source if (clockwise) { tap_code16(S(KC_VOLU)); } else { tap_code16(C(KC_VOLD)); } break; case 4: // Move to audio source if (clockwise) { tap_code16(C(KC_F13)); } else { tap_code16(C(S(KC_F13))); } break; case 5: // Left-right if (clockwise) { tap_code16(KC_RGHT); } else { tap_code16(KC_LEFT); } break; case 6: // Up-down if (clockwise) { tap_code16(KC_DOWN); } else { tap_code16(KC_UP); } break; case 7: // Page Up-down if (clockwise) { tap_code16(KC_PGDN); } else { tap_code16(KC_PGUP); } break; case 8: // Delete if (clockwise) { tap_code16(KC_DEL); } else { tap_code16(KC_BSPC); } break; } break; } return false; } void encoder_click_action(uint8_t index) { uint8_t this_number; // Differentiate layer roles switch (get_highest_layer(layer_state)) { # ifdef RGB_MATRIX_ENABLE case _MEDI: // Get correct index if (index == 0) { this_number = userspace_config.e0rgb; } else if (index == 1) { this_number = userspace_config.e1rgb; } else { this_number = 128; } switch(this_number) { case 0: // Return to no animation rgb_matrix_mode_noeeprom(RGB_MATRIX_SOLID_COLOR); break; case 1: case 2: case 3: // Toggle rgb_matrix_increase_val_noeeprom(); break; case 4: // Toggle velocikey # ifdef VELOCIKEY_ENABLE velocikey_toggle(); # endif // VELOCIKEY_ENABLE break; } break; # endif // RGB_MATRIX_ENABLE # ifdef MOUSEKEY_ENABLE case _MOUS: // Get correct index if (index == 0) { this_number = userspace_config.e0point; } else if (index == 1) { this_number = userspace_config.e1point; } else { this_number = 128; } switch(this_number) { case 0: // Left click tap_code16(KC_BTN1); break; case 1: // Right click tap_code16(KC_BTN2); break; case 2: case 3: // Middle click tap_code16(KC_BTN2); break; } break; # endif // MOUSEKEY_ENABLE default: // Get correct index if (index == 0) { this_number = userspace_config.e0base; } else if (index == 1) { this_number = userspace_config.e1base; } else { this_number = 128; } switch(this_number) { case 0: // Toggle mute case 2: tap_code16(KC_MUTE); break; case 1: // Pause tap_code16(KC_MPLY); break; case 3: // Mute source case 4: tap_code16(A(KC_MUTE)); break; case 5: // Insert tap_code16(KC_INS); break; case 6: // Capslock tap_code16(KC_CAPS); break; case 7: // Redo tap_code16(BB_REDO); break; case 8: // Undo tap_code16(BB_UNDO); break; } break; } } bool process_record_encoder(uint16_t keycode, keyrecord_t *record) { // Check if and which encoder int encoder_index = -1; // Get the pressed encoder switch (keycode) { case BB_ENC0: encoder_index = 0; break; case BB_ENC1: encoder_index = 1; break; } // Activate encoder function of button if ((encoder_index >= 0) & (!record->event.pressed)) { // If shifted, move mode one point forward if (get_mods() & MOD_MASK_SHIFT) { switch (get_highest_layer(layer_state)) { # ifdef RGB_MATRIX_ENABLE case _MEDI: if (encoder_index == 0) { userspace_config.e0rgb = (userspace_config.e0rgb + 1) % 5; } else { userspace_config.e1rgb = (userspace_config.e1rgb + 1) % 5; } break; # endif // RGB_MATRIX_ENABLE # ifdef MOUSEKEY_ENABLE case _MOUS: if (encoder_index == 0) { userspace_config.e0point = (userspace_config.e0point + 1) % 4; } else { userspace_config.e1point = (userspace_config.e1point + 1) % 4; } break; # endif // MOUSEKEY_ENABLE default: if (encoder_index == 0) { userspace_config.e0base = (userspace_config.e0base + 1) % 9; } else { userspace_config.e1base = (userspace_config.e1base + 1) % 9; } break; } // If ctrl is active, move mode one point backwards } else if (get_mods() & MOD_MASK_CTRL) { switch (get_highest_layer(layer_state)) { # ifdef RGB_MATRIX_ENABLE case _MEDI: if (encoder_index == 0) { userspace_config.e0rgb = (userspace_config.e0rgb + 5 - 1) % 5; } else { userspace_config.e1rgb = (userspace_config.e1rgb + 5 - 1) % 5; } break; # endif // RGB_MATRIX_ENABLE # ifdef MOUSEKEY_ENABLE case _MOUS: if (encoder_index == 0) { userspace_config.e0point = (userspace_config.e0point + 4 - 1) % 4; } else { userspace_config.e1point = (userspace_config.e1point + 4 - 1) % 4; } break; # endif // MOUSEKEY_ENABLE default: if (encoder_index == 0) { userspace_config.e0base = (userspace_config.e0base + 9 - 1) % 9; } else { userspace_config.e1base = (userspace_config.e1base + 9 - 1) % 9; } break; } // If meta is active, reset the encoder states } else if (get_mods() & MOD_MASK_GUI) { reset_encoder_state(); eeconfig_update_user(userspace_config.raw); // If nothing else; just perform the click action } else { encoder_click_action(encoder_index); } } return true; } // For printing status to OLED #ifdef OLED_ENABLE void encoder_state_string(uint8_t index, uint8_t layer, char* buffer) { uint8_t this_number; // Get the layer straight from the main function switch (layer) { // If RGB control mode is enabled # ifdef RGB_MATRIX_ENABLE case _MEDI: // Get correct index if (index == 0) { this_number = userspace_config.e0rgb; } else if (index == 1) { this_number = userspace_config.e1rgb; } else { this_number = 128; } switch (this_number) { case 0: strcpy(buffer, "ani mode"); break; case 1: strcpy(buffer, "hue "); break; case 2: strcpy(buffer, "saturat."); break; case 3: strcpy(buffer, "bright. "); break; case 4: strcpy(buffer, "ani. spd"); break; default: strcpy(buffer, " -N/A- "); break; } break; # endif // RGB_MATRIX_ENABLE // If pointer control is enabled # ifdef MOUSEKEY_ENABLE case _MOUS: // Get correct index if (index == 0) { this_number = userspace_config.e0point; } else if (index == 1) { this_number = userspace_config.e1point; } else { this_number = 128; } switch (this_number) { case 0: strcpy(buffer, "Lateral "); break; case 1: strcpy(buffer, "Vertical"); break; case 2: strcpy(buffer, "Scr. Ver"); break; case 3: strcpy(buffer, "Scr. Lat"); break; default: strcpy(buffer, " -N/A- "); break; } break; # endif // MOUSEKEY_ENABLE default: // Get correct index if (index == 0) { this_number = userspace_config.e0base; } else if (index == 1) { this_number = userspace_config.e1base; } else { this_number = 128; } switch (this_number) { case 0: strcpy(buffer, "Volume "); break; case 1: strcpy(buffer, "Song "); break; case 2: strcpy(buffer, "Sink "); break; case 3: strcpy(buffer, "Src. Vol"); break; case 4: strcpy(buffer, "Source "); break; case 5: strcpy(buffer, "Arrow LR"); break; case 6: strcpy(buffer, "Arrow UD"); break; case 7: strcpy(buffer, "Page U/D"); break; case 8: strcpy(buffer, "Erase "); break; default: strcpy(buffer, " -N/A- "); break; } break; } } #endif // OLED_ENABLE
D users/bbaserdem/bb-encoder.h => users/bbaserdem/bb-encoder.h +0 -29
@@ 1,29 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #pragma once #include "bbaserdem.h" // Hook to encoder stuff bool encoder_update_user(uint8_t index, bool clockwise); // Complicated code for what the encoder keys do when pressed bool process_record_encoder(uint16_t keycode, keyrecord_t *record); // Clear the encoder settings void reset_encoder_state(void); // This is so that encoder state is synched between two halves void housekeeping_task_encoder(void); // This is purely for oled; should it want to use it void encoder_state_string(uint8_t index, uint8_t layer, char* buffer);
D users/bbaserdem/bb-macro.c => users/bbaserdem/bb-macro.c +0 -156
@@ 1,156 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #include "bb-macro.h" /* MACRO Definitions * This file has my macros/unicodes * Hooks for other functionality to inject itself into the process_record */ // Tap dance definitons #ifdef AUDIO_ENABLE #ifdef TAP_DANCE_ENABLE qk_tap_dance_action_t tap_dance_actions[] = { // Music playback speed modulator [TD_AUDIO_TEMPO] = ACTION_TAP_DANCE_DOUBLE(MU_SLOW, MU_FAST), }; #endif // AUDIO_ENABLE #endif // TAP_DANCE_ENABLE // Unicode definitions; for single character keys // We mask their definitions if unicode is not enabled #ifdef UNICODEMAP_ENABLE const uint32_t PROGMEM unicode_map[] = { [UPC_A_CIRC] = 0x00C2, [LOW_A_CIRC] = 0x00E2, // Â â [UPC_C_CEDI] = 0x00C7, [LOW_C_CEDI] = 0x00E7, // Ç ç [UPC_G_BREV] = 0x011E, [LOW_G_BREV] = 0x001F, // Ğ ğ [UPC_I_CIRC] = 0x00CE, [LOW_I_CIRC] = 0x00EE, // Î î [UPC_I_DOTL] = 0x0049, [LOW_I_DOTL] = 0x0131, // I ı [UPC_I_DOTT] = 0x0130, [LOW_I_DOTT] = 0x0069, // İ i [UPC_O_DIAE] = 0x00D6, [LOW_O_DIAE] = 0x00F6, // Ö ö [UPC_S_CEDI] = 0x015E, [LOW_S_CEDI] = 0x015F, // Ş ş [UPC_U_CIRC] = 0x00DB, [LOW_U_CIRC] = 0x00FB, // Û û [UPC_U_DIAE] = 0x00DC, [LOW_U_DIAE] = 0x00FC, // Ü ü [UPC_ALPHA] = 0x0391, [LOW_ALPHA] = 0x03B1, // Α α [UPC_BETA] = 0x0392, [LOW_BETA] = 0x03B2, // Β β [UPC_GAMMA] = 0x0393, [LOW_GAMMA] = 0x03B3, // Γ γ [UPC_DELTA] = 0x0394, [LOW_DELTA] = 0x03B4, // Δ δ [UPC_EPSILON] = 0x0395, [LOW_EPSILON] = 0x03B5, // Ε ε [UPC_ZETA] = 0x0396, [LOW_ZETA] = 0x03B6, // Ζ ζ [UPC_ETA] = 0x0397, [LOW_ETA] = 0x03B7, // Η η [UPC_THETA] = 0x0398, [LOW_THETA] = 0x03B8, // Θ θ [UPC_IOTA] = 0x0399, [LOW_IOTA] = 0x03B9, // Ι ι [UPC_KAPPA] = 0x039A, [LOW_KAPPA] = 0x03BA, // Κ κ [UPC_LAMBDA] = 0x039B, [LOW_LAMBDA] = 0x03BB, // Λ λ [UPC_MU] = 0x039C, [LOW_MU] = 0x03BC, // Μ μ [UPC_NU] = 0x039D, [LOW_NU] = 0x03BD, // Ν ν [UPC_XI] = 0x039E, [LOW_XI] = 0x03BE, // Ξ ξ [UPC_OMICRON] = 0x039F, [LOW_OMICRON] = 0x03BF, // Ο ο [UPC_PI] = 0x03A0, [LOW_PI] = 0x03C0, // Π π [UPC_RHO] = 0x03A1, [LOW_RHO] = 0x03C1, // Ρ ρ [UPC_SIGMA] = 0x03A3, [LOW_SIGMA] = 0x03C3, // Σ σ [UPC_TAU] = 0x03A4, [LOW_TAU] = 0x03C4, // Τ τ [UPC_UPSILON] = 0x03A5, [LOW_UPSILON] = 0x03C5, // Υ υ [UPC_PHI] = 0x03A6, [LOW_PHI] = 0x03C6, // Φ φ [UPC_CHI] = 0x03A7, [LOW_CHI] = 0x03C7, // Χ χ [UPC_PSI] = 0x03A8, [LOW_PSI] = 0x03C8, // Ψ ψ [UPC_OMEGA] = 0x03A9, [LOW_OMEGA] = 0x03C9, // Ω ω [ELLIPSIS] = 0x2026, // … [PLANCK_CON] = 0x210F, // ℏ [ANGSTROM] = 0x212B, // Å [BITCOIN] = 0x20BF // ₿ }; #endif // UNICODEMAP_ENABLE // Keycodes bool process_record_macro(uint16_t keycode, keyrecord_t *record) { switch (keycode) { // AltGr + Caps should change the oled layout variable case KC_CAPS_LOCK: if (record->event.pressed) { if (get_mods() & MOD_BIT(KC_RALT)) { userspace_config.layout = (userspace_config.layout + 1) % 3; } } return true; break; case BB_OLED: if (record->event.pressed) { if (get_mods() & MOD_MASK_SHIFT) { // Scroll in opposite direction userspace_config.layout = (userspace_config.layout + 4) % 3; } else { userspace_config.layout = (userspace_config.layout + 1) % 3; } } return false; break; // Plain macros case BB_PGPK: // My public PGP key if (record->event.pressed) { SEND_STRING("0B7151C823559DD8A7A04CE36426139E2F4C6CCE"); } return false; break; case DBL_ANG: // Double angular bracket if (record->event.pressed) { SEND_STRING("<>"SS_TAP(X_LEFT)); } return false; break; case DBL_PAR: // Double paranthesis if (record->event.pressed) { SEND_STRING("()"SS_TAP(X_LEFT)); } return false; break; case DBL_BRC: // Double square brackets if (record->event.pressed) { SEND_STRING("[]"SS_TAP(X_LEFT)); } return false; break; case DBL_CBR: // Double curly brackets if (record->event.pressed) { SEND_STRING("{}"SS_TAP(X_LEFT)); } return false; break; // Unicode macros # ifdef UNICODEMAP_ENABLE case TR_FLAG: // Turkish flag if (record->event.pressed) { send_unicode_string("🇹🇷"); } return false; break; case BB_LENY: // Lenny face: ( ͡° ͜ʖ ͡°) if (record->event.pressed) { send_unicode_string("( ͡° ͜ʖ ͡°)"); } return false; break; case BB_TABL: // Table flip: ┻━┻︵ \(°□°)/ ︵ ┻━┻ if (record->event.pressed) { send_unicode_string("┻━┻︵ \\(°□°)/ ︵ ┻━┻"); } return false; break; # endif // UNICODEMAP_ENABLE } return true; }
D users/bbaserdem/bb-macro.h => users/bbaserdem/bb-macro.h +0 -113
@@ 1,113 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #pragma once #include "bbaserdem.h" /* This header file contains definitons regarding custom keycodes. * - Both regular and unicode macros are dealt with in this file */ // These will be delegated to keymap specific stuff (weak definition) bool process_record_macro(uint16_t keycode, keyrecord_t *record); // Unicodemap implementation #ifdef UNICODEMAP_ENABLE enum userspace_unicodemap { UPC_A_CIRC, UPC_C_CEDI, UPC_G_BREV, UPC_I_CIRC, UPC_I_DOTL, UPC_I_DOTT, UPC_O_DIAE, UPC_S_CEDI, UPC_U_CIRC, UPC_U_DIAE, LOW_A_CIRC, LOW_C_CEDI, LOW_G_BREV, LOW_I_CIRC, LOW_I_DOTL, LOW_I_DOTT, LOW_O_DIAE, LOW_S_CEDI, LOW_U_CIRC, LOW_U_DIAE, ELLIPSIS, PLANCK_CON, ANGSTROM, MATHPI, BITCOIN, UPC_ALPHA, UPC_BETA, UPC_GAMMA, UPC_DELTA, UPC_EPSILON, UPC_ZETA, UPC_ETA, UPC_THETA, UPC_IOTA, UPC_KAPPA, UPC_LAMBDA, UPC_MU, UPC_NU, UPC_XI, UPC_OMICRON, UPC_PI, UPC_RHO, UPC_SIGMA, UPC_TAU, UPC_UPSILON, UPC_PHI, UPC_CHI, UPC_PSI, UPC_OMEGA, LOW_ALPHA, LOW_BETA, LOW_GAMMA, LOW_DELTA, LOW_EPSILON, LOW_ZETA, LOW_ETA, LOW_THETA, LOW_IOTA, LOW_KAPPA, LOW_LAMBDA, LOW_MU, LOW_NU, LOW_XI, LOW_OMICRON, LOW_PI, LOW_RHO, LOW_SIGMA, LOW_TAU, LOW_UPSILON, LOW_PHI, LOW_CHI, LOW_PSI, LOW_OMEGA, }; #endif // UNICODEMAP_ENABLE // Tap dance stuff #ifdef AUDIO_ENABLE #ifdef TAP_DANCE_ENABLE enum { TD_AUDIO_TEMPO, }; #endif // AUDIO_ENABLE #endif // TAP_DANCE_ENABLE
D users/bbaserdem/bb-oled-extra.c => users/bbaserdem/bb-oled-extra.c +0 -796
@@ 1,796 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #include "bb-oled.h" #include "bb-oled-extra.h" // Helper function that draws images void draw_image(uint8_t row, uint8_t col, const char image[4][42]) { // Draw this image iteratively for (int i = 0; i < 4; i++) { oled_set_cursor(col, row + i); oled_write_raw_P(image[i], 42); } } // Write modifiers to the screen void render_modifiers(uint8_t row, uint8_t col, uint8_t mods) { static const char PROGMEM mod_meta[12] = {0x00,0x01,0x01,0x01,0x01,0x06,0x18,0x60,0x81,0x81,0x81,0x81}; static const char PROGMEM mod_altL[12] = {0x00,0x80,0x80,0x80,0x40,0x20,0x10,0x08,0x84,0x95,0x8e,0x84}; static const char PROGMEM mod_altR[12] = {0x00,0x86,0x8f,0x8f,0x46,0x20,0x10,0x08,0x84,0x95,0x8e,0x84}; static const char PROGMEM mod_ctrl[12] = {0x00,0x00,0xbd,0x42,0xa5,0x99,0x99,0xa5,0x42,0xbd,0x00,0x00}; static const char PROGMEM mod_shft[12] = {0x00,0x20,0x30,0x28,0xe4,0x02,0x01,0x02,0xe4,0x28,0x30,0x20}; // Looks like Mods: <OS> <Alt/Gr> <Ctrl> <Shift> oled_set_cursor(col, row); oled_write("Mods: ", false); // Meta if (mods & MOD_MASK_GUI) { oled_write_raw_P(mod_meta, 12); oled_set_cursor(col + 8, row); } else { oled_write(" ", false); } // Alt(Gr) if (mods & MOD_BIT(KC_RALT)) { oled_write_raw_P(mod_altR, 12); oled_set_cursor(col + 10, row); } else if (mods & MOD_MASK_ALT) { oled_write_raw_P(mod_altL, 12); oled_set_cursor(col + 10, row); } else { oled_write(" ", false); } // Ctrl if (mods & MOD_MASK_CTRL) { oled_write_raw_P(mod_ctrl, 12); oled_set_cursor(col + 12, row); } else { oled_write(" ", false); } // Shift if (mods & MOD_MASK_SHIFT) { oled_write_raw_P(mod_shft, 12); oled_set_cursor(col + 14, row); } else { oled_write(" ", false); } } // Draws the image of the currently used layout void render_layout(uint8_t row, uint8_t col, uint8_t mods, bool isLeft) { // DVORAK static const char PROGMEM base0_L_dvor_nomod[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0x00,0x00,0x04,0x08,0x10,0x00,0x00,0x00, 0x00,0x0e,0x00,0x00,0x00,0x00,0x60,0xe0,0x00,0x00,0x00,0x00,0xc0,0xc0, 0x00,0x00,0x00,0xf8,0x90,0x88,0x88,0x70,0x00,0x78,0x80,0x80,0x40,0xf8 },{ 0x00,0x00,0xce,0x9c,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x00,0x00, 0x40,0x40,0x40,0x80,0x00,0x80,0x41,0x40,0x40,0x80,0x00,0x80,0x40,0x40, 0x40,0x80,0x00,0xc3,0x00,0x00,0x00,0xc0,0x00,0x00,0x42,0xd2,0x02,0x01 },{ 0x00,0x00,0x39,0x73,0x00,0x00,0x00,0xd8,0x06,0x01,0x00,0x00,0x00,0x02, 0x05,0x05,0x05,0x07,0x00,0x03,0x04,0x04,0x04,0x03,0x00,0x03,0x05,0x05, 0x85,0x05,0x00,0xc3,0x04,0x04,0x02,0x07,0x00,0x00,0x00,0x07,0x04,0x00 },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x00,0x00,0x03,0x0c,0x30,0xc0,0x00,0x00, 0xb6,0x76,0x00,0x00,0x00,0x1c,0x22,0x22,0x12,0xfe,0x00,0x00,0x80,0x82, 0x7e,0x00,0x00,0x3f,0x08,0x0c,0x12,0x20,0x00,0x22,0x14,0x08,0x14,0x22}}; static const char PROGMEM base0_L_dvor_shift[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0x00,0x20,0x10,0x20,0x40,0x20,0x00,0x00, 0x07,0x00,0x07,0x00,0x00,0x10,0x28,0x44,0x82,0x00,0x00,0x82,0x44,0x28, 0x10,0x00,0x00,0xfe,0x12,0x12,0x12,0x0c,0x00,0x06,0x08,0xf0,0x08,0x06 },{ 0x00,0x00,0xce,0x9c,0x00,0x00,0x00,0x00,0x00,0xf0,0x00,0x00,0x00,0xe0, 0x90,0x90,0x90,0xe0,0x00,0xe0,0x10,0x10,0x10,0xe0,0x00,0xf0,0x90,0x90, 0x90,0x10,0x00,0xf0,0x00,0x00,0x00,0xf0,0x00,0x00,0x10,0xf0,0x10,0x00 },{ 0x00,0x00,0x39,0x73,0x00,0x00,0x00,0x00,0x80,0x87,0x80,0x00,0x00,0x07, 0x00,0x00,0x00,0x07,0x00,0x03,0x84,0x84,0x84,0x03,0x00,0x07,0x04,0x04, 0x04,0x84,0x00,0x83,0x04,0x04,0x04,0x83,0x00,0x80,0x04,0x07,0x04,0x80 },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x00,0x01,0x00,0x28,0x04,0x03,0x00,0x00, 0x36,0x36,0x00,0x00,0x00,0x1f,0x20,0x28,0x10,0x6f,0x00,0x18,0x20,0x20, 0x20,0x1f,0x00,0x3f,0x04,0x0a,0x11,0x20,0x00,0x31,0x0a,0x04,0x0a,0x31}}; static const char PROGMEM base0_R_dvor_nomod[4][42] = { { 0x00,0xfc,0x12,0x12,0x00,0x00,0x70,0x88,0x88,0x48,0xf8,0x00,0x70,0x88, 0x88,0x88,0x88,0x00,0xf8,0x10,0x08,0x08,0x10,0x00,0x00,0x02,0x7e,0x80, 0x80,0x00,0x10,0x28,0x44,0x82,0x00,0x00,0x00,0x00,0xe7,0x73,0x00,0x00 },{ 0x00,0x80,0x80,0x80,0xf0,0x00,0xf0,0x02,0x82,0x82,0x01,0x00,0x00,0x80, 0xf0,0x80,0x80,0x00,0xc0,0x40,0x40,0x40,0x80,0x00,0x80,0x40,0x40,0x40, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0xce,0x00,0x00 },{ 0x83,0x04,0x04,0x02,0x07,0x00,0x07,0x01,0x00,0x00,0x07,0x00,0x00,0x00, 0x03,0x04,0x04,0x00,0x07,0x00,0x00,0x00,0x07,0x00,0x04,0x05,0x05,0x05, 0x02,0x00,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x73,0x39,0x00,0x00 },{ 0x3f,0x24,0x22,0x22,0x1c,0x00,0x3e,0x02,0x3e,0x02,0x3c,0x00,0x1e,0x20, 0x1c,0x20,0x1e,0x00,0x06,0x18,0x20,0x18,0x06,0x00,0x22,0x32,0x2a,0x26, 0x22,0x00,0x14,0x14,0x14,0x14,0x14,0x00,0x00,0x00,0xce,0xe7,0x00,0x00}}; static const char PROGMEM base0_R_dvor_shift[4][42] = { { 0xfe,0x12,0x12,0x12,0x02,0x00,0xfc,0x02,0x12,0x12,0xf4,0x00,0xfc,0x02, 0x02,0x02,0x84,0x00,0xfe,0x12,0x12,0x32,0xcc,0x00,0xfe,0x00,0x00,0x00, 0x00,0x00,0x04,0x88,0x50,0x20,0x00,0x00,0x00,0x00,0xe7,0x73,0x00,0x00 },{ 0xf1,0x10,0x10,0x10,0xe0,0x00,0xf0,0x81,0x81,0x81,0xf0,0x00,0x10,0x11, 0xf1,0x11,0x10,0x00,0xf1,0x60,0x80,0x00,0xf1,0x00,0x61,0x91,0x91,0x91, 0x21,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0xce,0x00,0x00 },{ 0x8f,0x88,0x88,0x88,0x07,0x00,0x8f,0x00,0x00,0x00,0x8f,0x00,0x80,0x00, 0x0f,0x00,0x80,0x00,0x8f,0x00,0x01,0x06,0x8f,0x00,0x84,0x88,0x88,0x88, 0x87,0x00,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x73,0x39,0x00,0x00 },{ 0x7f,0x44,0x44,0x44,0x3b,0x00,0x7f,0x01,0x06,0x01,0x7f,0x00,0x1f,0x60, 0x1c,0x60,0x1f,0x00,0x07,0x18,0x60,0x18,0x07,0x00,0x70,0x48,0x44,0x42, 0x41,0x00,0x08,0x08,0x3e,0x08,0x08,0x00,0x00,0x00,0xce,0xe7,0x00,0x00}}; static const char PROGMEM symb5_R_dvor[4][42] = { { 0x00,0x02,0x04,0x08,0x00,0x00,0x20,0x20,0xdc,0x02,0x02,0x00,0x02,0x02, 0xdc,0x20,0x20,0x00,0x00,0xc0,0x30,0x0c,0x03,0x00,0x50,0x50,0x50,0x50, 0x50,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe7,0x73,0x00,0x00 },{ 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0xf0,0x11,0x12,0x02,0x00,0x02,0x12, 0x11,0xf0,0x00,0x00,0x43,0x20,0x20,0x20,0xc0,0x00,0x00,0x00,0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0xce,0x00,0x00 },{ 0x01,0x80,0x41,0x82,0x01,0x00,0x00,0x1f,0x10,0x90,0x00,0x00,0x00,0x90, 0x10,0x1f,0x00,0x00,0xc0,0x00,0x14,0x03,0x00,0x00,0x01,0x01,0x87,0x01, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x39,0x00,0x00 },{ 0x22,0xf3,0x0a,0xf3,0x22,0x00,0x00,0x1c,0x63,0x80,0x00,0x00,0x00,0x80, 0x63,0x1c,0x00,0x00,0x00,0x03,0x0c,0x30,0xc0,0x00,0x00,0x00,0x7f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xce,0xe7,0x00,0x00}}; static const char PROGMEM numb6_L_dvor_nomod[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20, 0x50,0x88,0x04,0x00,0x00,0x04,0x04,0xc4,0x34,0x0c,0x00,0xd8,0x24,0x24, 0x24,0xd8,0x00,0x18,0x24,0x24,0x24,0xf8,0x00,0xf8,0x44,0x24,0x14,0xf8 },{ 0x00,0x00,0xce,0x9c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x80,0x41,0xe0,0x00,0x00,0xe0,0xa1,0xa1, 0xa1,0x20,0x00,0xc0,0xa1,0xa1,0xa1,0x00,0x00,0x00,0x01,0x01,0x01,0x00 },{ 0x00,0x00,0x39,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08, 0x08,0x08,0x08,0x08,0x00,0x03,0x02,0x02,0x0f,0x02,0x00,0x04,0x08,0x08, 0x08,0x07,0x00,0x07,0x08,0x08,0x08,0x07,0x00,0x01,0x01,0x01,0x01,0x00 },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41, 0x22,0x14,0x08,0x00,0x00,0x00,0x04,0x02,0x7f,0x00,0x00,0x42,0x61,0x51, 0x49,0x46,0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x5e,0x61,0x01,0x61,0x5e}}; static const char PROGMEM numb6_L_dvor_shift[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xd8,0x24,0x54,0x88,0x40,0x00,0x50,0x20,0xf8, 0x20,0x50,0x00,0x00,0x38,0xc6,0x01,0x00,0x00,0x00,0x01,0xc6,0x38,0x00 },{ 0x00,0x00,0xce,0x9c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x60,0x91,0xf9,0x90,0x21,0x00,0x20,0x50,0x20, 0x80,0x60,0x00,0x40,0x20,0x10,0x21,0x40,0x00,0x00,0x01,0x00,0x00,0x00 },{ 0x00,0x00,0x39,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x04,0x8f,0x04,0x03,0x00,0x0c,0x02,0x09, 0x14,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x3e,0x41,0x5d, 0x55,0x5e,0x00,0x14,0x7f,0x14,0x7f,0x14,0x00,0x00,0x00,0x00,0x00,0x00}}; // Turkish F static const char PROGMEM base0_L_turf_nomod[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0x00,0x10,0x10,0x7c,0x10,0x10,0x00,0x00, 0xfe,0x09,0x09,0x00,0x00,0x70,0x88,0x88,0x48,0xf8,0x00,0x51,0xaa,0xaa, 0x92,0x09,0x00,0x00,0x88,0xf8,0x80,0x00,0x00,0x70,0x88,0x88,0x88,0x70 },{ 0x00,0x00,0xce,0x9c,0x00,0x00,0x00,0x40,0x80,0x00,0x80,0x40,0x00,0xc0, 0x00,0x00,0x00,0xc0,0x00,0x00,0x42,0xd2,0x02,0x01,0x00,0x81,0x42,0x42, 0x42,0x81,0x00,0x00,0x40,0x40,0x40,0x80,0x00,0xc0,0x10,0x00,0x10,0xc0 },{ 0x00,0x00,0x39,0x73,0x00,0x00,0x00,0x04,0x02,0x01,0x02,0x04,0x00,0x03, 0x04,0x04,0x82,0x07,0x00,0x00,0x80,0x07,0x84,0x00,0x00,0x03,0x05,0x05, 0x05,0x05,0x00,0x02,0x05,0x05,0x05,0x07,0x00,0x03,0x04,0x04,0x02,0x07 },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x00,0x1c,0x22,0x22,0x12,0xfe,0x00,0x00, 0x80,0x82,0x7e,0x00,0x00,0x1c,0x22,0x22,0x22,0x1c,0x00,0x06,0x18,0x20, 0x18,0x06,0x00,0x1c,0x22,0x22,0x22,0x22,0x00,0x1c,0xa2,0x62,0x22,0x22}}; static const char PROGMEM base0_L_turf_shift[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0x00,0x28,0x10,0x7c,0x10,0x28,0x00,0xfe, 0x12,0x12,0x12,0x02,0x00,0xfc,0x02,0x12,0x12,0xf4,0x00,0xf1,0x0a,0x4a, 0x4a,0xd1,0x00,0x00,0x02,0xfe,0x02,0x00,0x00,0xfc,0x02,0x02,0x02,0xfc },{ 0x00,0x00,0xce,0x9c,0x00,0x00,0x00,0x30,0x40,0x80,0x40,0x30,0x00,0xf1, 0x00,0x00,0x00,0xf0,0x00,0x00,0x21,0xe9,0x21,0x00,0x00,0xf1,0x92,0x92, 0x92,0x11,0x00,0xe0,0x91,0x91,0x91,0xe0,0x00,0xe0,0x09,0x01,0x09,0xe0 },{ 0x00,0x00,0x39,0x73,0x00,0x00,0x00,0x0e,0x81,0x80,0x81,0x0e,0x00,0x07, 0x08,0x08,0x08,0x87,0x00,0x00,0x50,0x1f,0x50,0x00,0x00,0x8f,0x08,0x08, 0x08,0x88,0x00,0x0f,0x80,0x80,0x80,0x0f,0x00,0x8f,0x50,0x50,0x50,0x8f },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x00,0x3f,0x40,0x50,0x20,0xdf,0x00,0x30, 0x40,0x40,0x40,0x3f,0x00,0x7e,0x81,0x81,0x81,0x7e,0x00,0x07,0x18,0x60, 0x18,0x07,0x00,0x3f,0x40,0x40,0x40,0x21,0x00,0x1f,0xa0,0x60,0x20,0x10}}; static const char PROGMEM base0_L_turf_altgr[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0x00,0x10,0x10,0x10,0x30,0x00,0x00,0xf0, 0x08,0xe8,0xa8,0xf0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x0c,0x1e,0xfe,0x02,0xfe,0x00,0x70,0x8a,0x89,0x8a,0x70 },{ 0x00,0x00,0xce,0x9c,0x00,0x00,0x00,0x00,0x10,0x20,0x40,0x00,0x00,0xc1, 0x12,0x0a,0x12,0xc2,0x00,0x00,0x10,0xc8,0x10,0x00,0x00,0x40,0xe0,0x50, 0x10,0x20,0x00,0x00,0x50,0x48,0x50,0x80,0x00,0xc0,0x10,0x08,0x10,0xc0 },{ 0x00,0x00,0x39,0x73,0x00,0x00,0x00,0x00,0x80,0x00,0x80,0x00,0x00,0x03, 0x04,0x04,0x02,0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x01,0x83,0x05, 0x04,0x82,0x00,0x02,0x05,0x05,0x05,0x07,0x00,0x83,0x84,0x04,0x82,0x87 },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x00,0x00,0x3e,0x3e,0x3e,0x00,0x08,0x14, 0x22,0x08,0x14,0x22,0x00,0x22,0x14,0x08,0x22,0x14,0x08,0x03,0x02,0x00, 0x03,0x02,0x00,0x1c,0x22,0x7f,0x22,0x22,0x00,0x02,0x01,0x00,0x02,0x01}}; static const char PROGMEM base0_L_turf_shfgr[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0x00,0x90,0x90,0xfc,0x90,0x90,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf0,0x0a,0x09,0x0a,0xf0 },{ 0x00,0x00,0xce,0x9c,0x00,0x00,0x00,0x00,0x88,0x90,0xa0,0x00,0x00,0xc0, 0x10,0x08,0x10,0xc0,0x00,0x00,0x50,0xc8,0x50,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x80,0x50,0x48,0x50,0x80,0x00,0xc1,0x12,0x0a,0x12,0xc1 },{ 0x00,0x00,0x39,0x73,0x00,0x00,0x00,0x00,0x8f,0x4f,0x8f,0x00,0x00,0x0f, 0x10,0x10,0x90,0x0f,0x00,0x80,0x10,0x1f,0x10,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1f,0x82,0x82,0x82,0x1f,0x00,0x0f,0x10,0x10,0x10,0x0f },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x00,0x00,0x7c,0x7d,0x7c,0x00,0x00,0x04, 0x0a,0x11,0x20,0x00,0x00,0x20,0x11,0x0a,0x04,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x1f,0x24,0x2a,0x20,0x1f,0x00,0x00,0x00,0x00,0x00,0x00}}; static const char PROGMEM base0_R_turf_nomod[4][42] = { { 0x70,0x88,0x88,0x48,0xff,0x00,0xf8,0x10,0x08,0x08,0x10,0x00,0xf8,0x08, 0x08,0x08,0xf0,0x00,0xff,0x10,0x08,0x08,0xf0,0x00,0xf8,0x90,0x88,0x88, 0x70,0x00,0x10,0x28,0x44,0x82,0x00,0x00,0x00,0x00,0xe7,0x73,0x00,0x00 },{ 0x40,0xf8,0x40,0x40,0x00,0x00,0xf8,0x00,0x80,0x40,0x00,0x00,0xc0,0x40, 0xc0,0x40,0x80,0x00,0x08,0xf8,0x00,0x00,0x00,0x00,0xc3,0x00,0x00,0x00, 0xc0,0x00,0x80,0x40,0x40,0x40,0x00,0x00,0x00,0x00,0x9c,0xce,0x00,0x00 },{ 0x00,0x03,0x04,0x04,0x00,0x00,0x07,0x01,0x01,0x02,0x04,0x00,0xc7,0x00, 0x07,0x00,0x07,0x00,0x00,0x03,0x04,0x04,0x00,0x00,0x03,0x14,0x14,0x12, 0x0f,0x00,0x04,0x15,0x0d,0x05,0x02,0x00,0x00,0x00,0x73,0x39,0x00,0x00 },{ 0x22,0x32,0x2a,0x26,0x22,0x00,0x24,0x2a,0x2a,0x2a,0x10,0x00,0x3f,0x24, 0x22,0x22,0x1c,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0xb0,0x70,0x00, 0x00,0x00,0x1e,0x20,0x1c,0x20,0x1e,0x00,0x00,0x00,0xce,0xe7,0x00,0x00}}; static const char PROGMEM base0_R_turf_shift[4][42] = { { 0xfe,0x02,0x02,0x02,0xfc,0x00,0xfe,0x12,0x12,0x32,0xcc,0x00,0xfe,0x0c, 0x30,0xc0,0xfe,0x00,0xfe,0x10,0x10,0x10,0xfe,0x00,0xfe,0x12,0x12,0x12, 0x0c,0x00,0x82,0x44,0x28,0x10,0x00,0x00,0x00,0x00,0xe7,0x73,0x00,0x00 },{ 0x11,0x11,0xf1,0x11,0x10,0x00,0xf1,0x80,0x40,0x20,0x11,0x00,0xf1,0x20, 0xc0,0x20,0xf1,0x00,0xf1,0x00,0x00,0x00,0x01,0x00,0x31,0x40,0x80,0x40, 0x30,0x00,0x30,0x48,0x48,0x48,0x90,0x00,0x00,0x00,0x9c,0xce,0x00,0x00 },{ 0x80,0x80,0x8f,0x80,0x80,0x00,0x0f,0x80,0x81,0x82,0x0c,0x00,0x8f,0x80, 0x80,0x80,0x0f,0x00,0x0f,0x08,0x08,0x08,0x08,0x00,0x00,0x00,0x0f,0x00, 0x00,0x00,0x82,0x14,0x0c,0x04,0x83,0x00,0x00,0x00,0x73,0x39,0x00,0x00 },{ 0x70,0x48,0x44,0x42,0x41,0x00,0x23,0x44,0x44,0x44,0x39,0x00,0x7f,0x44, 0x44,0x44,0x3b,0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0xb6,0x76,0x00, 0x00,0x00,0x1f,0x60,0x1c,0x60,0x1f,0x00,0x00,0x00,0xce,0xe7,0x00,0x00}}; static const char PROGMEM base0_R_turf_altgr[4][42] = { { 0x53,0x54,0xf8,0x54,0x53,0x00,0x7c,0xba,0x8a,0x8a,0x7c,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x0c,0x12,0x12,0x0c,0x00,0x00,0x20,0xfc,0x22,0x02, 0x84,0x00,0x00,0x00,0xff,0x00,0x00,0x00,0x00,0x00,0xe7,0x73,0x00,0x00 },{ 0x80,0x80,0xf1,0xa0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x00, 0x00,0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x20,0x11,0x01, 0x00,0x00,0x40,0xf0,0x41,0xf0,0x40,0x00,0x00,0x00,0x9c,0xce,0x00,0x00 },{ 0x02,0x01,0x0f,0x08,0x08,0x06,0x83,0x40,0x40,0x40,0x00,0x00,0x0f,0x02, 0x04,0x04,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x07,0x01,0x07,0x01,0x00,0x00,0x00,0x73,0x39,0x00,0x00 },{ 0x00,0x00,0x00,0x00,0x00,0x00,0x47,0x4a,0x4a,0x3c,0x00,0x00,0x11,0x0a, 0x04,0x0a,0x11,0x00,0x04,0x04,0x15,0x04,0x04,0x00,0x00,0x00,0x04,0x00, 0x00,0x00,0x04,0x02,0x04,0x08,0x04,0x00,0x00,0x00,0xce,0xe7,0x00,0x00}}; static const char PROGMEM base0_R_turf_shfgr[4][42] = { { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0xef,0x00,0x00,0x00,0x00,0x00,0xe7,0x73,0x00,0x00 },{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xa0,0x90,0x88, 0x00,0x00,0x00,0x90,0xa1,0x90,0x00,0x00,0x00,0x00,0x9c,0xce,0x00,0x00 },{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x0f, 0x00,0x00,0x00,0x0f,0x0f,0x0f,0x00,0x00,0x00,0x00,0x73,0x39,0x00,0x00 },{ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c,0x7d,0x7c, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xce,0xe7,0x00,0x00}}; static const char PROGMEM symb5_R_turf_nomod[4][42] = { { 0x20,0x20,0xf8,0x20,0x20,0x00,0x00,0xc0,0x30,0x0c,0x03,0x00,0x20,0x20, 0x20,0x20,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe7,0x73,0x00,0x00 },{ 0x80,0x00,0xc0,0x00,0x80,0x00,0x43,0x20,0x20,0x20,0xc0,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0xce,0x00,0x00 },{ 0x02,0x81,0x47,0x81,0x02,0x00,0x00,0x00,0x0a,0x01,0x00,0x00,0x04,0x04, 0x04,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x39,0x00,0x00 },{ 0x22,0xf3,0x0a,0xf3,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xce,0xe7,0x00,0x00}}; static const char PROGMEM symb5_R_turf_altgr[4][42] = { { 0x10,0x10,0x10,0x30,0x00,0x00,0x03,0x0c,0x30,0xc0,0x00,0x00,0x00,0x00, 0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe7,0x73,0x00,0x00 },{ 0x80,0x80,0xe0,0x80,0x80,0x00,0x00,0x00,0xa0,0x00,0x03,0x00,0x00,0x00, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0xce,0x00,0x00 },{ 0x04,0x84,0x47,0x84,0x04,0x00,0x06,0x09,0x08,0x08,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,0x73,0x39,0x00,0x00 },{ 0x22,0xf3,0x0a,0xf3,0x22,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xce,0xe7,0x00,0x00}}; static const char PROGMEM numb6_L_turf_nomod[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20, 0x50,0x88,0x04,0x00,0x00,0x04,0x04,0xc4,0x34,0x0c,0x00,0xd8,0x24,0x24, 0x24,0xd8,0x00,0x18,0x24,0x24,0x24,0xf8,0x00,0xf8,0x44,0x24,0x14,0xf8 },{ 0x00,0x00,0xce,0x9c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x01,0x00,0x00,0x00,0x80,0x41,0xe0,0x00,0x00,0xe0,0xa1,0xa1, 0xa1,0x20,0x00,0xc0,0xa1,0xa1,0xa1,0x00,0x00,0x00,0x01,0x01,0x01,0x00 },{ 0x00,0x00,0x39,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x02,0x0f,0x02,0x00,0x04,0x08,0x08, 0x08,0x07,0x00,0x07,0x08,0x08,0x08,0x07,0x00,0x00,0x00,0x00,0x00,0x00 },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41, 0x22,0x14,0x08,0x00,0x00,0x00,0x04,0x02,0x7f,0x00,0x00,0x42,0x61,0x51, 0x49,0x46,0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x5e,0x61,0x01,0x61,0x5e}}; static const char PROGMEM numb6_L_turf_shift[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04, 0x88,0x50,0x20,0x00,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x00,0x38,0xc6, 0x01,0x00,0x00,0x00,0x01,0xc6,0x38,0x00,0x00,0x50,0x50,0x50,0x50,0x50 },{ 0x00,0x00,0xce,0x9c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01, 0x00,0x00,0x00,0x00,0x00,0x60,0x90,0xf8,0x90,0x20,0x00,0x20,0x50,0x20, 0x81,0x60,0x00,0x70,0x89,0x48,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },{ 0x00,0x00,0x39,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x04,0x8f,0x04,0x03,0x00,0x0c,0x82,0x09, 0x94,0x08,0x00,0x07,0x08,0x89,0x06,0x09,0x00,0x00,0x00,0x00,0x00,0x00 },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41, 0x22,0x14,0x08,0x00,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x00,0x03,0x00, 0x03,0x00,0x00,0x02,0x01,0x00,0x01,0x02,0x00,0x5e,0x61,0x01,0x61,0x5e}}; static const char PROGMEM numb6_L_turf_altgr[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xff,0x00,0x00,0x00,0x10,0x10,0xee,0x01,0x01,0x00,0x00,0xff,0x01, 0x01,0x00,0x00,0x00,0x01,0x01,0xff,0x00,0x00,0x01,0x01,0xee,0x10,0x10 },{ 0x00,0x00,0xce,0x9c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x01,0x00,0x00,0x00,0x10,0xf8,0x00,0x01,0x01,0x00,0x10,0xf9,0x01, 0x01,0x00,0x00,0x88,0xa9,0x51,0x01,0x00,0x00,0x01,0x01,0x00,0x00,0x00 },{ 0x00,0x00,0x39,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xc0,0x00,0x00,0x00,0x00,0x08,0x8c,0x0a,0x1f,0x00,0x00,0x00,0x90, 0x90,0x10,0x00,0x00,0x08,0x0c,0x0a,0x1f,0x00,0x00,0x00,0x00,0x00,0x00 },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x7b,0x00,0x00,0x00,0x00,0x09,0x0f,0x08,0x00,0x00,0x00,0x09,0x0c, 0x0a,0x09,0x00,0x14,0x7f,0x14,0x7f,0x14,0x00,0x5e,0x61,0x01,0x61,0x5e}}; static const char PROGMEM numb6_L_turf_shfgr[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xef,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x90,0x90,0xfc, 0x90,0x90,0x00,0x06,0x09,0x09,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },{ 0x00,0x00,0xce,0x9c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x88,0xa8,0x50, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },{ 0x00,0x00,0x39,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xc0,0x00,0x00,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x00,0x0a, 0x15,0x0a,0x00,0x40,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x7b,0x00,0x00,0x00,0x00,0x00,0x3f,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x04,0x05,0x05,0x02,0x00,0x00,0x5e,0x61,0x01,0x61,0x5e}}; // QWERTY static const char PROGMEM base0_L_qwer_nomod[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0x00,0x00,0x04,0x08,0x10,0x00,0x00,0x70, 0x88,0x88,0x48,0xf8,0x00,0x78,0x80,0x70,0x80,0x78,0x00,0x70,0xa8,0xa8, 0xa8,0xb0,0x00,0xf8,0x10,0x08,0x08,0x10,0x00,0x08,0x7f,0x88,0x88,0x00 },{ 0x00,0x00,0xce,0x9c,0x00,0x00,0x00,0x18,0x60,0x80,0x00,0x00,0x00,0x00, 0x40,0x40,0x40,0x83,0x00,0x80,0x40,0x40,0x40,0x00,0x00,0x80,0x40,0x40, 0x40,0xf8,0x00,0x00,0xf0,0x48,0x48,0x00,0x00,0x80,0x40,0x40,0x40,0xc0 },{ 0x00,0x00,0x39,0x73,0x00,0x00,0x00,0x00,0xc0,0x41,0x46,0x18,0x00,0x02, 0x05,0x05,0x05,0x07,0x00,0x04,0x05,0x05,0x05,0x02,0x00,0x03,0x04,0x04, 0x02,0x07,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0xc3,0x14,0x14,0x12,0x0f },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x00,0x00,0xff,0x80,0x80,0x00,0x00,0x22, 0x32,0x2a,0x26,0x22,0x00,0x22,0x14,0x08,0x14,0x22,0x00,0x1c,0x22,0x22, 0x22,0x22,0x00,0x06,0x18,0x20,0x18,0x06,0x00,0x3f,0x24,0x22,0x22,0x1c}}; static const char PROGMEM base0_L_qwer_shift[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0x00,0x20,0x10,0x20,0x40,0x20,0x00,0xfc, 0x02,0x42,0x82,0x7c,0x00,0x7e,0x80,0x70,0x80,0x7e,0x00,0xfe,0x12,0x12, 0x12,0x02,0x00,0xfe,0x12,0x12,0x32,0xcc,0x00,0x02,0x02,0xfe,0x02,0x02 },{ 0x00,0x00,0xce,0x9c,0x00,0x00,0x00,0x00,0x00,0xf8,0x00,0x00,0x00,0xe0, 0x91,0x91,0x90,0xe3,0x00,0x60,0x91,0x90,0x91,0x20,0x00,0xf1,0x11,0x11, 0x11,0xe1,0x00,0xf1,0x90,0x90,0x90,0x11,0x00,0xe0,0x10,0x91,0x90,0xa0 },{ 0x00,0x00,0x39,0x73,0x00,0x00,0x00,0x00,0x00,0x9f,0x40,0x40,0x00,0x8f, 0x80,0x80,0x80,0x8f,0x00,0x84,0x08,0x08,0x08,0x87,0x00,0x0f,0x88,0x88, 0x88,0x07,0x00,0x8f,0x00,0x00,0x00,0x80,0x00,0x87,0x88,0x88,0x88,0x07 },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x00,0x04,0x04,0x7b,0x80,0x80,0x00,0x70, 0x48,0x44,0x42,0x41,0x00,0x71,0x0a,0x04,0x0a,0x71,0x00,0x3f,0x40,0x40, 0x40,0x21,0x00,0x07,0x18,0x60,0x18,0x07,0x00,0x7f,0x44,0x44,0x44,0x3b}}; static const char PROGMEM base0_R_qwer_nomod[4][42] = { { 0x78,0x80,0x80,0x40,0xf8,0x00,0x78,0x80,0x80,0x40,0xf8,0x00,0x00,0x08, 0xfa,0x80,0x00,0x00,0x70,0x88,0x88,0x88,0x70,0x00,0xf8,0x90,0x88,0x88, 0x70,0x00,0x10,0x28,0x44,0x82,0x00,0x00,0x00,0x00,0xe7,0x73,0x00,0x00 },{ 0xf8,0x82,0x42,0x42,0x81,0x00,0x00,0x00,0x40,0xd0,0x00,0x00,0xf8,0x00, 0x80,0x40,0x00,0x00,0x08,0xf8,0x00,0x00,0x00,0x00,0x03,0xc0,0xc0,0x00, 0x00,0x00,0x00,0x00,0x70,0x00,0x00,0x00,0x00,0x00,0x9c,0xce,0x00,0x00 },{ 0x07,0x00,0x00,0x00,0x07,0x00,0x00,0x10,0x10,0x0f,0x00,0x00,0x07,0x01, 0x01,0x02,0x04,0x00,0x00,0x03,0x04,0x04,0x00,0x00,0x00,0x16,0x0e,0x00, 0xc0,0x00,0x00,0x40,0x40,0xc0,0x00,0x00,0x00,0x00,0x73,0x39,0x00,0x00 },{ 0x3e,0x02,0x02,0x02,0x3c,0x00,0x3e,0x02,0x3e,0x02,0x3c,0x00,0x00,0xb0, 0x70,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0xc0,0x30,0x0c,0x03, 0x00,0x00,0x00,0x80,0x80,0xff,0x00,0x00,0x00,0x00,0xce,0xe7,0x00,0x00}}; static const char PROGMEM base0_R_qwer_shift[4][42] = { { 0x06,0x08,0xf0,0x08,0x06,0x00,0xfe,0x00,0x00,0x00,0xfe,0x00,0x00,0x02, 0xfe,0x02,0x00,0x00,0xfc,0x02,0x02,0x02,0xfc,0x00,0xfe,0x12,0x12,0x12, 0x0c,0x00,0x82,0x44,0x28,0x10,0x00,0x00,0x00,0x00,0xe7,0x73,0x00,0x00 },{ 0xf0,0x80,0x81,0x80,0xf0,0x00,0x00,0x01,0x01,0x01,0xf0,0x00,0xf0,0x81, 0x41,0x21,0x10,0x00,0xf0,0x01,0x01,0x01,0x00,0x00,0x01,0xc0,0xc0,0x00, 0x00,0x00,0x00,0x70,0x00,0x70,0x00,0x00,0x00,0x00,0x9c,0xce,0x00,0x00 },{ 0x8f,0x00,0x00,0x00,0x8f,0x00,0x86,0x08,0x08,0x08,0x87,0x00,0x0f,0x00, 0x01,0x82,0x0c,0x00,0x8f,0x08,0x08,0x08,0x08,0x00,0x00,0x86,0x86,0x80, 0x00,0x00,0x00,0x40,0x40,0x80,0x00,0x00,0x00,0x00,0x73,0x39,0x00,0x00 },{ 0x7f,0x03,0x0c,0x30,0x7f,0x00,0x7f,0x01,0x06,0x01,0x7f,0x00,0x04,0x0a, 0x11,0x20,0x00,0x00,0x20,0x11,0x0a,0x04,0x00,0x00,0x01,0x00,0x28,0x04, 0x03,0x00,0x00,0x80,0x80,0x7b,0x04,0x00,0x00,0x00,0xce,0xe7,0x00,0x00}}; static const char PROGMEM symb5_R_qwer[4][42] = { { 0x00,0x04,0x08,0x10,0x00,0x00,0x20,0x20,0x20,0x20,0x20,0x00,0x50,0x50, 0x50,0x50,0x50,0x00,0x10,0x10,0xee,0x01,0x01,0x00,0x01,0x01,0xee,0x10, 0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe7,0x73,0x00,0x00 },{ 0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xc0,0x00,0x00,0x00,0x00,0xf8,0x09,0x0a,0x02,0x00,0x02,0x0a,0x09,0xf8, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0xce,0x00,0x00 },{ 0x01,0x80,0x41,0x82,0x01,0x00,0x04,0x04,0x84,0x44,0x04,0x00,0x01,0x41, 0x87,0x01,0x01,0x00,0xc0,0x1f,0x10,0x10,0x00,0x00,0x00,0x10,0xd0,0x1f, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x39,0x00,0x00 },{ 0x22,0xf3,0x0a,0xf3,0x22,0x00,0x00,0x1e,0x61,0x80,0x00,0x00,0x00,0x80, 0x61,0x1e,0x00,0x00,0x00,0x03,0x0c,0x30,0xc0,0x00,0x00,0x00,0xff,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xce,0xe7,0x00,0x00}}; static const char PROGMEM numb6_L_qwer_nomod[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x20, 0x50,0x88,0x04,0x00,0x00,0x04,0x04,0xc4,0x34,0x0c,0x00,0xd8,0x24,0x24, 0x24,0xd8,0x00,0x18,0x24,0x24,0x24,0xf8,0x00,0xf8,0x44,0x24,0x14,0xf8 },{ 0x00,0x00,0xce,0x9c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x70,0x00,0x71,0x00,0x00,0x00,0x80,0x41,0xe0,0x00,0x00,0xe0,0xa1,0xa1, 0xa1,0x20,0x00,0xc0,0xa1,0xa1,0xa1,0x00,0x00,0x00,0x01,0x71,0x01,0x00 },{ 0x00,0x00,0x39,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x03,0x02,0x02,0x0f,0x02,0x00,0x04,0x08,0x08, 0x08,0x07,0x00,0x07,0x08,0x08,0x08,0x07,0x00,0x00,0x00,0x00,0x00,0x00 },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x41, 0x22,0x14,0x08,0x00,0x00,0x00,0x04,0x02,0x7f,0x00,0x00,0x42,0x61,0x51, 0x49,0x46,0x00,0x22,0x41,0x49,0x49,0x36,0x00,0x5e,0x61,0x01,0x61,0x5e}}; static const char PROGMEM numb6_L_qwer_shift[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0xd8,0x24,0x54,0x88,0x40,0x00,0x50,0x20,0xf8, 0x20,0x50,0x00,0x00,0x38,0xc6,0x01,0x00,0x00,0x00,0x01,0xc6,0x38,0x00 },{ 0x00,0x00,0xce,0x9c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x70,0x00,0x70,0x00,0x00,0x60,0x91,0xf9,0x90,0x21,0x00,0x20,0x50,0x20, 0x80,0x60,0x00,0x40,0x20,0x10,0x21,0x40,0x00,0x00,0x71,0x00,0x70,0x00 },{ 0x00,0x00,0x39,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x02,0x04,0x8f,0x04,0x03,0x00,0x0c,0x02,0x09, 0x14,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5f,0x00,0x00,0x00,0x3e,0x41,0x5d, 0x55,0x5e,0x00,0x14,0x7f,0x14,0x7f,0x14,0x00,0x00,0x00,0x00,0x00,0x00}}; // UNIVERSAL static const char PROGMEM char1_L[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xe2,0xae,0x42,0x00,0x00,0x20,0x44,0x40,0x4c,0x20,0x00,0x12,0xa4,0x88, 0xa4,0x12,0x00,0x08,0xf8,0x08,0xf8,0x08,0x00,0x78,0x80,0x80,0x80,0x78 },{ 0x00,0x00,0xce,0x9c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80, 0x41,0x40,0x41,0x80,0x00,0x80,0x40,0x40,0x40,0x80,0x00,0x81,0x40,0x40, 0x40,0x81,0x00,0xc0,0x00,0xc0,0x00,0xc0,0x00,0x00,0xc0,0x00,0x00,0x00 },{ 0x00,0x00,0x39,0x73,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x83, 0xc4,0x84,0xc2,0x07,0x00,0x03,0x04,0x04,0x04,0x03,0x00,0x02,0x85,0x05, 0x04,0x82,0x00,0x03,0x04,0x1f,0x04,0x03,0x00,0x80,0x83,0x84,0x82,0x80 },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7f, 0xc4,0x44,0xef,0x3b,0x00,0x3e,0x49,0x49,0x49,0x3e,0x00,0x02,0x7f,0x09, 0x09,0x78,0x00,0x3e,0x08,0x08,0x14,0x22,0x00,0x20,0x24,0x24,0x24,0x20}}; static const char PROGMEM char1_R[4][42] = { { 0x70,0x88,0xf0,0x88,0x70,0x00,0xfe,0x02,0x02,0x02,0x06,0x00,0x88,0x48, 0x70,0x90,0x88,0x00,0xf0,0x88,0x88,0x88,0x70,0x00,0xc0,0x30,0x0c,0x30, 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe7,0x73,0x00,0x00 },{ 0xa0,0x50,0x53,0x90,0x20,0x00,0xc0,0x80,0x40,0x40,0x80,0x00,0x40,0x40, 0xc0,0x40,0x40,0x00,0xc3,0x00,0x00,0x00,0xc0,0x00,0x80,0x40,0xc0,0x40, 0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0xce,0x00,0x00 },{ 0x03,0x84,0x84,0x04,0x03,0x00,0x07,0x00,0x00,0x00,0x1f,0x00,0x00,0x80, 0x83,0x84,0x00,0x00,0x00,0x83,0x54,0x8b,0x00,0x00,0x83,0x84,0x84,0x83, 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x39,0x00,0x00 },{ 0xff,0x24,0x24,0x27,0x18,0x00,0x7e,0x10,0x20,0x20,0x1e,0x00,0x2f,0x30, 0x00,0x30,0x2f,0x00,0xe0,0x38,0x25,0x38,0xe0,0x00,0x18,0x26,0xa1,0xa0, 0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xce,0xe7,0x00,0x00}}; static const char PROGMEM game2_L[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7c, 0x82,0xa2,0x42,0xbc,0x00,0x3e,0xc0,0x30,0xc0,0x3e,0x00,0xfe,0x92,0x92, 0x92,0x82,0x00,0xfe,0x12,0x12,0x32,0xcc,0x00,0x02,0x02,0xfe,0x02,0x02 },{ 0x00,0x00,0xce,0x9c,0x00,0x00,0x00,0x40,0x40,0x40,0x40,0xe0,0x00,0xe0, 0x90,0x90,0x90,0xe1,0x00,0x60,0x90,0x90,0x90,0x20,0x00,0xf0,0x10,0x10, 0x10,0xe0,0x00,0xf0,0x90,0x90,0x90,0x10,0x00,0xe0,0x10,0x90,0x90,0xa0 },{ 0x00,0x00,0x39,0x73,0x00,0x00,0x00,0x07,0x02,0x02,0x02,0x02,0x00,0x87, 0x80,0x80,0x80,0x87,0x00,0x82,0x04,0x04,0x04,0x83,0x00,0x07,0x84,0x84, 0x84,0x03,0x00,0x87,0x00,0x00,0x00,0x80,0x00,0x83,0x84,0x84,0x84,0x03 },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x00,0x08,0x3c,0x02,0x3c,0x08,0x00,0x30, 0x28,0x24,0x22,0x21,0x00,0x31,0x0a,0x04,0x0a,0x31,0x00,0x1f,0x20,0x20, 0x20,0x11,0x00,0x03,0x0c,0x30,0x0c,0x03,0x00,0x3f,0x24,0x24,0x24,0x1b}}; static const char PROGMEM medi3_R_nomod[4][42] = { { 0x03,0x0c,0xb0,0x0c,0x03,0x00,0x3f,0x02,0x9c,0x02,0x3f,0x00,0x3f,0x04, 0x84,0x04,0x3f,0x00,0x22,0x25,0xa5,0x25,0x18,0x00,0x3f,0x25,0xa5,0x25, 0x1a,0x00,0x00,0xe0,0x8f,0x02,0x31,0x49,0xfa,0x00,0xe7,0x73,0x00,0x00 },{ 0xc0,0x01,0x73,0x01,0xc0,0x00,0xf0,0x81,0xc3,0xe1,0xf0,0x00,0x00,0x71, 0x03,0x71,0x00,0x00,0x00,0xc1,0xc3,0xc1,0x00,0x00,0xf0,0xe1,0xc3,0x81, 0xf0,0x00,0x00,0x03,0xe2,0x21,0xe0,0x21,0xc0,0x00,0x9c,0xce,0x00,0x00 },{ 0x01,0x02,0x02,0x02,0x01,0x00,0x07,0x00,0x01,0x03,0x87,0x00,0x00,0x1f, 0x0e,0x04,0x80,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x07,0x03,0x01,0x00, 0x87,0x00,0x00,0x40,0xa6,0xa8,0x08,0x04,0x8e,0x00,0x73,0x39,0x00,0x00 },{ 0x3e,0x31,0x01,0x31,0x3e,0x00,0x00,0x46,0x46,0x4f,0x1f,0x00,0x00,0xa6, 0x46,0xaf,0x1f,0x00,0x28,0x2c,0x2e,0x2c,0x28,0x00,0x00,0x46,0xe6,0x4f, 0x1f,0x00,0x00,0x02,0x72,0x8a,0x89,0x00,0x1e,0x00,0xce,0xe7,0x00,0x00}}; static const char PROGMEM medi3_R_shift[4][42] = { { 0x03,0x0c,0x30,0x0c,0x03,0x00,0x3f,0x02,0x1c,0x02,0x3f,0x00,0x3f,0x04, 0x04,0x04,0x3f,0x00,0x22,0x25,0x25,0x25,0x18,0x00,0x3f,0x25,0x25,0x25, 0x1a,0x00,0x00,0xe0,0x8f,0x02,0x31,0x49,0xfa,0x00,0xe7,0x73,0x00,0x00 },{ 0xc0,0x01,0x71,0x01,0xc0,0x00,0xf0,0x81,0xc1,0xe1,0xf0,0x00,0x00,0x71, 0x01,0x71,0x00,0x00,0x00,0xc1,0xc1,0xc1,0x00,0x00,0xf0,0xe1,0xc1,0x81, 0xf0,0x00,0x00,0x03,0xe2,0x21,0xe0,0x21,0xc0,0x00,0x9c,0xce,0x00,0x00 },{ 0x01,0x02,0x02,0x02,0x01,0x00,0x07,0x00,0x01,0x03,0x87,0x00,0x00,0x1f, 0x0e,0x04,0x80,0x00,0x00,0x03,0x03,0x03,0x00,0x00,0x07,0x03,0x01,0x00, 0x87,0x00,0x00,0x40,0xa6,0xa8,0x08,0x04,0x8e,0x00,0x73,0x39,0x00,0x00 },{ 0x3e,0x31,0x01,0x31,0x3e,0x00,0x00,0x46,0x46,0x4f,0x1f,0x00,0x00,0xa6, 0x46,0xaf,0x1f,0x00,0x28,0x2c,0x2e,0x2c,0x28,0x00,0x00,0x46,0xe6,0x4f, 0x1f,0x00,0x00,0x02,0x72,0x8a,0x89,0x00,0x1e,0x00,0xce,0xe7,0x00,0x00}}; static const char PROGMEM navi4_R[4][42] = { { 0xe0,0x10,0x54,0x38,0x10,0x00,0xfc,0x24,0x24,0x24,0x18,0x00,0x0c,0x10, 0xe0,0x10,0x0c,0x00,0x8c,0x50,0x20,0x50,0x8c,0x00,0xc0,0xbe,0xa2,0xbe, 0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xe7,0x73,0x00,0x00 },{ 0x80,0xc1,0xa1,0x81,0x00,0x00,0x01,0x80,0x40,0x20,0x00,0x00,0x00,0x00, 0xf1,0x00,0x00,0x00,0x41,0x20,0xd0,0x20,0x41,0x00,0x01,0x21,0x41,0x81, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x9c,0xce,0x00,0x00 },{ 0x00,0x49,0x4a,0x48,0x87,0x00,0x81,0x82,0x85,0x89,0x01,0x00,0x01,0x02, 0x85,0x02,0x01,0x00,0x40,0x40,0x47,0x40,0x40,0x00,0x81,0x09,0x05,0x02, 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x73,0x39,0x00,0x00 },{ 0x12,0x65,0x85,0x65,0x17,0x00,0x07,0x01,0x06,0x18,0x60,0x00,0x88,0x90, 0xaf,0x90,0x88,0x00,0x04,0x02,0x7d,0x02,0x04,0x00,0x01,0x46,0x58,0x60, 0x78,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xce,0xe7,0x00,0x00}}; static const char PROGMEM func7_L[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0xff,0x09,0xe9,0xc9,0x01,0x00,0xe0,0x00, 0x10,0x08,0xfc,0x00,0x00,0x08,0x84,0x44,0x24,0x18,0x00,0x88,0x04,0x24, 0x24,0xd8,0x00,0x60,0x50,0x48,0xfc,0x40,0x00,0x70,0x80,0x9c,0x80,0x70 },{ 0x00,0x00,0xce,0x9c,0x00,0xf0,0x00,0x00,0x9f,0x00,0x03,0x0c,0x1f,0x00, 0xe0,0xa0,0xa1,0x20,0x00,0xc1,0xa1,0xa1,0xa1,0x01,0x00,0x20,0x21,0x21, 0xa1,0x60,0x00,0xc0,0x20,0x20,0x21,0xc0,0x00,0x40,0xe0,0x50,0x40,0x80 },{ 0x00,0x00,0x39,0x73,0x00,0xef,0x02,0x83,0xe4,0x00,0x0e,0x15,0x16,0x00, 0x04,0x08,0x08,0x07,0x00,0x07,0x48,0xc8,0x08,0x07,0x00,0x00,0x40,0xce, 0x01,0x00,0x00,0x06,0x49,0xc9,0x09,0x06,0x00,0x06,0x08,0x49,0x08,0x07 },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x05,0x04,0x03,0x90,0xa8,0xa8,0x40,0x06, 0x49,0x49,0x49,0x3e,0x00,0x7c,0xa2,0x93,0x8a,0x7c,0x00,0x00,0x08,0x07, 0xfe,0x00,0x00,0x84,0xc2,0xa3,0x92,0x8c,0x00,0x70,0x38,0x0d,0x38,0x70}}; static const char PROGMEM mous8_L[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x3c,0x84,0xbc,0x84,0x38,0x00,0x00,0x00,0x10, 0x28,0x92,0xc5,0x82,0x00,0xfe,0x1f,0x1f,0x01,0xfe,0x00,0xfe,0x01,0x19, 0x01,0xfe,0x00,0xfe,0x01,0x1f,0x1f,0xfe,0x00,0x10,0x38,0x92,0xc7,0x82 },{ 0x00,0x00,0xce,0x9c,0x00,0xe7,0x08,0x08,0x08,0xe7,0x00,0x00,0x00,0x00, 0x00,0x80,0x01,0x00,0x00,0x01,0x01,0x81,0x01,0x01,0x00,0x01,0x01,0x81, 0x01,0x01,0x00,0x01,0x01,0x81,0x01,0x01,0x00,0x60,0x50,0xf8,0x41,0x00 },{ 0x00,0x00,0x39,0x73,0x00,0x91,0xaa,0xaa,0xa9,0x43,0x00,0x00,0x00,0x02, 0x07,0xca,0x02,0x02,0x00,0x02,0x01,0xcf,0x01,0x02,0x00,0x02,0x04,0x0f, 0x04,0x02,0x00,0x02,0x02,0xca,0x07,0x02,0x00,0xdc,0x58,0x5c,0x18,0x1f },{ 0x00,0x00,0xe7,0xce,0x00,0x1c,0x2a,0x2a,0x2a,0x2c,0x00,0x00,0x00,0x0c, 0x33,0xc0,0x00,0x00,0x00,0x0c,0x03,0x00,0x03,0x0c,0x00,0x0c,0x30,0xc0, 0x30,0x0c,0x00,0x00,0x00,0xc0,0x33,0x0c,0x00,0xe5,0xc9,0xe6,0xc0,0xf8}}; static const char PROGMEM musi9_L[4][42] = { { 0x00,0x00,0x73,0xe7,0x00,0x00,0x00,0x00,0x00,0xfe,0x04,0x18,0x04,0xfe, 0x00,0x00,0xfe,0x00,0x00,0x00,0xfe,0x00,0x8c,0x12,0x12,0x12,0xe4,0x00, 0x00,0x02,0xfe,0x02,0x00,0x00,0xfc,0x02,0x02,0x02,0x84,0x00,0x00,0x00 },{ 0x00,0x00,0xce,0x9c,0x00,0x00,0xc0,0xe0,0xf0,0xf9,0xf8,0xf8,0xf8,0xf9, 0xf0,0xe0,0xc0,0x01,0x01,0x01,0x00,0xf0,0xf0,0x01,0x01,0xf1,0xf0,0x00, 0x00,0x01,0x01,0x01,0x00,0x00,0xf8,0xf1,0xe1,0xc1,0x80,0x00,0x00,0x00 },{ 0x00,0x00,0x39,0x73,0x00,0x00,0x07,0x0f,0x1f,0x3f,0x3f,0x3f,0x3f,0x3f, 0x1f,0x0f,0x07,0x00,0x00,0x00,0x00,0x1f,0x1f,0x00,0x00,0x1f,0x1f,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00,0x00 },{ 0x00,0x00,0xe7,0xce,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x08, 0xf8,0x08,0xf0,0x00,0x70,0x88,0x88,0x88,0x70,0x00,0x70,0x88,0x88,0x48, 0xff,0x00,0x70,0xa8,0xa8,0xa8,0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00}}; static const char PROGMEM musi9_R[4][42] = { { 0x00,0x00,0x00,0xfe,0x04,0x18,0x04,0xfe,0x00,0x00,0xfe,0x00,0x00,0x00, 0xfe,0x00,0x8c,0x12,0x12,0x12,0xe4,0x00,0x00,0x02,0xfe,0x02,0x00,0x00, 0xfc,0x02,0x02,0x02,0x84,0x00,0x00,0x00,0x00,0x00,0xe7,0x73,0x00,0x00 },{ 0x00,0x00,0x00,0x81,0x60,0x10,0x60,0x81,0x60,0x10,0x00,0x01,0x01,0x01, 0xe0,0xe0,0x60,0x61,0x61,0x61,0x60,0xf8,0x70,0x21,0x01,0x01,0xc0,0xe0, 0x60,0x01,0xf9,0xf9,0x00,0x60,0xe0,0xc0,0x00,0x00,0x9c,0xce,0x00,0x00 },{ 0x18,0x24,0x4b,0x48,0x48,0x4c,0x4b,0x48,0x4b,0x2c,0x18,0x00,0x00,0x00, 0x4f,0xe7,0xf0,0x60,0x60,0x60,0x60,0x60,0x7e,0x7f,0x00,0x0f,0x3f,0x70, 0x60,0xc0,0xc1,0xc1,0xc0,0x60,0x70,0x3f,0x0f,0x00,0x73,0x39,0x00,0x00 },{ 0x00,0x00,0x00,0x00,0x00,0x00,0xf8,0x08,0xf8,0x08,0xf0,0x00,0x70,0x88, 0x88,0x88,0x71,0x00,0x70,0x88,0x88,0x48,0xff,0x00,0x70,0xa8,0xa8,0xa8, 0xb0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xce,0xe7,0x00,0x00}}; uint8_t this_layout = userspace_config.layout % 3; // Render the requested image on the given column and row // Don't grab highest layer; instead compare from top to bottom. // Highest layer might be on the other side if (isLeft) { if (layer_state_cmp(layer_state, _MUSI)) { draw_image(row, col, musi9_L); } else if (layer_state_cmp(layer_state, _MOUS)) { draw_image(row, col, mous8_L); } else if (layer_state_cmp(layer_state, _FUNC)) { draw_image(row, col, func7_L); } else if (layer_state_cmp(layer_state, _NUMB)) { switch (this_layout) { case 0: // Dvorak if (mods & MOD_MASK_SHIFT) { draw_image(row, col, numb6_L_dvor_shift); } else { draw_image(row, col, numb6_L_dvor_nomod); } break; case 1: // Turkish F if ((mods & MOD_MASK_SHIFT) && (mods & MOD_BIT(KC_RALT))) { // Shift + AltGr draw_image(row, col, numb6_L_turf_shfgr); } else if (mods & MOD_MASK_SHIFT) { // Shift draw_image(row, col, numb6_L_turf_shift); } else if (mods & MOD_BIT(KC_RALT)) { // AltGr draw_image(row, col, numb6_L_turf_altgr); } else { // Normal draw_image(row, col, numb6_L_turf_nomod); } break; case 2: // Qwerty if (mods & MOD_MASK_SHIFT) { draw_image(row, col, numb6_L_qwer_shift); } else { draw_image(row, col, numb6_L_qwer_nomod); } break; } } else if (layer_state_cmp(layer_state, _GAME)) { draw_image(row, col, game2_L); } else if (layer_state_cmp(layer_state, _CHAR)) { draw_image(row, col, char1_L); } else { switch (this_layout) { case 0: // Dvorak if (mods & MOD_MASK_SHIFT) { draw_image(row, col, base0_L_dvor_shift); } else { draw_image(row, col, base0_L_dvor_nomod); } break; case 1: // Turkish F if ((mods & MOD_MASK_SHIFT) && (mods & MOD_BIT(KC_RALT))) { // Shift + AltGr draw_image(row, col, base0_L_turf_shfgr); } else if (mods & MOD_MASK_SHIFT) { // Shift draw_image(row, col, base0_L_turf_shift); } else if (mods & MOD_BIT(KC_RALT)) { // AltGr draw_image(row, col, base0_L_turf_altgr); } else { // Normal draw_image(row, col, base0_L_turf_nomod); } break; case 2: // Qwerty if (mods & MOD_MASK_SHIFT) { draw_image(row, col, base0_L_qwer_shift); } else { draw_image(row, col, base0_L_qwer_nomod); } break; } } } else { if (layer_state_cmp(layer_state, _MUSI)) { draw_image(row, col, musi9_R); } else if (layer_state_cmp(layer_state, _SYMB)) { switch (this_layout) { case 0: // Dvorak draw_image(row, col, symb5_R_dvor); break; case 1: // Turkish f if (mods & MOD_BIT(KC_RALT)) { // AltGr draw_image(row, col, symb5_R_turf_altgr); } else { // Normal draw_image(row, col, symb5_R_turf_nomod); } break; case 2: // Qwerty draw_image(row, col, symb5_R_qwer); break; } } else if (layer_state_cmp(layer_state, _NAVI)) { draw_image(row, col, navi4_R); } else if (layer_state_cmp(layer_state, _MEDI)) { if (mods & MOD_MASK_SHIFT) { draw_image(row, col, medi3_R_shift); } else { draw_image(row, col, medi3_R_nomod); } } else if (layer_state_cmp(layer_state, _CHAR)) { draw_image(row, col, char1_R); } else { switch (this_layout) { case 0: // Dvorak if (mods & MOD_MASK_SHIFT) { draw_image(row, col, base0_R_dvor_shift); } else { draw_image(row, col, base0_R_dvor_nomod); } break; case 1: // Turkish F if ((mods & MOD_MASK_SHIFT) && (mods & MOD_BIT(KC_RALT))) { // Shift + AltGr draw_image(row, col, base0_R_turf_shfgr); } else if (mods & MOD_MASK_SHIFT) { // Shift draw_image(row, col, base0_R_turf_shift); } else if (mods & MOD_BIT(KC_RALT)) { // AltGr draw_image(row, col, base0_R_turf_altgr); } else { // Normal draw_image(row, col, base0_R_turf_nomod); } break; case 2: // Qwerty if (mods & MOD_MASK_SHIFT) { draw_image(row, col, base0_R_qwer_shift); } else { draw_image(row, col, base0_R_qwer_nomod); } break; } } } } // Render the RGB state on the given column and row void render_rgb(uint8_t row, uint8_t col) { static const char PROGMEM rgb_enab[12] = {0x08,0x81,0x3c,0x42,0x99,0xbd,0xbd,0x99,0x42,0x3c,0x81,0x10}; static const char PROGMEM rgb_disa[12] = {0x08,0x81,0x3c,0x42,0x81,0x81,0x81,0x81,0x42,0x3c,0x81,0x10}; static char rgb_temp4[4] = {0}; static char rgb_temp3[3] = {0}; oled_set_cursor(col, row); # ifdef RGB_MATRIX_ENABLE if (rgb_matrix_is_enabled()) { oled_write_raw_P(rgb_enab, 12); } else { oled_write_raw_P(rgb_disa, 12); } oled_set_cursor(col + 2, row); oled_write(" hue sat val", false); oled_set_cursor(col, row + 1); itoa(rgb_matrix_get_mode(), rgb_temp3, 10); oled_write(rgb_temp3, false); oled_write(" ", false); itoa(rgb_matrix_get_hue(), rgb_temp4, 10); oled_write(rgb_temp4, false); oled_write(" ", false); itoa(rgb_matrix_get_sat(), rgb_temp4, 10); oled_write(rgb_temp4, false); oled_write(" ", false); itoa(rgb_matrix_get_val(), rgb_temp4, 10); oled_write(rgb_temp4, false); # else // RGB_MATRIX_ENABLE oled_write("-RGB disabled-", false); # endif // RGB_MATRIX_ENABLE } void render_status_left(uint8_t row, uint8_t col) { // Left side looks like this on the left half // (Should be 14 characters per line) // Mods: <OS> <Alt/Gr> <Ctrl> <Shift> // Enc: <8 len str> // Wpm: <wpm here> // Layout: <dvorak/qwerty/tur. f> // Right half is whatever layer image needs be uint8_t this_mod = get_mods(); uint8_t this_layer = get_highest_layer(layer_state); // MODIFIERS render_modifiers(row + 0, col + 0, this_mod); // Encoders render_encoder(row + 1, col + 0, 0, this_layer); // WPM text render_wpm(row + 2, col + 0); // Visual layout render_keymap(row + 3, col + 0, false); // Draw the image after 14'th character render_layout(row + 0, col + 14, this_mod, true); } void render_status_right(uint8_t row, uint8_t col) { // Right half is whatever layer image needs be on the left // Right side looks like this on the right half // (Should be after the 12'th character; max 14 characters per line) // Mods: <OS> <Alt/Gr> <Ctrl> <Shift> // Enc: <8 len str> // Wpm: <wpm here> // Layout: <dvorak/qwerty/tur. f> uint8_t this_mod = get_mods(); uint8_t this_layer = get_highest_layer(layer_state); // Draw the image render_layout(row + 0, col + 0, this_mod, false); // Modifiers render_modifiers(row + 0, col + 7, this_mod); // Encoder render_encoder(row + 1, col + 7, 1, this_layer); // RGB State (2 rows) render_rgb(row + 2, col + 7); }
D users/bbaserdem/bb-oled-extra.h => users/bbaserdem/bb-oled-extra.h +0 -25
@@ 1,25 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #pragma once #include "bbaserdem.h" // OLED layout images writer function void render_modifiers(uint8_t row, uint8_t col, uint8_t mods); void render_layout(uint8_t row, uint8_t col, uint8_t mods, bool isLeft); void render_rgb(uint8_t row, uint8_t col); void render_status_left(uint8_t row, uint8_t col); void render_status_right(uint8_t row, uint8_t col);
D users/bbaserdem/bb-oled.c => users/bbaserdem/bb-oled.c +0 -216
@@ 1,216 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #include "bb-oled.h" #include <string.h> // Grab the print function #ifdef ENCODER_ENABLE # include "bb-encoder.h" #endif // ENCODER_ENABLE /* OLED * This contains general purpose oled code */ // Allow default to be overwritten by keymap if they return false __attribute__ ((weak)) bool oled_task_keymap(void) {return true;} // Do sane defaults for regular oled rendering void oled_task_user(void) { if (is_oled_on()) { if (oled_task_keymap()) { render_status_lite(0, 0); } } } /*-------------------------*\ |*---RENDERING FUNCTIONS---*| \*-------------------------*/ void render_qmk_logo(uint8_t row, uint8_t col) { 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_set_cursor(col, row); oled_write_P(qmk_logo, false); } void render_layer(uint8_t row, uint8_t col, uint8_t top_layer) { // Write the layer state; 17 chars oled_set_cursor(col, row); oled_write("Layer: ", false); switch (top_layer) { case _BASE: oled_write("Default ", false); break; case _CHAR: oled_write("Sp. Chars ", false); break; case _GAME: oled_write("Gaming ", false); break; case _MEDI: oled_write("Media Ctr ", false); break; case _NAVI: oled_write("Navigation", false); break; case _SYMB: oled_write("Symbols ", false); break; case _NUMB: oled_write("Numpad ", false); break; case _FUNC: oled_write("Funct Keys", false); break; case _MOUS: oled_write("Mouse Keys", false); break; case _MUSI: oled_write("Music Mode", false); break; default: oled_write("?? N/A ?? ", false); } } void render_modifiers_lite(uint8_t row, uint8_t col, uint8_t mods) { // Write the modifier state, 16 characters oled_set_cursor(col, row); oled_write((mods & MOD_MASK_SHIFT ) ? "Shft " : " ", false); oled_write((mods & MOD_MASK_CTRL ) ? "Ctrl " : " ", false); oled_write((mods & MOD_MASK_ALT ) ? "Alt" : " ", false); oled_write((mods & MOD_BIT(KC_RALT)) ? "G " : " ", false); oled_write((mods & MOD_MASK_GUI ) ? "Meta " : " ", false); } void render_encoder(uint8_t row, uint8_t col, uint8_t index, uint8_t layer) { // Renders the encoder state, 14 characters oled_set_cursor(col, row); # ifdef ENCODER_ENABLE static char encoder_temp9[9] = {0}; oled_write("Enc: ", false); encoder_state_string(index, layer, encoder_temp9); oled_write(encoder_temp9, false); # else // ENCODER_ENABLE oled_write("No enc. avail.", false); # endif // ENCODER_ENABLE } void render_wpm(uint8_t row, uint8_t col) { // Renders the WPM, 8 characters oled_set_cursor(col, row); # ifdef WPM_ENABLE static char wpm_temp4[4] = {0}; oled_write("WPM: ", false); itoa(get_current_wpm(), wpm_temp4, 10); oled_write(wpm_temp4, false); oled_write(" ", false); # else // WPM_ENABLE oled_write("WPM: N/A", false); # endif // WPM_ENABLE } // Writes the currently used OLED display layout void render_keymap(uint8_t row, uint8_t col, bool isLite) { // Render the oled layout; lite is 11, regular is 14 characters oled_set_cursor(col, row); if (isLite) { oled_write("KM: ", false); } else { oled_write("Layout: ", false); } switch (userspace_config.layout % 3) { case 0: oled_write("Dvorak", false); break; case 1: oled_write("Tur. F", false); break; case 2: oled_write("Qwerty", false); break; } if (isLite) { oled_write(" ", false); } } // Writes the currently used OLED display layout #ifdef RGB_MATRIX_ENABLE void render_rgb_lite(uint8_t row, uint8_t col) { // Writes the currently used OLED display layout, 19 characters static char rgb_temp4[4] = {0}; // Render the oled layout oled_set_cursor(col, row); oled_write("m", false); itoa(rgb_matrix_get_mode(), rgb_temp4, 10); oled_write(rgb_temp4, false); oled_write(" h", false); itoa(rgb_matrix_get_hue(), rgb_temp4, 10); oled_write(rgb_temp4, false); oled_write(" s", false); itoa(rgb_matrix_get_sat(), rgb_temp4, 10); oled_write(rgb_temp4, false); oled_write(" v", false); itoa(rgb_matrix_get_val(), rgb_temp4, 10); oled_write(rgb_temp4, false); } #endif // RGB_MATRIX_ENABLE void render_status_lite(uint8_t row, uint8_t col) { // Function to print state information; for low flash memory uint8_t this_layer = get_highest_layer(layer_state); uint8_t this_mod = get_mods(); // Line 1: Layer State render_layer(row + 0, col + 0, this_layer); // Line 2: Mod or info switch (this_layer) { // Show RGB mode as an overlay in media mode. # ifdef RGB_MATRIX_ENABLE case _MEDI: render_rgb_lite(row + 1, col + 0); break; # endif // RGB_MATRIX_ENABLE // Show the modifier if nothing else is doing anything default: render_modifiers_lite(row + 1, col + 0, this_mod); break; } // Line 3: WPM and layout render_keymap(row + 2, col + 0, true); render_wpm(row + 2, col + 11); // Line 4: Encoder states # ifdef SPLIT_KEYBOARD if (is_keyboard_left()) { render_encoder(row + 3, col + 0, 0, this_layer); } else { render_encoder(row + 3, col + 0, 1, this_layer); } # else // SPLIT_KEYBOARD render_encoder(row + 3, col + 0, 0, this_layer); # endif // SPLIT_KEYBOARD }
D users/bbaserdem/bb-oled.h => users/bbaserdem/bb-oled.h +0 -32
@@ 1,32 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #pragma once #include "bbaserdem.h" // Contain the main oled writer here void oled_task_user(void); // Some generic rendering functions void render_qmk_logo(uint8_t row, uint8_t col); void render_layer(uint8_t row, uint8_t col, uint8_t top_layer); void render_modifiers_lite(uint8_t row, uint8_t col, uint8_t mods); void render_encoder(uint8_t row, uint8_t col, uint8_t index, uint8_t layer); void render_wpm(uint8_t row, uint8_t col); void render_keymap(uint8_t row, uint8_t col, bool isLite); #ifdef RGB_MATRIX_ENABLE void render_rgb_lite(uint8_t row, uint8_t col); #endif // RGB_MATRIX_ENABLE void render_status_lite(uint8_t row, uint8_t col);
D users/bbaserdem/bb-rgb.c => users/bbaserdem/bb-rgb.c +0 -123
@@ 1,123 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #include "bb-rgb.h" #include "color.h" #define X_DIV 224/2 /* Code relating to per-key RGB LED stuff */ // Allow hooking into the RGB matrix indications using keymap code // Modulates the brightness of indicator RGB helper_dimmer(uint8_t r, uint8_t g, uint8_t b) { RGB output; output.r = r / 2; output.g = g / 2; output.b = b / 2; return output; } // x range from 0-left to 224-right // y range from 0-top to 64-bottom void helper_painter(uint8_t led_min, uint8_t led_max, RGB col, uint8_t side) { if (side == 1) { // Left for(uint8_t i = led_min; i <= led_max; i++) { if((g_led_config.point[i].x < X_DIV) && (g_led_config.flags[i] & LED_FLAG_INDICATOR)) { rgb_matrix_set_color(i, col.r, col.g, col.b); } } } else if (side == 2) { // Right for(uint8_t i = led_min; i <= led_max; i++) { if((g_led_config.point[i].x > X_DIV) && (g_led_config.flags[i] & LED_FLAG_INDICATOR)) { rgb_matrix_set_color(i, col.r, col.g, col.b); } } } else if (side == 0) { // Both for(uint8_t i = led_min; i <= led_max; i++) { if(g_led_config.flags[i] & LED_FLAG_INDICATOR) { rgb_matrix_set_color(i, col.r, col.g, col.b); } } } } // Allow to turn off global handling __attribute__ ((weak)) bool rgb_matrix_indicators_advanced_keymap(uint8_t led_min, uint8_t led_max) { return false; } // Set RGB state depending on layer bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { uint8_t thisInd = 3; RGB thisCol; // Load keymap hooks if(rgb_matrix_indicators_advanced_keymap(led_min, led_max)) { return false; } // Grab color info switch (get_highest_layer(layer_state)) { case _GAME: // Set left side as purple thisCol = helper_dimmer(RGB_PURPLE); thisInd = 1; break; case _CHAR: // Set full board as gold thisCol = helper_dimmer(RGB_GOLD); thisInd = 0; break; case _MEDI: // Set right side as pink thisCol = helper_dimmer(RGB_MAGENTA); thisInd = 2; break; case _NAVI: // Set right side as green thisCol = helper_dimmer(RGB_GREEN); thisInd = 2; break; case _SYMB: // Set right side as yellow thisCol = helper_dimmer(RGB_YELLOW); thisInd = 2; break; case _NUMB: // Set left side as blue thisCol = helper_dimmer(RGB_BLUE); thisInd = 1; break; case _FUNC: // Set left side as red thisCol = helper_dimmer(RGB_RED); thisInd = 1; break; case _MOUS: // Set left side as blue-green thisCol = helper_dimmer(RGB_SPRINGGREEN); thisInd = 1; break; case _MUSI: // Set full board as orange thisCol = helper_dimmer(RGB_ORANGE); thisInd = 0; break; } helper_painter(led_min, led_max, thisCol, thisInd); return false; } // Hook into shutdown code to make all perkey LED's red on hitting reset void shutdown_rgb(void) { // Flash all the key LED's red on shutdown uint16_t timer_start = timer_read(); rgb_matrix_set_color_all(RGB_CORAL); // Delay until this registers while(timer_elapsed(timer_start) < 250) {wait_ms(1);} }
D users/bbaserdem/bb-rgb.h => users/bbaserdem/bb-rgb.h +0 -28
@@ 1,28 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #pragma once #include "bbaserdem.h" /* Hooks involving perkey RGB LEDs */ // For custom indicators bool rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max); // Hook into shutdown code void shutdown_rgb(void); void suspend_wakeup_init_rgb(void); void suspend_power_down_rgb(void);
D users/bbaserdem/bb-underglow.c => users/bbaserdem/bb-underglow.c +0 -116
@@ 1,116 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #include "bb-underglow.h" /* UNDERGLOW IMPLEMENTATION */ // Define the layer switching code // An empty layer on the base const rgblight_segment_t PROGMEM bb_base_layer[] = RGBLIGHT_LAYER_SEGMENTS( {0, 0, HSV_WHITE} ); // Gaming layer is turquoise const rgblight_segment_t PROGMEM bb_game_layer[] = RGBLIGHT_LAYER_SEGMENTS( {RGBLIGHT_LEFT_BEG, RGBLIGHT_LEFT_NUM, HSV_PURPLE} ); // Character overlay is chartereuse const rgblight_segment_t PROGMEM bb_char_layer[] = RGBLIGHT_LAYER_SEGMENTS( {0, RGBLED_NUM, HSV_GOLD} ); // Right-hand layers // Media layer is orange const rgblight_segment_t PROGMEM bb_medi_layer[] = RGBLIGHT_LAYER_SEGMENTS( {RGBLIGHT_RIGHT_BEG, RGBLIGHT_RIGHT_NUM, HSV_MAGENTA} ); // Navigation layer is green const rgblight_segment_t PROGMEM bb_navi_layer[] = RGBLIGHT_LAYER_SEGMENTS( {RGBLIGHT_RIGHT_BEG, RGBLIGHT_RIGHT_NUM, HSV_GREEN} ); // Symbol layer is purple const rgblight_segment_t PROGMEM bb_symb_layer[] = RGBLIGHT_LAYER_SEGMENTS( {RGBLIGHT_RIGHT_BEG, RGBLIGHT_RIGHT_NUM, HSV_YELLOW} ); // Left-hand layers // Number layer is blue const rgblight_segment_t PROGMEM bb_numb_layer[] = RGBLIGHT_LAYER_SEGMENTS( {RGBLIGHT_LEFT_BEG, RGBLIGHT_LEFT_NUM, HSV_BLUE} ); // Function layer is red const rgblight_segment_t PROGMEM bb_func_layer[] = RGBLIGHT_LAYER_SEGMENTS( {RGBLIGHT_LEFT_BEG, RGBLIGHT_LEFT_NUM, HSV_RED} ); // Pointer layer is yellow const rgblight_segment_t PROGMEM bb_mous_layer[] = RGBLIGHT_LAYER_SEGMENTS( {RGBLIGHT_LEFT_BEG, RGBLIGHT_LEFT_NUM, HSV_SPRINGGREEN} ); // Music playback layer is magenta const rgblight_segment_t PROGMEM bb_musi_layer[] = RGBLIGHT_LAYER_SEGMENTS( {0, RGBLED_NUM, HSV_ORANGE} ); const rgblight_segment_t* const PROGMEM bb_rgb_layers[] = RGBLIGHT_LAYERS_LIST( bb_base_layer, bb_char_layer, bb_game_layer, bb_medi_layer, bb_navi_layer, bb_symb_layer, bb_numb_layer, bb_func_layer, bb_mous_layer, bb_musi_layer ); // Enable the LED switching layers void keyboard_post_init_underglow(void) { rgblight_layers = bb_rgb_layers; // Default rgb mode is rainbow swirl; set this rgblight_sethsv_noeeprom(100, 255, 255); rgblight_mode_noeeprom(RGBLIGHT_MODE_RAINBOW_SWIRL + 0); } // Set RGBLIGHT state depending on layer layer_state_t layer_state_set_underglow(layer_state_t state) { // Activate layers if on that region rgblight_set_layer_state(_BASE, layer_state_cmp(state, _BASE)); rgblight_set_layer_state(_GAME, layer_state_cmp(state, _GAME)); rgblight_set_layer_state(_CHAR, layer_state_cmp(state, _CHAR)); rgblight_set_layer_state(_MEDI, layer_state_cmp(state, _MEDI)); rgblight_set_layer_state(_NAVI, layer_state_cmp(state, _NAVI)); rgblight_set_layer_state(_SYMB, layer_state_cmp(state, _SYMB)); rgblight_set_layer_state(_NUMB, layer_state_cmp(state, _NUMB)); rgblight_set_layer_state(_FUNC, layer_state_cmp(state, _FUNC)); rgblight_set_layer_state(_MOUS, layer_state_cmp(state, _MOUS)); rgblight_set_layer_state(_MUSI, layer_state_cmp(state, _MUSI)); // Return so other stuff can be done return state; } // Hook into shutdown code void shutdown_underglow(void) { // Make the LED's red on shutdown rgblight_enable_noeeprom(); rgblight_mode_noeeprom(RGBLIGHT_MODE_STATIC_LIGHT); rgblight_sethsv(HSV_WHITE); }
D users/bbaserdem/bb-underglow.h => users/bbaserdem/bb-underglow.h +0 -28
@@ 1,28 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #pragma once #include "bbaserdem.h" /* UNDERGLOW IMPLEMENTATION */ // Used to initialize layer switching overlay void keyboard_post_init_underglow(void); // Used to change RGB underglow layers on keymap layer change layer_state_t layer_state_set_underglow(layer_state_t state); // Hook into shutdown to show effect on shutdown void shutdown_underglow(void);
D users/bbaserdem/bbaserdem.c => users/bbaserdem/bbaserdem.c +0 -376
@@ 1,376 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #include "bbaserdem.h" // Language imports #include <sendstring_dvorak.h> // Need memcpy and memcmp from string.h along with transfer stuff #ifdef SPLIT_KEYBOARD #include "transactions.h" #include <string.h> #endif // SPLIT_KEYBOARD /*-------------------------*\ |*-----KEYBOARD CONFIG-----*| \*-------------------------*/ userspace_config_t userspace_config; userspace_runtime_t userspace_runtime; /*---------------------------------*\ |*----SPLIT KEYBOARD TRANSPORT-----*| \*---------------------------------*/ #ifdef SPLIT_KEYBOARD userspace_config_t transport_userspace_config; userspace_runtime_t transport_userspace_runtime; // Translate the RPC data to the local variable void userspace_config_sync(uint8_t in_buflen, const void* in_data, uint8_t out_buflen, void* out_data) { // Copy incoming data to local variable if (in_buflen == sizeof(transport_userspace_config)) { memcpy(&transport_userspace_config, in_data, in_buflen); } // There is no data to send back; so no output handling } void userspace_runtime_sync(uint8_t in_buflen, const void* in_data, uint8_t out_buflen, void* out_data) { // Copy incoming data to local variable if (in_buflen == sizeof(transport_userspace_runtime)) { memcpy(&transport_userspace_runtime, in_data, in_buflen); } // There is no data to send back; so no output handling } // Either send or receive the correct data void userspace_transport_update(void) { if (is_keyboard_master()) { // If we are the main device; we want to send info. transport_userspace_config.raw = userspace_config.raw; transport_userspace_runtime.raw = userspace_runtime.raw; } else { // If we are the secondary device; we want to receive info, and save to eeprom. userspace_config.raw = transport_userspace_config.raw; userspace_runtime.raw = transport_userspace_runtime.raw; } } // Initiate the protocol on sync void userspace_transport_sync(bool force_sync) { if (is_keyboard_master()) { // Keep track of the last state static userspace_config_t last_userspace_config; static userspace_runtime_t last_userspace_runtime; bool needs_sync = false; // Check if the config values are different if (memcmp(&transport_userspace_config, &last_userspace_config, sizeof(transport_userspace_config))) { needs_sync = true; memcpy(&last_userspace_config, &transport_userspace_config, sizeof(transport_userspace_config)); } // Perform the sync if requested if (needs_sync || force_sync) { transaction_rpc_send(RPC_ID_CONFIG_SYNC, sizeof(transport_userspace_config), &transport_userspace_config); needs_sync = false; } // Check if the runtime values are different if (memcmp(&transport_userspace_runtime, &last_userspace_runtime, sizeof(transport_userspace_runtime))) { needs_sync = true; memcpy(&last_userspace_runtime, &transport_userspace_runtime, sizeof(transport_userspace_runtime)); } // Perform the sync if requested if (needs_sync || force_sync) { transaction_rpc_send(RPC_ID_RUNTIME_SYNC, sizeof(transport_userspace_runtime), &transport_userspace_runtime); needs_sync = false; } } } #endif // SPLIT_KEYBOARD /*---------------------------*\ |*-----KEYBOARD PRE INIT-----*| \*---------------------------*/ /* This code runs before anything is started. * Good for early hardware setup */ __attribute__ ((weak)) void keyboard_pre_init_keymap(void) {} __attribute__ ((weak)) void keyboard_pre_init_user(void) { // Keymap specific stuff keyboard_pre_init_keymap(); } /*---------------------*\ |*-----MATRIX INIT-----*| \*---------------------*/ /* This code runs once midway thru the firmware process. * So far, sets the base layer and fixes unicode mode */ __attribute__ ((weak)) void matrix_init_keymap(void) {} void matrix_init_user (void) { // Keymap specific things matrix_init_keymap(); } /*----------------------------*\ |*-----KEYBOARD POST INIT-----*| \*----------------------------*/ /* This code runs after anything is started. * Good for late hardware setup, like setting up layer specifications */ __attribute__ ((weak)) void keyboard_post_init_keymap(void) {} __attribute__ ((weak)) void keyboard_post_init_user(void) { // Fix beginning base layer, in case some other firmware was flashed // set_single_persistent_default_layer(_BASE); // Unicode mode # ifdef UNICODEMAP_ENABLE set_unicode_input_mode(UC_LNX); # endif // UNICODEMAP_ENABLE // Split keyboard halves communication # ifdef SPLIT_KEYBOARD // Register the transactions transaction_register_rpc( RPC_ID_CONFIG_SYNC, userspace_config_sync ); transaction_register_rpc(RPC_ID_RUNTIME_SYNC, userspace_runtime_sync); // Load default config values if (is_keyboard_master()) { // If we are main; load from eeconfig userspace_config.raw = eeconfig_read_user(); // And update the transport variable userspace_transport_update(); // Do one forced transfer to sync halves userspace_transport_sync(true); } else { // Just sync the data received userspace_transport_update(); } # else // SPLIT_KEYBOARD // If we are not split; just load from eeprom userspace_config.raw = eeconfig_read_user(); # endif // SPLIT_KEYBOARD // Backlight LED # ifdef BACKLIGHT_ENABLE keyboard_post_init_backlight(); # endif // BACKLIGHT_ENABLE // RGB underglow # ifdef RGBLIGHT_ENABLE keyboard_post_init_underglow(); # endif // RGBLIGHT_ENABLE // Keymap specific stuff keyboard_post_init_keymap(); } /*---------------------------*\ |*-----HOUSEKEEPING TASK-----*| \*---------------------------*/ /* I have no idea what this does */ __attribute__ ((weak)) void housekeeping_task_keymap(void) {} void housekeeping_task_user(void) { // Check eeprom every now and then static userspace_config_t prev_userspace_config; static fast_timer_t throttle_timer = 0; static bool init_flag = true; // Read this if we never read it before if (init_flag) { init_flag = false; prev_userspace_config.raw = eeconfig_read_user(); } // Throttled tasks here if (timer_elapsed_fast(throttle_timer) >= HOUSEKEEPING_THROTTLE_INTERVAL_MS) { // Refresh timer throttle_timer = timer_read_fast(); // Check userspace config for eeprom updates if (memcmp(&prev_userspace_config, &userspace_config, sizeof(userspace_config))) { memcpy(&prev_userspace_config, &userspace_config, sizeof(userspace_config)); eeconfig_update_user(userspace_config.raw); } } // Do transport stuff # ifdef SPLIT_KEYBOARD userspace_transport_update(); userspace_transport_sync(false); # endif // SPLIT_KEYBOARD // Hook to keymap code housekeeping_task_keymap(); } /*-----------------------*\ |*-----EECONFIG INIT-----*| \*-----------------------*/ /* Default values to send to the eeprom */ void eeconfig_init_user(void) { // Set everything to default userspace_config.raw = 0; // Set encoder states to sane defaults if enabled # ifdef ENCODER_ENABLE reset_encoder_state(); # endif // ENCODER_ENABLE } /*------------------------*\ |*-----PROCESS RECORD-----*| \*------------------------*/ /* Process record: custom keycodes to process here * Allow also the following codes to hook here as well; * Macro definitions * Audio hooks */ __attribute__ ((weak)) bool process_record_keymap(uint16_t keycode, keyrecord_t *record) { return true; } bool process_record_user(uint16_t keycode, keyrecord_t *record) { // Return after running through all individual hooks return process_record_keymap(keycode, record) && # ifdef AUDIO_ENABLE process_record_audio(keycode, record) && # endif // AUDIO_ENABLE # ifdef ENCODER_ENABLE process_record_encoder(keycode, record) && # endif // ENCODER_ENABLE process_record_macro(keycode, record); } /*---------------------*\ |*-----MATRIX SCAN-----*| \*---------------------*/ /* This code runs every frame * I used to check for layer switching here, but layer state is better used. * Try to not put anything here; as it runs hundreds time per second-ish */ __attribute__ ((weak)) void matrix_scan_keymap(void) { } void matrix_scan_user (void) { // Keymap specific scan function matrix_scan_keymap(); } /*---------------------*\ |*-----LAYER STATE-----*| \*---------------------*/ /* This code runs after every layer change * State represents the new layer state. */ __attribute__ ((weak)) layer_state_t layer_state_set_keymap (layer_state_t state) { return state; } layer_state_t layer_state_set_user(layer_state_t state) { // Keymap layer state setting state = layer_state_set_keymap(state); // For underglow stuff # ifdef RGBLIGHT_ENABLE state = layer_state_set_underglow(state); # endif // RGBLIGHT_ENABLE // Audio playback # ifdef AUDIO_ENABLE state = layer_state_set_audio(state); # endif // AUDIO_ENABLE return state; } /*-----------------------------*\ |*-----DEFAULT LAYER STATE-----*| \*-----------------------------*/ /* This code runs after every time default base layer is changed */ __attribute__ ((weak)) layer_state_t default_layer_state_set_keymap (layer_state_t state) { return state; } layer_state_t default_layer_state_set_user(layer_state_t state) { // Keymap level code state = default_layer_state_set_keymap(state); return state; } /*------------------------*\ |*-----LED SET KEYMAP-----*| \*------------------------*/ /* Code for LED indicators * I'm not sure when exactly does this code run */ __attribute__ ((weak)) void led_set_keymap(uint8_t usb_led) {} void led_set_user(uint8_t usb_led) { led_set_keymap(usb_led); } /*-----------------*\ |*-----SUSPEND-----*| \*-----------------*/ /* Suspend stuff here, mostly for the rgb lighting. */ __attribute__ ((weak)) void suspend_power_down_keymap (void) { } void suspend_power_down_user(void) { suspend_power_down_keymap(); // RGB matrix sleep hook # ifdef RGB_MATRIX_ENABLE suspend_power_down_rgb(); # endif // RGB_MATRIX_ENABLE } __attribute__ ((weak)) void suspend_wakeup_init_keymap (void) { } void suspend_wakeup_init_user(void) { suspend_wakeup_init_keymap(); // RGB matrix sleep hook # ifdef RGB_MATRIX_ENABLE suspend_wakeup_init_rgb(); # endif // RGB_MATRIX_ENABLE } <<<<<<< HEAD state = layer_state_set_keymap (state); #ifdef RGBLIGHT_ENABLE // Change RGB lighting depending on the last layer activated rgblight_change( get_highest_layer(state) ); #endif return state; ||||||| f439fe6055 state = layer_state_set_keymap (state); #ifdef RGBLIGHT_ENABLE // Change RGB lighting depending on the last layer activated rgblight_change( biton32(state) ); #endif return state; ======= /*------------------*\ |*-----SHUTDOWN-----*| \*------------------*/ /* Shutdown stuff here; for when entering bootmode. */ __attribute__ ((weak)) void shutdown_keymap (void) { } void shutdown_user(void) { // Underglow LED hook on boot # ifdef RGBLIGHT_ENABLE shutdown_underglow(); # endif // RGBLIGHT_ENABLE // Perkey led hook on boot # ifdef RGB_MATRIX_ENABLE shutdown_rgb(); # endif // RGB_MATRIX_ENABLE // Keymap hooks shutdown_keymap(); >>>>>>> upstream/master }
D users/bbaserdem/bbaserdem.h => users/bbaserdem/bbaserdem.h +0 -573
@@ 1,573 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #pragma once #include QMK_KEYBOARD_H #include "quantum.h" #include "keymap_dvorak.h" /* Besides loading libraries and definitions, this file has my layout defs * LAYOUTS: * This file has a couple layouts I use; so that the general changes can be * propagated by only editing this file. */ // Macros to use, this has base level code so not affected by enabled features #include "bb-macro.h" // Audio from onboard speakers #ifdef AUDIO_ENABLE #include "bb-audio.h" #endif // AUDIO_ENABLE // Keycap backlight using non-rgb LEDs #ifdef BACKLIGHT_ENABLE #include "bb-backlight.h" #endif // BACKLIGHT_ENABLE // Underglow light using rgb LEDs #ifdef RGBLIGHT_ENABLE #include "bb-underglow.h" #endif // RGBLIGHT_ENABLE // Keycap backlight using rgb LEDs #ifdef RGB_MATRIX_ENABLE #include "bb-rgb.h" #endif // RGB_MATRIX_ENABLE // Rotary encoder #ifdef ENCODER_ENABLE #include "bb-encoder.h" #endif // ENCODER_ENABLE // Oled screen #ifdef OLED_ENABLE #include "bb-oled.h" #endif // OLED_ENABLE // Structure to keep runtime info on encoder state typedef union { uint32_t raw; struct { bool rgb_sleep; }; } userspace_runtime_t; typedef union { uint32_t raw; struct { uint8_t e0base :4; // ( 4:0) The encoder state on most layers; regular function uint8_t e1base :4; // ( 8:1) 9 states for this; 4 bits uint8_t e0point :2; // (10:1) The encoder state on mouse layer; moves pointer uint8_t e1point :2; // (12:1) 4 states for this; 2 bits uint8_t e0rgb :4; // (16:2) The encoder state on media layer; controls light uint8_t e1rgb :4; // (20:2) 5 states for this; 3 bits but 4 is better uint8_t layout :2; // (22:2) Stores keymap layout; 3 states is good on 2 bits uint16_t :10; // (32:3) Padding here, free space for 10 more bits }; } userspace_config_t; // Broadcast us to everyone else extern userspace_runtime_t userspace_runtime; extern userspace_config_t userspace_config; // Function definitions that can be accessed through specific keymaps // Runs before all initialization void keyboard_pre_init_keymap(void); // For code that launches once midway through initialization void matrix_init_keymap(void); // For code that launches after initialization is finished. void keyboard_post_init_keymap(void); // These will be delegated to keymap specific stuff (weak definition) bool process_record_keymap(uint16_t keycode, keyrecord_t *record); // This code runs on every tick void matrix_scan_keymap(void); // This code runs after every layer change layer_state_t layer_state_set_keymap(layer_state_t state); // This code runs when the default layer changes layer_state_t default_layer_state_set_keymap (layer_state_t state); // Some code void housekeeping_task_user(void); // This code runs to set LED states void led_set_keymap(uint8_t usb_led); // For code that runs on suspend void suspend_power_down_keymap(void); void suspend_wakeup_init_keymap(void); // For code that runs on powerdown void shutdown_keymap(void); // Make it so that keymaps can use KEYMAP_SAFE_RANGE for custom keycodes #ifdef KEYMAP_SAFE_RANGE #define PLACEHOLDER_SAFE_RANGE KEYMAP_SAFE_RANGE #else #define PLACEHOLDER_SAFE_RANGE SAFE_RANGE #endif // Custom macro keycode ranges enum userspace_custom_keycodes { // Safe stuff BB_SAFE = PLACEHOLDER_SAFE_RANGE, // Double entry macros DBL_ANG, DBL_PAR, DBL_CBR, DBL_BRC, // Macro key BB_PGPK, // Unicode strings # ifdef UNICODEMAP_ENABLE BB_LENY, BB_TABL, TR_FLAG, # endif // UNICODEMAP_ENABLE // Encoder buttons # ifdef ENCODER_ENABLE BB_ENC0, BB_ENC1, # endif // ENCODER_ENABLE // Oled editor # ifdef OLED_ENABLE BB_OLED, # endif // OLED_ENABLE //use for keymap specific codes KEYMAP_SAFE_RANGE }; // Mask these keycodes if required features are not enabled #ifndef UNICODEMAP_ENABLE #define BB_LENY KC_NO #define BB_TABL KC_NO #define TR_FLAG KC_NO #endif // UNICODEMAP_ENABLE #ifndef ENCODER_ENABLE #define BB_ENC0 KC_NO #define BB_ENC1 KC_NO #endif // ENCODER_ENABLE /// Enumerate of layers enum userspace_layers { _BASE = 0, // Base layer _CHAR, // Characters layer _GAME, // Game layer _MEDI, // R3: Media layer _NAVI, // R3: Navigation layer _SYMB, // R1: Symbols layer _NUMB, // L1: Numbers layer _FUNC, // L2: Function keys layer _MOUS, // L3: Mouse keys layer _MUSI // Music overlay }; // Use 7 wide characters for keymaps, to keep things aligned with 4 tabs #define _______ KC_TRNS #define XXXXXXX KC_NO // These defines allow multiple multi-parameter definitions to expand // for these boards #define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__) #define LAYOUT_ortho_4x12_wrapper(...) LAYOUT_ortho_4x12(__VA_ARGS__) #define LAYOUT_ortho_5x15_wrapper(...) LAYOUT_ortho_5x15(__VA_ARGS__) #define LAYOUT_ortho_3x10_wrapper(...) LAYOUT_ortho_3x10(__VA_ARGS__) #define LAYOUT_split_3x6_3_wrapper(...) LAYOUT_split_3x6_3(__VA_ARGS__) #define LAYOUT_split_3x5_3_wrapper(...) LAYOUT_split_3x5_3(__VA_ARGS__) // Masks #define ___1___ _______ #define ___2___ _______,_______ #define ___3___ _______,_______,_______ #define ___4___ _______,_______,_______,_______ #define ___5___ _______,_______,_______,_______,_______ #define ___6___ _______,_______,_______,_______,_______,_______ #define xxx1xxx KC_NO #define xxx2xxx KC_NO, KC_NO #define xxx3xxx KC_NO, KC_NO, KC_NO #define xxx4xxx KC_NO, KC_NO, KC_NO, KC_NO #define xxx5xxx KC_NO, KC_NO, KC_NO, KC_NO, KC_NO #define xxx6xxx KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO #define xxx1xxx KC_NO #define xxx3xxx KC_NO, KC_NO, KC_NO #define xxx5xxx KC_NO, KC_NO, KC_NO, KC_NO, KC_NO #define xxx6xxx KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO // Quick macros: in dvorak #define BB_UNDO LCTL(KC_SLSH) // Ctrl + Z #define BB_REDO LCTL(KC_T) // Ctrl + Y #define BB_YANK LCTL(KC_I) // Ctrl + C #define BB_CUT LCTL(KC_B) // Ctrl + X #define BB_PSTE LCTL(KC_DOT) // Ctrl + V // Audio keys #ifdef AUDIO_ENABLE #define MU_REC KC_LCTL #define MU_STOP KC_LALT #define MU_PLAY KC_LGUI #define MU_FAST KC_UP #define MU_SLOW KC_DOWN #define MU_MASK KC_A #define BB_SND MU_ON #ifdef TAP_DANCE_ENABLE #define MU_TEMP TD(TD_AUDIO_TEMPO) #else // TAP_DANCE_ENABLE #define MU_TEMP KC_DOWN #endif // TAP_DANCE_ENABLE #else // AUDIO_ENABLE #define MU_REC KC_NO #define MU_STOP KC_NO #define MU_PLAY KC_NO #define MU_FAST KC_NO #define MU_TEMP KC_NO #define MU_SLOW KC_NO #define MU_MASK KC_NO #define BB_SND KC_MUTE #endif // AUDIO_ENABLE // Unicode keys #ifdef UNICODEMAP_ENABLE #define TR_ACIR XP(LOW_A_CIRC, UPC_A_CIRC ) #define TR_CCED XP(LOW_C_CEDI, UPC_C_CEDI ) #define TR_GBRE XP(LOW_G_BREV, LOW_G_BREV ) #define TR_ICIR XP(LOW_I_CIRC, LOW_I_CIRC ) #define TR_I_NO XP(LOW_I_DOTL, LOW_I_DOTL ) #define TR_IDOT XP(LOW_I_DOTT, LOW_I_DOTT ) #define TR_ODIA XP(LOW_O_DIAE, LOW_O_DIAE ) #define TR_SCED XP(LOW_S_CEDI, LOW_S_CEDI ) #define TR_UCIR XP(LOW_U_CIRC, LOW_U_CIRC ) #define TR_UDIA XP(LOW_U_DIAE, LOW_U_DIAE ) #define GR_ALP XP(LOW_ALPHA, UPC_ALPHA ) #define GR_BET XP(LOW_BETA, UPC_BETA ) #define GR_GAM XP(LOW_GAMMA, UPC_GAMMA ) #define GR_DEL XP(LOW_DELTA, UPC_DELTA ) #define GR_EPS XP(LOW_EPSILON,UPC_EPSILON) #define GR_ZET XP(LOW_ZETA, UPC_ZETA ) #define GR_ETA XP(LOW_ETA, UPC_ETA ) #define GR_THE XP(LOW_THETA, UPC_THETA ) #define GR_IOT XP(LOW_IOTA, UPC_IOTA ) #define GR_KAP XP(LOW_KAPPA, UPC_KAPPA ) #define GR_LAM XP(LOW_LAMBDA, UPC_LAMBDA ) #define GR_MU XP(LOW_MU, UPC_MU ) #define GR_NU XP(LOW_NU, UPC_NU ) #define GR_XI XP(LOW_XI, UPC_XI ) #define GR_OMI XP(LOW_OMICRON,UPC_OMICRON) #define GR_PI XP(LOW_PI, UPC_PI ) #define GR_RHO XP(LOW_RHO, UPC_RHO ) #define GR_SIG XP(LOW_SIGMA, UPC_SIGMA ) #define GR_TAU XP(LOW_TAU, UPC_TAU ) #define GR_UPS XP(LOW_UPSILON,UPC_UPSILON) #define GR_PHI XP(LOW_PHI, UPC_PHI ) #define GR_CHI XP(LOW_CHI, UPC_CHI ) #define GR_PSI XP(LOW_PSI, UPC_PSI ) #define GR_OME XP(LOW_OMEGA, UPC_OMEGA ) #define BB_ELLI X(ELLIPSIS) #define BB_PLNK X(PLANCK_CON) #define BB_ANGS X(ANGSTROM) #define BB_BITC X(BITCOIN) #else // UNICODEMAP_ENABLE #define TR_ACIR KC_A #define TR_CCED KC_C #define TR_GBRE KC_G #define TR_ICIR KC_I #define TR_I_NO KC_I #define TR_IDOT KC_I #define TR_ODIA KC_O #define TR_SCED KC_S #define TR_UCIR KC_U #define TR_UDIA KC_U #define GR_ALP KC_NO #define GR_BET KC_NO #define GR_GAM KC_NO #define GR_DEL KC_NO #define GR_EPS KC_NO #define GR_ZET KC_NO #define GR_ETA KC_NO #define GR_THE KC_NO #define GR_IOT KC_NO #define GR_KAP KC_NO #define GR_LAM KC_NO #define GR_MU KC_NO #define GR_NU KC_NO #define GR_XI KC_NO #define GR_OMI KC_NO #define GR_PI KC_NO #define GR_RHO KC_NO #define GR_SIG KC_NO #define GR_TAU KC_NO #define GR_UPS KC_NO #define GR_PHI KC_NO #define GR_CHI KC_NO #define GR_PSI KC_NO #define GR_OME KC_NO #define BB_ELLI KC_NO #define BB_PLNK KC_NO #define BB_ANGS KC_NO #define BB_BITC KC_NO #endif // UNICODEMAP_ENABLE // MOD-tap definitions #define GUI_A MT(MOD_LGUI, DV_A) #define ALT_O MT(MOD_LALT, DV_O) #define CTRL_E MT(MOD_LCTL, DV_E) #define SHIFT_U MT(MOD_LSFT, DV_U) #define ALTGR_Q MT(MOD_RALT, DV_Q) #define GUI_S MT(MOD_RGUI, DV_S) #define ALT_N MT(MOD_LALT, DV_N) #define CTRL_T MT(MOD_LCTL, DV_T) #define SHIFT_H MT(MOD_LSFT, DV_H) #define ALTGR_V MT(MOD_RALT, DV_V) // Layer switches #define MED_DEL LT(_MEDI, KC_DEL ) #define NAV_TAB LT(_NAVI, KC_TAB ) #define SYM_SPC LT(_SYMB, KC_SPC ) #define NUM_ENT LT(_NUMB, KC_ENT ) #define FUN_ESC LT(_FUNC, KC_ESC ) #define MOU_BSP LT(_MOUS, KC_BSPC) // Layer switches #define BB_CHAR OSL(_CHAR) #define BB_GAME TG(_GAME) /* Depending on how the layouts change with language; the keys are shown as; * ┌────────────────────────────────────────────────┐ * │AltGr -none- Shift Shift+AltGr │ * └────────────────────────────────────────────────┘ * If there is an exclamation mark; it indicates a dead key on this map. */ /* Base layout * DVORAK * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐ * ` ~ │ ' " │ , < │ . > │ p P │ y Y │ │ f F │ g G │ c C │ r R │ l L │ < > * ├─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┤ * \ | │ a A │ o O │ e E │ u U │ i I │ │ d D │ h H │ t T │ n N │ s S │ - _ * ├─Gui─┼─Alt─┼─Ctr─┼─Sft─┼─────┤ ├─────┼─Sft─┼─Ctr─┼─Alt─┼─Gui─┤ * / ? │ ; : │ q Q │ j J │ k K │ x X │ │ b B │ m M │ w W │ v V │ z Z │ = + * └─────┴AltGr┴─────┼─────┼─────┼─────┐ ┌─────┼─────┼─────┼─────┴AltGr┴─────┘ * │ Del │ Tab │Space│ │Enter│ Esc │BkSpc│ * └─Med─┴─Nav─┴─Sym─┘ └─Num─┴─Fun─┴─Mou─┘ * TURKISH F * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐ * ¬+ *±│@f F │ g G │ ğ Ğ │¶ı I │ôo OÔ│ │¥d D │®r R │ n N │°h H │£p P │|< >¦ * !├─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼────!┤ ! * `x Xà│ûu UÛ│îi İÎ│€e E │âa AÂ│ûü ÜÛ│ │₺t T │ k K │µm M │ l L │´y Yá│#ş Şǎ * ! !├─Gui─┼─Alt─┼─Ctr─┼─Sft─┼─────┤ ├─────┼─Sft─┼─Ctr─┼─Alt!┼─Gui─┤ * äq Qå│«j J<│»ö Ö>│“v V │¢c C©│”ç Ç │ │ z Z │§s S │×b B │÷. :ȧ│·, ; │~w W * └─────┴AltGr┴─────┼─────┼─────┼─────┐ ┌─────┼─────┼─────┼─────┴AltGr┴─────┘ * │ Del │ Tab │Space│ │Enter│ Esc │BkSpc│ * └─Med─┴─Nav─┴─Sym─┘ └─Num─┴─Fun─┴─Mou─┘ * The thing about this layout is that these will fit most boards I have. */ #define _BL1_5_ DV_QUOT,DV_COMM,DV_DOT, DV_P, DV_Y #define _BR1_5_ DV_F, DV_G, DV_C, DV_R, DV_L #define _BL2_5_ GUI_A, ALT_O, CTRL_E, SHIFT_U,DV_I #define _BR2_5_ DV_D, SHIFT_H,CTRL_T, ALT_N, GUI_S #define _BL3_5_ DV_SCLN,ALTGR_Q,DV_J, DV_K, DV_X #define _BR3_5_ DV_B, DV_M, DV_W, ALTGR_V,DV_Z #define _BL4_3_ MED_DEL,NAV_TAB,SYM_SPC #define _BR4_3_ NUM_ENT,FUN_ESC,MOU_BSP // The extra line for the 6th (or 0th) row #define _BL1_1_ DV_GRV #define _BR1_1_ KC_NUBS #define _BL2_1_ DV_BSLS #define _BR2_1_ DV_MINS #define _BL3_1_ DV_SLSH #define _BR3_1_ DV_EQL /* Extra characters layer * This is accessed using unicode; so IBus compatible apps only. * ┌─────┬─────┬─────┬─────┬─────┐ ┌─────┬─────┬─────┬─────┬─────┐ * │TrFlg│Lenny│Table│ π │ υ │ │ φ │ γ │ χ │ ρ │ λ │ * ├─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┤ * │ α │ ο │ ε │ ψ │ ι │ │ δ │ η │ τ │ ν │ σ │ * ├─────┼─────┼─────┼─────┼─────┤ ├─────┼─────┼─────┼─────┼─────┤ * │ ₿ │ θ │ ℏ │ κ │ ξ │ │ β │ μ │ ω │ Å │ ζ │ * └─────┴─────┴─────┼─────┼─────┼─────┐ ┌─────┼─────┼─────┼─────┴─────┴─────┘ * │ Shf │ ... │ GPG │ │ │ │ Shf │ * └─────┴─────┴─────┘ └─────┴─────┴─────┘ * */ #define _CL1_5_ TR_FLAG,BB_LENY,BB_TABL,GR_PI, GR_UPS #define _CR1_5_ GR_PHI, GR_GAM, GR_CHI, GR_RHO, GR_LAM #define _CL2_5_ GR_ALP, GR_OMI, GR_EPS, GR_PSI, GR_IOT #define _CR2_5_ GR_DEL, GR_ETA, GR_TAU, GR_NU, GR_SIG #define _CL3_5_ BB_BITC,GR_THE, BB_PLNK,GR_KAP, GR_XI #define _CR3_5_ GR_BET, GR_MU, GR_OME, BB_ANGS,GR_ZET #define _CL4_3_ KC_RSFT,BB_ELLI,BB_PGPK #define _CR4_3_ XXXXXXX,XXXXXXX,KC_LSFT /* Game layer * This layer turns off the tap-hold keys for the left half. * ┌─────┬─────┬─────┬─────┬─────┐ * │ Q │ W │ E │ R │ T │ * ├─────┼─────┼─────┼─────┼─────┤ * Tab │ A │ S │ D │ F │ G │ * ├─────┼─────┼─────┼─────┼─────┤ * Shift│ Z │ X │ C │ V │ B │ * └─────┴─────┴─────┼─────┼─────┼─────┐ * │ Esc │Enter│Space│ * └─────┴─────┴─────┘ */ #define _GA1_5_ KC_Q, KC_W, KC_E, KC_R, KC_T #define _GA1_1_ _______ #define _GA2_5_ KC_A, KC_S, KC_D, KC_F, KC_G #define _GA2_1_ KC_TAB #define _GA3_5_ KC_Z, KC_X, KC_C, KC_V, KC_B #define _GA3_1_ KC_LSFT #define _GA4_3_ KC_ESC, KC_ENT, KC_SPC /* Media layer * ┌─────┬─────┬─────┬─────┬─────┐ * │Speed│ Mod │ Hue │ Sat │ Bri │ RGB light control * ├─────┼─────┼─────┼─────┼─────┤ * │Togg.│Prev.│MuTog│MuStp│Next │ Media control * ├─────┼─────┼─────┼─────┼─────┤ * │Sink │Vol -│ Mut │Eject│Vol +│ Volume control * ┌─────┼─────┼─────┼─────┴─────┴─────┘ * │OledL│Veloc│Music│ Feature control on keyboard * └─────┴─────┴─────┘ */ #define _ME1_5_ RGB_SPI,RGB_MOD,RGB_HUI,RGB_SAI,RGB_VAI #define _ME2_5_ RGB_TOG,KC_MPRV,KC_MPLY,KC_MSTP,KC_MNXT #define _ME3_5_ KC_F13, KC_VOLD,KC_MUTE,KC_EJCT,KC_VOLU #define _ME4_3_ BB_OLED,VLK_TOG,MU_TOG /* Navigation layer * ┌─────┬─────┬─────┬─────┬─────┐ * │Redo │Paste│Yank │ Cut │PrScr│ * ├─────┼─────┼─────┼─────┼─────┤ * │Undo │ < │ v │ ^ │ > │ * ├─────┼─────┼─────┼─────┼─────┤ * │ Ins │Home │PgDwn│PgUp │ End │ * ┌─────┼─────┼─────┼─────┴─────┴─────┘ * │Enter│ Esc │BkSpc│ * └─────┴─────┴─────┘ */ #define _NA1_5_ BB_REDO,BB_PSTE,BB_YANK,BB_CUT, KC_PSCR #define _NA2_5_ BB_UNDO,KC_LEFT,KC_DOWN,KC_UP, KC_RGHT #define _NA3_5_ KC_INS, KC_HOME,KC_PGDN,KC_PGUP,KC_END #define _NA4_3_ KC_ENT, KC_ESC, KC_BSPC /* Symbols layer * This layer has the central columns shifted for convenience * DVORAK * ┌─────┬─────┬─────┬─────┬─────┐ * │ ` │ { │ } │ / │ = │ * ├─────┼─────┼─────┼─────┼─────┤ * │ ~ │ [ │ ] │ ? │ + │ * ├─────┼─────┼─────┼─────┼─────┤ * │CapsL│ ( │ ) │ \ │ | │ * ┌─────┼─────┼─────┼─────┴─────┴─────┘ * │Enter│ Esc │BkSpc│ * └─────┴─────┴─────┘ * Turkish F * (AltGr is right on the central column, red. keys on main layer are omitted) * ┌─────┬─────┬─────┬─────┬─────┐ * │ + ¬ │ / \ │ - | │ │ │ * ├─────┼─────┼─────┼─────┼─────┤ * │ * ± │ ? ¿ │ _ │ │ │ * ├─────┼─────┼─────┼─────┼─────┤ * │CapsL│ │ │ │ │ * ┌─────┼─────┼─────┼─────┴─────┴─────┘ * │Enter│ Esc │BkSpc│ * └─────┴─────┴─────┘ * QWERTY * ┌─────┬─────┬─────┬─────┬─────┐ * │ ` │ - │ = │ { │ } │ * ├─────┼─────┼─────┼─────┼─────┤ * │ ~ │ _ │ + │ [ │ ] │ * ├─────┼─────┼─────┼─────┼─────┤ * │CapsL│ ( │ ) │ \ │ | │ * ┌─────┼─────┼─────┼─────┴─────┴─────┘ * │Enter│ Esc │BkSpc│ * └─────┴─────┴─────┘ */ #define _SY1_5_ DV_GRV, DV_LCBR,DV_RCBR,DV_SLSH,DV_EQL #define _SY2_5_ DV_TILD,DV_LBRC,DV_RBRC,DV_QUES,DV_PLUS #define _SY3_5_ KC_CAPS,DV_LPRN,DV_RPRN,DV_BSLS,DV_PIPE #define _SY4_3_ KC_ENT, KC_ESC, KC_BSPC /* Numbers layer * This layer contains numbers and the associated symbols. * DVORAK * ┌─────┬─────┬─────┬─────┬─────┐ * │ < │ 7 & │ 8 * │ 9 ( │ 0 ) │ * ├─────┼─────┼─────┼─────┼─────┤ * │ _ │ 4 $ │ 5 % │ 6 ^ │ - │ * ├─────┼─────┼─────┼─────┼─────┤ * │ > │ 1 ! │ 2 @ │ 3 # │Char.│ * └─────┴─────┴─────┼─────┼─────┼─────┐ * │ Del │ Tab │Space│ * └─────┴─────┴─────┘ * Turkish F * ┌─────┬─────┬─────┬─────┬─────┐ * │ < | │{7 ' │[8 ( │]9 )±│}0 =°│ * ├─────┼─────┼─────┼─────┼─────┤ * │ │¼4 $ │½5 %⅜│¾6 & │ │ * ├─────┼─────┼─────┼─────┼─────┤ * │ > ¦ │¹1 !¡│²2 " │#3 ^³│Char.│ * └─────┴─────┴─────┼─────┼─────┼─────┐ * │ Del │ Tab │Space│ * └─────┴─────┴─────┘ */ #define _NU1_5_ KC_NUBS,KC_7, KC_8, KC_9, KC_0 #define _NU2_5_ DV_UNDS,KC_4, KC_5, KC_6, DV_MINS #define _NU3_5_ LSFT(KC_NUBS), KC_1, KC_2, KC_3, BB_CHAR #define _NU4_3_ KC_DEL, KC_TAB, KC_SPC /* Function layer * ┌─────┬─────┬─────┬─────┬─────┐ * │ F01 │ F02 │ F03 │ F04 │EEPRM│ * ├─────┼─────┼─────┼─────┼─────┤ * │ F05 │ F06 │ F07 │ F08 │EEPRM│ * ├─────┼─────┼─────┼─────┼─────┤ * │ F09 │ F10 │ F11 │ F12 │GameL│ * └─────┴─────┴─────┼─────┼─────┼─────┐ * │ Del │ Tab │Space│ * └─────┴─────┴─────┘ */ #define _FU1_5_ KC_F1, KC_F2, KC_F3, KC_F4, RESET #define _FU2_5_ KC_F5, KC_F6, KC_F7, KC_F8, EE_CLR #define _FU3_5_ KC_F9, KC_F10, KC_F11, KC_F12, BB_GAME #define _FU4_3_ KC_DEL, KC_TAB, KC_SPC /* Mouse layer * ┌─────┬─────┬─────┬─────┬─────┐ * │Slow │Right│ Mid │ Lft │Fast │ * ├─────┼─────┼─────┼─────┼─────┤ * │ |<| │ |v| │ |^| │ |>| │ Bt4 │ * ├─────┼─────┼─────┼─────┼─────┤ * │ <<< │ vvv │ ^^^ │ >>> │ Bt5 │ * └─────┴─────┴─────┼─────┼─────┼─────┐ * │ Del │ Tab │Space│ * └─────┴─────┴─────┘ */ #define _MO1_5_ KC_ACL0,KC_BTN1,KC_BTN2,KC_BTN3,KC_ACL2 #define _MO2_5_ KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R,KC_BTN4 #define _MO3_5_ KC_WH_L,KC_WH_D,KC_WH_U,KC_WH_R,KC_BTN5 #define _MO4_3_ KC_DEL, KC_TAB, KC_SPC /* Music layer * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ * │ │ │ │ │ │ │ │ │ │ │ │ │ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ * │ │ │ │ │ │ │ │ │ │ │ │ │ * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤ * │ │ │ │ │ │ │ │ │ │ │ │ │ * └───┴───┴───┼───┼───┼───┼───┼───┼───┼───┴───┴───┘ * │Rec│Stp│Ply│Tmp│Mod│Off│ * └───┴───┴───┴───┴───┴───┘ */ #define _MUL_3_ MU_REC, MU_STOP,MU_PLAY #define _MUR_3_ MU_TEMP,MU_MOD, MU_TOG #define _MU_01_ MU_MASK #define _MU_02_ MU_MASK,MU_MASK #define _MU_03_ MU_MASK,MU_MASK,MU_MASK #define _MU_06_ MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK #define _MU_08_ MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK #define _MU_10_ MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK #define _MU_12_ MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK,MU_MASK
D users/bbaserdem/config.h => users/bbaserdem/config.h +0 -134
@@ 1,134 0,0 @@ /* Copyright 2021 Batuhan Başerdem * <baserdem.batuhan@gmail.com> @bbaserdem * * 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 <http://www.gnu.org/licenses/>. */ #pragma once /* CONFIG * Common hardware configuration accross my boards */ // Space saving #ifdef LOCKING_SUPPORT_ENABLE # undef LOCKING_SUPPORT_ENABLE #endif #ifdef LOCKING_RESYNC_ENABLE # undef LOCKING_RESYNC_ENABLE #endif #ifndef NO_DEBUG # define NO_DEBUG #endif #if !defined(NO_PRINT) && !defined(CONSOLE_ENABLE) # define NO_PRINT #endif // Some of my own settings # define HOUSEKEEPING_THROTTLE_INTERVAL_MS 250 // Split transport settings #ifdef SPLIT_KEYBOARD # define SPLIT_TRANSPORT_MIRROR # define SPLIT_LAYER_STATE_ENABLE # define SPLIT_MODS_ENABLE # define SPLIT_TRANSACTION_IDS_USER RPC_ID_CONFIG_SYNC, RPC_ID_RUNTIME_SYNC, RPC_ID_KEYMAP_SYNC # define SPLIT_LED_STATE_ENABLE # ifdef WPM_ENABLE # define SPLIT_WPM_ENABLE # endif // WPM_ENABLE # ifdef OLED_ENABLE # define SPLIT_OLED_ENABLE # endif // OLED_ENABLE #endif // SPLIT_KEYBOARD // Unicode entry mode #ifdef UNICODEMAP_ENABLE # define UNICODE_SELECTED_MODES UC_LNX // Adapt the unicode entry mode to dvorak # ifdef UNICODE_KEY_LNX # undef UNICODE_KEY_LNX # endif # define UNICODE_KEY_LNX LCTL(LSFT(KC_F)) #endif // UNICODEMAP_ENABLE // Mousekey mode #ifdef MOUSEKEY_ENABLE # define MK_COMBINED #endif // MOUSEKEY_ENABLE // Tap-hold settings #define TAPPING_TERM 200 #define TAP_CODE_DELAY 20 #define IGNORE_MOD_TAP_INTERRUPT #define PERMISSIVE_HOLD #define TAPPING_FORCE_HOLD // Backlight settings #ifdef BACKLIGHT_ENABLE # define BACKLIGHT_BREATHING # define BREATHING_PERIOD 5 #endif // BACKLIGHT_ENABLE // Audio definitions #ifdef AUDIO_ENABLE //# define AUDIO_ENABLE_TONE_MULTIPLEXING // Make findable songs as defaults # ifdef HOROLOGY # define STARTUP_SONG SONG(HOROLOGY) # endif # ifdef PEOPLE_VULTURES # define GOODBYE_SONG SONG(PEOPLE_VULTURES) # endif # ifdef NONAGON_INFINITY # define MUSIC_ON_SONG SONG(NONAGON_INFINITY) # endif # ifdef WAH_WAH # define MUSIC_OFF_SONG SONG(WAH_WAH) # endif // Audio code expects these to be defined # ifdef BIG_FIG_WASP # define GAME_ON_SONG SONG(BIG_FIG_WASP) # else # define GAME_ON_SONG SONG(USSR_ANTHEM) # endif # ifdef POLYGONDWANALAND # define GAME_OFF_SONG SONG(POLYGONDWANALAND) # else # define GAME_OFF_SONG SONG(NOCTURNE_OP_9_NO_1) # endif #endif // AUDIO_ENABLE // OLED definitions #ifdef OLED_ENABLE // Timeout does not work for split secondary board; i implemented it myself # define OLED_TIMEOUT 30000 // Fade out the screen when timing out # define OLED_FADE_OUT # define OLED_FADE_OUT_INTERVAL 15 #endif // OLED_ENABLE // For perkey leds #ifdef RGB_MATRIX_ENABLE // This is not working //# define RGB_MATRIX_TIMEOUT 1800000 # define RGB_DISABLE_WHEN_USB_SUSPENDED true // Start using this mode # define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_RAINBOW_BEACON # define RGB_MATRIX_STARTUP_HUE 100 # define RGB_MATRIX_STARTUP_SAT 255 # define RGB_MATRIX_STARTUP_VAL RGB_MATRIX_MAXIMUM_BRIGHTNESS // Some config options # define RGB_MATRIX_KEYRELEASES # define RGB_MATRIX_FRAMEBUFFER_EFFECTS // Enable framebuffer effects #endif // RGB_MATRIX_ENABLE
D users/bbaserdem/keymap-bitmaps/.gitignore => users/bbaserdem/keymap-bitmaps/.gitignore +0 -4
D users/bbaserdem/keymap-bitmaps/cropBmp => users/bbaserdem/keymap-bitmaps/cropBmp +0 -38
@@ 1,38 0,0 @@ #!/bin/bash # Copyright 2021 Batuhan Başerdem # <baserdem.batuhan@gmail.com> @bbaserdem # # 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 <http://www.gnu.org/licenses/>. # Goes through all the files and turns them into strips in their respective folder if [ -z "${1}" ] ; then echo 'No argument; defaulting to script directory.' target_dir="$(dirname "${0}")" elif [ -d "${1}" ] ; then echo "Targeting files in '${1}'." target_dir="${1}" else echo 'Argument is not directory.' exit 1 fi output_dir="${target_dir}/splitImages" mkdir -p "${output_dir}" for this_image in "${target_dir}/"*.bmp ; do echo "Found '${this_image}'." this_name="$(basename "${this_image%%.bmp}")" convert "${this_image}" -crop 'x8' "${output_dir}/${this_name}"_%d.bmp done
D users/bbaserdem/readme.md => users/bbaserdem/readme.md +0 -131
@@ 1,131 0,0 @@ # BBASERDEM userspace code for qmk My userspace code for my various keyboards; available here. ## Builds These are my keyboard builds and info, it allows me to plan out my builds. ### Planck SERVER * Board: `kprepublic/jj40` * Microcontroller: Embedded * Layout: `ortho_4x12` * Functionality: Underglow RGB Lighting, LED diode lighting. * Case: Clear Acrylic Top and Bottow, with Frosted Acrylic Diffuser (Smashing Acrylics) * Switches: BOX Navy * Keycaps: Datamancer Tall Deco Typewriter Keycaps Just a decorative planck replacement (for my rev4 PCB that died.) ### Planck Light * Board: `planck/light` * Microcontroller: Embedded * Layout: `ortho_4x12` * Functionality: Per-key RGB Lighting, Audio. * Case: Clear Acrylic Top and Bottow, with Frosted Acrylic Diffuser (Smashing Acrylics) * Switches: BOX Navy * Keycaps: Datamancer Tall Deco Typewriter Keycaps Just a decorative planck replacement (for my rev4 PCB that died.) ### Corne ARM * Board: `crkbd/rev1` * Microcontroller: Proton C (x2) * Layout: `split_3x6_3` * Functionality: OLED, Audio, Per-key RGB Lighting, Rotary Encoder (x2) * Case: IMK Corne Case v2 Polycarbonate * Switches: Healios V2 * Keycaps: POM Jelly PCB is actually [Proton-C Compatible crkbd PCB](https://github.com/ItsWaffIe/waffle_corne). ### Corne Lite * Board: `crkbd/rev1` * Microcontroller: Pro Micro (x2) * Layout: `split_3x5_3` * Functionality: Per-key RGB Lighting, OLED (No firmware space) * Case: Custom * Switches: Choc Low Burnt Orange * Keycaps: [Scooped Choc Keycaps](https://mkultra.click/collections/keycaps/products/scooped-choc-keycaps?variant=31223543365730) Maybe try adding a trackpad for this, as detailed [here](https://github.com/manna-harbour/crkbd/blob/master/trackpoint/readme.org). ### Kyria * Board: `splitkb/kyria/rev1` * Microcontroller: Pro Micro (x2) * Layout: `split_3x6_6` * Functionality: OLED, Underglow RGB Lighting (No firmware space), Rotary Encoder (x2) * Case: Matte Black Acrylic High-Profile case * Switches: Gateron Ink Silent Black * Keycaps: Oblotzky SA Oblivion Main driver at work currently; love the switches and the board layout. # Firmware building ## Archlinux On archlinux, the package *arm-none-eabi-gcc* is too new. To fix; add to the environment `CFLAGS="-Wno-error=deprecated"` to compilation commands. Also; says to run `avr-gcc` version `8.4.0` for smaller firmware, but I find that it only saves a few bytes. ## Bootloader Needed to type this out from the QMK website. If I want to flash a new bootloader for a machine; here are steps; 1. Flash the util/pro_micro_ISP_B6_10.hex to a spare promicro using; `avrdude -p atmega32u4 -P "$(ls /dev/ttyACM*)" -c avr109 -D -U flash:w:pro_micro_ISP_B6_10.hex` 2. Wire the pins; (first is the ISP pro micro; second is the target) ``` Pro Micro 10 (B6) <-> Keyboard RESET Pro Micro 15 (B1) <-> Keyboard B1 (SCLK) Pro Micro 16 (B2) <-> Keyboard B2 (MOSI) Pro Micro 14 (B3) <-> Keyboard B3 (MISO) Pro Micro VCC <-> Keyboard VCC Pro Micro GND <-> Keyboard GND ``` I do have this on hand I believe; from massdrop's planck light firmware updater. 3. Connect the flashed pro micro to my computer and run `avrdude -c avrisp -P "$(ls /dev/ttyACM*)" -p atmega32u4 -U flash:w:bootloader_atmega32u4_1.0.0.hex:i -U lfuse:w:0x5E:m -U hfuse:w:0xD9:m -U efuse:w:0xC3:m` The avrisp here refers to the firmware on the ISP flasher pro micro. The `atmega32u4` refers to the CPU used in the respective breakout boards. The `avrdude` command interacts with catalina bootloader. The shell call after the `-P` flag auto finds the port that the pro micro connects to. The last few arguments are some jumpers apparently. # Features My userspace has a lot of shared code between different keyboards. These files are prefixed with `sbp-` to remove any naming clash. * [bb-audio](bb-audio.c): Code dealing with audio playback using onboard sound. * [bb-encoder](bb-encoder.c): Rotary encoder sutff. * [bb-macro](bb-macro.c): My custom keycodes; macros, tap dances, etc. * [bb-oled](bb-oled.c): Controls OLED displays. For higher memory; there is also [bb-oled-extra](bb-oled-extra.c). * [bb-rgb](bb-rgb.c): Controls per-key RGB LED matrix stuff, and layer indication. Uses `RGB_MATRIX`. * [bb-underglaw](bb-underglow.c): Controls RGB LED strip, and layer indication. Uses `RGBLIGHT`. # Layout My personal layout is mostly inspired by the [Miryoku layout](../manna-harbour_miryoku/miryoku.org). There are some changes to make it friendlier to international keyboards. My board is compatible with software implementation of Dvorak and Turkish F. ## Base Base layer uses tap-hold functionality to have access to modifiers. The modifiers are mirrored on each half of the layout; as to make those modifiers accessible to the keys that overlap them. Besides the Alt key; each side has the proper L/R version of the modifier. Since Right Alt key functions as AltGr key; both the L and R versions are available on each side.
D users/bbaserdem/rules.mk => users/bbaserdem/rules.mk +0 -87
@@ 1,87 0,0 @@ # Copyright 2021 Batuhan Başerdem # <baserdem.batuhan@gmail.com> @bbaserdem # # 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 <http://www.gnu.org/licenses/>. # Common compilation flags LTO_ENABLE = yes # These should be enabled in all boards MOUSEKEY_ENABLE = yes # Mouse emulation keys EXTRAKEY_ENABLE = yes # OS signals like volume control UNICODEMAP_ENABLE = yes # Used for unicode character emulation # These should be disabled in all boards BOOTMAGIC_ENABLE = no # Access to EEPROM settings, not needed CONSOLE_ENABLE = no # Allows console output with a command COMMAND_ENABLE = no # Some bootmagic thing i dont use SLEEP_LED_ENABLE = no # Breathes LED's when computer is asleep. Untested. MIDI_ENABLE = no # Midi driver (untested) UNICODE_ENABLE = no # We use unicodemap, not unicode UCIS_ENABLE = no # We use unicodemap, not ucis VARIABLE_TRACE = no # Allows debugging variables KEY_LOCK_ENABLE = no # Allows locking any key. Not used in general RGBLIGHT_ENABLE = no # LED strip, but there is RGB_MATRIX instead TAP_DANCE_ENABLE = no # Tap dance keys; i don't use tap dance # These features can be disabled at whim NKRO_ENABLE ?= yes # Default is 6KRO VELOCIKEY_ENABLE ?= yes # Speed effects change with typing speed WPM_ENABLE ?= yes # Get WPM reports as you type # Manually configure these on each keyboard individually # AUDIO_ENABLE # Audio stuff # BACKLIGHT_ENABLE # Switch LEDs # ENCODER_ENABLE # Rotary encoder # RGB_MATRIX_ENABLE # RGB LEDs # OLED_ENABLE # For OLED # Userspace code SRC += bbaserdem.c # Macros SRC += bb-macro.c # Audio code ifeq ($(strip $(AUDIO_ENABLE)), yes) SRC += bb-audio.c endif # Rotary encoder stuff ifeq ($(strip $(ENCODER_ENABLE)), yes) SRC += bb-encoder.c endif # RGB LED (Underglow) code ifeq ($(strip $(RGBLIGHT_ENABLE)), yes) SRC += bb-underglow.c endif # RGB LED (Perkey) code ifeq ($(strip $(RGB_MATRIX_ENABLE)), yes) SRC += bb-rgb.c endif # Backlight code ifeq ($(strip $(BACKLIGHT_ENABLE)), yes) SRC += bb-backlight.c endif # OLED code ifeq ($(strip $(OLED_ENABLE)), yes) SRC += bb-oled.c ifeq ($(strip $(CTPC)), yes) SRC += bb-oled-extra.c endif endif