Fixup sofle (#22934)
* initial * Update keyboards/sofle/info.json Co-authored-by: Joel Challis <git@zvecr.com> * Update keyboards/sofle/info.json Co-authored-by: Drashna Jaelre <drashna@live.com> --------- Co-authored-by: Joel Challis <git@zvecr.com> Co-authored-by: Drashna Jaelre <drashna@live.com>
This commit is contained in:
		
							parent
							
								
									2c3d0126ba
								
							
						
					
					
						commit
						e446366326
					
				
					 20 changed files with 238 additions and 457 deletions
				
			
		
							
								
								
									
										117
									
								
								keyboards/sofle/info.json
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								keyboards/sofle/info.json
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,117 @@
 | 
			
		|||
{
 | 
			
		||||
    "keyboard_name": "Sofle",
 | 
			
		||||
    "features": {
 | 
			
		||||
        "bootmagic": true,
 | 
			
		||||
        "extrakey": true,
 | 
			
		||||
        "mousekey": true,
 | 
			
		||||
        "nkro": true,
 | 
			
		||||
        "encoder": true,
 | 
			
		||||
        "oled": true
 | 
			
		||||
    },
 | 
			
		||||
    "build": {
 | 
			
		||||
        "lto": true
 | 
			
		||||
    },
 | 
			
		||||
    "usb": {
 | 
			
		||||
        "vid": "0xFC32"
 | 
			
		||||
    },
 | 
			
		||||
    "diode_direction": "COL2ROW",
 | 
			
		||||
    "qmk": {
 | 
			
		||||
        "tap_keycode_delay": 10
 | 
			
		||||
    },
 | 
			
		||||
    "split": {
 | 
			
		||||
        "enabled": true,
 | 
			
		||||
        "soft_serial_pin": "D2",
 | 
			
		||||
        "transport": {
 | 
			
		||||
            "sync": {
 | 
			
		||||
                "matrix_state": true
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "ws2812": {
 | 
			
		||||
        "pin": "D3"
 | 
			
		||||
    },
 | 
			
		||||
    "rgblight": {
 | 
			
		||||
        "led_count": 72,
 | 
			
		||||
        "split_count": [36, 36],
 | 
			
		||||
        "sleep": true
 | 
			
		||||
    },
 | 
			
		||||
    "rgb_matrix": {
 | 
			
		||||
        "driver": "ws2812",
 | 
			
		||||
        "split_count": [36, 36],
 | 
			
		||||
        "sleep": true,
 | 
			
		||||
        "layout": [
 | 
			
		||||
            {"x": 96, "y": 40, "flags": 8},
 | 
			
		||||
            {"x": 16, "y": 20, "flags": 2},
 | 
			
		||||
            {"x": 48, "y": 10, "flags": 2},
 | 
			
		||||
            {"x": 80, "y": 18, "flags": 2},
 | 
			
		||||
            {"x": 88, "y": 60, "flags": 2},
 | 
			
		||||
            {"x": 56, "y": 57, "flags": 2},
 | 
			
		||||
            {"x": 24, "y": 60, "flags": 2},
 | 
			
		||||
            {"matrix": [4, 0], "x": 32, "y": 57, "flags": 4},
 | 
			
		||||
            {"matrix": [3, 0], "x": 0, "y": 48, "flags": 4},
 | 
			
		||||
            {"matrix": [2, 0], "x": 0, "y": 36, "flags": 4},
 | 
			
		||||
            {"matrix": [1, 0], "x": 0, "y": 24, "flags": 4},
 | 
			
		||||
            {"matrix": [0, 0], "x": 0, "y": 12, "flags": 4},
 | 
			
		||||
            {"matrix": [0, 1], "x": 16, "y": 12, "flags": 4},
 | 
			
		||||
            {"matrix": [1, 1], "x": 16, "y": 24, "flags": 4},
 | 
			
		||||
            {"matrix": [2, 1], "x": 16, "y": 36, "flags": 4},
 | 
			
		||||
            {"matrix": [3, 1], "x": 16, "y": 48, "flags": 4},
 | 
			
		||||
            {"matrix": [4, 1], "x": 48, "y": 55, "flags": 4},
 | 
			
		||||
            {"matrix": [4, 2], "x": 64, "y": 57, "flags": 4},
 | 
			
		||||
            {"matrix": [3, 2], "x": 32, "y": 45, "flags": 4},
 | 
			
		||||
            {"matrix": [2, 2], "x": 32, "y": 33, "flags": 4},
 | 
			
		||||
            {"matrix": [1, 2], "x": 32, "y": 21, "flags": 4},
 | 
			
		||||
            {"matrix": [0, 2], "x": 32, "y": 9, "flags": 4},
 | 
			
		||||
            {"matrix": [0, 3], "x": 48, "y": 7, "flags": 4},
 | 
			
		||||
            {"matrix": [1, 3], "x": 48, "y": 19, "flags": 4},
 | 
			
		||||
            {"matrix": [2, 3], "x": 48, "y": 31, "flags": 4},
 | 
			
		||||
            {"matrix": [3, 3], "x": 48, "y": 43, "flags": 4},
 | 
			
		||||
            {"matrix": [4, 3], "x": 80, "y": 59, "flags": 4},
 | 
			
		||||
            {"matrix": [4, 4], "x": 96, "y": 64, "flags": 4},
 | 
			
		||||
            {"matrix": [3, 4], "x": 64, "y": 45, "flags": 4},
 | 
			
		||||
            {"matrix": [2, 4], "x": 64, "y": 33, "flags": 4},
 | 
			
		||||
            {"matrix": [1, 4], "x": 64, "y": 21, "flags": 4},
 | 
			
		||||
            {"matrix": [0, 4], "x": 64, "y": 9, "flags": 4},
 | 
			
		||||
            {"matrix": [0, 5], "x": 80, "y": 10, "flags": 4},
 | 
			
		||||
            {"matrix": [1, 5], "x": 80, "y": 22, "flags": 4},
 | 
			
		||||
            {"matrix": [2, 5], "x": 80, "y": 34, "flags": 4},
 | 
			
		||||
            {"matrix": [3, 5], "x": 80, "y": 47, "flags": 4},
 | 
			
		||||
            {"x": 128, "y": 40, "flags": 8},
 | 
			
		||||
            {"x": 208, "y": 20, "flags": 2},
 | 
			
		||||
            {"x": 176, "y": 10, "flags": 2},
 | 
			
		||||
            {"x": 144, "y": 18, "flags": 2},
 | 
			
		||||
            {"x": 136, "y": 60, "flags": 2},
 | 
			
		||||
            {"x": 168, "y": 57, "flags": 2},
 | 
			
		||||
            {"x": 200, "y": 60, "flags": 2},
 | 
			
		||||
            {"matrix": [9, 0], "x": 192, "y": 57, "flags": 4},
 | 
			
		||||
            {"matrix": [8, 0], "x": 224, "y": 48, "flags": 4},
 | 
			
		||||
            {"matrix": [7, 0], "x": 224, "y": 36, "flags": 4},
 | 
			
		||||
            {"matrix": [6, 0], "x": 224, "y": 24, "flags": 4},
 | 
			
		||||
            {"matrix": [5, 0], "x": 224, "y": 12, "flags": 4},
 | 
			
		||||
            {"matrix": [5, 1], "x": 208, "y": 12, "flags": 4},
 | 
			
		||||
            {"matrix": [6, 1], "x": 208, "y": 24, "flags": 4},
 | 
			
		||||
            {"matrix": [7, 1], "x": 208, "y": 36, "flags": 4},
 | 
			
		||||
            {"matrix": [8, 1], "x": 208, "y": 48, "flags": 4},
 | 
			
		||||
            {"matrix": [9, 1], "x": 176, "y": 55, "flags": 4},
 | 
			
		||||
            {"matrix": [9, 2], "x": 160, "y": 57, "flags": 4},
 | 
			
		||||
            {"matrix": [8, 2], "x": 192, "y": 45, "flags": 4},
 | 
			
		||||
            {"matrix": [7, 2], "x": 192, "y": 33, "flags": 4},
 | 
			
		||||
            {"matrix": [6, 2], "x": 192, "y": 21, "flags": 4},
 | 
			
		||||
            {"matrix": [5, 2], "x": 192, "y": 9, "flags": 4},
 | 
			
		||||
            {"matrix": [5, 3], "x": 176, "y": 7, "flags": 4},
 | 
			
		||||
            {"matrix": [6, 3], "x": 176, "y": 19, "flags": 4},
 | 
			
		||||
            {"matrix": [7, 3], "x": 176, "y": 31, "flags": 4},
 | 
			
		||||
            {"matrix": [8, 3], "x": 176, "y": 43, "flags": 4},
 | 
			
		||||
            {"matrix": [9, 3], "x": 144, "y": 59, "flags": 4},
 | 
			
		||||
            {"matrix": [9, 4], "x": 128, "y": 64, "flags": 4},
 | 
			
		||||
            {"matrix": [8, 4], "x": 160, "y": 45, "flags": 4},
 | 
			
		||||
            {"matrix": [7, 4], "x": 160, "y": 33, "flags": 4},
 | 
			
		||||
            {"matrix": [6, 4], "x": 160, "y": 21, "flags": 4},
 | 
			
		||||
            {"matrix": [5, 4], "x": 160, "y": 9, "flags": 4},
 | 
			
		||||
            {"matrix": [5, 5], "x": 144, "y": 10, "flags": 4},
 | 
			
		||||
            {"matrix": [6, 5], "x": 144, "y": 22, "flags": 4},
 | 
			
		||||
            {"matrix": [7, 5], "x": 144, "y": 34, "flags": 4},
 | 
			
		||||
            {"matrix": [8, 5], "x": 144, "y": 47, "flags": 4}
 | 
			
		||||
        ]
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										0
									
								
								keyboards/sofle/keyhive/config.h
									
										
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										0
									
								
								keyboards/sofle/keyhive/config.h
									
										
									
									
									
										
										
										Executable file → Normal file
									
								
							| 
						 | 
				
			
			@ -1,14 +1,11 @@
 | 
			
		|||
{
 | 
			
		||||
    "keyboard_name": "Sofle",
 | 
			
		||||
    "manufacturer": "Keyhive",
 | 
			
		||||
    "development_board": "elite_c",
 | 
			
		||||
    "usb": {
 | 
			
		||||
        "vid": "0xFC32",
 | 
			
		||||
        "pid": "0x1287",
 | 
			
		||||
        "device_version": "0.0.2"
 | 
			
		||||
    },
 | 
			
		||||
    "ws2812": {
 | 
			
		||||
        "pin": "D3"
 | 
			
		||||
    },
 | 
			
		||||
    "rgblight": {
 | 
			
		||||
        "hue_steps": 10,
 | 
			
		||||
        "led_count": 74,
 | 
			
		||||
| 
						 | 
				
			
			@ -21,14 +18,12 @@
 | 
			
		|||
        "cols": ["B6", "B2", "B3", "B1", "F7", "F6", null],
 | 
			
		||||
        "rows": ["C6", "D7", "E6", "B4", "B5"]
 | 
			
		||||
    },
 | 
			
		||||
    "diode_direction": "COL2ROW",
 | 
			
		||||
    "encoder": {
 | 
			
		||||
        "rotary": [
 | 
			
		||||
            {"pin_a": "F5", "pin_b": "F4"}
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    "split": {
 | 
			
		||||
        "soft_serial_pin": "D2",
 | 
			
		||||
        "encoder": {
 | 
			
		||||
            "right": {
 | 
			
		||||
                "rotary": [
 | 
			
		||||
| 
						 | 
				
			
			@ -44,17 +39,11 @@
 | 
			
		|||
        },
 | 
			
		||||
        "transport": {
 | 
			
		||||
            "sync": {
 | 
			
		||||
                "matrix_state": true,
 | 
			
		||||
                "oled": true,
 | 
			
		||||
                "wpm": true
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "qmk": {
 | 
			
		||||
        "tap_keycode_delay": 10
 | 
			
		||||
    },
 | 
			
		||||
    "processor": "atmega32u4",
 | 
			
		||||
    "bootloader": "atmel-dfu",
 | 
			
		||||
    "layouts": {
 | 
			
		||||
        "LAYOUT": {
 | 
			
		||||
            "layout": [
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										0
									
								
								keyboards/sofle/keyhive/readme.md
									
										
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										0
									
								
								keyboards/sofle/keyhive/readme.md
									
										
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
								
								
									
										17
									
								
								keyboards/sofle/keyhive/rules.mk
									
										
									
									
									
										
										
										Executable file → Normal file
									
								
							
							
						
						
									
										17
									
								
								keyboards/sofle/keyhive/rules.mk
									
										
									
									
									
										
										
										Executable file → Normal file
									
								
							| 
						 | 
				
			
			@ -1,16 +1 @@
 | 
			
		|||
# Build Options
 | 
			
		||||
#   change yes to no to disable
 | 
			
		||||
#
 | 
			
		||||
BOOTMAGIC_ENABLE = no       # Enable Bootmagic Lite
 | 
			
		||||
MOUSEKEY_ENABLE = no        # Mouse keys
 | 
			
		||||
EXTRAKEY_ENABLE = yes       # Audio control and System control
 | 
			
		||||
CONSOLE_ENABLE = no         # Console for debug
 | 
			
		||||
COMMAND_ENABLE = no         # Commands for debug and configuration
 | 
			
		||||
NKRO_ENABLE = yes           # Enable N-Key Rollover
 | 
			
		||||
BACKLIGHT_ENABLE = no       # Enable keyboard backlight functionality
 | 
			
		||||
RGBLIGHT_ENABLE = no        # Enable keyboard RGB underglow
 | 
			
		||||
AUDIO_ENABLE = no           # Audio output
 | 
			
		||||
ENCODER_ENABLE = yes
 | 
			
		||||
LTO_ENABLE = yes
 | 
			
		||||
SPLIT_KEYBOARD = yes
 | 
			
		||||
OLED_ENABLE = yes
 | 
			
		||||
# This file intentionally left blank
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,5 @@
 | 
			
		|||
// Copyright 2023 QMK
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
#include QMK_KEYBOARD_H
 | 
			
		||||
 | 
			
		||||
enum sofle_layers {
 | 
			
		||||
| 
						 | 
				
			
			@ -10,16 +12,14 @@ enum sofle_layers {
 | 
			
		|||
};
 | 
			
		||||
 | 
			
		||||
enum custom_keycodes {
 | 
			
		||||
    KC_QWERTY = SAFE_RANGE,
 | 
			
		||||
    KC_QWERTY = QK_USER,
 | 
			
		||||
    KC_COLEMAK,
 | 
			
		||||
    KC_PRVWD,
 | 
			
		||||
    KC_NXTWD,
 | 
			
		||||
    KC_LSTRT,
 | 
			
		||||
    KC_LEND,
 | 
			
		||||
    KC_DLINE
 | 
			
		||||
    KC_LEND
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		||||
/*
 | 
			
		||||
 * QWERTY
 | 
			
		||||
| 
						 | 
				
			
			@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
  KC_ESC,   KC_Q,   KC_W,    KC_E,    KC_R,    KC_T,                     KC_Y,    KC_U,    KC_I,    KC_O,    KC_P,  KC_BSPC,
 | 
			
		||||
  KC_TAB,   KC_A,   KC_S,    KC_D,    KC_F,    KC_G,                     KC_H,    KC_J,    KC_K,    KC_L, KC_SCLN,  KC_QUOT,
 | 
			
		||||
  KC_LSFT,  KC_Z,   KC_X,    KC_C,    KC_V,    KC_B, KC_MUTE,     XXXXXXX,KC_N,    KC_M, KC_COMM,  KC_DOT, KC_SLSH,  KC_RSFT,
 | 
			
		||||
                 KC_LGUI,KC_LALT,KC_LCTL, MO(_LOWER), KC_ENT,      KC_SPC,  MO(_RAISE), KC_RCTL, KC_RALT, KC_RGUI
 | 
			
		||||
                 KC_LGUI,KC_LALT,KC_LCTL, TL_LOWR, KC_ENT,      KC_SPC,  TL_UPPR, KC_RCTL, KC_RALT, KC_RGUI
 | 
			
		||||
),
 | 
			
		||||
/*
 | 
			
		||||
 * COLEMAK
 | 
			
		||||
| 
						 | 
				
			
			@ -65,7 +65,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
  KC_ESC,   KC_Q,   KC_W,    KC_F,    KC_P,    KC_G,                      KC_J,    KC_L,    KC_U,    KC_Y, KC_SCLN,  KC_BSPC,
 | 
			
		||||
  KC_TAB,   KC_A,   KC_R,    KC_S,    KC_T,    KC_D,                      KC_H,    KC_N,    KC_E,    KC_I,    KC_O,  KC_QUOT,
 | 
			
		||||
  KC_LSFT,  KC_Z,   KC_X,    KC_C,    KC_V,    KC_B, KC_MUTE,      XXXXXXX,KC_K,    KC_M, KC_COMM,  KC_DOT, KC_SLSH,  KC_RSFT,
 | 
			
		||||
                 KC_LGUI,KC_LALT,KC_LCTL,MO(_LOWER), KC_ENT,        KC_SPC,  MO(_RAISE), KC_RCTL, KC_RALT, KC_RGUI
 | 
			
		||||
                 KC_LGUI,KC_LALT,KC_LCTL,TL_LOWR, KC_ENT,        KC_SPC,  TL_UPPR, KC_RCTL, KC_RALT, KC_RGUI
 | 
			
		||||
),
 | 
			
		||||
/* LOWER
 | 
			
		||||
 * ,-----------------------------------------.                    ,-----------------------------------------.
 | 
			
		||||
| 
						 | 
				
			
			@ -104,9 +104,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
 */
 | 
			
		||||
[_RAISE] = LAYOUT(
 | 
			
		||||
  _______, _______ , _______ , _______ , _______ , _______,                           _______,  _______  , _______,  _______ ,  _______ ,_______,
 | 
			
		||||
  _______,  KC_INS,  KC_PSCR,   KC_APP,  XXXXXXX, XXXXXXX,                        KC_PGUP, KC_PRVWD,   KC_UP, KC_NXTWD,KC_DLINE, KC_BSPC,
 | 
			
		||||
  _______,  KC_INS,  KC_PSCR,   KC_APP,  XXXXXXX, XXXXXXX,                        KC_PGUP, KC_PRVWD,   KC_UP, KC_NXTWD,C(KC_BSPC), KC_BSPC,
 | 
			
		||||
  _______, KC_LALT,  KC_LCTL,  KC_LSFT,  XXXXXXX, KC_CAPS,                       KC_PGDN,  KC_LEFT, KC_DOWN, KC_RGHT,  KC_DEL, KC_BSPC,
 | 
			
		||||
  _______,KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, XXXXXXX,  _______,       _______,  XXXXXXX, KC_LSTRT, XXXXXXX, KC_LEND,   XXXXXXX, _______,
 | 
			
		||||
  _______, C(KC_Z), C(KC_X), C(KC_C), C(KC_V), XXXXXXX,  _______,       _______,  XXXXXXX, KC_LSTRT, XXXXXXX, KC_LEND,   XXXXXXX, _______,
 | 
			
		||||
                         _______, _______, _______, _______, _______,       _______, _______, _______, _______, _______
 | 
			
		||||
),
 | 
			
		||||
/* ADJUST
 | 
			
		||||
| 
						 | 
				
			
			@ -132,86 +132,6 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
 | 
			
		|||
  )
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#ifdef OLED_ENABLE
 | 
			
		||||
 | 
			
		||||
static void render_logo(void) {
 | 
			
		||||
    static const char PROGMEM qmk_logo[] = {
 | 
			
		||||
        0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
 | 
			
		||||
        0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
 | 
			
		||||
        0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    oled_write_P(qmk_logo, false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void print_status_narrow(void) {
 | 
			
		||||
    // Print current mode
 | 
			
		||||
    oled_write_P(PSTR("\n\n"), false);
 | 
			
		||||
    oled_write_ln_P(PSTR("MODE"), false);
 | 
			
		||||
    oled_write_ln_P(PSTR(""), false);
 | 
			
		||||
    if (keymap_config.swap_lctl_lgui) {
 | 
			
		||||
        oled_write_ln_P(PSTR("MAC"), false);
 | 
			
		||||
    } else {
 | 
			
		||||
        oled_write_ln_P(PSTR("WIN"), false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    switch (get_highest_layer(default_layer_state)) {
 | 
			
		||||
        case _QWERTY:
 | 
			
		||||
            oled_write_ln_P(PSTR("Qwrt"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        case _COLEMAK:
 | 
			
		||||
            oled_write_ln_P(PSTR("Clmk"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            oled_write_P(PSTR("Undef"), false);
 | 
			
		||||
    }
 | 
			
		||||
    oled_write_P(PSTR("\n\n"), false);
 | 
			
		||||
    // Print current layer
 | 
			
		||||
    oled_write_ln_P(PSTR("LAYER"), false);
 | 
			
		||||
    switch (get_highest_layer(layer_state)) {
 | 
			
		||||
        case _COLEMAK:
 | 
			
		||||
        case _QWERTY:
 | 
			
		||||
            oled_write_P(PSTR("Base\n"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        case _RAISE:
 | 
			
		||||
            oled_write_P(PSTR("Raise"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        case _LOWER:
 | 
			
		||||
            oled_write_P(PSTR("Lower"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        case _ADJUST:
 | 
			
		||||
            oled_write_P(PSTR("Adj\n"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            oled_write_ln_P(PSTR("Undef"), false);
 | 
			
		||||
    }
 | 
			
		||||
    oled_write_P(PSTR("\n\n"), false);
 | 
			
		||||
    led_t led_usb_state = host_keyboard_led_state();
 | 
			
		||||
    oled_write_ln_P(PSTR("CPSLK"), led_usb_state.caps_lock);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
 | 
			
		||||
    if (is_keyboard_master()) {
 | 
			
		||||
        return OLED_ROTATION_270;
 | 
			
		||||
    }
 | 
			
		||||
    return rotation;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool oled_task_user(void) {
 | 
			
		||||
    if (is_keyboard_master()) {
 | 
			
		||||
        print_status_narrow();
 | 
			
		||||
    } else {
 | 
			
		||||
        render_logo();
 | 
			
		||||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
layer_state_t layer_state_set_user(layer_state_t state) {
 | 
			
		||||
    return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
			
		||||
    switch (keycode) {
 | 
			
		||||
        case KC_QWERTY:
 | 
			
		||||
| 
						 | 
				
			
			@ -298,73 +218,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
 | 
			
		|||
                }
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
        case KC_DLINE:
 | 
			
		||||
            if (record->event.pressed) {
 | 
			
		||||
                register_mods(mod_config(MOD_LCTL));
 | 
			
		||||
                register_code(KC_BSPC);
 | 
			
		||||
            } else {
 | 
			
		||||
                unregister_mods(mod_config(MOD_LCTL));
 | 
			
		||||
                unregister_code(KC_BSPC);
 | 
			
		||||
            }
 | 
			
		||||
            break;
 | 
			
		||||
        case KC_COPY:
 | 
			
		||||
            if (record->event.pressed) {
 | 
			
		||||
                register_mods(mod_config(MOD_LCTL));
 | 
			
		||||
                register_code(KC_C);
 | 
			
		||||
            } else {
 | 
			
		||||
                unregister_mods(mod_config(MOD_LCTL));
 | 
			
		||||
                unregister_code(KC_C);
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
        case KC_PASTE:
 | 
			
		||||
            if (record->event.pressed) {
 | 
			
		||||
                register_mods(mod_config(MOD_LCTL));
 | 
			
		||||
                register_code(KC_V);
 | 
			
		||||
            } else {
 | 
			
		||||
                unregister_mods(mod_config(MOD_LCTL));
 | 
			
		||||
                unregister_code(KC_V);
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
        case KC_CUT:
 | 
			
		||||
            if (record->event.pressed) {
 | 
			
		||||
                register_mods(mod_config(MOD_LCTL));
 | 
			
		||||
                register_code(KC_X);
 | 
			
		||||
            } else {
 | 
			
		||||
                unregister_mods(mod_config(MOD_LCTL));
 | 
			
		||||
                unregister_code(KC_X);
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
            break;
 | 
			
		||||
        case KC_UNDO:
 | 
			
		||||
            if (record->event.pressed) {
 | 
			
		||||
                register_mods(mod_config(MOD_LCTL));
 | 
			
		||||
                register_code(KC_Z);
 | 
			
		||||
            } else {
 | 
			
		||||
                unregister_mods(mod_config(MOD_LCTL));
 | 
			
		||||
                unregister_code(KC_Z);
 | 
			
		||||
            }
 | 
			
		||||
            return false;
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#ifdef ENCODER_ENABLE
 | 
			
		||||
 | 
			
		||||
bool encoder_update_user(uint8_t index, bool clockwise) {
 | 
			
		||||
    if (index == 0) {
 | 
			
		||||
        if (clockwise) {
 | 
			
		||||
            tap_code(KC_VOLU);
 | 
			
		||||
        } else {
 | 
			
		||||
            tap_code(KC_VOLD);
 | 
			
		||||
        }
 | 
			
		||||
    } else if (index == 1) {
 | 
			
		||||
        if (clockwise) {
 | 
			
		||||
            tap_code(KC_PGDN);
 | 
			
		||||
        } else {
 | 
			
		||||
            tap_code(KC_PGUP);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,12 +1,10 @@
 | 
			
		|||

 | 
			
		||||

 | 
			
		||||
 | 
			
		||||

 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
# Default keymap for Sofle Keyboard
 | 
			
		||||
 | 
			
		||||
Layout in [Keyboard Layout Editor](http://www.keyboard-layout-editor.com/#/gists/76efb423a46cbbea75465cb468eef7ff) and [adjust layer](http://www.keyboard-layout-editor.com/#/gists/4bcf66f922cfd54da20ba04905d56bd4)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Features:
 | 
			
		||||
 | 
			
		||||
- Symmetric modifiers (CMD/Super, Alt/Opt, Ctrl, Shift)
 | 
			
		||||
| 
						 | 
				
			
			@ -15,5 +13,3 @@ Features:
 | 
			
		|||
- Modes for Mac vs Linux/Win support -> different order of modifiers and different action shortcuts on the "UPPER" layer (the red one in the image). Designed to simplify transtions when switching between operating systems often.
 | 
			
		||||
- The OLED on master half shows selected mode and caps lock state and is rotated.
 | 
			
		||||
- Left encoder controls volume up/down/mute. Right encoder PGUP/PGDOWN.
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,5 +1 @@
 | 
			
		|||
 | 
			
		||||
OLED_ENABLE = yes
 | 
			
		||||
ENCODER_ENABLE = yes
 | 
			
		||||
CONSOLE_ENABLE = no
 | 
			
		||||
EXTRAKEY_ENABLE = yes
 | 
			
		||||
TRI_LAYER_ENABLE = yes
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,50 +0,0 @@
 | 
			
		|||
/* Copyright 2020 Josef Adamcik
 | 
			
		||||
 * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang
 | 
			
		||||
 *
 | 
			
		||||
 * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
 * it under the terms of the GNU General Public License as published by
 | 
			
		||||
 * the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
 * (at your option) any later version.
 | 
			
		||||
 *
 | 
			
		||||
 * This program is distributed in the hope that it will be useful,
 | 
			
		||||
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
 * GNU General Public License for more details.
 | 
			
		||||
 *
 | 
			
		||||
 * You should have received a copy of the GNU General Public License
 | 
			
		||||
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
/* By default left side is selected as master, 
 | 
			
		||||
see https://docs.qmk.fm/#/feature_split_keyboard?id=setting-handedness
 | 
			
		||||
for more options. */
 | 
			
		||||
 | 
			
		||||
#if defined(KEYBOARD_sofle_rev1)
 | 
			
		||||
// Add RGB underglow and top facing lighting
 | 
			
		||||
#    define WS2812_DI_PIN D3
 | 
			
		||||
#    define RGBLIGHT_LED_COUNT 72
 | 
			
		||||
#    define RGBLED_SPLIT \
 | 
			
		||||
        { 36, 36 }
 | 
			
		||||
#    ifdef RGB_MATRIX_ENABLE
 | 
			
		||||
#        define RGB_MATRIX_LED_COUNT RGBLIGHT_LED_COUNT
 | 
			
		||||
#        define RGB_MATRIX_SPLIT RGBLED_SPLIT
 | 
			
		||||
#        define SPLIT_TRANSPORT_MIRROR
 | 
			
		||||
#    else
 | 
			
		||||
#        define RGBLIGHT_EFFECT_BREATHING
 | 
			
		||||
#        define RGBLIGHT_EFFECT_RAINBOW_MOOD
 | 
			
		||||
#        define RGBLIGHT_EFFECT_RAINBOW_SWIRL
 | 
			
		||||
#        define RGBLIGHT_EFFECT_SNAKE
 | 
			
		||||
#        define RGBLIGHT_EFFECT_KNIGHT
 | 
			
		||||
#        define RGBLIGHT_EFFECT_CHRISTMAS
 | 
			
		||||
#        define RGBLIGHT_EFFECT_STATIC_GRADIENT
 | 
			
		||||
#        define RGBLIGHT_EFFECT_RGB_TEST
 | 
			
		||||
#        define RGBLIGHT_EFFECT_ALTERNATING
 | 
			
		||||
#        define RGBLIGHT_EFFECT_TWINKLE
 | 
			
		||||
#        define RGBLIGHT_LIMIT_VAL 120
 | 
			
		||||
#        define RGBLIGHT_HUE_STEP 10
 | 
			
		||||
#        define RGBLIGHT_SAT_STEP 17
 | 
			
		||||
#        define RGBLIGHT_VAL_STEP 17
 | 
			
		||||
#    endif
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,22 +1,21 @@
 | 
			
		|||
 /* Copyright 2020 Josef Adamcik
 | 
			
		||||
  * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang
 | 
			
		||||
  * 
 | 
			
		||||
  * This program is free software: you can redistribute it and/or modify 
 | 
			
		||||
  * it under the terms of the GNU General Public License as published by 
 | 
			
		||||
  * the Free Software Foundation, either version 2 of the License, or 
 | 
			
		||||
  * (at your option) any later version. 
 | 
			
		||||
  * 
 | 
			
		||||
  * This program is distributed in the hope that it will be useful, 
 | 
			
		||||
  * but WITHOUT ANY WARRANTY; without even the implied warranty of 
 | 
			
		||||
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
 | 
			
		||||
  * GNU General Public License for more details. 
 | 
			
		||||
  * 
 | 
			
		||||
  * You should have received a copy of the GNU General Public License 
 | 
			
		||||
  * along with this program.  If not, see <http://www.gnu.org/licenses/>. 
 | 
			
		||||
  */ 
 | 
			
		||||
  *
 | 
			
		||||
  * 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 "oled.c"
 | 
			
		||||
 | 
			
		||||
#ifdef ENCODER_MAP_ENABLE
 | 
			
		||||
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,85 +0,0 @@
 | 
			
		|||
 /* Copyright 2020 Josef Adamcik
 | 
			
		||||
  * Modification for VIA support and RGB underglow by Jens Bonk-Wiltfang
 | 
			
		||||
  *
 | 
			
		||||
  * This program is free software: you can redistribute it and/or modify
 | 
			
		||||
  * it under the terms of the GNU General Public License as published by
 | 
			
		||||
  * the Free Software Foundation, either version 2 of the License, or
 | 
			
		||||
  * (at your option) any later version.
 | 
			
		||||
  *
 | 
			
		||||
  * This program is distributed in the hope that it will be useful,
 | 
			
		||||
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
			
		||||
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
			
		||||
  * GNU General Public License for more details.
 | 
			
		||||
  *
 | 
			
		||||
  * You should have received a copy of the GNU General Public License
 | 
			
		||||
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 | 
			
		||||
  */
 | 
			
		||||
 | 
			
		||||
//Sets up what the OLED screens display.
 | 
			
		||||
 | 
			
		||||
#ifdef OLED_ENABLE
 | 
			
		||||
 | 
			
		||||
static void render_logo(void) {
 | 
			
		||||
    static const char PROGMEM qmk_logo[] = {
 | 
			
		||||
        0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
 | 
			
		||||
        0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
 | 
			
		||||
        0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    oled_write_P(qmk_logo, false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void print_status_narrow(void) {
 | 
			
		||||
    // Print current mode
 | 
			
		||||
    oled_write_P(PSTR("\n\n"), false);
 | 
			
		||||
 | 
			
		||||
    switch (get_highest_layer(layer_state)) {
 | 
			
		||||
        case 0:
 | 
			
		||||
            oled_write_ln_P(PSTR("Qwrt"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        case 1:
 | 
			
		||||
            oled_write_ln_P(PSTR("Clmk"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            oled_write_P(PSTR("Mod\n"), false);
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
    oled_write_P(PSTR("\n\n"), false);
 | 
			
		||||
    // Print current layer
 | 
			
		||||
    oled_write_ln_P(PSTR("LAYER"), false);
 | 
			
		||||
    switch (get_highest_layer(layer_state)) {
 | 
			
		||||
        case 0:
 | 
			
		||||
        case 1:
 | 
			
		||||
            oled_write_P(PSTR("Base\n"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        case 2:
 | 
			
		||||
            oled_write_P(PSTR("Raise"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        case 3:
 | 
			
		||||
            oled_write_P(PSTR("Lower"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            oled_write_ln_P(PSTR("Undef"), false);
 | 
			
		||||
    }
 | 
			
		||||
    oled_write_P(PSTR("\n\n"), false);
 | 
			
		||||
    led_t led_usb_state = host_keyboard_led_state();
 | 
			
		||||
    oled_write_ln_P(PSTR("CPSLK"), led_usb_state.caps_lock);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
 | 
			
		||||
    if (is_keyboard_master()) {
 | 
			
		||||
        return OLED_ROTATION_270;
 | 
			
		||||
    }
 | 
			
		||||
    return rotation;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool oled_task_user(void) {
 | 
			
		||||
    if (is_keyboard_master()) {
 | 
			
		||||
        print_status_narrow();
 | 
			
		||||
    } else {
 | 
			
		||||
        render_logo();
 | 
			
		||||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -2,7 +2,6 @@
 | 
			
		|||
 | 
			
		||||
Layout in [Keyboard Layout Editor](http://www.keyboard-layout-editor.com/#/gists/76efb423a46cbbea75465cb468eef7ff) and [adjust layer](http://www.keyboard-layout-editor.com/#/gists/4bcf66f922cfd54da20ba04905d56bd4)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Features:
 | 
			
		||||
 | 
			
		||||
- Symmetric modifiers (CMD/Super, Alt/Opt, Ctrl, Shift)
 | 
			
		||||
| 
						 | 
				
			
			@ -11,4 +10,3 @@ Features:
 | 
			
		|||
- Left encoder controls volume up/down/mute. Right encoder PGUP/PGDOWN.
 | 
			
		||||
- Via support
 | 
			
		||||
- RGB underglow support
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,8 +1,3 @@
 | 
			
		|||
OLED_ENABLE = yes
 | 
			
		||||
ENCODER_ENABLE = yes
 | 
			
		||||
CONSOLE_ENABLE = no
 | 
			
		||||
EXTRAKEY_ENABLE = yes
 | 
			
		||||
VIA_ENABLE = yes
 | 
			
		||||
LTO_ENABLE = yes
 | 
			
		||||
RGBLIGHT_ENABLE = yes
 | 
			
		||||
RGB_MATRIX_ENABLE = yes
 | 
			
		||||
ENCODER_MAP_ENABLE = yes
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
# Sofle Keyboard
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
Sofle is 6×4+5 keys column-staggered split keyboard. Based on Lily58, Corne and Helix keyboards.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,10 +1,9 @@
 | 
			
		|||
{
 | 
			
		||||
    "keyboard_name": "Sofle",
 | 
			
		||||
    "manufacturer": "JosefAdamcik",
 | 
			
		||||
    "url": "https://github.com/josefadamcik/SofleKeyboard",
 | 
			
		||||
    "maintainer": "Josef Adamcik <josef.adamcik@gmail.com>",
 | 
			
		||||
    "development_board": "promicro",
 | 
			
		||||
    "usb": {
 | 
			
		||||
        "vid": "0xFC32",
 | 
			
		||||
        "pid": "0x0287",
 | 
			
		||||
        "device_version": "0.0.1"
 | 
			
		||||
    },
 | 
			
		||||
| 
						 | 
				
			
			@ -12,14 +11,12 @@
 | 
			
		|||
        "cols": ["F6", "F7", "B1", "B3", "B2", "B6"],
 | 
			
		||||
        "rows": ["C6", "D7", "E6", "B4", "B5"]
 | 
			
		||||
    },
 | 
			
		||||
    "diode_direction": "COL2ROW",
 | 
			
		||||
    "encoder": {
 | 
			
		||||
        "rotary": [
 | 
			
		||||
            {"pin_a": "F5", "pin_b": "F4", "resolution": 2}
 | 
			
		||||
        ]
 | 
			
		||||
    },
 | 
			
		||||
    "split": {
 | 
			
		||||
        "soft_serial_pin": "D2",
 | 
			
		||||
        "encoder": {
 | 
			
		||||
            "right": {
 | 
			
		||||
                "rotary": [
 | 
			
		||||
| 
						 | 
				
			
			@ -28,14 +25,6 @@
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
    "tapping": {
 | 
			
		||||
        "term": 100
 | 
			
		||||
    },
 | 
			
		||||
    "qmk": {
 | 
			
		||||
        "tap_keycode_delay": 10
 | 
			
		||||
    },
 | 
			
		||||
    "processor": "atmega32u4",
 | 
			
		||||
    "bootloader": "caterina",
 | 
			
		||||
    "layouts": {
 | 
			
		||||
        "LAYOUT": {
 | 
			
		||||
            "layout": [
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
# Sofle Keyboard
 | 
			
		||||
 | 
			
		||||

 | 
			
		||||

 | 
			
		||||
 | 
			
		||||
Sofle is 6×4+5 keys column-staggered split keyboard. Based on Lily58, Corne and Helix keyboards.
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,87 +0,0 @@
 | 
			
		|||
/* Copyright 2021 Carlos Martins
 | 
			
		||||
 *
 | 
			
		||||
 * 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 "quantum.h"
 | 
			
		||||
 | 
			
		||||
#ifdef RGB_MATRIX_ENABLE
 | 
			
		||||
  // Physical Layout
 | 
			
		||||
  // Columns
 | 
			
		||||
  // 0  1  2  3  4  5  6  7  8  9  10 11 12 13
 | 
			
		||||
  //                                           ROWS
 | 
			
		||||
  // 12 13 22 23 32 33       33 32 23 22 13 12  0
 | 
			
		||||
  //    02    03    04       04    03    02
 | 
			
		||||
  // 11 14 21 24 31 34       34 31 24 21 14 11  1
 | 
			
		||||
  //                01       01
 | 
			
		||||
  // 10 15 20 25 30 35       35 30 25 20 15 10  2
 | 
			
		||||
  //
 | 
			
		||||
  // 09 16 19 26 29 36       36 29 26 19 16 09  3
 | 
			
		||||
  //
 | 
			
		||||
  //     08 17 18 27 28     28 27 18 17 08      4
 | 
			
		||||
  //    07    06    05       05    06    07
 | 
			
		||||
 | 
			
		||||
led_config_t g_led_config = {
 | 
			
		||||
    {
 | 
			
		||||
        {  11,  12,  21,  22,  31,  32 },
 | 
			
		||||
        {  10,  13,  20,  23,  30,  33 },
 | 
			
		||||
        {  9,   14,  19,  24,  29,  34},
 | 
			
		||||
        {  8,   15,  18,  25,  28,  35},
 | 
			
		||||
        {  7,   16,  17,  26,  27,  NO_LED },
 | 
			
		||||
        {  47,  48,  57,  58,  67,  68},
 | 
			
		||||
        {  46,  49,  56,  59,  66,  69},
 | 
			
		||||
        {  45,  50,  55,  60,  65,  70},
 | 
			
		||||
        {  44,  51,  54,  61,  64,  71},
 | 
			
		||||
        {  43,  52,  53,  62,  63,  NO_LED }
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
       // Left side underglow
 | 
			
		||||
        {96, 40}, {16, 20}, {48, 10}, {80, 18}, {88, 60}, {56, 57}, {24,60},
 | 
			
		||||
        // Left side Matrix
 | 
			
		||||
        {32, 57}, { 0, 48}, { 0, 36}, { 0, 24}, { 0, 12},
 | 
			
		||||
        {16, 12}, {16, 24}, {16, 36}, {16, 48}, {48, 55},
 | 
			
		||||
        {64, 57}, {32, 45}, {32, 33}, {32, 21}, {32,  9},
 | 
			
		||||
        {48,  7}, {48, 19}, {48, 31}, {48, 43}, {80, 59},
 | 
			
		||||
        {96, 64}, {64, 45}, {64, 33}, {64, 21}, {64,  9},
 | 
			
		||||
        {80, 10}, {80, 22}, {80, 34}, {80, 47},
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // Right side underglow
 | 
			
		||||
        {128, 40}, {208, 20}, {176, 10}, {144, 18}, {136, 60}, {168, 57}, {200,60},
 | 
			
		||||
        // Right side Matrix
 | 
			
		||||
        {192, 57}, {224, 48}, {224, 36}, {224, 24}, {224, 12},
 | 
			
		||||
        {208, 12}, {208, 24}, {208, 36}, {208, 48}, {176, 55},
 | 
			
		||||
        {160, 57}, {192, 45}, {192, 33}, {192, 21}, {192,  9},
 | 
			
		||||
        {176,  7}, {176, 19}, {176, 31}, {176, 43}, {144, 59},
 | 
			
		||||
        {128, 64}, {160, 45}, {160, 33}, {160, 21}, {160,  9},
 | 
			
		||||
        {144, 10}, {144, 22}, {144, 34}, {144, 47},
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        LED_FLAG_INDICATOR, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW,
 | 
			
		||||
        LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
 | 
			
		||||
        LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
 | 
			
		||||
        LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
 | 
			
		||||
        LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
 | 
			
		||||
        LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
 | 
			
		||||
        LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
 | 
			
		||||
        LED_FLAG_INDICATOR, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW, LED_FLAG_UNDERGLOW,
 | 
			
		||||
        LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
 | 
			
		||||
        LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
 | 
			
		||||
        LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
 | 
			
		||||
        LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
 | 
			
		||||
        LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT,
 | 
			
		||||
        LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT, LED_FLAG_KEYLIGHT
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -1,2 +1 @@
 | 
			
		|||
ENCODER_ENABLE = yes
 | 
			
		||||
OLED_ENABLE = yes
 | 
			
		||||
# This file intentionally left blank
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1 @@
 | 
			
		|||
SPLIT_KEYBOARD = yes
 | 
			
		||||
DEFAULT_FOLDER = sofle/rev1
 | 
			
		||||
SWAP_HANDS_ENABLE = yes
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,5 @@
 | 
			
		|||
// Copyright 2023 QMK
 | 
			
		||||
// SPDX-License-Identifier: GPL-2.0-or-later
 | 
			
		||||
#include "quantum.h"
 | 
			
		||||
 | 
			
		||||
#ifdef SWAP_HANDS_ENABLE
 | 
			
		||||
| 
						 | 
				
			
			@ -44,3 +46,90 @@ const uint8_t PROGMEM encoder_hand_swap_config[NUM_ENCODERS] = {1, 0};
 | 
			
		|||
#    endif
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef OLED_ENABLE
 | 
			
		||||
oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
 | 
			
		||||
    if (is_keyboard_master()) {
 | 
			
		||||
        return OLED_ROTATION_270;
 | 
			
		||||
    }
 | 
			
		||||
    return rotation;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static void render_logo(void) {
 | 
			
		||||
    static const char PROGMEM qmk_logo[] = {
 | 
			
		||||
        0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,0x90,0x91,0x92,0x93,0x94,
 | 
			
		||||
        0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,0xb0,0xb1,0xb2,0xb3,0xb4,
 | 
			
		||||
        0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,0xd0,0xd1,0xd2,0xd3,0xd4,0
 | 
			
		||||
    };
 | 
			
		||||
    oled_write_P(qmk_logo, false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void print_status_narrow(void) {
 | 
			
		||||
    oled_write_P(PSTR("\n\n"), false);
 | 
			
		||||
    switch (get_highest_layer(layer_state)) {
 | 
			
		||||
        case 0:
 | 
			
		||||
            oled_write_ln_P(PSTR("Qwrt"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        case 1:
 | 
			
		||||
            oled_write_ln_P(PSTR("Clmk"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            oled_write_P(PSTR("Mod\n"), false);
 | 
			
		||||
            break;
 | 
			
		||||
    }
 | 
			
		||||
    oled_write_P(PSTR("\n\n"), false);
 | 
			
		||||
    oled_write_ln_P(PSTR("LAYER"), false);
 | 
			
		||||
    switch (get_highest_layer(layer_state)) {
 | 
			
		||||
        case 0:
 | 
			
		||||
        case 1:
 | 
			
		||||
            oled_write_P(PSTR("Base\n"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        case 2:
 | 
			
		||||
            oled_write_P(PSTR("Raise"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        case 3:
 | 
			
		||||
            oled_write_P(PSTR("Lower"), false);
 | 
			
		||||
            break;
 | 
			
		||||
        default:
 | 
			
		||||
            oled_write_ln_P(PSTR("Undef"), false);
 | 
			
		||||
    }
 | 
			
		||||
    oled_write_P(PSTR("\n\n"), false);
 | 
			
		||||
    led_t led_usb_state = host_keyboard_led_state();
 | 
			
		||||
    oled_write_ln_P(PSTR("CPSLK"), led_usb_state.caps_lock);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool oled_task_kb(void) {
 | 
			
		||||
    if (!oled_task_user()) {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    if (is_keyboard_master()) {
 | 
			
		||||
        print_status_narrow();
 | 
			
		||||
    } else {
 | 
			
		||||
        render_logo();
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#ifdef ENCODER_ENABLE
 | 
			
		||||
bool encoder_update_kb(uint8_t index, bool clockwise) {
 | 
			
		||||
    if (!encoder_update_user(index, clockwise)) {
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    if (index == 0) {
 | 
			
		||||
        if (clockwise) {
 | 
			
		||||
            tap_code(KC_VOLU);
 | 
			
		||||
        } else {
 | 
			
		||||
            tap_code(KC_VOLD);
 | 
			
		||||
        }
 | 
			
		||||
    } else if (index == 1) {
 | 
			
		||||
        if (clockwise) {
 | 
			
		||||
            tap_code(KC_PGDN);
 | 
			
		||||
        } else {
 | 
			
		||||
            tap_code(KC_PGUP);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return true;
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue