forked from mirrors/qmk_userspace
		
	Updates to mlego m65 (#20220)
Co-authored-by: Drashna Jaelre <drashna@live.com> Co-authored-by: Ryan <fauxpark@gmail.com>
This commit is contained in:
		
					parent
					
						
							
								c72d661b93
							
						
					
				
			
			
				commit
				
					
						007c0c1db4
					
				
			
		
					 37 changed files with 822 additions and 1508 deletions
				
			
		| 
						 | 
				
			
			@ -1,21 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2021-2022 Alin M Elena <alinm.elena@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#define LOCKING_SUPPORT_ENABLE
 | 
			
		||||
#define LOCKING_RESYNC_ENABLE
 | 
			
		||||
| 
						 | 
				
			
			@ -1,84 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
    "keyboard_name": "m65",
 | 
			
		||||
    "manufacturer": "Alin Elena",
 | 
			
		||||
    "url": "https://gitlab.com/m-lego/m65",
 | 
			
		||||
    "maintainer": "alin elena",
 | 
			
		||||
    "usb": {
 | 
			
		||||
        "vid": "0xBABA"
 | 
			
		||||
    },
 | 
			
		||||
    "layouts": {
 | 
			
		||||
        "LAYOUT_ortho_5x13": {
 | 
			
		||||
            "layout": [
 | 
			
		||||
                {"matrix": [0, 0], "x": 0, "y": 0},
 | 
			
		||||
                {"matrix": [0, 1], "x": 1, "y": 0},
 | 
			
		||||
                {"matrix": [0, 2], "x": 2, "y": 0},
 | 
			
		||||
                {"matrix": [0, 3], "x": 3, "y": 0},
 | 
			
		||||
                {"matrix": [0, 4], "x": 4, "y": 0},
 | 
			
		||||
                {"matrix": [0, 5], "x": 5, "y": 0},
 | 
			
		||||
                {"matrix": [0, 6], "x": 6, "y": 0},
 | 
			
		||||
                {"matrix": [0, 7], "x": 7, "y": 0},
 | 
			
		||||
                {"matrix": [0, 8], "x": 8, "y": 0},
 | 
			
		||||
                {"matrix": [0, 9], "x": 9, "y": 0},
 | 
			
		||||
                {"matrix": [0, 10], "x": 10, "y": 0},
 | 
			
		||||
                {"matrix": [0, 11], "x": 11, "y": 0},
 | 
			
		||||
                {"matrix": [0, 12], "x": 12, "y": 0},
 | 
			
		||||
 | 
			
		||||
                {"matrix": [1, 0], "x": 0, "y": 1},
 | 
			
		||||
                {"matrix": [1, 1], "x": 1, "y": 1},
 | 
			
		||||
                {"matrix": [1, 2], "x": 2, "y": 1},
 | 
			
		||||
                {"matrix": [1, 3], "x": 3, "y": 1},
 | 
			
		||||
                {"matrix": [1, 4], "x": 4, "y": 1},
 | 
			
		||||
                {"matrix": [1, 5], "x": 5, "y": 1},
 | 
			
		||||
                {"matrix": [1, 6], "x": 6, "y": 1},
 | 
			
		||||
                {"matrix": [1, 7], "x": 7, "y": 1},
 | 
			
		||||
                {"matrix": [1, 8], "x": 8, "y": 1},
 | 
			
		||||
                {"matrix": [1, 9], "x": 9, "y": 1},
 | 
			
		||||
                {"matrix": [1, 10], "x": 10, "y": 1},
 | 
			
		||||
                {"matrix": [1, 11], "x": 11, "y": 1},
 | 
			
		||||
                {"matrix": [1, 12], "x": 12, "y": 1},
 | 
			
		||||
 | 
			
		||||
                {"matrix": [2, 0], "x": 0, "y": 2},
 | 
			
		||||
                {"matrix": [2, 1], "x": 1, "y": 2},
 | 
			
		||||
                {"matrix": [2, 2], "x": 2, "y": 2},
 | 
			
		||||
                {"matrix": [2, 3], "x": 3, "y": 2},
 | 
			
		||||
                {"matrix": [2, 4], "x": 4, "y": 2},
 | 
			
		||||
                {"matrix": [2, 5], "x": 5, "y": 2},
 | 
			
		||||
                {"matrix": [2, 6], "x": 6, "y": 2},
 | 
			
		||||
                {"matrix": [2, 7], "x": 7, "y": 2},
 | 
			
		||||
                {"matrix": [2, 8], "x": 8, "y": 2},
 | 
			
		||||
                {"matrix": [2, 9], "x": 9, "y": 2},
 | 
			
		||||
                {"matrix": [2, 10], "x": 10, "y": 2},
 | 
			
		||||
                {"matrix": [2, 11], "x": 11, "y": 2},
 | 
			
		||||
                {"matrix": [2, 12], "x": 12, "y": 2},
 | 
			
		||||
 | 
			
		||||
                {"matrix": [3, 0], "x": 0, "y": 3},
 | 
			
		||||
                {"matrix": [3, 1], "x": 1, "y": 3},
 | 
			
		||||
                {"matrix": [3, 2], "x": 2, "y": 3},
 | 
			
		||||
                {"matrix": [3, 3], "x": 3, "y": 3},
 | 
			
		||||
                {"matrix": [3, 4], "x": 4, "y": 3},
 | 
			
		||||
                {"matrix": [3, 5], "x": 5, "y": 3},
 | 
			
		||||
                {"matrix": [3, 6], "x": 6, "y": 3},
 | 
			
		||||
                {"matrix": [3, 7], "x": 7, "y": 3},
 | 
			
		||||
                {"matrix": [3, 8], "x": 8, "y": 3},
 | 
			
		||||
                {"matrix": [3, 9], "x": 9, "y": 3},
 | 
			
		||||
                {"matrix": [3, 10], "x": 10, "y": 3},
 | 
			
		||||
                {"matrix": [3, 11], "x": 11, "y": 3},
 | 
			
		||||
                {"matrix": [3, 12], "x": 12, "y": 3},
 | 
			
		||||
 | 
			
		||||
                {"matrix": [4, 0], "x": 0, "y": 4},
 | 
			
		||||
                {"matrix": [4, 1], "x": 1, "y": 4},
 | 
			
		||||
                {"matrix": [4, 2], "x": 2, "y": 4},
 | 
			
		||||
                {"matrix": [4, 3], "x": 3, "y": 4},
 | 
			
		||||
                {"matrix": [4, 4], "x": 4, "y": 4},
 | 
			
		||||
                {"matrix": [4, 5], "x": 5, "y": 4},
 | 
			
		||||
                {"matrix": [4, 6], "x": 6, "y": 4},
 | 
			
		||||
                {"matrix": [4, 7], "x": 7, "y": 4},
 | 
			
		||||
                {"matrix": [4, 8], "x": 8, "y": 4},
 | 
			
		||||
                {"matrix": [4, 9], "x": 9, "y": 4},
 | 
			
		||||
                {"matrix": [4, 10], "x": 10, "y": 4},
 | 
			
		||||
                {"matrix": [4, 11], "x": 11, "y": 4},
 | 
			
		||||
                {"matrix": [4, 12], "x": 12, "y": 4}
 | 
			
		||||
            ]
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,19 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2021-2022 Alin M Elena <alinm.elena@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
// Copyright 2020-2023 alin m elena (@alinelena)
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,19 +1,5 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2021-2022 Alin M Elena <alinm.elena@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
// Copyright 2020-2023 alin m elena (@alinelena)
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#include QMK_KEYBOARD_H
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -51,69 +37,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
};
 | 
			
		||||
// clang-format on
 | 
			
		||||
 | 
			
		||||
bool led_update_user(led_t led_state) {
 | 
			
		||||
    // Disable the default LED update code, so that lock LEDs could be reused to show layer status.
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void matrix_scan_user(void) {
 | 
			
		||||
 | 
			
		||||
    toggle_leds();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool process_record_user(uint16_t keycode, keyrecord_t* record) {
 | 
			
		||||
    switch (keycode) {
 | 
			
		||||
        case (TT(_LWR)):
 | 
			
		||||
            if (!record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
 | 
			
		||||
                // This runs before the TT() handler toggles the layer state, so the current layer state is the opposite of the final one after toggle.
 | 
			
		||||
                set_led_toggle(_LWR, !layer_state_is(_LWR));
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
            break;
 | 
			
		||||
        case (TT(_RSE)):
 | 
			
		||||
            if (record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
 | 
			
		||||
                set_led_toggle(_RSE, !layer_state_is(_RSE));
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
layer_state_t layer_state_set_user(layer_state_t state) {
 | 
			
		||||
 | 
			
		||||
#ifdef RGBLIGHT_ENABLE
 | 
			
		||||
 | 
			
		||||
    set_rgb_layers(state);
 | 
			
		||||
 | 
			
		||||
#if defined(ENCODER_MAP_ENABLE)
 | 
			
		||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
 | 
			
		||||
    [_QW]  = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
 | 
			
		||||
#if defined(RGBLIGHT_ENABLE)
 | 
			
		||||
    [_LWR] = {ENCODER_CCW_CW(RGB_HUD, RGB_HUI)},
 | 
			
		||||
    [_RSE] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
 | 
			
		||||
    [_ADJ] = {ENCODER_CCW_CW(RGB_RMOD, RGB_MOD)},
 | 
			
		||||
#    else
 | 
			
		||||
    [_LWR] = {ENCODER_CCW_CW(KC_MNXT, KC_MPRV)},
 | 
			
		||||
    [_RSE] = {ENCODER_CCW_CW(KC_MFFD, KC_MRWD)},
 | 
			
		||||
    [_ADJ] = {ENCODER_CCW_CW(KC_PGDN, KC_PGUP)},
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    return update_tri_layer_state(state, _LWR, _RSE, _ADJ);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef RGBLIGHT_ENABLE
 | 
			
		||||
 | 
			
		||||
layer_state_t default_layer_state_set_user(layer_state_t state) {
 | 
			
		||||
    set_default_rgb_layers(state);
 | 
			
		||||
    return state;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void keyboard_post_init_user(void) {
 | 
			
		||||
 | 
			
		||||
#ifdef RGBLIGHT_ENABLE
 | 
			
		||||
 | 
			
		||||
    // Enable the LED layers
 | 
			
		||||
    rgblight_layers = my_rgb();
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef OLED_ENABLE
 | 
			
		||||
 | 
			
		||||
    init_timer();
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										1
									
								
								keyboards/mlego/m65/keymaps/default/rules.mk
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								keyboards/mlego/m65/keymaps/default/rules.mk
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
ENCODER_MAP_ENABLE = yes
 | 
			
		||||
| 
						 | 
				
			
			@ -1,20 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2021-2022 Alin M Elena <alinm.elena@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#define TAPPING_TOGGLE 2
 | 
			
		||||
| 
						 | 
				
			
			@ -1,121 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2021-2022 Alin M Elena <alinm.elena@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include QMK_KEYBOARD_H
 | 
			
		||||
#include "keymap_danish.h"
 | 
			
		||||
 | 
			
		||||
// clang-format off
 | 
			
		||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		||||
 | 
			
		||||
  [_QW] = LAYOUT_ortho_5x13(
 | 
			
		||||
       KC_ESC, DK_1   , DK_2    , DK_3   , DK_4    , DK_5  , DK_6  , DK_7  , DK_8   , DK_9   , DK_0   , DK_PLUS, KC_BSPC ,
 | 
			
		||||
       KC_TAB, DK_Q   , DK_W    , DK_E   , DK_R    , DK_T  , DK_Y  , DK_U  , DK_I   , DK_O   , DK_P   , DK_ARNG, DK_DIAE ,
 | 
			
		||||
      DK_QUOT, DK_A   , DK_S    , DK_D   , DK_F    , DK_G  , DK_H  , DK_J  , DK_K   , DK_L   , DK_AE  , DK_OSTR, KC_ENT  ,
 | 
			
		||||
      SC_LSPO, DK_LABK, DK_Z    , DK_X   , DK_C    , DK_V  , DK_B  , DK_N  , DK_M   , DK_COMM, DK_DOT , KC_UP  , DK_MINS ,
 | 
			
		||||
      KC_LCTL, KC_LGUI, TT(_LWR), KC_LALT, TT(_RSE), KC_SPC, KC_SPC, KC_SPC, KC_RALT, SC_RSPC, KC_LEFT, KC_DOWN, KC_RGHT),
 | 
			
		||||
 | 
			
		||||
  [_LWR] = LAYOUT_ortho_5x13(
 | 
			
		||||
       DK_HALF, KC_MUTE, KC_VOLU, KC_VOLD, KC_MPRV, KC_MPLY, KC_MNXT, G(KC_P), KC_SLEP, KC_WAKE, KC_PSCR, KC_DEL , DK_ACUT  ,
 | 
			
		||||
       KC_BTN3, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
 | 
			
		||||
       KC_BTN2, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
 | 
			
		||||
       _______, KC_BTN1, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_U, _______ ,
 | 
			
		||||
       _______, KC_BTN4, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R),
 | 
			
		||||
 | 
			
		||||
  [_RSE] = LAYOUT_ortho_5x13(
 | 
			
		||||
      KC_ESC , KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_F5  , KC_F6  , KC_F7  , KC_F8  , KC_F9  , KC_F10 , KC_F11 , KC_F12  ,
 | 
			
		||||
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
 | 
			
		||||
      KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
 | 
			
		||||
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_U, _______ ,
 | 
			
		||||
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_L, KC_WH_D, KC_WH_R),
 | 
			
		||||
 | 
			
		||||
    [_ADJ] = LAYOUT_ortho_5x13(
 | 
			
		||||
      RGB_MOD,RGB_RMOD, A(KC_F2), _______, _______, _______, _______, _______, _______, _______, _______, RGB_M_T, RGB_M_SW ,
 | 
			
		||||
      RGB_HUI, RGB_HUD, RGB_M_P , _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______, RGB_M_SN ,
 | 
			
		||||
      RGB_SAI, RGB_SAD, RGB_M_B , _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_M_K ,
 | 
			
		||||
      RGB_VAI, RGB_VAD, RGB_M_R , _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_M_X ,
 | 
			
		||||
      RGB_TOG, _______, _______ , _______, _______, _______, _______, _______, _______, _______, _______, RGB_M_TW, RGB_M_G),
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
// clang-format on
 | 
			
		||||
 | 
			
		||||
bool led_update_user(led_t led_state) {
 | 
			
		||||
    // Disable the default LED update code, so that lock LEDs could be reused to show layer status.
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void matrix_scan_user(void) {
 | 
			
		||||
 | 
			
		||||
    toggle_leds();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool process_record_user(uint16_t keycode, keyrecord_t* record) {
 | 
			
		||||
    switch (keycode) {
 | 
			
		||||
        case (TT(_LWR)):
 | 
			
		||||
            if (!record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
 | 
			
		||||
                // This runs before the TT() handler toggles the layer state, so the current layer state is the opposite of the final one after toggle.
 | 
			
		||||
                set_led_toggle(_LWR, !layer_state_is(_LWR));
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
            break;
 | 
			
		||||
        case (TT(_RSE)):
 | 
			
		||||
            if (record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
 | 
			
		||||
                set_led_toggle(_RSE, !layer_state_is(_RSE));
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
layer_state_t layer_state_set_user(layer_state_t state) {
 | 
			
		||||
 | 
			
		||||
#ifdef RGBLIGHT_ENABLE
 | 
			
		||||
 | 
			
		||||
    set_rgb_layers(state);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    return update_tri_layer_state(state, _LWR, _RSE, _ADJ);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef RGBLIGHT_ENABLE
 | 
			
		||||
 | 
			
		||||
layer_state_t default_layer_state_set_user(layer_state_t state) {
 | 
			
		||||
    set_default_rgb_layers(state);
 | 
			
		||||
    return state;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void keyboard_post_init_user(void) {
 | 
			
		||||
 | 
			
		||||
#ifdef RGBLIGHT_ENABLE
 | 
			
		||||
 | 
			
		||||
    // Enable the LED layers
 | 
			
		||||
    rgblight_layers = my_rgb();
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef OLED_ENABLE
 | 
			
		||||
 | 
			
		||||
    init_timer();
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,13 +0,0 @@
 | 
			
		|||

 | 
			
		||||
 | 
			
		||||
# Default M65 Layout
 | 
			
		||||
 | 
			
		||||
This is the Danish keymap for M65. For the most part it's a straightforward and easy to follow layout inspired by ISO with a DK
 | 
			
		||||
turn.  The only unusual key is the key in the upper left, which sends Escape normally, but Grave when in layer 1 aka LWR.  Similarly
 | 
			
		||||
number row in layer 1 give the usual audio KC_GRV, KC_AUDIO_MUTE,  KC_AUDIO_VOL_UP,  KC_AUDIO_VOL_DOWN,   KC_MEDIA_PREV_TRACK,
 | 
			
		||||
KC_MEDIA_PLAY_PAUSE,  KC_MEDIA_NEXT_TRACK, M_EXTDISP,  KC_SYSTEM_SLEEP, KC_SYSTEM_WAKE, KC_PRINT_SCREEN, KC_DEL, DK_ACUT in layer 2 aka
 | 
			
		||||
RSE one gets F1-F12 mouse emulation can be used in layer 1 and 2.
 | 
			
		||||
 | 
			
		||||
flashing is done by LWR+RSE+r
 | 
			
		||||
 | 
			
		||||
full layout below see in keymap.c
 | 
			
		||||
| 
						 | 
				
			
			@ -1,26 +1,11 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2021-2022 Alin M Elena <alinm.elena@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
// Copyright 2020-2023 alin m elena (@alinelena)
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#define TAPPING_TOGGLE 2
 | 
			
		||||
 | 
			
		||||
#define UNICODE_SELECTED_MODES UNICODE_MODE_LINUX
 | 
			
		||||
//#define UNICODE_SELECTED_MODES UNICODE_MODE_LINUX, UNICODE_MODE_MACOS, UNICODE_MODE_WINCOMPOSE
 | 
			
		||||
#define UNICODE_SELECTED_MODES UNICODE_MODE_LINUX, UNICODE_MODE_MACOS, UNICODE_MODE_WINDOWS, UNICODE_MODE_WINCOMPOSE
 | 
			
		||||
 | 
			
		||||
#ifdef WPM_ENABLE
 | 
			
		||||
#    define WPM_SAMPLE_SECONDS 10
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,36 +1,16 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2021-2022 Alin M Elena <alinm.elena@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
// Copyright 2020-2023 alin m elena (@alinelena)
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#include QMK_KEYBOARD_H
 | 
			
		||||
#include "keymap_uk.h"
 | 
			
		||||
 | 
			
		||||
#ifdef CONSOLE_ENABLE
 | 
			
		||||
 | 
			
		||||
#include "print.h"
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
const uint32_t unicode_map[] PROGMEM = {
 | 
			
		||||
    [la]   = 0x03B1,  // α
 | 
			
		||||
    [lA]  = 0x0391 , // Α
 | 
			
		||||
    [lA]   = 0x0307,  //
 | 
			
		||||
    [lb]   = 0x03B2,  // β
 | 
			
		||||
    [lB]  = 0x0392 , // Β
 | 
			
		||||
    [lB]   = 0x2229,  // ∩
 | 
			
		||||
    [lc]   = 0x03C7,  // χ
 | 
			
		||||
    [lC]  = 0x0307 , //
 | 
			
		||||
    [lC]   = 0x2282,  // ⊂
 | 
			
		||||
    [ld]   = 0x03B4,  // δ
 | 
			
		||||
    [lD]   = 0x2202,  // ∂
 | 
			
		||||
    [le]   = 0x03B5,  // ε
 | 
			
		||||
| 
						 | 
				
			
			@ -68,7 +48,7 @@ const uint32_t unicode_map[] PROGMEM = {
 | 
			
		|||
    [lu]   = 0x03C4,  // τ
 | 
			
		||||
    [lU]   = 0x2102,  // ℂ
 | 
			
		||||
    [lv]   = 0x03BD,  // χ
 | 
			
		||||
    [lV]  = 0x039D , // Ν
 | 
			
		||||
    [lV]   = 0x2283,  // ⊃
 | 
			
		||||
    [lw]   = 0x03C9,  // ω
 | 
			
		||||
    [lW]   = 0x03A9,  // Ω
 | 
			
		||||
    [lx]   = 0x03BE,  // ξ
 | 
			
		||||
| 
						 | 
				
			
			@ -77,8 +57,8 @@ const uint32_t unicode_map[] PROGMEM = {
 | 
			
		|||
    [lY]   = 0x2124,  // ℤ
 | 
			
		||||
    [lz]   = 0x03B6,  // ζ
 | 
			
		||||
    [lZ]   = 0x2221,  // ∡
 | 
			
		||||
    [lc1] = 0x224A , // ≊
 | 
			
		||||
    [lC1] = 0x2248 , // ≈
 | 
			
		||||
    [lc1]  = 0x2248,  // ≈
 | 
			
		||||
    [lC1]  = 0x2249,  // ≉
 | 
			
		||||
    [lp1]  = 0x00B1,  // ±
 | 
			
		||||
    [lP1]  = 0x2213,  // ∓
 | 
			
		||||
    [lq1]  = 0x00D7,  // ×
 | 
			
		||||
| 
						 | 
				
			
			@ -87,20 +67,35 @@ const uint32_t unicode_map[] PROGMEM = {
 | 
			
		|||
    [lL1]  = 0x212b,  // Å
 | 
			
		||||
    [lk1]  = 0x221D,  // ∝
 | 
			
		||||
    [lK1]  = 0x2112,  // ℒ
 | 
			
		||||
    [lbo1] = 0x22DC,  // ⋜
 | 
			
		||||
    [lbo2] = 0x2260,  // ≠
 | 
			
		||||
    [lbc1] = 0x22DD,  // ⋝
 | 
			
		||||
    [lbc2] = 0x2245,  // ≅
 | 
			
		||||
    [ls1]  = 0x2261,  // ≡
 | 
			
		||||
    [ls2]  = 0x2262,  // ≢
 | 
			
		||||
    [ra]   = 0x0103,  // ă
 | 
			
		||||
    [rA]   = 0x0102,  // Ă
 | 
			
		||||
    [ra1]  = 0x00E2,  // â
 | 
			
		||||
    [rA1]  = 0x00C2,  // Â
 | 
			
		||||
    [rc]  = 0x00E7 , // ç
 | 
			
		||||
    [rC]  = 0x00C7 , // Ç
 | 
			
		||||
    [rx]   = 0x00E7,  // ç
 | 
			
		||||
    [rX]   = 0x00C7,  // Ç
 | 
			
		||||
    [ri]   = 0x00EE,  // î
 | 
			
		||||
    [rI]   = 0x00CE,  // Î
 | 
			
		||||
    [rs]  = 0x0219 , // ș
 | 
			
		||||
    [rs]   = 0x0219,  // ș⊄
 | 
			
		||||
    [rS]   = 0x0218,  // Ș
 | 
			
		||||
    [rt]   = 0x021B,  // ț
 | 
			
		||||
    [rT]   = 0x021A,  // Ț
 | 
			
		||||
    [rc]   = 0x2284,  // ⊄
 | 
			
		||||
    [rC]   = 0x2286,  // ⊆
 | 
			
		||||
    [rv]   = 0x2285,  // ⊅
 | 
			
		||||
    [rV]   = 0x2287,  // ⊇
 | 
			
		||||
    [rb]   = 0x2227,  // ∧
 | 
			
		||||
    [rB]   = 0x22BC,  // ⊼
 | 
			
		||||
    [rn]   = 0x2228,  // ∨
 | 
			
		||||
    [rN]   = 0x22BB,  // ⊻
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// clang-format off
 | 
			
		||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		||||
/*
 | 
			
		||||
| 
						 | 
				
			
			@ -161,29 +156,29 @@ altgr shift symbols
 | 
			
		|||
      KC_LCTL, KC_LGUI, TT(_LWR), KC_LALT, TT(_RSE), KC_SPC, KC_SPC, KC_SPC, KC_RALT, SC_RSPC, KC_LEFT, KC_DOWN, KC_RGHT),
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
lower layer
 | 
			
		||||
raise layer
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
 | 
			
		||||
 * │ ` │MUT│Vup│Vdn│prv│ply│nxt│EXT│SLP│WAK│PSC│ ⌫ │ = │
 | 
			
		||||
 * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
 | 
			
		||||
 * │   │ σ │ ω │ ε │ ρ │ ϑ │ ℝ │ τ │ ∫ │ ∞ │ π │ [ │ ] │
 | 
			
		||||
 * │   │ σ │ ω │ ε │ ρ │ ϑ │ ℝ │ τ │ ∫ │ ∞ │ π │ ⋜ │ ⋝ │
 | 
			
		||||
 * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
 | 
			
		||||
 * │   │ α │ ∑ │ δ │ φ │ γ │ ℏ │ ∈ │ ϰ │ λ │ 𝔼 │ ∝ │ ⏎ │
 | 
			
		||||
 * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
 | 
			
		||||
 * │ ⇧(│   │ ζ │ ξ │ χ │ ν │ β │ η │ μ │ ≊ │ ± │   │ × │
 | 
			
		||||
 * │ ⇧(│ ≡ │ ζ │ ξ │ χ │ ν │ β │ η │ μ │ ≈ │ ± │   │ × │
 | 
			
		||||
 * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
 | 
			
		||||
 * │ ⎈ │   │lwr│⎇  │rse│   │   │   │⎇  │ ⇧)│   │   │   │
 | 
			
		||||
 * │   │   │lwr│⎇  │rse│   │   │   │⎇  │ ⇧)│   │   │   │
 | 
			
		||||
 * └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
 | 
			
		||||
lower layer shifted
 | 
			
		||||
raise layer shifted
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
 | 
			
		||||
 * │ ¬ │   │   │   │   │   │   │   │   │   │   │ ⌫ │ = │
 | 
			
		||||
 * │ ¬ │   │   │   │   │   │   │   │   │   │   │ ⌫ │ + │
 | 
			
		||||
 * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
 | 
			
		||||
 * │MB3│ ϕ │ Ω │ ℇ │ ∇ │ θ │ ℤ │ ℂ │ ∮ │ ⊗ │ ∏ │ { │ } │
 | 
			
		||||
 * │MB3│ ϕ │ Ω │ ℇ │ ∇ │ θ │ ℤ │ ℂ │ ∮ │ ⊗ │ ∏ │ ≠ │ ≅ │
 | 
			
		||||
 * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
 | 
			
		||||
 * │MB2│ Α │ ⨋ │ ∂ │ ψ │ Γ │ 𝓗 │ ∉ │ ∆ │ Λ │ Å │ ℒ │ ⏎ │
 | 
			
		||||
 * │MB2│  ̇ │ ⨋ │ ∂ │ ψ │ Γ │ 𝓗 │ ∉ │ ∆ │ Λ │ Å │ ℒ │ ⏎ │
 | 
			
		||||
 * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
 | 
			
		||||
 * │ ⇧(│MB1│ ∡ │ Ξ │ ̇  │ Ν │ Β │ ∪ │ ∘ │ ≈ │ ∓ │MSU│ ⋅ │
 | 
			
		||||
 * │ ⇧(│ ≢ │ ∡ │ Ξ │ ⊂ │ ⊃ │ ∩ │ ∪ │ ∘ │ ≉ │ ∓ │MSU│ ⋅ │
 | 
			
		||||
 * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
 | 
			
		||||
 * │ ⎈ │MB4│lwr│⎇  │rse│   │   │   │⎇  │ ⇧)│MSL│MSD│MSR│
 | 
			
		||||
 * │MB1│MB4│lwr│⎇  │rse│   │   │   │⎇  │ ⇧)│MSL│MSD│MSR│
 | 
			
		||||
 * └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
 | 
			
		||||
MB - mouse buttons
 | 
			
		||||
MS - mouse directions
 | 
			
		||||
| 
						 | 
				
			
			@ -196,7 +191,7 @@ MS - mouse directions
 | 
			
		|||
     _______,  KC_BTN4,  _______,  _______,  _______,  _______,  _______,  _______,  _______,    _______,    KC_MS_L,     KC_MS_D,    KC_MS_R),
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
raise layer
 | 
			
		||||
lower layer
 | 
			
		||||
 * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
 | 
			
		||||
 * │ ⎋ │ F1│ F2│ F3│ F4│ F5│ F6│ F7│ F8│ F9│F10│F11│F12│
 | 
			
		||||
 * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
 | 
			
		||||
| 
						 | 
				
			
			@ -204,7 +199,7 @@ raise layer
 | 
			
		|||
 * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
 | 
			
		||||
 * │ ⇪ │ ă │ ș │   │   │   │   │   │   │   │   │   │   │
 | 
			
		||||
 * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
 | 
			
		||||
 * │   │   │   │   │ ç │   │   │   │   │   │   │MWU│   │
 | 
			
		||||
 * │   │   │   │ ç │ ⊄ │ ⊅ │ ∧ │ ∨ │   │   │   │MWU│   │
 | 
			
		||||
 * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
 | 
			
		||||
 * │   │   │   │   │   │   │   │   │   │   │MWL│MWD│MWR│
 | 
			
		||||
 * └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
 | 
			
		||||
| 
						 | 
				
			
			@ -217,7 +212,7 @@ raise layer shifted
 | 
			
		|||
 * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
 | 
			
		||||
 * │   │ Ă │ Ș │   │   │   │   │   │   │   │   │   │   │
 | 
			
		||||
 * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
 | 
			
		||||
 * │   │   │   │   │ Ç │   │   │   │   │   │   │   │   │
 | 
			
		||||
 * │   │   │   │ Ç │ ⊆ │ ⊇ │ ⊼ │ ⊻ │   │   │   │   │   │
 | 
			
		||||
 * ├───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┼───┤
 | 
			
		||||
 * │   │   │   │   │   │   │   │   │   │   │   │   │   │
 | 
			
		||||
 * └───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
 | 
			
		||||
| 
						 | 
				
			
			@ -245,90 +240,23 @@ adj layer
 | 
			
		|||
  [_ADJ] = LAYOUT_ortho_5x13(
 | 
			
		||||
      RGB_MOD, RGB_RMOD, A(KC_F2), _______, _______, _______, _______, _______, _______, _______, _______, RGB_M_T , RGB_M_SW,
 | 
			
		||||
      RGB_HUI, RGB_HUD , RGB_M_P , _______, QK_BOOT, _______, _______, _______, _______, _______, _______, _______ , RGB_M_SN,
 | 
			
		||||
      RGB_SAI, RGB_SAD , RGB_M_B , _______, _______, _______, _______, _______, _______, _______, _______, _______ , RGB_M_K ,
 | 
			
		||||
      RGB_VAI, RGB_VAD , RGB_M_R , _______, _______, _______, _______, _______, _______, _______, _______, _______ , RGB_M_X ,
 | 
			
		||||
      RGB_SAI, RGB_SAD , RGB_M_B , _______, UC_NEXT, _______, _______, _______, _______, _______, _______, _______ , RGB_M_K ,
 | 
			
		||||
      RGB_VAI, RGB_VAD , RGB_M_R , _______, UC_PREV, UC_LINX,  UC_WIN, UC_WINC,  UC_MAC, UC_EMAC, _______, _______ , RGB_M_X ,
 | 
			
		||||
      RGB_TOG, _______ , _______ , _______, _______, _______, _______, _______, _______, _______, _______, RGB_M_TW, RGB_M_G),
 | 
			
		||||
};
 | 
			
		||||
// clang-format on
 | 
			
		||||
 | 
			
		||||
bool led_update_user(led_t led_state) {
 | 
			
		||||
    // Disable the default LED update code, so that lock LEDs could be reused to show layer status.
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void matrix_scan_user(void) {
 | 
			
		||||
 | 
			
		||||
    toggle_leds();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool process_record_user(uint16_t keycode, keyrecord_t* record) {
 | 
			
		||||
 | 
			
		||||
#ifdef CONSOLE_ENABLE
 | 
			
		||||
 | 
			
		||||
    uprintf("KL: kc: 0x%04X, col: %u, row: %u, pressed: %b, time: %u, interrupt: %b, count: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, record->event.time, record->tap.interrupted, record->tap.count);
 | 
			
		||||
 | 
			
		||||
#if defined(ENCODER_MAP_ENABLE)
 | 
			
		||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
 | 
			
		||||
    [_QW]  = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
 | 
			
		||||
#if defined(RGBLIGHT_ENABLE)
 | 
			
		||||
    [_LWR] = {ENCODER_CCW_CW(RGB_HUD, RGB_HUI)},
 | 
			
		||||
    [_RSE] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
 | 
			
		||||
    [_ADJ] = {ENCODER_CCW_CW(RGB_RMOD, RGB_MOD)},
 | 
			
		||||
#else
 | 
			
		||||
    [_LWR] = {ENCODER_CCW_CW(KC_MNXT, KC_MPRV)},
 | 
			
		||||
    [_RSE] = {ENCODER_CCW_CW(KC_MFFD, KC_MRWD)},
 | 
			
		||||
    [_ADJ] = {ENCODER_CCW_CW(KC_PGDN, KC_PGUP)},
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    switch (keycode) {
 | 
			
		||||
        case (TT(_LWR)):
 | 
			
		||||
            if (!record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
 | 
			
		||||
                // This runs before the TT() handler toggles the layer state, so the current layer state is the opposite of the final one after toggle.
 | 
			
		||||
                set_led_toggle(_LWR, !layer_state_is(_LWR));
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
            break;
 | 
			
		||||
        case (TT(_RSE)):
 | 
			
		||||
            if (record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
 | 
			
		||||
                set_led_toggle(_RSE, !layer_state_is(_RSE));
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
layer_state_t layer_state_set_user(layer_state_t state) {
 | 
			
		||||
 | 
			
		||||
#ifdef RGBLIGHT_ENABLE
 | 
			
		||||
 | 
			
		||||
   set_rgb_layers(state);
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    return update_tri_layer_state(state, _LWR, _RSE, _ADJ);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef RGBLIGHT_ENABLE
 | 
			
		||||
 | 
			
		||||
layer_state_t default_layer_state_set_user(layer_state_t state) {
 | 
			
		||||
 | 
			
		||||
    set_default_rgb_layers(state);
 | 
			
		||||
    return state;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void keyboard_post_init_user(void) {
 | 
			
		||||
#ifdef RGBLIGHT_ENABLE
 | 
			
		||||
 | 
			
		||||
  // Enable the LED layers
 | 
			
		||||
    rgblight_layers = my_rgb();
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef OLED_ENABLE
 | 
			
		||||
 | 
			
		||||
    init_timer();
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef CONSOLE_ENABLE
 | 
			
		||||
 | 
			
		||||
    debug_enable   = true;
 | 
			
		||||
    debug_matrix   = true;
 | 
			
		||||
    debug_keyboard = true;
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1 +1,2 @@
 | 
			
		|||
UNICODEMAP_ENABLE = yes
 | 
			
		||||
ENCODER_MAP_ENABLE = yes
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,20 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2021-2022 Alin M Elena <alinm.elena@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#define TAPPING_TOGGLE 2
 | 
			
		||||
| 
						 | 
				
			
			@ -1,118 +0,0 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2021-2022 Alin M Elena <alinm.elena@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
#include QMK_KEYBOARD_H
 | 
			
		||||
 | 
			
		||||
// clang-format off
 | 
			
		||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		||||
 | 
			
		||||
  [_QW] = LAYOUT_ortho_5x13(
 | 
			
		||||
       KC_ESC, KC_1   , KC_2    , KC_3   , KC_4    , KC_5  , KC_6  , KC_7  , KC_8   , KC_9   , KC_0   , KC_MINS, KC_BSPC ,
 | 
			
		||||
       KC_TAB, KC_Q   , KC_W    , KC_E   , KC_R    , KC_T  , KC_Y  , KC_U  , KC_I   , KC_O   , KC_P   , KC_LBRC, KC_RBRC ,
 | 
			
		||||
      KC_NUHS, KC_A   , KC_S    , KC_D   , KC_F    , KC_G  , KC_H  , KC_J  , KC_K   , KC_L   , KC_SCLN, KC_QUOT, KC_ENT  ,
 | 
			
		||||
      SC_LSPO, KC_NUBS, KC_Z    , KC_X   , KC_C    , KC_V  , KC_B  , KC_N  , KC_M   , KC_COMM, KC_DOT , KC_UP  , KC_SLSH ,
 | 
			
		||||
      KC_LCTL, KC_LGUI, TT(_LWR), KC_LALT, TT(_RSE), KC_SPC, KC_SPC, KC_SPC, KC_RALT, SC_RSPC, KC_LEFT, KC_DOWN, KC_RGHT),
 | 
			
		||||
 | 
			
		||||
  [_LWR] = LAYOUT_ortho_5x13(
 | 
			
		||||
       KC_GRV , KC_MUTE, KC_VOLU, KC_VOLD, KC_MPRV, KC_MPLY, KC_MNXT, G(KC_P), KC_SLEP, KC_WAKE, KC_PSCR, KC_DEL , KC_EQL  ,
 | 
			
		||||
       KC_BTN3, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
 | 
			
		||||
       KC_BTN2, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
 | 
			
		||||
       _______, KC_BTN1, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_U, _______ ,
 | 
			
		||||
       _______, KC_BTN4, _______, _______, _______, _______, _______, _______, _______, _______, KC_MS_L, KC_MS_D, KC_MS_R),
 | 
			
		||||
 | 
			
		||||
  [_RSE] = LAYOUT_ortho_5x13(
 | 
			
		||||
      KC_ESC , KC_F1  , KC_F2  , KC_F3  , KC_F4  , KC_F5  , KC_F6  , KC_F7  , KC_F8  , KC_F9  , KC_F10 , KC_F11 , KC_F12  ,
 | 
			
		||||
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
 | 
			
		||||
      KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______ ,
 | 
			
		||||
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_U, _______ ,
 | 
			
		||||
      _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_WH_L, KC_WH_D, KC_WH_R),
 | 
			
		||||
 | 
			
		||||
  [_ADJ] = LAYOUT_ortho_5x13(
 | 
			
		||||
      RGB_MOD, RGB_RMOD, A(KC_F2), _______, _______, _______, _______, _______, _______, _______, _______, RGB_M_T , RGB_M_SW,
 | 
			
		||||
      RGB_HUI, RGB_HUD , RGB_M_P , _______, QK_BOOT  , _______, _______, _______, _______, _______, _______, _______ , RGB_M_SN,
 | 
			
		||||
      RGB_SAI, RGB_SAD , RGB_M_B , _______, _______, _______, _______, _______, _______, _______, _______, _______ , RGB_M_K ,
 | 
			
		||||
      RGB_VAI, RGB_VAD , RGB_M_R , _______, _______, _______, _______, _______, _______, _______, _______, _______ , RGB_M_X ,
 | 
			
		||||
      RGB_TOG, _______ , _______ , _______, _______, _______, _______, _______, _______, _______, _______, RGB_M_TW, RGB_M_G),
 | 
			
		||||
};
 | 
			
		||||
// clang-format on
 | 
			
		||||
 | 
			
		||||
bool led_update_user(led_t led_state) {
 | 
			
		||||
    // Disable the default LED update code, so that lock LEDs could be reused to show layer status.
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void matrix_scan_user(void) {
 | 
			
		||||
 | 
			
		||||
    toggle_leds();
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool process_record_user(uint16_t keycode, keyrecord_t* record) {
 | 
			
		||||
    switch (keycode) {
 | 
			
		||||
        case (TT(_LWR)):
 | 
			
		||||
            if (!record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
 | 
			
		||||
                // This runs before the TT() handler toggles the layer state, so the current layer state is the opposite of the final one after toggle.
 | 
			
		||||
                set_led_toggle(_LWR, !layer_state_is(_LWR));
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
            break;
 | 
			
		||||
        case (TT(_RSE)):
 | 
			
		||||
            if (record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
 | 
			
		||||
                set_led_toggle(_RSE, !layer_state_is(_RSE));
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            return true;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
layer_state_t layer_state_set_user(layer_state_t state) {
 | 
			
		||||
 | 
			
		||||
#ifdef RGBLIGHT_ENABLE
 | 
			
		||||
 | 
			
		||||
    set_rgb_layers(state);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    return update_tri_layer_state(state, _LWR, _RSE, _ADJ);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef RGBLIGHT_ENABLE
 | 
			
		||||
 | 
			
		||||
layer_state_t default_layer_state_set_user(layer_state_t state) {
 | 
			
		||||
    set_default_rgb_layers(state);
 | 
			
		||||
    return state;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void keyboard_post_init_user(void) {
 | 
			
		||||
 | 
			
		||||
#ifdef RGBLIGHT_ENABLE
 | 
			
		||||
 | 
			
		||||
    // Enable the LED layers
 | 
			
		||||
    rgblight_layers = my_rgb();
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef OLED_ENABLE
 | 
			
		||||
 | 
			
		||||
    init_timer();
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1 +0,0 @@
 | 
			
		|||
VIA_ENABLE = yes
 | 
			
		||||
| 
						 | 
				
			
			@ -4,228 +4,13 @@
 | 
			
		|||
#include "progmem.h"
 | 
			
		||||
 | 
			
		||||
static const unsigned char PROGMEM font[] = {
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00,
 | 
			
		||||
    0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00,
 | 
			
		||||
    0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
 | 
			
		||||
    0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00,
 | 
			
		||||
    0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00,
 | 
			
		||||
    0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00,
 | 
			
		||||
    0x00, 0x18, 0x3C, 0x18, 0x00, 0x00,
 | 
			
		||||
    0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00,
 | 
			
		||||
    0x00, 0x18, 0x24, 0x18, 0x00, 0x00,
 | 
			
		||||
    0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00,
 | 
			
		||||
    0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00,
 | 
			
		||||
    0x26, 0x29, 0x79, 0x29, 0x26, 0x00,
 | 
			
		||||
    0x40, 0x7F, 0x05, 0x05, 0x07, 0x00,
 | 
			
		||||
    0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00,
 | 
			
		||||
    0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00,
 | 
			
		||||
    0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00,
 | 
			
		||||
    0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00,
 | 
			
		||||
    0x14, 0x22, 0x7F, 0x22, 0x14, 0x00,
 | 
			
		||||
    0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00,
 | 
			
		||||
    0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00,
 | 
			
		||||
    0x00, 0x66, 0x89, 0x95, 0x6A, 0x00,
 | 
			
		||||
    0x60, 0x60, 0x60, 0x60, 0x60, 0x00,
 | 
			
		||||
    0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00,
 | 
			
		||||
    0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
 | 
			
		||||
    0x10, 0x20, 0x7E, 0x20, 0x10, 0x00,
 | 
			
		||||
    0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00,
 | 
			
		||||
    0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00,
 | 
			
		||||
    0x1E, 0x10, 0x10, 0x10, 0x10, 0x00,
 | 
			
		||||
    0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00,
 | 
			
		||||
    0x30, 0x38, 0x3E, 0x38, 0x30, 0x00,
 | 
			
		||||
    0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x5F, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x07, 0x00, 0x07, 0x00, 0x00,
 | 
			
		||||
    0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00,
 | 
			
		||||
    0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00,
 | 
			
		||||
    0x23, 0x13, 0x08, 0x64, 0x62, 0x00,
 | 
			
		||||
    0x36, 0x49, 0x56, 0x20, 0x50, 0x00,
 | 
			
		||||
    0x00, 0x08, 0x07, 0x03, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
 | 
			
		||||
    0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00,
 | 
			
		||||
    0x08, 0x08, 0x3E, 0x08, 0x08, 0x00,
 | 
			
		||||
    0x00, 0x80, 0x70, 0x30, 0x00, 0x00,
 | 
			
		||||
    0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
 | 
			
		||||
    0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
 | 
			
		||||
    0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00,
 | 
			
		||||
    0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
 | 
			
		||||
    0x72, 0x49, 0x49, 0x49, 0x46, 0x00,
 | 
			
		||||
    0x21, 0x41, 0x49, 0x4D, 0x33, 0x00,
 | 
			
		||||
    0x18, 0x14, 0x12, 0x7F, 0x10, 0x00,
 | 
			
		||||
    0x27, 0x45, 0x45, 0x45, 0x39, 0x00,
 | 
			
		||||
    0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00,
 | 
			
		||||
    0x41, 0x21, 0x11, 0x09, 0x07, 0x00,
 | 
			
		||||
    0x36, 0x49, 0x49, 0x49, 0x36, 0x00,
 | 
			
		||||
    0x46, 0x49, 0x49, 0x29, 0x1E, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x14, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x40, 0x34, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
 | 
			
		||||
    0x14, 0x14, 0x14, 0x14, 0x14, 0x00,
 | 
			
		||||
    0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
 | 
			
		||||
    0x02, 0x01, 0x59, 0x09, 0x06, 0x00,
 | 
			
		||||
    0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00,
 | 
			
		||||
    0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00,
 | 
			
		||||
    0x7F, 0x49, 0x49, 0x49, 0x36, 0x00,
 | 
			
		||||
    0x3E, 0x41, 0x41, 0x41, 0x22, 0x00,
 | 
			
		||||
    0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00,
 | 
			
		||||
    0x7F, 0x49, 0x49, 0x49, 0x41, 0x00,
 | 
			
		||||
    0x7F, 0x09, 0x09, 0x09, 0x01, 0x00,
 | 
			
		||||
    0x3E, 0x41, 0x41, 0x51, 0x73, 0x00,
 | 
			
		||||
    0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
 | 
			
		||||
    0x00, 0x41, 0x7F, 0x41, 0x00, 0x00,
 | 
			
		||||
    0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
 | 
			
		||||
    0x7F, 0x08, 0x14, 0x22, 0x41, 0x00,
 | 
			
		||||
    0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
 | 
			
		||||
    0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00,
 | 
			
		||||
    0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
 | 
			
		||||
    0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00,
 | 
			
		||||
    0x7F, 0x09, 0x09, 0x09, 0x06, 0x00,
 | 
			
		||||
    0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00,
 | 
			
		||||
    0x7F, 0x09, 0x19, 0x29, 0x46, 0x00,
 | 
			
		||||
    0x26, 0x49, 0x49, 0x49, 0x32, 0x00,
 | 
			
		||||
    0x03, 0x01, 0x7F, 0x01, 0x03, 0x00,
 | 
			
		||||
    0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00,
 | 
			
		||||
    0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
 | 
			
		||||
    0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00,
 | 
			
		||||
    0x63, 0x14, 0x08, 0x14, 0x63, 0x00,
 | 
			
		||||
    0x03, 0x04, 0x78, 0x04, 0x03, 0x00,
 | 
			
		||||
    0x61, 0x59, 0x49, 0x4D, 0x43, 0x00,
 | 
			
		||||
    0x00, 0x7F, 0x41, 0x41, 0x41, 0x00,
 | 
			
		||||
    0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
 | 
			
		||||
    0x00, 0x41, 0x41, 0x41, 0x7F, 0x00,
 | 
			
		||||
    0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
 | 
			
		||||
    0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
 | 
			
		||||
    0x00, 0x03, 0x07, 0x08, 0x00, 0x00,
 | 
			
		||||
    0x20, 0x54, 0x54, 0x78, 0x40, 0x00,
 | 
			
		||||
    0x7F, 0x28, 0x44, 0x44, 0x38, 0x00,
 | 
			
		||||
    0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
 | 
			
		||||
    0x38, 0x44, 0x44, 0x28, 0x7F, 0x00,
 | 
			
		||||
    0x38, 0x54, 0x54, 0x54, 0x18, 0x00,
 | 
			
		||||
    0x00, 0x08, 0x7E, 0x09, 0x02, 0x00,
 | 
			
		||||
    0x18, 0x24, 0x24, 0x1C, 0x78, 0x00,
 | 
			
		||||
    0x7F, 0x08, 0x04, 0x04, 0x78, 0x00,
 | 
			
		||||
    0x00, 0x44, 0x7D, 0x40, 0x00, 0x00,
 | 
			
		||||
    0x20, 0x40, 0x40, 0x3D, 0x00, 0x00,
 | 
			
		||||
    0x7F, 0x10, 0x28, 0x44, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x41, 0x7F, 0x40, 0x00, 0x00,
 | 
			
		||||
    0x7C, 0x04, 0x78, 0x04, 0x78, 0x00,
 | 
			
		||||
    0x7C, 0x08, 0x04, 0x04, 0x78, 0x00,
 | 
			
		||||
    0x38, 0x44, 0x44, 0x44, 0x38, 0x00,
 | 
			
		||||
    0x7C, 0x18, 0x24, 0x24, 0x18, 0x00,
 | 
			
		||||
    0x18, 0x24, 0x24, 0x18, 0x7C, 0x00,
 | 
			
		||||
    0x7C, 0x08, 0x04, 0x04, 0x08, 0x00,
 | 
			
		||||
    0x48, 0x54, 0x54, 0x54, 0x24, 0x00,
 | 
			
		||||
    0x04, 0x04, 0x3F, 0x44, 0x24, 0x00,
 | 
			
		||||
    0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00,
 | 
			
		||||
    0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
 | 
			
		||||
    0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00,
 | 
			
		||||
    0x44, 0x28, 0x10, 0x28, 0x44, 0x00,
 | 
			
		||||
    0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00,
 | 
			
		||||
    0x44, 0x64, 0x54, 0x4C, 0x44, 0x00,
 | 
			
		||||
    0x00, 0x08, 0x36, 0x41, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x41, 0x36, 0x08, 0x00, 0x00,
 | 
			
		||||
    0x02, 0x01, 0x02, 0x04, 0x02, 0x00,
 | 
			
		||||
    0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0xE0, 0x18, 0x02,
 | 
			
		||||
    0x00, 0x3C, 0x1E, 0x06, 0x0E, 0x0A,
 | 
			
		||||
    0x1A, 0x0E, 0x26, 0xFF, 0xBF, 0x0D,
 | 
			
		||||
    0x00, 0x80, 0x80, 0x81, 0xFF, 0xFE,
 | 
			
		||||
    0xF8, 0x01, 0x01, 0x03, 0x03, 0x03,
 | 
			
		||||
    0x03, 0x05, 0x05, 0x02, 0x02, 0x0A,
 | 
			
		||||
    0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A,
 | 
			
		||||
    0x0C, 0x04, 0x10, 0x18, 0x20, 0xC0,
 | 
			
		||||
    0x80, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0xD0, 0x58, 0x78,
 | 
			
		||||
    0x68, 0x2C, 0x24, 0x34, 0xF4, 0xF4,
 | 
			
		||||
    0x3C, 0x3C, 0xFC, 0xF8, 0xF8, 0x70,
 | 
			
		||||
    0xF0, 0xE0, 0xE0, 0xC0, 0xC0, 0x80,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0xC0, 0x7C, 0x07, 0x80, 0xE0,
 | 
			
		||||
    0x60, 0x64, 0xE2, 0x60, 0x10, 0x10,
 | 
			
		||||
    0x20, 0x22, 0x12, 0x17, 0x3F, 0x0B,
 | 
			
		||||
    0x01, 0x01, 0x01, 0x01, 0x01, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x21,
 | 
			
		||||
    0x6F, 0xFC, 0xE0, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
 | 
			
		||||
    0x60, 0x60, 0x70, 0x70, 0xF0, 0xF0,
 | 
			
		||||
    0xD0, 0xD0, 0xD0, 0xD0, 0x50, 0x50,
 | 
			
		||||
    0x50, 0x70, 0x78, 0x78, 0x78, 0x7C,
 | 
			
		||||
    0x7F, 0x7D, 0x7C, 0x5E, 0x4F, 0x44,
 | 
			
		||||
    0x40, 0x40, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x38, 0x30, 0x30, 0x30, 0x30,
 | 
			
		||||
    0x30, 0x30, 0x58, 0x46, 0x47, 0x41,
 | 
			
		||||
    0x41, 0x01, 0x01, 0x03, 0x03, 0x42,
 | 
			
		||||
    0x42, 0x42, 0x46, 0x46, 0x46, 0x46,
 | 
			
		||||
    0x42, 0x43, 0x43, 0x73, 0x77, 0x72,
 | 
			
		||||
    0x70, 0x60, 0x60, 0x60, 0x60, 0x60,
 | 
			
		||||
    0x60, 0x61, 0x67, 0x6F, 0x7E, 0x78,
 | 
			
		||||
    0x78, 0x70, 0x70, 0x70, 0x70, 0x70,
 | 
			
		||||
    0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
 | 
			
		||||
    0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
 | 
			
		||||
    0x60, 0x60, 0x60, 0x60, 0x60, 0x60,
 | 
			
		||||
    0x40, 0x40, 0x40, 0x48, 0x58, 0x58,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x5B, 0x4F, 0x5B, 0x3E, 0x00, 0x3E, 0x6B, 0x4F, 0x6B, 0x3E, 0x00, 0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00, 0x18, 0x3C, 0x7E, 0x3C, 0x18, 0x00, 0x1C, 0x57, 0x7D, 0x57, 0x1C, 0x00, 0x1C, 0x5E, 0x7F, 0x5E, 0x1C, 0x00, 0x00, 0x18, 0x3C, 0x18, 0x00, 0x00, 0xFF, 0xE7, 0xC3, 0xE7, 0xFF, 0x00, 0x00, 0x18, 0x24, 0x18, 0x00, 0x00, 0xFF, 0xE7, 0xDB, 0xE7, 0xFF, 0x00, 0x30, 0x48, 0x3A, 0x06, 0x0E, 0x00, 0x26, 0x29, 0x79, 0x29, 0x26, 0x00, 0x40, 0x7F, 0x05, 0x05, 0x07, 0x00, 0x40, 0x7F, 0x05, 0x25, 0x3F, 0x00, 0x5A, 0x3C, 0xE7, 0x3C, 0x5A, 0x00, 0x7F, 0x3E, 0x1C, 0x1C, 0x08, 0x00, 0x08, 0x1C, 0x1C, 0x3E, 0x7F, 0x00, 0x14, 0x22, 0x7F, 0x22, 0x14, 0x00, 0x5F, 0x5F, 0x00, 0x5F, 0x5F, 0x00, 0x06, 0x09, 0x7F, 0x01, 0x7F, 0x00, 0x00, 0x66, 0x89, 0x95, 0x6A, 0x00, 0x60, 0x60, 0x60, 0x60, 0x60, 0x00, 0x94, 0xA2, 0xFF, 0xA2, 0x94, 0x00, 0x08, 0x04, 0x7E, 0x04, 0x08, 0x00,
 | 
			
		||||
    0x10, 0x20, 0x7E, 0x20, 0x10, 0x00, 0x08, 0x08, 0x2A, 0x1C, 0x08, 0x00, 0x08, 0x1C, 0x2A, 0x08, 0x08, 0x00, 0x1E, 0x10, 0x10, 0x10, 0x10, 0x00, 0x0C, 0x1E, 0x0C, 0x1E, 0x0C, 0x00, 0x30, 0x38, 0x3E, 0x38, 0x30, 0x00, 0x06, 0x0E, 0x3E, 0x0E, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x14, 0x7F, 0x14, 0x7F, 0x14, 0x00, 0x24, 0x2A, 0x7F, 0x2A, 0x12, 0x00, 0x23, 0x13, 0x08, 0x64, 0x62, 0x00, 0x36, 0x49, 0x56, 0x20, 0x50, 0x00, 0x00, 0x08, 0x07, 0x03, 0x00, 0x00, 0x00, 0x1C, 0x22, 0x41, 0x00, 0x00, 0x00, 0x41, 0x22, 0x1C, 0x00, 0x00, 0x2A, 0x1C, 0x7F, 0x1C, 0x2A, 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x00, 0x00, 0x80, 0x70, 0x30, 0x00, 0x00, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00, 0x00, 0x60, 0x60, 0x00, 0x00, 0x20, 0x10, 0x08, 0x04, 0x02, 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00,
 | 
			
		||||
    0x72, 0x49, 0x49, 0x49, 0x46, 0x00, 0x21, 0x41, 0x49, 0x4D, 0x33, 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10, 0x00, 0x27, 0x45, 0x45, 0x45, 0x39, 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x31, 0x00, 0x41, 0x21, 0x11, 0x09, 0x07, 0x00, 0x36, 0x49, 0x49, 0x49, 0x36, 0x00, 0x46, 0x49, 0x49, 0x29, 0x1E, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0x40, 0x34, 0x00, 0x00, 0x00, 0x00, 0x08, 0x14, 0x22, 0x41, 0x00, 0x14, 0x14, 0x14, 0x14, 0x14, 0x00, 0x00, 0x41, 0x22, 0x14, 0x08, 0x00, 0x02, 0x01, 0x59, 0x09, 0x06, 0x00, 0x3E, 0x41, 0x5D, 0x59, 0x4E, 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01, 0x00, 0x3E, 0x41, 0x41, 0x51, 0x73, 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00, 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01, 0x00,
 | 
			
		||||
    0x7F, 0x08, 0x14, 0x22, 0x41, 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x00, 0x7F, 0x02, 0x1C, 0x02, 0x7F, 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06, 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E, 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x00, 0x26, 0x49, 0x49, 0x49, 0x32, 0x00, 0x03, 0x01, 0x7F, 0x01, 0x03, 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F, 0x00, 0x63, 0x14, 0x08, 0x14, 0x63, 0x00, 0x03, 0x04, 0x78, 0x04, 0x03, 0x00, 0x61, 0x59, 0x49, 0x4D, 0x43, 0x00, 0x00, 0x7F, 0x41, 0x41, 0x41, 0x00, 0x02, 0x04, 0x08, 0x10, 0x20, 0x00, 0x00, 0x41, 0x41, 0x41, 0x7F, 0x00, 0x04, 0x02, 0x01, 0x02, 0x04, 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x00, 0x00, 0x03, 0x07, 0x08, 0x00, 0x00, 0x20, 0x54, 0x54, 0x78, 0x40, 0x00, 0x7F, 0x28, 0x44, 0x44, 0x38, 0x00, 0x38, 0x44, 0x44, 0x44, 0x28, 0x00,
 | 
			
		||||
    0x38, 0x44, 0x44, 0x28, 0x7F, 0x00, 0x38, 0x54, 0x54, 0x54, 0x18, 0x00, 0x00, 0x08, 0x7E, 0x09, 0x02, 0x00, 0x18, 0x24, 0x24, 0x1C, 0x78, 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78, 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00, 0x00, 0x20, 0x40, 0x40, 0x3D, 0x00, 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00, 0x00, 0x7C, 0x04, 0x78, 0x04, 0x78, 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, 0x7C, 0x18, 0x24, 0x24, 0x18, 0x00, 0x18, 0x24, 0x24, 0x18, 0x7C, 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08, 0x00, 0x48, 0x54, 0x54, 0x54, 0x24, 0x00, 0x04, 0x04, 0x3F, 0x44, 0x24, 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C, 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, 0x4C, 0x90, 0x90, 0x90, 0x7C, 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44, 0x00, 0x00, 0x08, 0x36, 0x41, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x41, 0x36, 0x08, 0x00, 0x00, 0x02, 0x01, 0x02, 0x04, 0x02, 0x00, 0x3C, 0x26, 0x23, 0x26, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x18, 0x02, 0x00, 0x3C, 0x1E, 0x06, 0x0E, 0x0A, 0x1A, 0x0E, 0x26, 0xFF, 0xBF, 0x0D, 0x00, 0x80, 0x80, 0x81, 0xFF, 0xFE, 0xF8, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x05, 0x05, 0x02, 0x02, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0A, 0x0C, 0x04, 0x10, 0x18, 0x20, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xD0, 0x58, 0x78, 0x68, 0x2C, 0x24, 0x34, 0xF4, 0xF4, 0x3C, 0x3C, 0xFC, 0xF8, 0xF8, 0x70, 0xF0, 0xE0, 0xE0, 0xC0, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x7C, 0x07, 0x80, 0xE0, 0x60, 0x64, 0xE2, 0x60, 0x10, 0x10, 0x20, 0x22, 0x12, 0x17, 0x3F, 0x0B, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0x6F, 0xFC, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x60, 0x60, 0x70, 0x70, 0xF0, 0xF0, 0xD0, 0xD0, 0xD0, 0xD0, 0x50, 0x50, 0x50, 0x70, 0x78, 0x78, 0x78, 0x7C, 0x7F, 0x7D, 0x7C, 0x5E, 0x4F, 0x44, 0x40, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x30, 0x30, 0x30, 0x30,
 | 
			
		||||
    0x30, 0x30, 0x58, 0x46, 0x47, 0x41, 0x41, 0x01, 0x01, 0x03, 0x03, 0x42, 0x42, 0x42, 0x46, 0x46, 0x46, 0x46, 0x42, 0x43, 0x43, 0x73, 0x77, 0x72, 0x70, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x61, 0x67, 0x6F, 0x7E, 0x78, 0x78, 0x70, 0x70, 0x70, 0x70, 0x70, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x40, 0x40, 0x40, 0x48, 0x58, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 | 
			
		||||
};
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,59 +1,36 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2021-2022 Alin M Elena <alinm.elena@gmail.com>
 | 
			
		||||
// Copyright 2020-2023 alin m elena (@alinelena)
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
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 "m65.h"
 | 
			
		||||
#include QMK_KEYBOARD_H
 | 
			
		||||
 | 
			
		||||
// let us assume we start with both layers off
 | 
			
		||||
static bool toggle_lwr = false;
 | 
			
		||||
static bool toggle_rse = false;
 | 
			
		||||
 | 
			
		||||
#ifdef RGBLIGHT_ENABLE
 | 
			
		||||
#if defined(RGBLIGHT_ENABLE)
 | 
			
		||||
 | 
			
		||||
const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_PURPLE});
 | 
			
		||||
const rgblight_segment_t PROGMEM my_lwr_layer[]    = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_CYAN});
 | 
			
		||||
const rgblight_segment_t PROGMEM my_rse_layer[]    = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_RED});
 | 
			
		||||
const rgblight_segment_t PROGMEM my_adj_layer[]    = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_GREEN});
 | 
			
		||||
const rgblight_segment_t PROGMEM my_qwerty_layer[] = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_OFF});
 | 
			
		||||
const rgblight_segment_t PROGMEM my_lwr_layer[]    = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_AZURE});
 | 
			
		||||
const rgblight_segment_t PROGMEM my_rse_layer[]    = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_CORAL});
 | 
			
		||||
const rgblight_segment_t PROGMEM my_adj_layer[]    = RGBLIGHT_LAYER_SEGMENTS({0, RGBLED_NUM, HSV_RED});
 | 
			
		||||
 | 
			
		||||
const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_qwerty_layer, my_lwr_layer, my_rse_layer, my_adj_layer);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef OLED_ENABLE
 | 
			
		||||
 | 
			
		||||
#if defined(OLED_ENABLE)
 | 
			
		||||
static uint32_t           oled_logo_timer = 0;
 | 
			
		||||
static bool               clear_logo      = true;
 | 
			
		||||
static const char PROGMEM m65_logo[] = {
 | 
			
		||||
    0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5, 0xa5,
 | 
			
		||||
    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};
 | 
			
		||||
 | 
			
		||||
static const char PROGMEM m65_logo[]      = {0x92, 0x92, 0x93, 0x94, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x92, 0x92, 0x93, 0x94, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB2, 0x92, 0xB3, 0xB4, 0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0};
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef RGBLIGHT_ENABLE
 | 
			
		||||
#if defined(RGBLIGHT_ENABLE)
 | 
			
		||||
 | 
			
		||||
void set_rgb_layers(layer_state_t state) {
 | 
			
		||||
 | 
			
		||||
    rgblight_set_layer_state(0, layer_state_cmp(state, _QW));
 | 
			
		||||
    rgblight_set_layer_state(1, layer_state_cmp(state, _LWR));
 | 
			
		||||
    rgblight_set_layer_state(2, layer_state_cmp(state, _RSE));
 | 
			
		||||
    rgblight_set_layer_state(3, layer_state_cmp(state, _ADJ));
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void set_default_rgb_layers(layer_state_t state) {
 | 
			
		||||
| 
						 | 
				
			
			@ -67,7 +44,6 @@ const rgblight_segment_t * const* my_rgb(void){
 | 
			
		|||
#endif
 | 
			
		||||
 | 
			
		||||
void set_led_toggle(const uint8_t layer, const bool state) {
 | 
			
		||||
 | 
			
		||||
    switch (layer) {
 | 
			
		||||
        case _LWR:
 | 
			
		||||
            toggle_lwr = state;
 | 
			
		||||
| 
						 | 
				
			
			@ -80,57 +56,16 @@ void set_led_toggle(const uint8_t layer, const bool state){
 | 
			
		|||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void toggle_leds(void){
 | 
			
		||||
 | 
			
		||||
void toggle_leds(const bool toggle_lwr, const bool toggle_rse) {
 | 
			
		||||
    led_lwr(toggle_lwr);
 | 
			
		||||
    led_rse(toggle_rse);
 | 
			
		||||
    led_t led_state = host_keyboard_led_state();
 | 
			
		||||
    led_caps(led_state.caps_lock);
 | 
			
		||||
    if (layer_state_is(_ADJ)) {
 | 
			
		||||
        led_lwr(true);
 | 
			
		||||
        led_rse(true);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef ENCODER_ENABLE
 | 
			
		||||
 | 
			
		||||
#    define MEDIA_KEY_DELAY 10
 | 
			
		||||
 | 
			
		||||
void my_encoders(const uint8_t index, const bool clockwise) {
 | 
			
		||||
    if (index == 0) { /* First encoder */
 | 
			
		||||
        if (IS_LAYER_ON(_LWR)) {
 | 
			
		||||
            if (clockwise) {
 | 
			
		||||
                rgblight_decrease_val_noeeprom();
 | 
			
		||||
            } else {
 | 
			
		||||
                rgblight_increase_val_noeeprom();
 | 
			
		||||
            }
 | 
			
		||||
        } else if (IS_LAYER_ON(_RSE)) {
 | 
			
		||||
            if (clockwise) {
 | 
			
		||||
                rgblight_decrease_hue_noeeprom();
 | 
			
		||||
            } else {
 | 
			
		||||
                rgblight_increase_hue_noeeprom();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
        } else {
 | 
			
		||||
            if (clockwise) {
 | 
			
		||||
                tap_code_delay(KC_VOLD, MEDIA_KEY_DELAY);
 | 
			
		||||
            } else {
 | 
			
		||||
                tap_code_delay(KC_VOLU, MEDIA_KEY_DELAY);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool encoder_update_kb(uint8_t index, bool clockwise) {
 | 
			
		||||
    if (!encoder_update_user(index, clockwise)) { return false; }
 | 
			
		||||
    my_encoders(index, clockwise);
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef OLED_ENABLE
 | 
			
		||||
#if defined(OLED_ENABLE)
 | 
			
		||||
 | 
			
		||||
void init_timer(void) {
 | 
			
		||||
    oled_logo_timer = timer_read32();
 | 
			
		||||
| 
						 | 
				
			
			@ -163,7 +98,34 @@ void user_oled_magic(void) {
 | 
			
		|||
    oled_write_P(led_state.num_lock ? PSTR("Lower ") : PSTR("    "), false);
 | 
			
		||||
    oled_write_P(led_state.scroll_lock ? PSTR("Raise ") : PSTR("    "), false);
 | 
			
		||||
    oled_write_P(led_state.caps_lock ? PSTR("CapsLock ") : PSTR("    "), false);
 | 
			
		||||
#ifdef WPM_ENABLE
 | 
			
		||||
 | 
			
		||||
#    if defined(UNICODE_COMMON_ENABLE)
 | 
			
		||||
    oled_write_P(PSTR("\nunicode: "), false);
 | 
			
		||||
    switch (get_unicode_input_mode()) {
 | 
			
		||||
        case UNICODE_MODE_LINUX:
 | 
			
		||||
            oled_write_P(PSTR("Linux"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        case UNICODE_MODE_MACOS:
 | 
			
		||||
            oled_write_P(PSTR("apple"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        case UNICODE_MODE_WINDOWS:
 | 
			
		||||
            oled_write_P(PSTR("windows"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        case UNICODE_MODE_WINCOMPOSE:
 | 
			
		||||
            oled_write_P(PSTR("windows c"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        case UNICODE_MODE_BSD:
 | 
			
		||||
            oled_write_P(PSTR("bsd"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        case UNICODE_MODE_EMACS:
 | 
			
		||||
            oled_write_P(PSTR("emacs"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            oled_write_ln_P(PSTR("not supported"), false);
 | 
			
		||||
    }
 | 
			
		||||
#    endif
 | 
			
		||||
 | 
			
		||||
#    if defined(WPM_ENABLE)
 | 
			
		||||
    oled_write_P(PSTR("\nwpm: "), false);
 | 
			
		||||
    uint8_t wpm = get_current_wpm();
 | 
			
		||||
    oled_write_P(wpm != 0 ? get_u8_str(wpm, ' ') : PSTR("   "), false);
 | 
			
		||||
| 
						 | 
				
			
			@ -191,7 +153,9 @@ oled_rotation_t oled_init_user(oled_rotation_t rotation) {
 | 
			
		|||
 | 
			
		||||
#    define SHOW_LOGO 5000
 | 
			
		||||
bool oled_task_kb(void) {
 | 
			
		||||
    if (!oled_task_user()) { return false; }
 | 
			
		||||
    if (!oled_task_user()) {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    if ((timer_elapsed32(oled_logo_timer) < SHOW_LOGO)) {
 | 
			
		||||
        render_logo();
 | 
			
		||||
    } else {
 | 
			
		||||
| 
						 | 
				
			
			@ -202,3 +166,78 @@ bool oled_task_kb(void) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void matrix_scan_kb(void) {
 | 
			
		||||
    matrix_scan_user();
 | 
			
		||||
    toggle_leds(toggle_lwr, toggle_rse);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
 | 
			
		||||
#if defined(CONSOLE_ENABLE)
 | 
			
		||||
    uprintf("KL: kc: 0x%04X, col: %2u, row: %2u, pressed: %u, time: %5u, int: %u, count: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, record->event.time, record->tap.interrupted, record->tap.count);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    switch (keycode) {
 | 
			
		||||
        case (TT(_LWR)):
 | 
			
		||||
            if (!record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
 | 
			
		||||
                // This runs before the TT() handler toggles the layer state, so the current layer state is the opposite of the final one after toggle.
 | 
			
		||||
                set_led_toggle(_LWR, !layer_state_is(_LWR));
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
            break;
 | 
			
		||||
        case (TT(_RSE)):
 | 
			
		||||
            if (record->event.pressed && record->tap.count == TAPPING_TOGGLE) {
 | 
			
		||||
                set_led_toggle(_RSE, !layer_state_is(_RSE));
 | 
			
		||||
            }
 | 
			
		||||
            return true;
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            return true;
 | 
			
		||||
    }
 | 
			
		||||
    return process_record_user(keycode, record);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
layer_state_t layer_state_set_kb(layer_state_t state) {
 | 
			
		||||
    state = layer_state_set_user(state);
 | 
			
		||||
 | 
			
		||||
#if defined(RGBLIGHT_ENABLE)
 | 
			
		||||
 | 
			
		||||
    set_rgb_layers(state);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    return update_tri_layer_state(state, _LWR, _RSE, _ADJ);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if defined(RGBLIGHT_ENABLE)
 | 
			
		||||
 | 
			
		||||
layer_state_t default_layer_state_set_kb(layer_state_t state) {
 | 
			
		||||
    state = default_layer_state_set_user(state);
 | 
			
		||||
 | 
			
		||||
    set_default_rgb_layers(state);
 | 
			
		||||
 | 
			
		||||
    return state;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
void keyboard_post_init_kb(void) {
 | 
			
		||||
    init_lwr_rse_led();
 | 
			
		||||
 | 
			
		||||
#if defined(RGBLIGHT_ENABLE)
 | 
			
		||||
    // Enable the LED layers
 | 
			
		||||
    rgblight_layers = my_rgb();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(OLED_ENABLE)
 | 
			
		||||
    init_timer();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(CONSOLE_ENABLE)
 | 
			
		||||
    debug_enable   = true;
 | 
			
		||||
    debug_matrix   = true;
 | 
			
		||||
    debug_keyboard = true;
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    keyboard_post_init_user();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,154 +1,65 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2021-2022 Alin M Elena <alinm.elena@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
// Copyright 2020-2023 alin m elena (@alinelena)
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#include "quantum.h"
 | 
			
		||||
 | 
			
		||||
enum unicode_names {
 | 
			
		||||
    la = 0,
 | 
			
		||||
    lA,
 | 
			
		||||
    lb,
 | 
			
		||||
    lB,
 | 
			
		||||
    lc,
 | 
			
		||||
    lC,
 | 
			
		||||
    ld,
 | 
			
		||||
    lD,
 | 
			
		||||
    le,
 | 
			
		||||
    lE,
 | 
			
		||||
    lf,
 | 
			
		||||
    lF,
 | 
			
		||||
    lg,
 | 
			
		||||
    lG,
 | 
			
		||||
    lh,
 | 
			
		||||
    lH,
 | 
			
		||||
    li,
 | 
			
		||||
    lI,
 | 
			
		||||
    lj,
 | 
			
		||||
    lJ,
 | 
			
		||||
    lk,
 | 
			
		||||
    lK,
 | 
			
		||||
    ll,
 | 
			
		||||
    lL,
 | 
			
		||||
    lm,
 | 
			
		||||
    lM,
 | 
			
		||||
    ln,
 | 
			
		||||
    lN,
 | 
			
		||||
    lo,
 | 
			
		||||
    lO,
 | 
			
		||||
    lp,
 | 
			
		||||
    lP,
 | 
			
		||||
    lq,
 | 
			
		||||
    lQ,
 | 
			
		||||
    lr,
 | 
			
		||||
    lR,
 | 
			
		||||
    ls,
 | 
			
		||||
    lS,
 | 
			
		||||
    lt,
 | 
			
		||||
    lT,
 | 
			
		||||
    lu,
 | 
			
		||||
    lU,
 | 
			
		||||
    lv,
 | 
			
		||||
    lV,
 | 
			
		||||
    lw,
 | 
			
		||||
    lW,
 | 
			
		||||
    lx,
 | 
			
		||||
    lX,
 | 
			
		||||
    ly,
 | 
			
		||||
    lY,
 | 
			
		||||
    lz,
 | 
			
		||||
    lZ,
 | 
			
		||||
    lc1,
 | 
			
		||||
    lC1,
 | 
			
		||||
    lp1,
 | 
			
		||||
    lP1,
 | 
			
		||||
    lq1,
 | 
			
		||||
    lQ1,
 | 
			
		||||
    ll1,
 | 
			
		||||
    lL1,
 | 
			
		||||
    lk1,
 | 
			
		||||
    lK1,
 | 
			
		||||
    ra,
 | 
			
		||||
    rA,
 | 
			
		||||
    ra1,
 | 
			
		||||
    rA1,
 | 
			
		||||
    rc,
 | 
			
		||||
    rC,
 | 
			
		||||
    ri,
 | 
			
		||||
    rI,
 | 
			
		||||
    rs,
 | 
			
		||||
    rS,
 | 
			
		||||
    rt,
 | 
			
		||||
    rT,
 | 
			
		||||
    ro,
 | 
			
		||||
    rO,
 | 
			
		||||
    ra2,
 | 
			
		||||
    rA2,
 | 
			
		||||
    ra3,
 | 
			
		||||
    rA3
 | 
			
		||||
};
 | 
			
		||||
#if defined(UNICODEMAP_ENABLE)
 | 
			
		||||
enum unicode_names { la = 0, lA, lb, lB, lc, lC, ld, lD, le, lE, lf, lF, lg, lG, lh, lH, li, lI, lj, lJ, lk, lK, ll, lL, lm, lM, ln, lN, lo, lO, lp, lP, lq, lQ, lr, lR, ls, lS, lt, lT, lu, lU, lv, lV, lw, lW, lx, lX, ly, lY, lz, lZ, lc1, lC1, lp1, lP1, lq1, lQ1, ll1, lL1, lk1, lK1, lbo1, lbo2, lbc1, lbc2, ls1, ls2, ra, rA, ra1, rA1, rc, rC, ri, rI, rs, rS, rt, rT, ro, rO, ra2, rA2, ra3, rA3, rx, rX, rv, rV, rb, rB, rn, rN };
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
enum layer_names { _QW = 0, _LWR, _RSE, _ADJ };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
enum layer_names {
 | 
			
		||||
    _QW = 0,
 | 
			
		||||
    _LWR,
 | 
			
		||||
    _RSE,
 | 
			
		||||
    _ADJ
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#ifdef OLED_ENABLE
 | 
			
		||||
#if defined(OLED_ENABLE)
 | 
			
		||||
void user_oled_magic(void);
 | 
			
		||||
void render_logo(void);
 | 
			
		||||
void clear_screen(void);
 | 
			
		||||
void init_timer(void);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef ENCODER_ENABLE
 | 
			
		||||
void my_encoders(const uint8_t, const bool);
 | 
			
		||||
bool encoder_update_user(uint8_t, bool);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef RGBLIGHT_ENABLE
 | 
			
		||||
#if defined(RGBLIGHT_ENABLE)
 | 
			
		||||
void                             set_rgb_layers(layer_state_t);
 | 
			
		||||
const rgblight_segment_t* const* my_rgb(void);
 | 
			
		||||
void                             set_default_rgb_layers(layer_state_t);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void toggle_leds(void);
 | 
			
		||||
void toggle_leds(const bool, const bool);
 | 
			
		||||
void set_led_toggle(const uint8_t, const bool);
 | 
			
		||||
 | 
			
		||||
static inline void init_lwr_rse_led(void) {
 | 
			
		||||
#if defined(LED_LWR_PIN)
 | 
			
		||||
    setPinOutput(LED_LWR_PIN);
 | 
			
		||||
    writePin(LED_LWR_PIN, false);
 | 
			
		||||
    wait_ms(30);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#if defined(LED_RSE_PIN)
 | 
			
		||||
    setPinOutput(LED_RSE_PIN);
 | 
			
		||||
    writePin(LED_RSE_PIN, false);
 | 
			
		||||
    wait_ms(30);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void led_lwr(const bool on) {
 | 
			
		||||
#ifdef LED_NUM_LOCK_PIN
 | 
			
		||||
    writePin(LED_NUM_LOCK_PIN, on);
 | 
			
		||||
#if defined(LED_LWR_PIN)
 | 
			
		||||
    if ((PRODUCT_ID == 0x6064) || (PRODUCT_ID == 0x6065) ||
 | 
			
		||||
        (PRODUCT_ID == 0x6066) || (PRODUCT_ID == 0x6067)) {
 | 
			
		||||
        writePin(LED_LWR_PIN, !on);
 | 
			
		||||
    }else{
 | 
			
		||||
        writePin(LED_LWR_PIN, on);
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void led_rse(const bool on) {
 | 
			
		||||
#ifdef LED_SCROLL_LOCK_PIN
 | 
			
		||||
    writePin(LED_SCROLL_LOCK_PIN, on);
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
static inline void led_caps(const bool on) {
 | 
			
		||||
#ifdef LED_CAPS_LOCK_PIN
 | 
			
		||||
    if ((PRODUCT_ID == 0x6061) && (DEVICE_VER == 0x0002)) {
 | 
			
		||||
        writePin(LED_CAPS_LOCK_PIN, on);
 | 
			
		||||
#if defined(LED_RSE_PIN)
 | 
			
		||||
    if ((PRODUCT_ID == 0x6064) || (PRODUCT_ID == 0x6065) ||
 | 
			
		||||
        (PRODUCT_ID == 0x6066) || (PRODUCT_ID == 0x6067)) {
 | 
			
		||||
        writePin(LED_RSE_PIN, !on);
 | 
			
		||||
    }else{
 | 
			
		||||
        writePin(LED_CAPS_LOCK_PIN, !on);
 | 
			
		||||
        writePin(LED_RSE_PIN, on);
 | 
			
		||||
    }
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,7 +7,7 @@ A  (13x5) ortholinear keyboard that can be hand wired or using a pcb.
 | 
			
		|||
* Keyboard Maintainer: [Alin Elena](https://github.com/alinelena) ([@drFaustroll on GitLab](https://gitlab.com/drFaustroll))
 | 
			
		||||
* Hardware Supported: custom pcb [see](https://gitlab.com/m-lego/m65) STM/APM32F103C8T6, aka Black Pill (rev1),
 | 
			
		||||
  GD32F303CCT6 from we act aka Blue Pill Plus (rev2), STM32F401 from we act (rev3,rev4) STM32F411 can also be used just ask
 | 
			
		||||
* Hardware Availability: [custom how to](https://alin.elena.space/blog/keeblego/)
 | 
			
		||||
* Hardware Availability: [custom how to](https://mlego.elena.space/m65)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Make example for this keyboard (after setting up your build environment):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,20 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2021-2022 Alin M Elena <alinm.elena@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
// Copyright 2020-2023 alin m elena (@alinelena)
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#define RGBLIGHT_LAYERS
 | 
			
		||||
#define LED_RSE_PIN B13
 | 
			
		||||
#define LED_LWR_PIN B12
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,42 +1,134 @@
 | 
			
		|||
{
 | 
			
		||||
    "usb": {
 | 
			
		||||
        "pid": "0x6061",
 | 
			
		||||
        "device_version": "0.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    "matrix_pins": {
 | 
			
		||||
        "cols": ["A10", "A15", "B3", "B4", "B5", "B9", "B8", "B7", "B6", "C15", "A0", "A7", "B10"],
 | 
			
		||||
        "rows": ["B11", "B0", "B1", "A2", "A3"]
 | 
			
		||||
    },
 | 
			
		||||
    "manufacturer": "Alin Elena",
 | 
			
		||||
    "keyboard_name": "mlego/m65 rev1",
 | 
			
		||||
    "maintainer": "alin elena",
 | 
			
		||||
    "bootloader": "stm32duino",
 | 
			
		||||
    "debounce": 5,
 | 
			
		||||
    "diode_direction": "COL2ROW",
 | 
			
		||||
    "encoder": {
 | 
			
		||||
        "rotary": [
 | 
			
		||||
            {"pin_a": "A8", "pin_b": "A9"}
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    "features": {
 | 
			
		||||
        "audio": false,
 | 
			
		||||
        "backlight": false,
 | 
			
		||||
        "bootmagic": true,
 | 
			
		||||
        "command": false,
 | 
			
		||||
        "console": false,
 | 
			
		||||
        "encoder": true,
 | 
			
		||||
        "extrakey": true,
 | 
			
		||||
        "mousekey": true,
 | 
			
		||||
        "nkro": true,
 | 
			
		||||
        "rgblight": true
 | 
			
		||||
    },
 | 
			
		||||
    "indicators": {
 | 
			
		||||
        "caps_lock": "C13",
 | 
			
		||||
        "num_lock": "B12",
 | 
			
		||||
        "scroll_lock": "B13"
 | 
			
		||||
        "on_state": 0
 | 
			
		||||
    },
 | 
			
		||||
    "matrix_pins": {
 | 
			
		||||
        "cols": ["A10", "A15", "B3", "B4", "B5", "B9", "B8", "B7", "B6", "C15", "A0", "A7", "B10"],
 | 
			
		||||
        "rows": ["B11", "B0", "B1", "A2", "A3"]
 | 
			
		||||
    },
 | 
			
		||||
    "processor": "STM32F103",
 | 
			
		||||
    "rgblight": {
 | 
			
		||||
        "saturation_steps": 8,
 | 
			
		||||
        "led_count": 20,
 | 
			
		||||
        "animations": {
 | 
			
		||||
            "alternating": true,
 | 
			
		||||
            "breathing": true,
 | 
			
		||||
            "christmas": true,
 | 
			
		||||
            "knight": true,
 | 
			
		||||
            "rainbow_mood": true,
 | 
			
		||||
            "rainbow_swirl": true,
 | 
			
		||||
            "snake": true,
 | 
			
		||||
            "knight": true,
 | 
			
		||||
            "christmas": true,
 | 
			
		||||
            "static_gradient": true,
 | 
			
		||||
            "rgb_test": true,
 | 
			
		||||
            "alternating": true,
 | 
			
		||||
            "snake": true,
 | 
			
		||||
            "static_gradient": true,
 | 
			
		||||
            "twinkle": true
 | 
			
		||||
        }
 | 
			
		||||
        },
 | 
			
		||||
        "hue_steps": 8,
 | 
			
		||||
        "layers": {
 | 
			
		||||
            "enabled": true
 | 
			
		||||
        },
 | 
			
		||||
        "led_count": 20,
 | 
			
		||||
        "saturation_steps": 8
 | 
			
		||||
    },
 | 
			
		||||
    "url": "https://gitlab.com/m-lego/m65",
 | 
			
		||||
    "usb": {
 | 
			
		||||
        "device_version": "0.0.1",
 | 
			
		||||
        "pid": "0x6061",
 | 
			
		||||
        "vid": "0xBABA"
 | 
			
		||||
    },
 | 
			
		||||
    "ws2812": {
 | 
			
		||||
        "pin": "B15"
 | 
			
		||||
    },
 | 
			
		||||
    "processor": "STM32F103",
 | 
			
		||||
    "bootloader": "stm32duino"
 | 
			
		||||
    "layouts": {
 | 
			
		||||
        "LAYOUT_ortho_5x13": {
 | 
			
		||||
            "layout": [
 | 
			
		||||
                {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
 | 
			
		||||
                {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
 | 
			
		||||
                {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
 | 
			
		||||
                {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
 | 
			
		||||
                {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
 | 
			
		||||
                {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
 | 
			
		||||
                {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
 | 
			
		||||
                {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
 | 
			
		||||
                {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
 | 
			
		||||
                {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
 | 
			
		||||
                {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
 | 
			
		||||
                {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
 | 
			
		||||
                {"label": "Backspace", "matrix": [0, 12], "x": 12, "y": 0},
 | 
			
		||||
                {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1},
 | 
			
		||||
                {"label": "q", "matrix": [1, 1], "x": 1, "y": 1},
 | 
			
		||||
                {"label": "w", "matrix": [1, 2], "x": 2, "y": 1},
 | 
			
		||||
                {"label": "e", "matrix": [1, 3], "x": 3, "y": 1},
 | 
			
		||||
                {"label": "r", "matrix": [1, 4], "x": 4, "y": 1},
 | 
			
		||||
                {"label": "t", "matrix": [1, 5], "x": 5, "y": 1},
 | 
			
		||||
                {"label": "y", "matrix": [1, 6], "x": 6, "y": 1},
 | 
			
		||||
                {"label": "u", "matrix": [1, 7], "x": 7, "y": 1},
 | 
			
		||||
                {"label": "i", "matrix": [1, 8], "x": 8, "y": 1},
 | 
			
		||||
                {"label": "o", "matrix": [1, 9], "x": 9, "y": 1},
 | 
			
		||||
                {"label": "p", "matrix": [1, 10], "x": 10, "y": 1},
 | 
			
		||||
                {"label": "[", "matrix": [1, 11], "x": 11, "y": 1},
 | 
			
		||||
                {"label": "]", "matrix": [1, 12], "x": 12, "y": 1},
 | 
			
		||||
                {"label": "#", "matrix": [2, 0], "x": 0, "y": 2},
 | 
			
		||||
                {"label": "a", "matrix": [2, 1], "x": 1, "y": 2},
 | 
			
		||||
                {"label": "s", "matrix": [2, 2], "x": 2, "y": 2},
 | 
			
		||||
                {"label": "d", "matrix": [2, 3], "x": 3, "y": 2},
 | 
			
		||||
                {"label": "f", "matrix": [2, 4], "x": 4, "y": 2},
 | 
			
		||||
                {"label": "g", "matrix": [2, 5], "x": 5, "y": 2},
 | 
			
		||||
                {"label": "h", "matrix": [2, 6], "x": 6, "y": 2},
 | 
			
		||||
                {"label": "j", "matrix": [2, 7], "x": 7, "y": 2},
 | 
			
		||||
                {"label": "k", "matrix": [2, 8], "x": 8, "y": 2},
 | 
			
		||||
                {"label": "l", "matrix": [2, 9], "x": 9, "y": 2},
 | 
			
		||||
                {"label": ";", "matrix": [2, 10], "x": 10, "y": 2},
 | 
			
		||||
                {"label": "'", "matrix": [2, 11], "x": 11, "y": 2},
 | 
			
		||||
                {"label": "Enter", "matrix": [2, 12], "x": 12, "y": 2},
 | 
			
		||||
                {"label": "Left Shift", "matrix": [3, 0], "x": 0, "y": 3},
 | 
			
		||||
                {"label": "\\", "matrix": [3, 1], "x": 1, "y": 3},
 | 
			
		||||
                {"label": "z", "matrix": [3, 2], "x": 2, "y": 3},
 | 
			
		||||
                {"label": "x", "matrix": [3, 3], "x": 3, "y": 3},
 | 
			
		||||
                {"label": "c", "matrix": [3, 4], "x": 4, "y": 3},
 | 
			
		||||
                {"label": "v", "matrix": [3, 5], "x": 5, "y": 3},
 | 
			
		||||
                {"label": "b", "matrix": [3, 6], "x": 6, "y": 3},
 | 
			
		||||
                {"label": "n", "matrix": [3, 7], "x": 7, "y": 3},
 | 
			
		||||
                {"label": "m", "matrix": [3, 8], "x": 8, "y": 3},
 | 
			
		||||
                {"label": ",", "matrix": [3, 9], "x": 9, "y": 3},
 | 
			
		||||
                {"label": ".", "matrix": [3, 10], "x": 10, "y": 3},
 | 
			
		||||
                {"label": "Up", "matrix": [3, 11], "x": 11, "y": 3},
 | 
			
		||||
                {"label": "/", "matrix": [3, 12], "x": 12, "y": 3},
 | 
			
		||||
                {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4},
 | 
			
		||||
                {"label": "Menu", "matrix": [4, 1], "x": 1, "y": 4},
 | 
			
		||||
                {"label": "Lower", "matrix": [4, 2], "x": 2, "y": 4},
 | 
			
		||||
                {"label": "Alt", "matrix": [4, 3], "x": 3, "y": 4},
 | 
			
		||||
                {"label": "Raise", "matrix": [4, 4], "x": 4, "y": 4},
 | 
			
		||||
                {"label": "Space", "matrix": [4, 5], "x": 5, "y": 4},
 | 
			
		||||
                {"label": "Space", "matrix": [4, 6], "x": 6, "y": 4},
 | 
			
		||||
                {"label": "Space", "matrix": [4, 7], "x": 7, "y": 4},
 | 
			
		||||
                {"label": "Alt Gr", "matrix": [4, 8], "x": 8, "y": 4},
 | 
			
		||||
                {"label": "Right Shift", "matrix": [4, 9], "x": 9, "y": 4},
 | 
			
		||||
                {"label": "Left", "matrix": [4, 10], "x": 10, "y": 4},
 | 
			
		||||
                {"label": "Down", "matrix": [4, 11], "x": 11, "y": 4},
 | 
			
		||||
                {"label": "Right", "matrix": [4, 12], "x": 12, "y": 4}
 | 
			
		||||
            ]
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,23 +1,5 @@
 | 
			
		|||
/* Copyright 2021-2022 QMK
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file was auto-generated by:
 | 
			
		||||
 *    `qmk chibios-confmigrate -i keyboards/m65/rev1/mcuconf.h -r platforms/chibios/STM32_F103_STM32DUINO/configs/mcuconf.h`
 | 
			
		||||
 */
 | 
			
		||||
// Copyright 2020-2022 alin m elena (@alinelena)
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,13 +1 @@
 | 
			
		|||
# Build Options
 | 
			
		||||
#   change yes to no to disable
 | 
			
		||||
#
 | 
			
		||||
BOOTMAGIC_ENABLE = yes     # Enable Bootmagic Lite
 | 
			
		||||
MOUSEKEY_ENABLE = yes      # Mouse keys
 | 
			
		||||
EXTRAKEY_ENABLE = yes      # Audio control and System control
 | 
			
		||||
CONSOLE_ENABLE = no        # Console for debug
 | 
			
		||||
COMMAND_ENABLE = no        # Commands for debug and configuration
 | 
			
		||||
NKRO_ENABLE = yes          # Enable N-Key Rollover
 | 
			
		||||
BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality
 | 
			
		||||
RGBLIGHT_ENABLE = yes      # Enable keyboard RGB underglow
 | 
			
		||||
AUDIO_ENABLE = no          # Audio output
 | 
			
		||||
ENCODER_ENABLE = yes       # Enable encoder
 | 
			
		||||
#intentionally blanck
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,18 +1,5 @@
 | 
			
		|||
/* Copyright 2021-2022 Alin M Elena <alinm.elena@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
// Copyright 2020-2022 alin m elena (@alinelena)
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
#include_next <board.h>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,23 +1,10 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2021-2022 Alin M Elena <alinm.elena@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
// Copyright 2020-2023 alin m elena (@alinelena)
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#define RGBLIGHT_LAYERS
 | 
			
		||||
#define LED_RSE_PIN B13
 | 
			
		||||
#define LED_LWR_PIN B12
 | 
			
		||||
 | 
			
		||||
#define EEPROM_PAGE_SIZE
 | 
			
		||||
#define FEE_PAGE_SIZE 0x800
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,42 +1,133 @@
 | 
			
		|||
{
 | 
			
		||||
    "usb": {
 | 
			
		||||
        "pid": "0x6061",
 | 
			
		||||
        "device_version": "0.0.2"
 | 
			
		||||
    },
 | 
			
		||||
    "matrix_pins": {
 | 
			
		||||
        "cols": ["A10", "A15", "B3", "B4", "B5", "B9", "B8", "B7", "B6", "C15", "A0", "A7", "B10"],
 | 
			
		||||
        "rows": ["B11", "B0", "B1", "A2", "A3"]
 | 
			
		||||
    },
 | 
			
		||||
    "manufacturer": "Alin Elena",
 | 
			
		||||
    "keyboard_name": "mlego/m65 rev2",
 | 
			
		||||
    "maintainer": "alin elena",
 | 
			
		||||
    "bootloader": "stm32duino",
 | 
			
		||||
    "diode_direction": "COL2ROW",
 | 
			
		||||
    "encoder": {
 | 
			
		||||
        "rotary": [
 | 
			
		||||
            {"pin_a": "A8", "pin_b": "A9"}
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    "features": {
 | 
			
		||||
        "audio": false,
 | 
			
		||||
        "backlight": false,
 | 
			
		||||
        "bootmagic": true,
 | 
			
		||||
        "command": true,
 | 
			
		||||
        "console": false,
 | 
			
		||||
        "encoder": true,
 | 
			
		||||
        "extrakey": true,
 | 
			
		||||
        "mousekey": true,
 | 
			
		||||
        "nkro": true,
 | 
			
		||||
        "rgblight": true
 | 
			
		||||
    },
 | 
			
		||||
    "indicators": {
 | 
			
		||||
        "caps_lock": "B2",
 | 
			
		||||
        "num_lock": "B12",
 | 
			
		||||
        "scroll_lock": "B13"
 | 
			
		||||
        "on_state": 0
 | 
			
		||||
    },
 | 
			
		||||
    "matrix_pins": {
 | 
			
		||||
        "cols": ["A10", "A15", "B3", "B4", "B5", "B9", "B8", "B7", "B6", "C15", "A0", "A7", "B10"],
 | 
			
		||||
        "rows": ["B11", "B0", "B1", "A2", "A3"]
 | 
			
		||||
    },
 | 
			
		||||
    "processor": "STM32F103",
 | 
			
		||||
    "rgblight": {
 | 
			
		||||
        "saturation_steps": 8,
 | 
			
		||||
        "led_count": 20,
 | 
			
		||||
        "animations": {
 | 
			
		||||
            "alternating": true,
 | 
			
		||||
            "breathing": true,
 | 
			
		||||
            "christmas": true,
 | 
			
		||||
            "knight": true,
 | 
			
		||||
            "rainbow_mood": true,
 | 
			
		||||
            "rainbow_swirl": true,
 | 
			
		||||
            "snake": true,
 | 
			
		||||
            "knight": true,
 | 
			
		||||
            "christmas": true,
 | 
			
		||||
            "static_gradient": true,
 | 
			
		||||
            "rgb_test": true,
 | 
			
		||||
            "alternating": true,
 | 
			
		||||
            "snake": true,
 | 
			
		||||
            "static_gradient": true,
 | 
			
		||||
            "twinkle": true
 | 
			
		||||
        }
 | 
			
		||||
        },
 | 
			
		||||
        "hue_steps": 8,
 | 
			
		||||
        "layers": {
 | 
			
		||||
            "enabled": true
 | 
			
		||||
        },
 | 
			
		||||
        "led_count": 20,
 | 
			
		||||
        "saturation_steps": 8
 | 
			
		||||
    },
 | 
			
		||||
    "url": "https://gitlab.com/m-lego/m65",
 | 
			
		||||
    "usb": {
 | 
			
		||||
        "device_version": "0.0.2",
 | 
			
		||||
        "pid": "0x6061",
 | 
			
		||||
        "vid": "0xBABA"
 | 
			
		||||
    },
 | 
			
		||||
    "ws2812": {
 | 
			
		||||
        "pin": "B15"
 | 
			
		||||
    },
 | 
			
		||||
    "processor": "STM32F103", // GD32F303CCT6
 | 
			
		||||
    "bootloader": "stm32duino"
 | 
			
		||||
    "layouts": {
 | 
			
		||||
        "LAYOUT_ortho_5x13": {
 | 
			
		||||
            "layout": [
 | 
			
		||||
                {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
 | 
			
		||||
                {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
 | 
			
		||||
                {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
 | 
			
		||||
                {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
 | 
			
		||||
                {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
 | 
			
		||||
                {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
 | 
			
		||||
                {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
 | 
			
		||||
                {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
 | 
			
		||||
                {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
 | 
			
		||||
                {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
 | 
			
		||||
                {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
 | 
			
		||||
                {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
 | 
			
		||||
                {"label": "Backspace", "matrix": [0, 12], "x": 12, "y": 0},
 | 
			
		||||
                {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1},
 | 
			
		||||
                {"label": "q", "matrix": [1, 1], "x": 1, "y": 1},
 | 
			
		||||
                {"label": "w", "matrix": [1, 2], "x": 2, "y": 1},
 | 
			
		||||
                {"label": "e", "matrix": [1, 3], "x": 3, "y": 1},
 | 
			
		||||
                {"label": "r", "matrix": [1, 4], "x": 4, "y": 1},
 | 
			
		||||
                {"label": "t", "matrix": [1, 5], "x": 5, "y": 1},
 | 
			
		||||
                {"label": "y", "matrix": [1, 6], "x": 6, "y": 1},
 | 
			
		||||
                {"label": "u", "matrix": [1, 7], "x": 7, "y": 1},
 | 
			
		||||
                {"label": "i", "matrix": [1, 8], "x": 8, "y": 1},
 | 
			
		||||
                {"label": "o", "matrix": [1, 9], "x": 9, "y": 1},
 | 
			
		||||
                {"label": "p", "matrix": [1, 10], "x": 10, "y": 1},
 | 
			
		||||
                {"label": "[", "matrix": [1, 11], "x": 11, "y": 1},
 | 
			
		||||
                {"label": "]", "matrix": [1, 12], "x": 12, "y": 1},
 | 
			
		||||
                {"label": "#", "matrix": [2, 0], "x": 0, "y": 2},
 | 
			
		||||
                {"label": "a", "matrix": [2, 1], "x": 1, "y": 2},
 | 
			
		||||
                {"label": "s", "matrix": [2, 2], "x": 2, "y": 2},
 | 
			
		||||
                {"label": "d", "matrix": [2, 3], "x": 3, "y": 2},
 | 
			
		||||
                {"label": "f", "matrix": [2, 4], "x": 4, "y": 2},
 | 
			
		||||
                {"label": "g", "matrix": [2, 5], "x": 5, "y": 2},
 | 
			
		||||
                {"label": "h", "matrix": [2, 6], "x": 6, "y": 2},
 | 
			
		||||
                {"label": "j", "matrix": [2, 7], "x": 7, "y": 2},
 | 
			
		||||
                {"label": "k", "matrix": [2, 8], "x": 8, "y": 2},
 | 
			
		||||
                {"label": "l", "matrix": [2, 9], "x": 9, "y": 2},
 | 
			
		||||
                {"label": ";", "matrix": [2, 10], "x": 10, "y": 2},
 | 
			
		||||
                {"label": "'", "matrix": [2, 11], "x": 11, "y": 2},
 | 
			
		||||
                {"label": "Enter", "matrix": [2, 12], "x": 12, "y": 2},
 | 
			
		||||
                {"label": "Left Shift", "matrix": [3, 0], "x": 0, "y": 3},
 | 
			
		||||
                {"label": "\\", "matrix": [3, 1], "x": 1, "y": 3},
 | 
			
		||||
                {"label": "z", "matrix": [3, 2], "x": 2, "y": 3},
 | 
			
		||||
                {"label": "x", "matrix": [3, 3], "x": 3, "y": 3},
 | 
			
		||||
                {"label": "c", "matrix": [3, 4], "x": 4, "y": 3},
 | 
			
		||||
                {"label": "v", "matrix": [3, 5], "x": 5, "y": 3},
 | 
			
		||||
                {"label": "b", "matrix": [3, 6], "x": 6, "y": 3},
 | 
			
		||||
                {"label": "n", "matrix": [3, 7], "x": 7, "y": 3},
 | 
			
		||||
                {"label": "m", "matrix": [3, 8], "x": 8, "y": 3},
 | 
			
		||||
                {"label": ",", "matrix": [3, 9], "x": 9, "y": 3},
 | 
			
		||||
                {"label": ".", "matrix": [3, 10], "x": 10, "y": 3},
 | 
			
		||||
                {"label": "Up", "matrix": [3, 11], "x": 11, "y": 3},
 | 
			
		||||
                {"label": "/", "matrix": [3, 12], "x": 12, "y": 3},
 | 
			
		||||
                {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4},
 | 
			
		||||
                {"label": "Menu", "matrix": [4, 1], "x": 1, "y": 4},
 | 
			
		||||
                {"label": "Lower", "matrix": [4, 2], "x": 2, "y": 4},
 | 
			
		||||
                {"label": "Alt", "matrix": [4, 3], "x": 3, "y": 4},
 | 
			
		||||
                {"label": "Raise", "matrix": [4, 4], "x": 4, "y": 4},
 | 
			
		||||
                {"label": "Space", "matrix": [4, 5], "x": 5, "y": 4},
 | 
			
		||||
                {"label": "Space", "matrix": [4, 6], "x": 6, "y": 4},
 | 
			
		||||
                {"label": "Space", "matrix": [4, 7], "x": 7, "y": 4},
 | 
			
		||||
                {"label": "Alt Gr", "matrix": [4, 8], "x": 8, "y": 4},
 | 
			
		||||
                {"label": "Right Shift", "matrix": [4, 9], "x": 9, "y": 4},
 | 
			
		||||
                {"label": "Left", "matrix": [4, 10], "x": 10, "y": 4},
 | 
			
		||||
                {"label": "Down", "matrix": [4, 11], "x": 11, "y": 4},
 | 
			
		||||
                {"label": "Right", "matrix": [4, 12], "x": 12, "y": 4}
 | 
			
		||||
            ]
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,23 +1,5 @@
 | 
			
		|||
/* Copyright 2021-2022 QMK
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file was auto-generated by:
 | 
			
		||||
 *    `qmk chibios-confmigrate -i keyboards/m65/rev1/mcuconf.h -r platforms/chibios/STM32_F103_STM32DUINO/configs/mcuconf.h`
 | 
			
		||||
 */
 | 
			
		||||
// Copyright 2020-2022 alin m elena (@alinelena)
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,13 +1 @@
 | 
			
		|||
# Build Options
 | 
			
		||||
#   change yes to no to disable
 | 
			
		||||
#
 | 
			
		||||
BOOTMAGIC_ENABLE = yes      # Enable Bootmagic Lite
 | 
			
		||||
MOUSEKEY_ENABLE = yes       # Mouse keys
 | 
			
		||||
EXTRAKEY_ENABLE = yes       # Audio control and System control
 | 
			
		||||
CONSOLE_ENABLE = yes        # Console for debug
 | 
			
		||||
COMMAND_ENABLE = yes        # Commands for debug and configuration
 | 
			
		||||
NKRO_ENABLE = yes           # Enable N-Key Rollover 
 | 
			
		||||
BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
 | 
			
		||||
RGBLIGHT_ENABLE = yes       # Enable keyboard RGB underglow
 | 
			
		||||
AUDIO_ENABLE = no           # Audio output
 | 
			
		||||
ENCODER_ENABLE = yes        # Enable encoder
 | 
			
		||||
#blank purpose
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,20 +1,7 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2021-2022 Alin M Elena <alinm.elena@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
// Copyright 2021-2023 alin m elena (@alinelena)
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#define RGBLIGHT_LAYERS
 | 
			
		||||
#define LED_RSE_PIN B13
 | 
			
		||||
#define LED_LWR_PIN B12
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,23 +1,5 @@
 | 
			
		|||
/* Copyright 2020 QMK
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file was auto-generated by:
 | 
			
		||||
 *    `qmk chibios-confmigrate -i keyboards/zvecr/zv48/f401/halconf.h -r platforms/chibios/common/configs/halconf.h`
 | 
			
		||||
 */
 | 
			
		||||
// Copyright 2020-2022 alin m elena (@alinelena)
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,43 +1,134 @@
 | 
			
		|||
{
 | 
			
		||||
    "usb": {
 | 
			
		||||
        "pid": "0x6062",
 | 
			
		||||
        "device_version": "0.0.1"
 | 
			
		||||
    },
 | 
			
		||||
    "matrix_pins": {
 | 
			
		||||
        "cols": ["A10", "A15", "B3", "B4", "B5", "B9", "B8", "B7", "A1", "A2", "A3", "A4", "B1"],
 | 
			
		||||
        "rows": ["B10", "A5", "A6", "A7", "B0"]
 | 
			
		||||
    },
 | 
			
		||||
    "manufacturer": "Alin Elena",
 | 
			
		||||
    "keyboard_name": "mlego/m65 rev3",
 | 
			
		||||
    "maintainer": "alin elena",
 | 
			
		||||
    "board": "BLACKPILL_STM32_F401",
 | 
			
		||||
    "bootloader": "tinyuf2",
 | 
			
		||||
    "diode_direction": "COL2ROW",
 | 
			
		||||
    "encoder": {
 | 
			
		||||
        "rotary": [
 | 
			
		||||
            {"pin_a": "A0", "pin_b": "B6"}
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    "features": {
 | 
			
		||||
        "audio": false,
 | 
			
		||||
        "backlight": false,
 | 
			
		||||
        "bootmagic": true,
 | 
			
		||||
        "command": false,
 | 
			
		||||
        "console": false,
 | 
			
		||||
        "encoder": true,
 | 
			
		||||
        "extrakey": true,
 | 
			
		||||
        "mousekey": true,
 | 
			
		||||
        "nkro": true,
 | 
			
		||||
        "rgblight": true
 | 
			
		||||
    },
 | 
			
		||||
    "indicators": {
 | 
			
		||||
        "caps_lock": "C13",
 | 
			
		||||
        "num_lock": "B12",
 | 
			
		||||
        "scroll_lock": "B13"
 | 
			
		||||
        "on_state": 0
 | 
			
		||||
    },
 | 
			
		||||
    "matrix_pins": {
 | 
			
		||||
        "cols": ["A10", "A15", "B3", "B4", "B5", "B9", "B8", "B7", "A1", "A2", "A3", "A4", "B1"],
 | 
			
		||||
        "rows": ["B10", "A5", "A6", "A7", "B0"]
 | 
			
		||||
    },
 | 
			
		||||
    "processor": "STM32F401",
 | 
			
		||||
    "rgblight": {
 | 
			
		||||
        "saturation_steps": 8,
 | 
			
		||||
        "led_count": 20,
 | 
			
		||||
        "animations": {
 | 
			
		||||
            "alternating": true,
 | 
			
		||||
            "breathing": true,
 | 
			
		||||
            "christmas": true,
 | 
			
		||||
            "knight": true,
 | 
			
		||||
            "rainbow_mood": true,
 | 
			
		||||
            "rainbow_swirl": true,
 | 
			
		||||
            "snake": true,
 | 
			
		||||
            "knight": true,
 | 
			
		||||
            "christmas": true,
 | 
			
		||||
            "static_gradient": true,
 | 
			
		||||
            "rgb_test": true,
 | 
			
		||||
            "alternating": true,
 | 
			
		||||
            "snake": true,
 | 
			
		||||
            "static_gradient": true,
 | 
			
		||||
            "twinkle": true
 | 
			
		||||
        }
 | 
			
		||||
        },
 | 
			
		||||
        "hue_steps": 8,
 | 
			
		||||
        "layers": {
 | 
			
		||||
            "enabled": true
 | 
			
		||||
        },
 | 
			
		||||
        "led_count": 20,
 | 
			
		||||
        "saturation_steps": 8
 | 
			
		||||
    },
 | 
			
		||||
    "url": "https://gitlab.com/m-lego/m65",
 | 
			
		||||
    "usb": {
 | 
			
		||||
        "device_version": "0.0.1",
 | 
			
		||||
        "pid": "0x6062",
 | 
			
		||||
        "vid": "0xBABA"
 | 
			
		||||
    },
 | 
			
		||||
    "ws2812": {
 | 
			
		||||
        "pin": "B15"
 | 
			
		||||
    },
 | 
			
		||||
    "processor": "STM32F401",
 | 
			
		||||
    "bootloader": "tinyuf2",
 | 
			
		||||
    "board": "BLACKPILL_STM32_F401"
 | 
			
		||||
    "layouts": {
 | 
			
		||||
        "LAYOUT_ortho_5x13": {
 | 
			
		||||
            "layout": [
 | 
			
		||||
                {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
 | 
			
		||||
                {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
 | 
			
		||||
                {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
 | 
			
		||||
                {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
 | 
			
		||||
                {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
 | 
			
		||||
                {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
 | 
			
		||||
                {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
 | 
			
		||||
                {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
 | 
			
		||||
                {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
 | 
			
		||||
                {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
 | 
			
		||||
                {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
 | 
			
		||||
                {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
 | 
			
		||||
                {"label": "Backspace", "matrix": [0, 12], "x": 12, "y": 0},
 | 
			
		||||
                {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1},
 | 
			
		||||
                {"label": "q", "matrix": [1, 1], "x": 1, "y": 1},
 | 
			
		||||
                {"label": "w", "matrix": [1, 2], "x": 2, "y": 1},
 | 
			
		||||
                {"label": "e", "matrix": [1, 3], "x": 3, "y": 1},
 | 
			
		||||
                {"label": "r", "matrix": [1, 4], "x": 4, "y": 1},
 | 
			
		||||
                {"label": "t", "matrix": [1, 5], "x": 5, "y": 1},
 | 
			
		||||
                {"label": "y", "matrix": [1, 6], "x": 6, "y": 1},
 | 
			
		||||
                {"label": "u", "matrix": [1, 7], "x": 7, "y": 1},
 | 
			
		||||
                {"label": "i", "matrix": [1, 8], "x": 8, "y": 1},
 | 
			
		||||
                {"label": "o", "matrix": [1, 9], "x": 9, "y": 1},
 | 
			
		||||
                {"label": "p", "matrix": [1, 10], "x": 10, "y": 1},
 | 
			
		||||
                {"label": "[", "matrix": [1, 11], "x": 11, "y": 1},
 | 
			
		||||
                {"label": "]", "matrix": [1, 12], "x": 12, "y": 1},
 | 
			
		||||
                {"label": "#", "matrix": [2, 0], "x": 0, "y": 2},
 | 
			
		||||
                {"label": "a", "matrix": [2, 1], "x": 1, "y": 2},
 | 
			
		||||
                {"label": "s", "matrix": [2, 2], "x": 2, "y": 2},
 | 
			
		||||
                {"label": "d", "matrix": [2, 3], "x": 3, "y": 2},
 | 
			
		||||
                {"label": "f", "matrix": [2, 4], "x": 4, "y": 2},
 | 
			
		||||
                {"label": "g", "matrix": [2, 5], "x": 5, "y": 2},
 | 
			
		||||
                {"label": "h", "matrix": [2, 6], "x": 6, "y": 2},
 | 
			
		||||
                {"label": "j", "matrix": [2, 7], "x": 7, "y": 2},
 | 
			
		||||
                {"label": "k", "matrix": [2, 8], "x": 8, "y": 2},
 | 
			
		||||
                {"label": "l", "matrix": [2, 9], "x": 9, "y": 2},
 | 
			
		||||
                {"label": ";", "matrix": [2, 10], "x": 10, "y": 2},
 | 
			
		||||
                {"label": "'", "matrix": [2, 11], "x": 11, "y": 2},
 | 
			
		||||
                {"label": "Enter", "matrix": [2, 12], "x": 12, "y": 2},
 | 
			
		||||
                {"label": "Left Shift", "matrix": [3, 0], "x": 0, "y": 3},
 | 
			
		||||
                {"label": "\\", "matrix": [3, 1], "x": 1, "y": 3},
 | 
			
		||||
                {"label": "z", "matrix": [3, 2], "x": 2, "y": 3},
 | 
			
		||||
                {"label": "x", "matrix": [3, 3], "x": 3, "y": 3},
 | 
			
		||||
                {"label": "c", "matrix": [3, 4], "x": 4, "y": 3},
 | 
			
		||||
                {"label": "v", "matrix": [3, 5], "x": 5, "y": 3},
 | 
			
		||||
                {"label": "b", "matrix": [3, 6], "x": 6, "y": 3},
 | 
			
		||||
                {"label": "n", "matrix": [3, 7], "x": 7, "y": 3},
 | 
			
		||||
                {"label": "m", "matrix": [3, 8], "x": 8, "y": 3},
 | 
			
		||||
                {"label": ",", "matrix": [3, 9], "x": 9, "y": 3},
 | 
			
		||||
                {"label": ".", "matrix": [3, 10], "x": 10, "y": 3},
 | 
			
		||||
                {"label": "Up", "matrix": [3, 11], "x": 11, "y": 3},
 | 
			
		||||
                {"label": "/", "matrix": [3, 12], "x": 12, "y": 3},
 | 
			
		||||
                {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4},
 | 
			
		||||
                {"label": "Menu", "matrix": [4, 1], "x": 1, "y": 4},
 | 
			
		||||
                {"label": "Lower", "matrix": [4, 2], "x": 2, "y": 4},
 | 
			
		||||
                {"label": "Alt", "matrix": [4, 3], "x": 3, "y": 4},
 | 
			
		||||
                {"label": "Raise", "matrix": [4, 4], "x": 4, "y": 4},
 | 
			
		||||
                {"label": "Space", "matrix": [4, 5], "x": 5, "y": 4},
 | 
			
		||||
                {"label": "Space", "matrix": [4, 6], "x": 6, "y": 4},
 | 
			
		||||
                {"label": "Space", "matrix": [4, 7], "x": 7, "y": 4},
 | 
			
		||||
                {"label": "Alt Gr", "matrix": [4, 8], "x": 8, "y": 4},
 | 
			
		||||
                {"label": "Right Shift", "matrix": [4, 9], "x": 9, "y": 4},
 | 
			
		||||
                {"label": "Left", "matrix": [4, 10], "x": 10, "y": 4},
 | 
			
		||||
                {"label": "Down", "matrix": [4, 11], "x": 11, "y": 4},
 | 
			
		||||
                {"label": "Right", "matrix": [4, 12], "x": 12, "y": 4}
 | 
			
		||||
            ]
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,23 +1,5 @@
 | 
			
		|||
/* Copyright 2020 QMK
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file was auto-generated by:
 | 
			
		||||
 *    `qmk chibios-confmigrate -i keyboards/zvecr/zv48/f401/mcuconf.h -r platforms/chibios/BLACKPILL_STM32_F401/configs/mcuconf.h`
 | 
			
		||||
 */
 | 
			
		||||
// Copyright 2020-2022 alin m elena (@alinelena)
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,13 +1 @@
 | 
			
		|||
# Build Options
 | 
			
		||||
#   change yes to no to disable
 | 
			
		||||
#
 | 
			
		||||
BOOTMAGIC_ENABLE = yes     # Enable Bootmagic Lite
 | 
			
		||||
MOUSEKEY_ENABLE = yes      # Mouse keys
 | 
			
		||||
EXTRAKEY_ENABLE = yes      # Audio control and System control
 | 
			
		||||
CONSOLE_ENABLE = no        # Console for debug
 | 
			
		||||
COMMAND_ENABLE = no        # Commands for debug and configuration
 | 
			
		||||
NKRO_ENABLE = yes          # Enable N-Key Rollover
 | 
			
		||||
BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality
 | 
			
		||||
RGBLIGHT_ENABLE = yes      # Enable keyboard RGB underglow
 | 
			
		||||
AUDIO_ENABLE = no          # Audio output
 | 
			
		||||
ENCODER_ENABLE = yes       # Enable encoder
 | 
			
		||||
#blank on purpose
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,26 +1,12 @@
 | 
			
		|||
/*
 | 
			
		||||
Copyright 2021-2022 Alin M Elena <alinm.elena@gmail.com>
 | 
			
		||||
 | 
			
		||||
This program is free software: you can redistribute it and/or modify
 | 
			
		||||
it under the terms of the GNU General Public License as published by
 | 
			
		||||
the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
(at your option) any later version.
 | 
			
		||||
 | 
			
		||||
This program is distributed in the hope that it will be useful,
 | 
			
		||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
GNU General Public License for more details.
 | 
			
		||||
 | 
			
		||||
You should have received a copy of the GNU General Public License
 | 
			
		||||
along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
*/
 | 
			
		||||
// Copyright 2021-2023 alin m elena (@alinelena)
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#define RGBLIGHT_LAYERS
 | 
			
		||||
#define LED_RSE_PIN B13
 | 
			
		||||
#define LED_LWR_PIN B12
 | 
			
		||||
 | 
			
		||||
#ifdef OLED_ENABLE
 | 
			
		||||
#    define OLED_DISPLAY_128X32
 | 
			
		||||
#    define I2C1_SCL_PIN B9
 | 
			
		||||
#    define I2C1_SDA_PIN B8
 | 
			
		||||
#    define OLED_BRIGHTNESS 128
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,23 +1,5 @@
 | 
			
		|||
/* Copyright 2020 QMK
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file was auto-generated by:
 | 
			
		||||
 *    `qmk chibios-confmigrate -i keyboards/zvecr/zv48/f401/halconf.h -r platforms/chibios/common/configs/halconf.h`
 | 
			
		||||
 */
 | 
			
		||||
// Copyright 2021-2022 alin m elena (@alinelena)
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,43 +1,136 @@
 | 
			
		|||
{
 | 
			
		||||
    "usb": {
 | 
			
		||||
        "pid": "0x6062",
 | 
			
		||||
        "device_version": "0.0.2"
 | 
			
		||||
    },
 | 
			
		||||
    "matrix_pins": {
 | 
			
		||||
        "cols": ["B14", "A8", "A10", "A15", "B3", "B4", "B5", "B7", "A1", "A2", "A3", "A4", "B1"],
 | 
			
		||||
        "rows": ["B10", "A5", "A6", "A7", "B0"]
 | 
			
		||||
    },
 | 
			
		||||
    "manufacturer": "Alin Elena",
 | 
			
		||||
    "keyboard_name": "mlego/m65 rev4",
 | 
			
		||||
    "maintainer": "alin elena",
 | 
			
		||||
    "board": "BLACKPILL_STM32_F401",
 | 
			
		||||
    "bootloader": "tinyuf2",
 | 
			
		||||
    "diode_direction": "COL2ROW",
 | 
			
		||||
    "encoder": {
 | 
			
		||||
        "rotary": [
 | 
			
		||||
            {"pin_a": "A0", "pin_b": "B6"}
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    "features": {
 | 
			
		||||
        "audio": false,
 | 
			
		||||
        "backlight": false,
 | 
			
		||||
        "bootmagic": true,
 | 
			
		||||
        "command": false,
 | 
			
		||||
        "console": true,
 | 
			
		||||
        "encoder": true,
 | 
			
		||||
        "extrakey": true,
 | 
			
		||||
        "mousekey": true,
 | 
			
		||||
        "nkro": true,
 | 
			
		||||
        "oled": true,
 | 
			
		||||
        "rgblight": true,
 | 
			
		||||
        "wpm": true
 | 
			
		||||
    },
 | 
			
		||||
    "indicators": {
 | 
			
		||||
        "caps_lock": "C13",
 | 
			
		||||
        "num_lock": "B12",
 | 
			
		||||
        "scroll_lock": "B13"
 | 
			
		||||
        "on_state": 0
 | 
			
		||||
    },
 | 
			
		||||
    "matrix_pins": {
 | 
			
		||||
        "cols": ["B14", "A8", "A10", "A15", "B3", "B4", "B5", "B7", "A1", "A2", "A3", "A4", "B1"],
 | 
			
		||||
        "rows": ["B10", "A5", "A6", "A7", "B0"]
 | 
			
		||||
    },
 | 
			
		||||
    "processor": "STM32F401",
 | 
			
		||||
    "rgblight": {
 | 
			
		||||
        "saturation_steps": 8,
 | 
			
		||||
        "led_count": 20,
 | 
			
		||||
        "animations": {
 | 
			
		||||
            "alternating": true,
 | 
			
		||||
            "breathing": true,
 | 
			
		||||
            "christmas": true,
 | 
			
		||||
            "knight": true,
 | 
			
		||||
            "rainbow_mood": true,
 | 
			
		||||
            "rainbow_swirl": true,
 | 
			
		||||
            "snake": true,
 | 
			
		||||
            "knight": true,
 | 
			
		||||
            "christmas": true,
 | 
			
		||||
            "static_gradient": true,
 | 
			
		||||
            "rgb_test": true,
 | 
			
		||||
            "alternating": true,
 | 
			
		||||
            "snake": true,
 | 
			
		||||
            "static_gradient": true,
 | 
			
		||||
            "twinkle": true
 | 
			
		||||
        }
 | 
			
		||||
        },
 | 
			
		||||
        "hue_steps": 8,
 | 
			
		||||
        "layers": {
 | 
			
		||||
            "enabled": true
 | 
			
		||||
        },
 | 
			
		||||
        "led_count": 20,
 | 
			
		||||
        "saturation_steps": 8
 | 
			
		||||
    },
 | 
			
		||||
    "url": "https://gitlab.com/m-lego/m65",
 | 
			
		||||
    "usb": {
 | 
			
		||||
        "device_version": "0.0.2",
 | 
			
		||||
        "pid": "0x6062",
 | 
			
		||||
        "vid": "0xBABA"
 | 
			
		||||
    },
 | 
			
		||||
    "ws2812": {
 | 
			
		||||
        "pin": "B15"
 | 
			
		||||
    },
 | 
			
		||||
    "processor": "STM32F401",
 | 
			
		||||
    "bootloader": "tinyuf2",
 | 
			
		||||
    "board": "BLACKPILL_STM32_F401"
 | 
			
		||||
    "layouts": {
 | 
			
		||||
        "LAYOUT_ortho_5x13": {
 | 
			
		||||
            "layout": [
 | 
			
		||||
                {"label": "Esc", "matrix": [0, 0], "x": 0, "y": 0},
 | 
			
		||||
                {"label": "1", "matrix": [0, 1], "x": 1, "y": 0},
 | 
			
		||||
                {"label": "2", "matrix": [0, 2], "x": 2, "y": 0},
 | 
			
		||||
                {"label": "3", "matrix": [0, 3], "x": 3, "y": 0},
 | 
			
		||||
                {"label": "4", "matrix": [0, 4], "x": 4, "y": 0},
 | 
			
		||||
                {"label": "5", "matrix": [0, 5], "x": 5, "y": 0},
 | 
			
		||||
                {"label": "6", "matrix": [0, 6], "x": 6, "y": 0},
 | 
			
		||||
                {"label": "7", "matrix": [0, 7], "x": 7, "y": 0},
 | 
			
		||||
                {"label": "8", "matrix": [0, 8], "x": 8, "y": 0},
 | 
			
		||||
                {"label": "9", "matrix": [0, 9], "x": 9, "y": 0},
 | 
			
		||||
                {"label": "0", "matrix": [0, 10], "x": 10, "y": 0},
 | 
			
		||||
                {"label": "-", "matrix": [0, 11], "x": 11, "y": 0},
 | 
			
		||||
                {"label": "Backspace", "matrix": [0, 12], "x": 12, "y": 0},
 | 
			
		||||
                {"label": "Tab", "matrix": [1, 0], "x": 0, "y": 1},
 | 
			
		||||
                {"label": "q", "matrix": [1, 1], "x": 1, "y": 1},
 | 
			
		||||
                {"label": "w", "matrix": [1, 2], "x": 2, "y": 1},
 | 
			
		||||
                {"label": "e", "matrix": [1, 3], "x": 3, "y": 1},
 | 
			
		||||
                {"label": "r", "matrix": [1, 4], "x": 4, "y": 1},
 | 
			
		||||
                {"label": "t", "matrix": [1, 5], "x": 5, "y": 1},
 | 
			
		||||
                {"label": "y", "matrix": [1, 6], "x": 6, "y": 1},
 | 
			
		||||
                {"label": "u", "matrix": [1, 7], "x": 7, "y": 1},
 | 
			
		||||
                {"label": "i", "matrix": [1, 8], "x": 8, "y": 1},
 | 
			
		||||
                {"label": "o", "matrix": [1, 9], "x": 9, "y": 1},
 | 
			
		||||
                {"label": "p", "matrix": [1, 10], "x": 10, "y": 1},
 | 
			
		||||
                {"label": "[", "matrix": [1, 11], "x": 11, "y": 1},
 | 
			
		||||
                {"label": "]", "matrix": [1, 12], "x": 12, "y": 1},
 | 
			
		||||
                {"label": "#", "matrix": [2, 0], "x": 0, "y": 2},
 | 
			
		||||
                {"label": "a", "matrix": [2, 1], "x": 1, "y": 2},
 | 
			
		||||
                {"label": "s", "matrix": [2, 2], "x": 2, "y": 2},
 | 
			
		||||
                {"label": "d", "matrix": [2, 3], "x": 3, "y": 2},
 | 
			
		||||
                {"label": "f", "matrix": [2, 4], "x": 4, "y": 2},
 | 
			
		||||
                {"label": "g", "matrix": [2, 5], "x": 5, "y": 2},
 | 
			
		||||
                {"label": "h", "matrix": [2, 6], "x": 6, "y": 2},
 | 
			
		||||
                {"label": "j", "matrix": [2, 7], "x": 7, "y": 2},
 | 
			
		||||
                {"label": "k", "matrix": [2, 8], "x": 8, "y": 2},
 | 
			
		||||
                {"label": "l", "matrix": [2, 9], "x": 9, "y": 2},
 | 
			
		||||
                {"label": ";", "matrix": [2, 10], "x": 10, "y": 2},
 | 
			
		||||
                {"label": "'", "matrix": [2, 11], "x": 11, "y": 2},
 | 
			
		||||
                {"label": "Enter", "matrix": [2, 12], "x": 12, "y": 2},
 | 
			
		||||
                {"label": "Left Shift", "matrix": [3, 0], "x": 0, "y": 3},
 | 
			
		||||
                {"label": "\\", "matrix": [3, 1], "x": 1, "y": 3},
 | 
			
		||||
                {"label": "z", "matrix": [3, 2], "x": 2, "y": 3},
 | 
			
		||||
                {"label": "x", "matrix": [3, 3], "x": 3, "y": 3},
 | 
			
		||||
                {"label": "c", "matrix": [3, 4], "x": 4, "y": 3},
 | 
			
		||||
                {"label": "v", "matrix": [3, 5], "x": 5, "y": 3},
 | 
			
		||||
                {"label": "b", "matrix": [3, 6], "x": 6, "y": 3},
 | 
			
		||||
                {"label": "n", "matrix": [3, 7], "x": 7, "y": 3},
 | 
			
		||||
                {"label": "m", "matrix": [3, 8], "x": 8, "y": 3},
 | 
			
		||||
                {"label": ",", "matrix": [3, 9], "x": 9, "y": 3},
 | 
			
		||||
                {"label": ".", "matrix": [3, 10], "x": 10, "y": 3},
 | 
			
		||||
                {"label": "Up", "matrix": [3, 11], "x": 11, "y": 3},
 | 
			
		||||
                {"label": "/", "matrix": [3, 12], "x": 12, "y": 3},
 | 
			
		||||
                {"label": "Ctrl", "matrix": [4, 0], "x": 0, "y": 4},
 | 
			
		||||
                {"label": "Menu", "matrix": [4, 1], "x": 1, "y": 4},
 | 
			
		||||
                {"label": "Lower", "matrix": [4, 2], "x": 2, "y": 4},
 | 
			
		||||
                {"label": "Alt", "matrix": [4, 3], "x": 3, "y": 4},
 | 
			
		||||
                {"label": "Raise", "matrix": [4, 4], "x": 4, "y": 4},
 | 
			
		||||
                {"label": "Space", "matrix": [4, 5], "x": 5, "y": 4},
 | 
			
		||||
                {"label": "Space", "matrix": [4, 6], "x": 6, "y": 4},
 | 
			
		||||
                {"label": "Space", "matrix": [4, 7], "x": 7, "y": 4},
 | 
			
		||||
                {"label": "Alt Gr", "matrix": [4, 8], "x": 8, "y": 4},
 | 
			
		||||
                {"label": "Right Shift", "matrix": [4, 9], "x": 9, "y": 4},
 | 
			
		||||
                {"label": "Left", "matrix": [4, 10], "x": 10, "y": 4},
 | 
			
		||||
                {"label": "Down", "matrix": [4, 11], "x": 11, "y": 4},
 | 
			
		||||
                {"label": "Right", "matrix": [4, 12], "x": 12, "y": 4}
 | 
			
		||||
            ]
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,23 +1,5 @@
 | 
			
		|||
/* Copyright 2020 QMK
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * This file was auto-generated by:
 | 
			
		||||
 *    `qmk chibios-confmigrate -i keyboards/zvecr/zv48/f401/mcuconf.h -r platforms/chibios/BLACKPILL_STM32_F401/configs/mcuconf.h`
 | 
			
		||||
 */
 | 
			
		||||
// Copyright 2021-2022 alin m elena (@alinelena)
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,15 +0,0 @@
 | 
			
		|||
# Build Options
 | 
			
		||||
#   change yes to no to disable
 | 
			
		||||
#
 | 
			
		||||
BOOTMAGIC_ENABLE = yes     # Enable Bootmagic Lite
 | 
			
		||||
MOUSEKEY_ENABLE = yes      # Mouse keys
 | 
			
		||||
EXTRAKEY_ENABLE = yes      # Audio control and System control
 | 
			
		||||
CONSOLE_ENABLE = no        # Console for debug
 | 
			
		||||
COMMAND_ENABLE = no        # Commands for debug and configuration
 | 
			
		||||
NKRO_ENABLE = yes          # Enable N-Key Rollover
 | 
			
		||||
BACKLIGHT_ENABLE = no      # Enable keyboard backlight functionality
 | 
			
		||||
RGBLIGHT_ENABLE = yes      # Enable keyboard RGB underglow
 | 
			
		||||
AUDIO_ENABLE = no          # Audio output
 | 
			
		||||
ENCODER_ENABLE = yes       # Enable encoder
 | 
			
		||||
OLED_ENABLE = yes          # Enable OLED
 | 
			
		||||
WPM_ENABLE = yes           # Enable WPM Counter 
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue