Compare commits

...

17 Commits

Author SHA1 Message Date
Lefuneste83
b5c91c0848
Merge 61a4496a6f into 9bea332a21 2024-11-20 22:22:14 -08:00
Ryan
9bea332a21
qmk via2json: Improve macro parsing (#24345) 2024-11-21 17:20:05 +11:00
Ryan
8cbcdcac62
qmk new-keymap: validate keymap name (#23420) 2024-11-21 17:18:51 +11:00
Lefuneste83
61a4496a6f Change review #9 2024-09-10 21:16:47 +02:00
Lefuneste83
1ad31f9423 Change review #8 2024-09-10 19:24:42 +02:00
Lefuneste83
b0459efd20 Change review #7 2024-09-10 19:18:55 +02:00
Lefuneste83
b4cc867f28 modifié : keyboards/electronlab/klor/config.h
modifié :         keyboards/electronlab/klor/keymaps/electronlab/keymap.c
	renommé :         keyboards/electronlab/klor/glcdfont.c -> keyboards/electronlab/klor/lib/glcdfont.c
2024-09-10 14:43:48 +02:00
Lefuneste83
961b092ad6 modifié : keyboards/electronlab/klor/keyboard.json 2024-09-09 10:50:07 +02:00
Lefuneste83
9f1307f7d6 modifié : keyboards/electronlab/klor/config.h
modifié :         keyboards/electronlab/klor/keyboard.json
	modifié :         keyboards/electronlab/klor/keymaps/default/config.h
	modifié :         keyboards/electronlab/klor/keymaps/default/keymap.c
	supprimé :        keyboards/electronlab/klor/keymaps/default/rules.mk
	modifié :         keyboards/electronlab/klor/keymaps/electronlab/config.h
	modifié :         keyboards/electronlab/klor/keymaps/electronlab/keymap.c
	modifié :         keyboards/electronlab/klor/keymaps/electronlab/rules.mk
2024-09-09 10:27:09 +02:00
Lefuneste83
3ea84b53c2 Change review #3 2024-09-08 09:36:07 +02:00
Lefuneste83
0a043942b0 Change review #2 2024-09-08 01:18:03 +02:00
Lefuneste83
d360b52db2 Change review #1 2024-09-08 00:24:46 +02:00
Lefuneste83
c0d4c826a3 Configuration files for Electronlab build KLOR keyboards 2024-09-07 17:39:23 +02:00
Lefuneste83
f5144df767 Configuration files for Electronlab build KLOR keyboards 2024-09-07 16:45:07 +02:00
Lefuneste83
e3967ceba7 Configuration files for Electronlab build KLOR keyboards 2024-09-07 16:36:43 +02:00
Lefuneste83
311eca153a supprimé : electronlab/klor/config.h
supprimé :        electronlab/klor/halconf.h
	supprimé :        electronlab/klor/keyboard.json
	supprimé :        electronlab/klor/keymaps/default/config.h
	supprimé :        electronlab/klor/keymaps/default/keymap.c
	supprimé :        electronlab/klor/keymaps/default/rules.mk
	supprimé :        electronlab/klor/klor.c
	supprimé :        electronlab/klor/klor.h
	supprimé :        electronlab/klor/lib/glcdfont.c
	supprimé :        electronlab/klor/lib/klorimation.h
	supprimé :        electronlab/klor/lib/klounds.h
	supprimé :        electronlab/klor/mcuconf.h
	supprimé :        electronlab/klor/readme.md
	supprimé :        electronlab/klor/rules.mk
2024-09-07 16:15:06 +02:00
Lefuneste83
ae949e7937 nouveau fichier : electronlab/klor/config.h
nouveau fichier : electronlab/klor/halconf.h
	nouveau fichier : electronlab/klor/keyboard.json
	nouveau fichier : electronlab/klor/keymaps/default/config.h
	nouveau fichier : electronlab/klor/keymaps/default/keymap.c
	nouveau fichier : electronlab/klor/keymaps/default/rules.mk
	nouveau fichier : electronlab/klor/klor.c
	nouveau fichier : electronlab/klor/klor.h
	nouveau fichier : electronlab/klor/lib/glcdfont.c
	nouveau fichier : electronlab/klor/lib/klorimation.h
	nouveau fichier : electronlab/klor/lib/klounds.h
	nouveau fichier : electronlab/klor/mcuconf.h
	nouveau fichier : electronlab/klor/readme.md
	nouveau fichier : electronlab/klor/rules.mk
2024-09-07 16:09:35 +02:00
14 changed files with 1386 additions and 9 deletions

View File

@ -0,0 +1,59 @@
/*
Copyright 2024 ElectronLab
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 I2C1_SCL_PIN GP3
#define I2C1_SDA_PIN GP2
#ifdef OLED_ENABLE
# define OLED_DISPLAY_128X64
# define SPLIT_OLED_ENABLE
# define OLED_FONT_H "./lib/glcdfont.c"
#endif
#ifdef AUDIO_ENABLE
#define AUDIO_PWM_DRIVER PWMD4
#define AUDIO_PWM_CHANNEL RP2040_PWM_CHANNEL_B
#define AUDIO_STATE_TIMER GPTD4
#define AUDIO_PIN GP9
#define AUDIO_DAC_SAMPLE_MAX 4095U
#define AUDIO_VOICE_DEFAULT butts_fader
# define STARTUP_SONG SONG(W__NOTE(_DS0), W__NOTE(_DS1), H__NOTE(_DS2), H__NOTE(_DS3), Q__NOTE(_DS4), Q__NOTE(_DS5), E__NOTE(_DS6), E__NOTE(_DS7), S__NOTE(_DS8), Q__NOTE(_GS0))
# define GOODBYE_SONG SONG(H__NOTE(_DS4), H__NOTE(_DS3), W__NOTE(_DS1))
# define DEFAULT_LAYER_SONGS \
{ SONG(QWERTY_SOUND), SONG(COLEMAK_SOUND) }
#endif
#ifdef HAPTIC_ENABLE
#define DRV2605L_FB_ERM_LRA 1
#define DRV2605L_FB_BRAKEFACTOR 3
#define DRV2605L_FB_LOOPGAIN 1
#define DRV2605L_RATED_VOLTAGE 2
#define DRV2605L_V_PEAK 2.8
#define DRV2605L_V_RMS 2.0
#define DRV2605L_F_LRA 150
#define DRV2605L_DRV_GREETING alert_750ms
#define DRV2605L_DEFAULT_MODE 4
#endif
#ifdef POINTING_DEVICE_ENABLE
# define POINTING_DEVICE_SCLK_PIN GP3
# define POINTING_DEVICE_SDIO_PIN GP2
# define POINTING_DEVICE_AUTO_MOUSE_ENABLE
# define AUTO_MOUSE_DELAY 300
#endif

View File

@ -0,0 +1,11 @@
// Copyright 2022 QMK
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
#define HAL_USE_ADC TRUE
#define HAL_USE_I2C TRUE
#define HAL_USE_SPI TRUE
#define HAL_USE_PWM TRUE
#include_next <halconf.h>

View File

@ -0,0 +1,372 @@
{
"manufacturer": "ElectronLab",
"keyboard_name": "KLOR",
"maintainer": "Lefuneste83",
"bootmagic": {
"matrix": [0, 1]
},
"development_board": "elite_pi",
"diode_direction": "COL2ROW",
"encoder": {
"rotary": [
{"pin_a": "GP28", "pin_b": "GP29", "resolution": 2}
]
},
"features": {
"audio": true,
"bootmagic": true,
"encoder": true,
"extrakey": true,
"haptic": true,
"mousekey": true,
"oled": true,
"pointing_device": false,
"rgb_matrix": true
},
"audio": {
"default": {
"on": true,
"clicky": true
},
"driver": "pwm_hardware",
"voices": true
},
"haptic": {
"driver": "drv2605l"
},
"matrix_pins": {
"cols": ["GP27", "GP26", "GP22", "GP20", "GP23", "GP21"],
"rows": ["GP5", "GP6", "GP7", "GP8"]
},
"rgb_matrix": {
"animations": {
"alphas_mods": true,
"band_pinwheel_sat": true,
"band_pinwheel_val": true,
"band_sat": true,
"band_spiral_sat": true,
"band_spiral_val": true,
"band_val": true,
"breathing": true,
"cycle_all": true,
"cycle_left_right": true,
"cycle_out_in": true,
"cycle_out_in_dual": true,
"cycle_pinwheel": true,
"cycle_spiral": true,
"cycle_up_down": true,
"digital_rain": true,
"dual_beacon": true,
"flower_blooming": true,
"gradient_left_right": true,
"gradient_up_down": true,
"hue_breathing": true,
"hue_pendulum": true,
"hue_wave": true,
"jellybean_raindrops": true,
"multisplash": true,
"pixel_flow": true,
"pixel_fractal": true,
"pixel_rain": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"rainbow_pinwheels": true,
"raindrops": true,
"riverflow": true,
"solid_multisplash": true,
"solid_reactive": true,
"solid_reactive_cross": true,
"solid_reactive_multicross": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_nexus": true,
"solid_reactive_simple": true,
"solid_reactive_wide": true,
"solid_splash": true,
"splash": true,
"starlight": true,
"starlight_dual_hue": true,
"starlight_dual_sat": true,
"typing_heatmap": true
},
"default": {
"animation": "breathing",
"on": true,
"hue": 128
},
"driver": "ws2812",
"layout": [
{"matrix": [0, 1], "x": 13, "y": 17, "flags": 4},
{"matrix": [0, 2], "x": 29, "y": 7, "flags": 4},
{"matrix": [0, 3], "x": 46, "y": 0, "flags": 4},
{"matrix": [0, 4], "x": 60, "y": 6, "flags": 4},
{"matrix": [0, 5], "x": 75, "y": 8, "flags": 4},
{"matrix": [4, 5], "x": 149, "y": 8, "flags": 4},
{"matrix": [4, 4], "x": 163, "y": 6, "flags": 4},
{"matrix": [4, 3], "x": 178, "y": 0, "flags": 4},
{"matrix": [4, 2], "x": 195, "y": 7, "flags": 4},
{"matrix": [4, 1], "x": 206, "y": 42, "flags": 4},
{"matrix": [1, 0], "x": 0, "y": 28, "flags": 1},
{"matrix": [1, 1], "x": 15, "y": 30, "flags": 4},
{"matrix": [1, 2], "x": 30, "y": 20, "flags": 4},
{"matrix": [1, 3], "x": 46, "y": 12, "flags": 4},
{"matrix": [1, 4], "x": 60, "y": 19, "flags": 4},
{"matrix": [1, 5], "x": 75, "y": 21, "flags": 4},
{"matrix": [5, 5], "x": 149, "y": 21, "flags": 4},
{"matrix": [5, 4], "x": 163, "y": 19, "flags": 4},
{"matrix": [5, 3], "x": 178, "y": 12, "flags": 4},
{"matrix": [5, 2], "x": 194, "y": 20, "flags": 4},
{"matrix": [5, 1], "x": 209, "y": 30, "flags": 4},
{"matrix": [5, 0], "x": 224, "y": 28, "flags": 1},
{"matrix": [2, 0], "x": 3, "y": 41, "flags": 1},
{"matrix": [2, 1], "x": 17, "y": 42, "flags": 4},
{"matrix": [2, 2], "x": 31, "y": 33, "flags": 4},
{"matrix": [2, 3], "x": 46, "y": 25, "flags": 4},
{"matrix": [2, 4], "x": 60, "y": 32, "flags": 4},
{"matrix": [2, 5], "x": 75, "y": 34, "flags": 4},
{"matrix": [6, 5], "x": 149, "y": 34, "flags": 4},
{"matrix": [6, 4], "x": 163, "y": 32, "flags": 4},
{"matrix": [6, 3], "x": 178, "y": 25, "flags": 4},
{"matrix": [6, 2], "x": 193, "y": 33, "flags": 4},
{"matrix": [6, 1], "x": 211, "y": 17, "flags": 4},
{"matrix": [6, 0], "x": 221, "y": 41, "flags": 1},
{"matrix": [3, 1], "x": 58, "y": 48, "flags": 1},
{"matrix": [3, 2], "x": 74, "y": 49, "flags": 1},
{"matrix": [3, 3], "x": 89, "y": 54, "flags": 1},
{"matrix": [3, 4], "x": 102, "y": 63, "flags": 1},
{"matrix": [7, 4], "x": 122, "y": 63, "flags": 1},
{"matrix": [7, 3], "x": 135, "y": 54, "flags": 1},
{"matrix": [7, 2], "x": 150, "y": 49, "flags": 1},
{"matrix": [7, 1], "x": 166, "y": 48, "flags": 1}
],
"split_count": [21, 21],
"led_process_limit": 10,
"sleep": true,
"timeout": 120000,
"hue_steps": 3
},
"split": {
"enabled": true,
"bootmagic": {
"matrix": [4, 1]
},
"serial": {
"driver": "vendor",
"pin": "GP1"
},
"encoder": {
"right": {
"rotary": [
{"pin_a": "GP29", "pin_b": "GP28", "resolution": 2}
]
}
},
"transport": {
"sync": {
"activity": true,
"detected_os": true,
"haptic": true,
"indicators": true,
"layer_state": true,
"matrix_state": true,
"modifiers": true,
"oled": true
}
},
},
"url": "https://github.com/Lefuneste83/KLOR",
"usb": {
"device_version": "1.4.0",
"pid": "0x0001",
"vid": "0x3A3C"
},
"ws2812": {
"pin": "GP0",
"driver": "vendor"
},
"layout_aliases": {
"LAYOUT_all": "LAYOUT_polydactyl"
},
"layouts": {
"LAYOUT_polydactyl": {
"layout": [
{"label": "L01", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "L02", "matrix": [0, 2], "x": 2, "y": 0},
{"label": "L03", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "L04", "matrix": [0, 4], "x": 4, "y": 0},
{"label": "L05", "matrix": [0, 5], "x": 5, "y": 0},
{"label": "R01", "matrix": [4, 5], "x": 9, "y": 0},
{"label": "R02", "matrix": [4, 4], "x": 10, "y": 0},
{"label": "R03", "matrix": [4, 3], "x": 11, "y": 0},
{"label": "R04", "matrix": [4, 2], "x": 12, "y": 0},
{"label": "R05", "matrix": [4, 1], "x": 13, "y": 0},
{"label": "L10", "matrix": [1, 0], "x": 0, "y": 1},
{"label": "L11", "matrix": [1, 1], "x": 1, "y": 1},
{"label": "L12", "matrix": [1, 2], "x": 2, "y": 1},
{"label": "L13", "matrix": [1, 3], "x": 3, "y": 1},
{"label": "L14", "matrix": [1, 4], "x": 4, "y": 1},
{"label": "L15", "matrix": [1, 5], "x": 5, "y": 1},
{"label": "R10", "matrix": [5, 5], "x": 9, "y": 1},
{"label": "R11", "matrix": [5, 4], "x": 10, "y": 1},
{"label": "R12", "matrix": [5, 3], "x": 11, "y": 1},
{"label": "R13", "matrix": [5, 2], "x": 12, "y": 1},
{"label": "R14", "matrix": [5, 1], "x": 13, "y": 1},
{"label": "R15", "matrix": [5, 0], "x": 14, "y": 1},
{"label": "L20", "matrix": [2, 0], "x": 0, "y": 2},
{"label": "L21", "matrix": [2, 1], "x": 1, "y": 2},
{"label": "L22", "matrix": [2, 2], "x": 2, "y": 2},
{"label": "L23", "matrix": [2, 3], "x": 3, "y": 2},
{"label": "L24", "matrix": [2, 4], "x": 4, "y": 2},
{"label": "L25", "matrix": [2, 5], "x": 5, "y": 2},
{"label": "L35", "matrix": [3, 5], "x": 6, "y": 2},
{"label": "R30", "matrix": [7, 5], "x": 8, "y": 2},
{"label": "R20", "matrix": [6, 5], "x": 9, "y": 2},
{"label": "R21", "matrix": [6, 4], "x": 10, "y": 2},
{"label": "R22", "matrix": [6, 3], "x": 11, "y": 2},
{"label": "R23", "matrix": [6, 2], "x": 12, "y": 2},
{"label": "R24", "matrix": [6, 1], "x": 13, "y": 2},
{"label": "R25", "matrix": [6, 0], "x": 14, "y": 2},
{"label": "L31", "matrix": [3, 1], "x": 2, "y": 3},
{"label": "L32", "matrix": [3, 2], "x": 3, "y": 3},
{"label": "L33", "matrix": [3, 3], "x": 4, "y": 3},
{"label": "L34", "matrix": [3, 4], "x": 5, "y": 3},
{"label": "R31", "matrix": [7, 4], "x": 9, "y": 3},
{"label": "R32", "matrix": [7, 3], "x": 10, "y": 3},
{"label": "R33", "matrix": [7, 2], "x": 11, "y": 3},
{"label": "R34", "matrix": [7, 1], "x": 12, "y": 3}
]
},
"LAYOUT_konrad": {
"layout": [
{"label": "L01", "matrix": [0, 1], "x": 1, "y": 0},
{"label": "L02", "matrix": [0, 2], "x": 2, "y": 0},
{"label": "L03", "matrix": [0, 3], "x": 3, "y": 0},
{"label": "L04", "matrix": [0, 4], "x": 4, "y": 0},
{"label": "L05", "matrix": [0, 5], "x": 5, "y": 0},
{"label": "R01", "matrix": [4, 5], "x": 9, "y": 0},
{"label": "R02", "matrix": [4, 4], "x": 10, "y": 0},
{"label": "R03", "matrix": [4, 3], "x": 11, "y": 0},
{"label": "R04", "matrix": [4, 2], "x": 12, "y": 0},
{"label": "R05", "matrix": [4, 1], "x": 13, "y": 0},
{"label": "L10", "matrix": [1, 0], "x": 0, "y": 1},
{"label": "L11", "matrix": [1, 1], "x": 1, "y": 1},
{"label": "L12", "matrix": [1, 2], "x": 2, "y": 1},
{"label": "L13", "matrix": [1, 3], "x": 3, "y": 1},
{"label": "L14", "matrix": [1, 4], "x": 4, "y": 1},
{"label": "L15", "matrix": [1, 5], "x": 5, "y": 1},
{"label": "R10", "matrix": [5, 5], "x": 9, "y": 1},
{"label": "R11", "matrix": [5, 4], "x": 10, "y": 1},
{"label": "R12", "matrix": [5, 3], "x": 11, "y": 1},
{"label": "R13", "matrix": [5, 2], "x": 12, "y": 1},
{"label": "R14", "matrix": [5, 1], "x": 13, "y": 1},
{"label": "R15", "matrix": [5, 0], "x": 14, "y": 1},
{"label": "L20", "matrix": [2, 0], "x": 0, "y": 2},
{"label": "L21", "matrix": [2, 1], "x": 1, "y": 2},
{"label": "L22", "matrix": [2, 2], "x": 2, "y": 2},
{"label": "L23", "matrix": [2, 3], "x": 3, "y": 2},
{"label": "L24", "matrix": [2, 4], "x": 4, "y": 2},
{"label": "L25", "matrix": [2, 5], "x": 5, "y": 2},
{"label": "L35", "matrix": [3, 5], "x": 6, "y": 2},
{"label": "R30", "matrix": [7, 5], "x": 8, "y": 2},
{"label": "R20", "matrix": [6, 5], "x": 9, "y": 2},
{"label": "R21", "matrix": [6, 4], "x": 10, "y": 2},
{"label": "R22", "matrix": [6, 3], "x": 11, "y": 2},
{"label": "R23", "matrix": [6, 2], "x": 12, "y": 2},
{"label": "R24", "matrix": [6, 1], "x": 13, "y": 2},
{"label": "R25", "matrix": [6, 0], "x": 14, "y": 2},
{"label": "L31", "matrix": [3, 1], "x": 2, "y": 3},
{"label": "L32", "matrix": [3, 2], "x": 3, "y": 3},
{"label": "L33", "matrix": [3, 3], "x": 4, "y": 3},
{"label": "R32", "matrix": [7, 3], "x": 10, "y": 3},
{"label": "R33", "matrix": [7, 2], "x": 11, "y": 3},
{"label": "R34", "matrix": [7, 1], "x": 12, "y": 3}
]
},
"LAYOUT_saegewerk": {
"layout": [
{"label": "L01", "matrix": [0, 1], "x": 0, "y": 0},
{"label": "L02", "matrix": [0, 2], "x": 1, "y": 0},
{"label": "L03", "matrix": [0, 3], "x": 2, "y": 0},
{"label": "L04", "matrix": [0, 4], "x": 3, "y": 0},
{"label": "L05", "matrix": [0, 5], "x": 4, "y": 0},
{"label": "R01", "matrix": [4, 5], "x": 8, "y": 0},
{"label": "R02", "matrix": [4, 4], "x": 9, "y": 0},
{"label": "R03", "matrix": [4, 3], "x": 10, "y": 0},
{"label": "R04", "matrix": [4, 2], "x": 11, "y": 0},
{"label": "R05", "matrix": [4, 1], "x": 12, "y": 0},
{"label": "L11", "matrix": [1, 1], "x": 0, "y": 1},
{"label": "L12", "matrix": [1, 2], "x": 1, "y": 1},
{"label": "L13", "matrix": [1, 3], "x": 2, "y": 1},
{"label": "L14", "matrix": [1, 4], "x": 3, "y": 1},
{"label": "L15", "matrix": [1, 5], "x": 4, "y": 1},
{"label": "R10", "matrix": [5, 5], "x": 8, "y": 1},
{"label": "R11", "matrix": [5, 4], "x": 9, "y": 1},
{"label": "R12", "matrix": [5, 3], "x": 10, "y": 1},
{"label": "R13", "matrix": [5, 2], "x": 11, "y": 1},
{"label": "R14", "matrix": [5, 1], "x": 12, "y": 1},
{"label": "L21", "matrix": [2, 1], "x": 0, "y": 2},
{"label": "L22", "matrix": [2, 2], "x": 1, "y": 2},
{"label": "L23", "matrix": [2, 3], "x": 2, "y": 2},
{"label": "L24", "matrix": [2, 4], "x": 3, "y": 2},
{"label": "L25", "matrix": [2, 5], "x": 4, "y": 2},
{"label": "L35", "matrix": [3, 5], "x": 5, "y": 2},
{"label": "R30", "matrix": [7, 5], "x": 7, "y": 2},
{"label": "R20", "matrix": [6, 5], "x": 8, "y": 2},
{"label": "R21", "matrix": [6, 4], "x": 9, "y": 2},
{"label": "R22", "matrix": [6, 3], "x": 10, "y": 2},
{"label": "R23", "matrix": [6, 2], "x": 11, "y": 2},
{"label": "R24", "matrix": [6, 1], "x": 12, "y": 2},
{"label": "L31", "matrix": [3, 1], "x": 1, "y": 3},
{"label": "L32", "matrix": [3, 2], "x": 2, "y": 3},
{"label": "L33", "matrix": [3, 3], "x": 3, "y": 3},
{"label": "R32", "matrix": [7, 3], "x": 9, "y": 3},
{"label": "R33", "matrix": [7, 2], "x": 10, "y": 3},
{"label": "R34", "matrix": [7, 1], "x": 11, "y": 3}
]
},
"LAYOUT_yubitsume": {
"layout": [
{"label": "L01", "matrix": [0, 1], "x": 0, "y": 0},
{"label": "L02", "matrix": [0, 2], "x": 1, "y": 0},
{"label": "L03", "matrix": [0, 3], "x": 2, "y": 0},
{"label": "L04", "matrix": [0, 4], "x": 3, "y": 0},
{"label": "L05", "matrix": [0, 5], "x": 4, "y": 0},
{"label": "R01", "matrix": [4, 5], "x": 8, "y": 0},
{"label": "R02", "matrix": [4, 4], "x": 9, "y": 0},
{"label": "R03", "matrix": [4, 3], "x": 10, "y": 0},
{"label": "R04", "matrix": [4, 2], "x": 11, "y": 0},
{"label": "R05", "matrix": [4, 1], "x": 12, "y": 0},
{"label": "L11", "matrix": [1, 1], "x": 0, "y": 1},
{"label": "L12", "matrix": [1, 2], "x": 1, "y": 1},
{"label": "L13", "matrix": [1, 3], "x": 2, "y": 1},
{"label": "L14", "matrix": [1, 4], "x": 3, "y": 1},
{"label": "L15", "matrix": [1, 5], "x": 4, "y": 1},
{"label": "R10", "matrix": [5, 5], "x": 8, "y": 1},
{"label": "R11", "matrix": [5, 4], "x": 9, "y": 1},
{"label": "R12", "matrix": [5, 3], "x": 10, "y": 1},
{"label": "R13", "matrix": [5, 2], "x": 11, "y": 1},
{"label": "R14", "matrix": [5, 1], "x": 12, "y": 1},
{"label": "L21", "matrix": [2, 1], "x": 0, "y": 2},
{"label": "L22", "matrix": [2, 2], "x": 1, "y": 2},
{"label": "L23", "matrix": [2, 3], "x": 2, "y": 2},
{"label": "L24", "matrix": [2, 4], "x": 3, "y": 2},
{"label": "L25", "matrix": [2, 5], "x": 4, "y": 2},
{"label": "L35", "matrix": [3, 5], "x": 5, "y": 2},
{"label": "R30", "matrix": [7, 5], "x": 7, "y": 2},
{"label": "R20", "matrix": [6, 5], "x": 8, "y": 2},
{"label": "R21", "matrix": [6, 4], "x": 9, "y": 2},
{"label": "R22", "matrix": [6, 3], "x": 10, "y": 2},
{"label": "R23", "matrix": [6, 2], "x": 11, "y": 2},
{"label": "R24", "matrix": [6, 1], "x": 12, "y": 2},
{"label": "L31", "matrix": [3, 1], "x": 1, "y": 3},
{"label": "L32", "matrix": [3, 2], "x": 2, "y": 3},
{"label": "L33", "matrix": [3, 3], "x": 3, "y": 3},
{"label": "L34", "matrix": [3, 4], "x": 4, "y": 3},
{"label": "R31", "matrix": [7, 4], "x": 8, "y": 3},
{"label": "R32", "matrix": [7, 3], "x": 9, "y": 3},
{"label": "R33", "matrix": [7, 2], "x": 10, "y": 3},
{"label": "R34", "matrix": [7, 1], "x": 11, "y": 3}
]
}
}
}

View File

@ -0,0 +1,23 @@
/*
Copyright 2024 ElectronLab
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
// Auto Shift
#define NO_AUTO_SHIFT_ALPHA
#define AUTO_SHIFT_TIMEOUT QUICK_TAP_TERM
#define AUTO_SHIFT_NO_SETUP

View File

@ -0,0 +1,32 @@
/*
Copyright 2024 ElectronLab
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
enum klor_layers {
_QWERTY,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT_all(
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
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_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_MPLY, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS,
KC_LALT, XXXXXXX, KC_RALT, KC_SPC, KC_BSPC, KC_ENT, XXXXXXX, KC_DEL
),
};

View File

@ -0,0 +1,23 @@
/*
Copyright 2024 ElectronLab
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
// Auto Shift
#define NO_AUTO_SHIFT_ALPHA
#define AUTO_SHIFT_TIMEOUT TAPPING_TERM
#define AUTO_SHIFT_NO_SETUP

View File

@ -0,0 +1,460 @@
/*
Copyright 2024 ElectronLab
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
enum klor_layers {
_QWERTY,
_LOWER,
_RAISE,
_ADJUST,
};
enum custom_keycodes {
QWERTY = SAFE_RANGE,
LOWER,
RAISE,
ADJUST,
OS_SWAP,
MAKE_H,
};
#define GUI_A MT(MOD_LGUI, KC_A)
#define ALT_R MT(MOD_LALT, KC_R)
#define CTL_S MT(MOD_LCTL, KC_S)
#define SHT_T MT(MOD_LSFT, KC_T)
#define SHT_N MT(MOD_RSFT, KC_N)
#define CTL_E MT(MOD_LCTL, KC_E)
#define ALT_I MT(MOD_LALT, KC_I)
#define GUI_O MT(MOD_LGUI, KC_O)
#ifdef AUDIO_ENABLE
#define WINXP_SOUND W__NOTE(_DS6), Q__NOTE(_DS5), H__NOTE(_AS5), H__NOTE(_GS5), H__NOTE(_DS5), H__NOTE(_DS6), H__NOTE(_AS5)
#define MAC_SOUND S__NOTE(_CS5), B__NOTE(_C5)
float winxp_song[][2] = SONG(WINXP_SOUND);
float mac_song[][2] = SONG(MAC_SOUND);
#endif
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT_polydactyl(
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
LSFT_T(KC_TAB), KC_A, KC_S, KC_D, LSFT_T(KC_F),KC_G, KC_H, RSFT_T(KC_J), KC_K, KC_L, KC_SCLN, KC_QUOT,
KC_LCTL, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_MPLY, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_BSLS,
KC_LALT, LOWER, KC_RALT, KC_SPC, KC_BSPC, KC_ENT, RAISE, KC_DEL
),
[_LOWER] = LAYOUT_polydactyl(
KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
KC_MINS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_GRV, KC_TILD, KC_EQL, KC_PLUS,
KC_UNDS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MUTE, KC_MPLY, KC_6, KC_7, KC_8, KC_9, KC_0, KC_ASTR,
KC_TRNS, KC_TRNS, KC_TRNS, KC_LSFT, KC_RSFT, KC_TRNS, KC_TRNS, KC_TRNS
),
[_RAISE] = LAYOUT_polydactyl(
RGB_SPI, RGB_HUI, HF_NEXT, CK_UP, KC_LCBR, KC_RCBR, KC_LEFT, KC_UP, KC_RGHT, KC_HOME,
RGB_VAI, RGB_MOD, RGB_M_B, HF_TOGG, CK_TOGG, KC_LBRC, KC_RBRC, XXXXXXX, KC_DOWN, XXXXXXX, KC_PSCR, KC_PGUP,
RGB_VAD, RGB_SPD, RGB_HUD, HF_PREV, CK_DOWN, KC_LPRN, KC_MUTE, KC_MPLY, KC_RPRN, XXXXXXX, XXXXXXX, XXXXXXX, KC_END, KC_PGDN,
XXXXXXX, XXXXXXX, XXXXXXX, KC_LSFT, KC_RSFT, XXXXXXX, XXXXXXX, XXXXXXX
),
[_ADJUST] = LAYOUT_polydactyl(
AU_TOGG, HF_TOGG, RGB_HUI, RGB_MOD, XXXXXXX, XXXXXXX, KC_F7, KC_F8, KC_F9, KC_F14,
QK_BOOT, DB_TOGG, QWERTY, RGB_SAI, XXXXXXX, XXXXXXX, XXXXXXX, KC_F4, KC_F5, KC_F6, KC_F12, KC_F13,
MAKE_H, OS_SWAP, XXXXXXX, RGB_VAI, XXXXXXX, XXXXXXX, KC_MUTE, KC_MPLY, XXXXXXX, KC_F1, KC_F2, KC_F3, KC_F10, KC_F11,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
),
};
#ifdef OLED_ENABLE
char layer_state_str[24];
char o_text[24] = "";
int dmacro_num = 0;
#ifdef DYNAMIC_MACRO_ENABLE
char dmacro_text[4][24] = { "", "RECORDING", "STOP RECORDING", "PLAY RECORDING"};
static uint16_t dmacro_timer;
const char PROGMEM rec_ico[] = {0xD1, 0xE1, 0};
const char PROGMEM stop_ico[] = {0xD3, 0xE1, 0};
const char PROGMEM play_ico[] = {0xD2, 0xE1, 0};
bool dynamic_macro_record_start_user(int8_t direction) {
dmacro_num = 1;
return false;
}
bool dynamic_macro_record_end_user(int8_t direction) {
dmacro_num = 2;
dmacro_timer = timer_read();
return false;
}
bool dynamic_macro_play_user(int8_t direction) {
dmacro_num = 3;
dmacro_timer = timer_read();
return false;
}
#endif
void matrix_scan_user(void) {
#ifdef DYNAMIC_MACRO_ENABLE
if(dmacro_num > 0){
if (timer_elapsed(dmacro_timer) < 3000) {
strcpy ( o_text, dmacro_text[dmacro_num] );
}
else {
if (dmacro_num == 1) {
strcpy ( o_text, dmacro_text[1] );
}
else {
strcpy ( o_text, layer_state_str );
dmacro_num = 0;
}
}
}
#endif
}
void render_os_lock_status(void) {
static const char PROGMEM sep_v[] = {0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0};
static const char PROGMEM sep_h1[] = {0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0};
static const char PROGMEM sep_h2[] = {0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0xE1, 0};
static const char PROGMEM face_1[] = {0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0xE1, 0};
static const char PROGMEM face_2[] = {0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xE1, 0};
static const char PROGMEM face_3[] = {0xE1, 0xE1, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xE1, 0};
static const char PROGMEM os_m_1[] = {0x95, 0x96, 0};
static const char PROGMEM os_m_2[] = {0xB5, 0xB6, 0};
static const char PROGMEM os_w_1[] = {0x97, 0x98, 0};
static const char PROGMEM os_w_2[] = {0xB7, 0xB8, 0};
static const char PROGMEM s_lock[] = {0x8F, 0x90, 0};
static const char PROGMEM n_lock[] = {0x91, 0x92, 0};
static const char PROGMEM c_lock[] = {0x93, 0x94, 0};
static const char PROGMEM b_lock[] = {0xE1, 0xE1, 0};
#ifdef AUDIO_ENABLE
static const char PROGMEM aud_en[] = {0xAF, 0xB0, 0};
static const char PROGMEM aud_di[] = {0xCF, 0xD0, 0};
#endif
#ifdef HAPTIC_ENABLE
static const char PROGMEM hap_en[] = {0xB1, 0xB2, 0};
static const char PROGMEM hap_di[] = {0xCF, 0xD0, 0};
#endif
oled_write_ln_P(sep_v, false);
if (keymap_config.swap_lctl_lgui) {
oled_write_P(os_m_1, false);
} else {
oled_write_P(os_w_1, false);
}
oled_write_P(sep_h1, false);
oled_write_P(face_1, false);
if (keymap_config.swap_lctl_lgui) {
oled_write_P(os_m_2, false);
} else {
oled_write_P(os_w_2, false);
}
oled_write_P(sep_h1, false);
oled_write_P(face_2, false);
oled_write_P(sep_h1, false);
oled_write_P(face_3, false);
led_t led_usb_state = host_keyboard_led_state();
if (led_usb_state.num_lock) {
oled_write_P(n_lock, false);
} else {
oled_write_P(b_lock, false);
}
if (led_usb_state.caps_lock) {
oled_write_P(c_lock, false);
} else {
oled_write_P(b_lock, false);
}
if (led_usb_state.scroll_lock) {
oled_write_P(s_lock, false);
} else {
oled_write_P(b_lock, false);
}
oled_write_P(sep_h2, false);
#ifndef AUDIO_ENABLE
oled_write_P(b_lock, false);
#endif
#ifndef HAPTIC_ENABLE
oled_write_P(b_lock, false);
#endif
#ifdef AUDIO_ENABLE
if (is_audio_on()) {
oled_write_P(aud_en, false);
} else {
oled_write_P(aud_di, false);
}
#endif
#ifdef HAPTIC_ENABLE
if (haptic_get_enable()) {
oled_write_P(hap_en, false);
} else {
oled_write_P(hap_di, false);
}
#endif
}
int layerstate = 0;
layer_state_t layer_state_set_kb(layer_state_t state) {
switch (get_highest_layer(layer_state | default_layer_state)) {
case 0:
strcpy ( layer_state_str, "BASE QWERTY");
break;
case 1:
strcpy ( layer_state_str, "LOWER");
break;
case 2:
strcpy ( layer_state_str, "RAISE");
break;
case 3:
strcpy ( layer_state_str, "ADJUST");
break;
default:
strcpy ( layer_state_str, "XXXXXX");
}
if (dmacro_num < 1) {
strcpy ( o_text, layer_state_str );
}
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
bool oled_task_kb(void) {
if (!oled_task_user()) {
return false;
}
if (is_keyboard_master()) {
#ifdef DYNAMIC_MACRO_ENABLE
if(dmacro_num == 1){ oled_write_P(rec_ico, false); }
if(dmacro_num == 2){ oled_write_P(stop_ico, false); }
if(dmacro_num == 3){ oled_write_P(play_ico, false); }
#endif
oled_write_ln(o_text, false);
render_os_lock_status();
} else {
static const char PROGMEM klor_face[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x60, 0x30, 0x18, 0x88, 0xf0, 0x20, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80,
0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x60, 0x30, 0x0c, 0xc6,
0xe3, 0xfa, 0xdc, 0x80, 0x40, 0x40, 0x40, 0x20, 0x20, 0xa0, 0xa0, 0xe0, 0xc0, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x20,
0x18, 0x8c, 0xc3, 0xf1, 0xf8, 0xfe, 0xff, 0xff, 0xf7, 0xf2, 0xf2, 0xfb, 0xf9, 0xf9, 0xfd, 0xfc,
0xfc, 0xff, 0x7f, 0x06, 0x00, 0x00, 0x20, 0x70, 0x88, 0x86, 0xc3, 0xf0, 0xf8, 0xfe, 0xff, 0xff,
0xff, 0x7f, 0xfc, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x04,
0x0e, 0x07, 0x07, 0x07, 0x07, 0x87, 0xe3, 0x9b, 0xef, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0x83, 0x80, 0x80, 0xc0, 0x40, 0x40, 0x40, 0x40, 0x41, 0x41, 0x41, 0x40, 0x40, 0x20, 0x38,
0xfc, 0x73, 0x7c, 0xbf, 0x3f, 0x3f, 0x3f, 0xbf, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0xfe, 0xfa, 0xfa, 0xf3,
0xe3, 0xe3, 0xc3, 0xc1, 0x81, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0x04, 0x06, 0x06, 0x06, 0x86, 0xc6, 0x3c, 0x1c, 0x8e, 0xc3,
0xf1, 0xf8, 0xfe, 0x97, 0x90, 0x98, 0xc8, 0xcf, 0xcf, 0xe7, 0xe4, 0xe4, 0xf8, 0x78, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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,
0xe0, 0xe0, 0xf0, 0xf0, 0xf8, 0xf8, 0xf8, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfc, 0xf8, 0xf8, 0xf0, 0xf0, 0xe0, 0xe0,
0xc0, 0xc0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x12, 0x21, 0x70, 0x3c, 0x3e, 0x3f, 0x3f,
0x3f, 0x1f, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x0f, 0x07, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
0x04, 0x09, 0x19, 0x13, 0xb3, 0xa7, 0xcf, 0xcf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xdf, 0xbf, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xfe, 0xfc, 0xfc, 0xf8, 0xf0, 0xf0, 0xe0, 0xe0, 0xc0, 0x80,
0xf0, 0xfe, 0xff, 0xff, 0xff, 0x7f, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x1f, 0x11, 0x19, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09, 0x08, 0x08, 0x08, 0x08,
0x08, 0x08, 0x05, 0x00, 0x0f, 0x1f, 0x33, 0x27, 0x47, 0xcf, 0x9f, 0x9f, 0x3f, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0xfd, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
0xff, 0xff, 0xff, 0x1f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x2c, 0x24, 0x26, 0x27, 0x27, 0x27, 0x27, 0x27,
0x27, 0x27, 0x27, 0x23, 0x23, 0x33, 0x13, 0x13, 0x1f, 0x03, 0x07, 0x0f, 0x0f, 0x1f, 0x1f, 0x3f,
0x1f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
oled_write_raw_P(klor_face, sizeof(klor_face));
}
return false;
}
#endif
uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case SHT_T:
return TAPPING_TERM - 150;
case SHT_N:
return TAPPING_TERM - 150;
default:
return TAPPING_TERM;
}
}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case OS_SWAP:
if (record->event.pressed) {
if (!keymap_config.swap_lctl_lgui) {
keymap_config.swap_lctl_lgui = true;
#ifdef AUDIO_ENABLE
PLAY_SONG(mac_song);
#endif
}
else {
keymap_config.swap_lctl_lgui = false;
#ifdef AUDIO_ENABLE
PLAY_SONG(winxp_song);
#endif
}
eeconfig_update_keymap(keymap_config.raw);
clear_keyboard();
return false;
}
case QWERTY:
if (record->event.pressed) {
set_single_persistent_default_layer(_QWERTY);
}
return false;
case LOWER:
if (record->event.pressed) {
layer_on(_LOWER);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_LOWER);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
return false;
case RAISE:
if (record->event.pressed) {
layer_on(_RAISE);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
} else {
layer_off(_RAISE);
update_tri_layer(_LOWER, _RAISE, _ADJUST);
}
return false;
case ADJUST:
if (record->event.pressed) {
layer_on(_ADJUST);
} else {
layer_off(_ADJUST);
}
return false;
case MAKE_H:
if (record->event.pressed) {
#ifdef KEYBOARD_klor_kb2040
SEND_STRING ("qmk compile -kb klor/2040 -km default");
#else
SEND_STRING ("qmk compile -kb klor -km default");
#endif
tap_code(KC_ENTER);
}
break;
case KC_MPLY:
if (record->event.pressed) {
}
break;
}
return true;
}
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_WBAK, KC_WFWD) },
[1] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
[2] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
[3] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_MPRV, KC_MNXT) },
};
#endif
#ifdef COMBO_ENABLE
enum combos {
QW_ESC,
WE_CLOSETAB,
ER_LASTTAB,
RT_PRTSCR,
WR_TERMINAL,
};
const uint16_t PROGMEM qw_combo[] = {KC_Q, KC_W, COMBO_END};
const uint16_t PROGMEM we_combo[] = {KC_W, KC_E, COMBO_END};
const uint16_t PROGMEM er_combo[] = {KC_E, KC_R, COMBO_END};
const uint16_t PROGMEM rt_combo[] = {KC_R, KC_T, COMBO_END};
const uint16_t PROGMEM wr_combo[] = {KC_W, KC_R, COMBO_END};
combo_t key_combos[] = {
[QW_ESC] = COMBO(qw_combo, KC_ESC),
[WE_CLOSETAB] = COMBO(we_combo, LCTL(KC_F4)),
[ER_LASTTAB] = COMBO(er_combo, LCTL(LSFT(KC_T))),
[RT_PRTSCR] = COMBO(rt_combo, KC_PSCR),
[WR_TERMINAL] = COMBO(wr_combo, LCTL(LALT(KC_T))),
};
#endif

View File

@ -0,0 +1,4 @@
ENCODER_MAP_ENABLE = yes
DYNAMIC_MACRO_ENABLE = yes
TRI_LAYER_ENABLE = yes
SPLIT_HAPTIC_ENABLE = yes

View File

@ -0,0 +1,57 @@
/* Copyright 2022
* GEIST @geigeigeist
*
* 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"
oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
return OLED_ROTATION_180;
}
#ifdef SWAP_HANDS_ENABLE
__attribute__ ((weak))
const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] =
/* ORIGINAL LAYOUT
{ // LEFT
{ {0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0} }, \
{ {0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1} }, \
{ {0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2} }, \
{ {0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3} }, \
// RIGHT
{ {0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4} }, \
{ {0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5} }, \
{ {0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6} }, \
{ {0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7} }, \
};
*/
// MIRRORED LAYOUT
{ // LEFT
{ {0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4} }, \
{ {0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5} }, \
{ {0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6} }, \
{ {0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7} }, \
// RIGHT
{ {0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0} }, \
{ {0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1} }, \
{ {0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2} }, \
{ {0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3} }, \
};
#endif //SWAP_HANDS_ENABLE

View File

@ -0,0 +1,245 @@
/*
Copyright 2024 ElectronLab
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 "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, 0xB6, 0xFF, 0xB6, 0x94, 0x00,
0x08, 0x0C, 0x7E, 0x0C, 0x08, 0x00,
0x10, 0x30, 0x7E, 0x30, 0x10, 0x00,
0x08, 0x08, 0x3E, 0x1C, 0x08, 0x00,
0x08, 0x1C, 0x3E, 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, 0x3E, 0x14, 0x3E, 0x14, 0x00,
0x2E, 0x2A, 0x7F, 0x2A, 0x3A, 0x00,
0x20, 0x12, 0x08, 0x24, 0x02, 0x00,
0x37, 0x49, 0x49, 0x37, 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,
0x7F, 0x51, 0x49, 0x45, 0x7F, 0x00,
0x08, 0x04, 0x02, 0x7F, 0x00, 0x00,
0x71, 0x49, 0x49, 0x49, 0x4F, 0x00,
0x41, 0x41, 0x49, 0x49, 0x77, 0x00,
0x0F, 0x10, 0x10, 0x10, 0x7F, 0x00,
0x4F, 0x49, 0x49, 0x49, 0x71, 0x00,
0x7E, 0x49, 0x49, 0x49, 0x70, 0x00,
0x01, 0x01, 0x71, 0x09, 0x07, 0x00,
0x77, 0x49, 0x49, 0x49, 0x77, 0x00,
0x07, 0x49, 0x49, 0x49, 0x3F, 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,
0x01, 0x01, 0x59, 0x09, 0x0F, 0x00,
0x7F, 0x41, 0x5D, 0x59, 0x4F, 0x00,
0x7F, 0x09, 0x09, 0x09, 0x7F, 0x00,
0x7F, 0x49, 0x49, 0x49, 0x76, 0x00,
0x7F, 0x41, 0x41, 0x41, 0x41, 0x00,
0x7F, 0x41, 0x41, 0x41, 0x7E, 0x00,
0x7F, 0x49, 0x49, 0x49, 0x49, 0x00,
0x7F, 0x09, 0x09, 0x09, 0x09, 0x00,
0x7F, 0x41, 0x41, 0x49, 0x7B, 0x00,
0x7F, 0x08, 0x08, 0x08, 0x7F, 0x00,
0x00, 0x00, 0x7F, 0x00, 0x00, 0x00,
0x70, 0x40, 0x40, 0x40, 0x7F, 0x00,
0x7F, 0x08, 0x08, 0x08, 0x77, 0x00,
0x7F, 0x40, 0x40, 0x40, 0x40, 0x00,
0x7F, 0x01, 0x1F, 0x01, 0x7F, 0x00,
0x7F, 0x04, 0x08, 0x10, 0x7F, 0x00,
0x7F, 0x41, 0x41, 0x41, 0x7F, 0x00,
0x7F, 0x09, 0x09, 0x09, 0x0F, 0x00,
0x7F, 0x41, 0x71, 0x41, 0x7F, 0x00,
0x7F, 0x09, 0x09, 0x19, 0x6F, 0x00,
0x47, 0x49, 0x49, 0x49, 0x79, 0x00,
0x01, 0x01, 0x7F, 0x01, 0x01, 0x00,
0x7F, 0x40, 0x40, 0x40, 0x7F, 0x00,
0x1F, 0x20, 0x40, 0x20, 0x1F, 0x00,
0x7F, 0x40, 0x7F, 0x40, 0x7F, 0x00,
0x77, 0x08, 0x08, 0x08, 0x77, 0x00,
0x4F, 0x48, 0x48, 0x48, 0x7F, 0x00,
0x61, 0x51, 0x49, 0x45, 0x43, 0x00,
0x00, 0x7F, 0x41, 0x41, 0x00, 0x00,
0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
0x00, 0x41, 0x41, 0x7F, 0x00, 0x00,
0x04, 0x02, 0x01, 0x02, 0x04, 0x00,
0x40, 0x40, 0x40, 0x40, 0x40, 0x00,
0x00, 0x00, 0x07, 0x08, 0x00, 0x00,
0x60, 0x54, 0x54, 0x54, 0x7C, 0x00,
0x7F, 0x44, 0x44, 0x44, 0x78, 0x00,
0x7C, 0x44, 0x44, 0x44, 0x44, 0x00,
0x78, 0x44, 0x44, 0x44, 0x7F, 0x00,
0x7C, 0x54, 0x54, 0x54, 0x5C, 0x00,
0x08, 0x7F, 0x09, 0x09, 0x09, 0x00,
0x38, 0xA4, 0xA4, 0xA4, 0xFC, 0x00,
0x7F, 0x04, 0x04, 0x04, 0x78, 0x00,
0x00, 0x00, 0x7D, 0x00, 0x00, 0x00,
0x70, 0x40, 0x40, 0x7D, 0x00, 0x00,
0x7F, 0x08, 0x08, 0x08, 0x76, 0x00,
0x00, 0x00, 0x7F, 0x40, 0x00, 0x00,
0x7C, 0x04, 0x7C, 0x04, 0x7C, 0x00,
0x7C, 0x04, 0x04, 0x04, 0x78, 0x00,
0x7C, 0x44, 0x44, 0x44, 0x7C, 0x00,
0xFC, 0x24, 0x24, 0x24, 0x38, 0x00,
0x38, 0x24, 0x24, 0x24, 0xFC, 0x00,
0x7C, 0x04, 0x04, 0x04, 0x04, 0x00,
0x5C, 0x54, 0x54, 0x54, 0x74, 0x00,
0x04, 0x04, 0x7F, 0x04, 0x04, 0x00,
0x7C, 0x40, 0x40, 0x40, 0x7C, 0x00,
0x1C, 0x20, 0x40, 0x20, 0x1C, 0x00,
0x7C, 0x40, 0x7C, 0x40, 0x7C, 0x00,
0x6C, 0x10, 0x10, 0x10, 0x6C, 0x00,
0xBC, 0xA0, 0xA0, 0xA0, 0xFC, 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, 0x7E, 0xF8,
0xF0, 0xFE, 0xFE, 0x9E, 0xCE, 0xCE,
0x9E, 0xFE, 0xFC, 0xFC, 0xFC, 0x9D,
0xCD, 0xCD, 0x9D, 0xFF, 0xFE, 0xF0,
0xF8, 0x7E, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xC0, 0x30, 0x0C, 0x03, 0x00,
0x00, 0x00, 0x00, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xE0, 0x10, 0x08, 0x04, 0x02, 0x02,
0x02, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x02, 0x02, 0x02, 0x04, 0x08,
0x10, 0xE0, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x01, 0x01, 0x01, 0x01, 0x01,
0x01, 0x01, 0x01, 0x01, 0x01, 0xFF,
0x7F, 0x51, 0x55, 0x55, 0x45, 0x7F,
0x41, 0x5F, 0x5F, 0x5F, 0x7F, 0x00,
0x7F, 0x41, 0x7B, 0x77, 0x41, 0x7F,
0x41, 0x5F, 0x5F, 0x5F, 0x7F, 0x00,
0x7F, 0x41, 0x5D, 0x5D, 0x5D, 0x7F,
0x41, 0x5F, 0x5F, 0x5F, 0x7F, 0x00,
0xC0, 0xE0, 0xF0, 0xF0, 0xF0, 0xE0,
0xE6, 0xF7, 0xF3, 0xF0, 0x60, 0x00,
0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00,
0x7C, 0x7C, 0x7C, 0x7C, 0x7C, 0x00,
0xF8, 0x1C, 0xDE, 0x1F, 0xFF, 0xFF,
0xFF, 0x1F, 0xDE, 0x1C, 0xF8, 0x00,
0xC0, 0xE2, 0xB4, 0xF8, 0xF8, 0xF8,
0xF8, 0xF8, 0xB4, 0xE2, 0xC0, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x07,
0x0F, 0x3F, 0x7B, 0xF3, 0xE3, 0xC7,
0xC7, 0x8F, 0x9F, 0x9F, 0xBF, 0xBF,
0xFF, 0xFF, 0xFF, 0x7F, 0x3F, 0x0F,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0x00, 0x00, 0xC0, 0x30, 0x0C,
0x33, 0xC0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x3F,
0xC0, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xC0, 0x3F, 0x00, 0x00, 0x00,
0xFF, 0x08, 0x08, 0x08, 0x08, 0x08,
0x08, 0x38, 0xC8, 0x08, 0x08, 0x0F,
0x7E, 0x00, 0x00, 0x7F, 0x00, 0x00,
0x78, 0x00, 0x00, 0x7E, 0x00, 0x00,
0x24, 0x24, 0x12, 0x12, 0x24, 0x24,
0x48, 0x48, 0x24, 0x24, 0x12, 0x12,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x0F, 0x1F, 0x3F, 0x7F, 0x7F, 0x3F,
0x3F, 0x7F, 0x7F, 0x38, 0x10, 0x00,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00,
0x1F, 0x1F, 0x1F, 0x1F, 0x1F, 0x00,
0x0F, 0x14, 0x21, 0x40, 0x45, 0x41,
0x45, 0x40, 0x21, 0x14, 0x0F, 0x00,
0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x7D,
0x7D, 0x7D, 0x7D, 0x7D, 0x7D, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x3F, 0x0C, 0x03, 0x00, 0x00, 0x00,
0x00, 0x00, 0x03, 0x0C, 0x30, 0x00,
0x00, 0x00, 0x00, 0x3F, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x01, 0x02, 0x04, 0x08, 0x10, 0x10,
0x10, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x10, 0x10, 0x10, 0x08, 0x04,
0x02, 0x01, 0x00, 0x00, 0x00, 0x00,
0x3F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x03, 0x0C, 0x30,
0x40, 0x00, 0x00, 0x40, 0x00, 0x00,
0x40, 0x00, 0x00, 0x40, 0x00, 0x00,
0x1C, 0x3E, 0x3E, 0x3E, 0x1C, 0x00,
0x3E, 0x1C, 0x1C, 0x08, 0x08, 0x00,
0x3E, 0x3E, 0x3E, 0x3E, 0x3E, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};

View File

@ -0,0 +1,21 @@
/* Copyright 2020 Nick Brassel (tzarc)
*
* 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 3 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 <https://www.gnu.org/licenses/>.
*/
#pragma once
#include_next <mcuconf.h>
#undef RP_PWM_USE_PWM4
#define RP_PWM_USE_PWM4 TRUE

View File

@ -0,0 +1,42 @@
# Electronlab KLOR split keyboard
```
█ █ █ ▄▄▄▀▀▀▀▀▀▄▄▄ █▀▀▀▀▀▀▀▀▀▀█
█ █ █ ▄▀ ▀▄ █ █
█ █ █ ▄▀ ▀▄ █ █
█ █ █ █ █ █ █
█ █ █ █ █ █ █
█ █ █ █ █ █▄▄▄▄▄▄▄▄▄▄█
█ █ █ █ █ █ █ █
█ █ █ █ █ █ █ █
█ █ █ █ ▀▄ ▄▀ █ █
██ █ █ ▀▄ ▄▀ █ █
█ █ █▄▄▄▄▄▄▄▄ ▀▀▀▄▄▄▄▄▄▀▀▀ █ █
```
KLOR is 42 keys column-staggered split keyboard originaly made by @geigeigeist and forked by Lefuneste83 from Electronlab. It supports a per key RGB matrix, encoders, OLED displays, haptic feedback, audio, a Pixart Paw3204 trackball and four different layouts, through brake off parts.
It's schematics are based on the Sofle, while the layout is based on the Yacc46.
* Keyboard Maintainer: [Lefuneste83](https://github.com/Lefuneste83)
* Hardware Supported: KLOR PCB from 1.3 onward
* Hardware Availability: https://github.com/Lefuneste83/KLOR/tree/main/PCB
Make example for this keyboard (after setting up your build environment):
make electronlab/klor:default
Flashing example for this keyboard:
make electronlab/klor:default:flash
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
## Bootloader
Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,1) in the matrix for the left side and (4,1) in the matrix for the right side (usually the top left and top right) and plug in the keyboard half to USB
* **Physical reset button**: Briefly press the button on the side of the PCB. A rapid double press will resart the keyboard half in bootloader mode.
* **Keycode in layout**: Press the key mapped to `QK_BOOT`

View File

@ -1,5 +1,6 @@
"""This script automates the copying of the default keymap into your own keymap.
"""
import re
import shutil
from milc import cli
@ -13,6 +14,13 @@ from qmk.keyboard import keyboard_completer, keyboard_folder
from qmk.userspace import UserspaceDefs
def validate_keymap_name(name):
"""Returns True if the given keymap name contains only a-z, 0-9 and underscore characters.
"""
regex = re.compile(r'^[a-zA-Z0-9][a-zA-Z0-9_]+$')
return bool(regex.match(name))
def prompt_keyboard():
prompt = """{fg_yellow}Select Keyboard{style_reset_all}
If you`re unsure you can view a full list of supported keyboards with {fg_yellow}qmk list-keyboards{style_reset_all}.
@ -60,6 +68,10 @@ def new_keymap(cli):
cli.log.error(f'Default keymap {{fg_cyan}}{keymap_path_default}{{fg_reset}} does not exist!')
return False
if not validate_keymap_name(user_name):
cli.log.error('Keymap names must contain only {fg_cyan}a-z{fg_reset}, {fg_cyan}0-9{fg_reset} and {fg_cyan}_{fg_reset}! Please choose a different name.')
return False
if keymap_path_new.exists():
cli.log.error(f'Keymap {{fg_cyan}}{user_name}{{fg_reset}} already exists! Please choose a different name.')
return False

View File

@ -29,6 +29,7 @@ def _convert_macros(via_macros):
if len(via_macros) == 0:
return list()
split_regex = re.compile(r'(}\,)|(\,{)')
macro_group_regex = re.compile(r'({.+?})')
macros = list()
for via_macro in via_macros:
# Split VIA macro to its elements
@ -38,13 +39,28 @@ def _convert_macros(via_macros):
macro_data = list()
for m in macro:
if '{' in m or '}' in m:
# Found keycode(s)
keycodes = m.split(',')
# Remove whitespaces and curly braces from around keycodes
keycodes = list(map(lambda s: s.strip(' {}'), keycodes))
# Remove the KC prefix
keycodes = list(map(lambda s: s.replace('KC_', ''), keycodes))
macro_data.append({"action": "tap", "keycodes": keycodes})
# Split macro groups
macro_groups = macro_group_regex.findall(m)
for macro_group in macro_groups:
# Remove whitespaces and curly braces from around group
macro_group = macro_group.strip(' {}')
macro_action = 'tap'
macro_keycodes = []
if macro_group[0] == '+':
macro_action = 'down'
macro_keycodes.append(macro_group[1:])
elif macro_group[0] == '-':
macro_action = 'up'
macro_keycodes.append(macro_group[1:])
else:
macro_keycodes.extend(macro_group.split(',') if ',' in macro_group else [macro_group])
# Remove the KC prefixes
macro_keycodes = list(map(lambda s: s.replace('KC_', ''), macro_keycodes))
macro_data.append({"action": macro_action, "keycodes": macro_keycodes})
else:
# Found text
macro_data.append(m)
@ -54,13 +70,13 @@ def _convert_macros(via_macros):
def _fix_macro_keys(keymap_data):
macro_no = re.compile(r'MACRO0?([0-9]{1,2})')
macro_no = re.compile(r'MACRO0?\(([0-9]{1,2})\)')
for i in range(0, len(keymap_data)):
for j in range(0, len(keymap_data[i])):
kc = keymap_data[i][j]
m = macro_no.match(kc)
if m:
keymap_data[i][j] = f'MACRO_{m.group(1)}'
keymap_data[i][j] = f'MC_{m.group(1)}'
return keymap_data