Add Lemokey L1 ISO

This commit is contained in:
lokher
2026-01-19 11:17:39 +08:00
parent f3cea8e97a
commit 6f5058f7d0
10 changed files with 757 additions and 5 deletions
+45
View File
@@ -0,0 +1,45 @@
/* Copyright 2024 @ Lemokey (https://www.lemokey.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#pragma once
#ifdef RGB_MATRIX_ENABLE
/* RGB Matrix driver configuration */
# define DRIVER_COUNT 2
# define RGB_MATRIX_LED_COUNT 87
/* Scan phase of led driver set as MSKPHASE_9CHANNEL(defined as 0x03 in snled27351.h) */
# define SNLED27351_PHASE_CHANNEL MSKPHASE_9CHANNEL
/* Set LED driver current */
# define SNLED27351_CURRENT_TUNE \
{ 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 }
/* Set to infinit, which is use in USB mode by default */
# define RGB_MATRIX_TIMEOUT RGB_MATRIX_TIMEOUT_INFINITE
/* Allow shutdown of led driver to save power */
# define RGB_MATRIX_DRIVER_SHUTDOWN_ENABLE
/* Turn off backlight on low brightness to save power */
# define RGB_MATRIX_BRIGHTNESS_TURN_OFF_VAL 32
/* Indications */
# define CAPS_LOCK_INDEX 47
# define SPACE_KEY_LOW_BAT_IND \
{ 80 }
# define RGB_MATRIX_KEYPRESSES
# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#endif
+104
View File
@@ -0,0 +1,104 @@
{
"usb": {
"pid": "0x0111",
"device_version": "1.0.1"
},
"layouts": {
"LAYOUT_iso_87": {
"layout": [
{"matrix": [0, 1], "x": 0, "y": 0},
{"matrix": [0, 2], "x": 1.25, "y": 0},
{"matrix": [0, 3], "x": 2.25, "y": 0},
{"matrix": [0, 4], "x": 3.25, "y": 0},
{"matrix": [0, 5], "x": 4.25, "y": 0},
{"matrix": [0, 6], "x": 5.5, "y": 0},
{"matrix": [0, 7], "x": 6.5, "y": 0},
{"matrix": [0, 8], "x": 7.5, "y": 0},
{"matrix": [0, 9], "x": 8.5, "y": 0},
{"matrix": [0, 10], "x": 9.75, "y": 0},
{"matrix": [0, 11], "x": 10.75, "y": 0},
{"matrix": [0, 12], "x": 11.75, "y": 0},
{"matrix": [0, 13], "x": 12.75, "y": 0},
{"matrix": [0, 14], "x": 14, "y": 0},
{"matrix": [0, 15], "x": 15.25, "y": 0},
{"matrix": [1, 1], "x": 0, "y": 1.25},
{"matrix": [1, 2], "x": 1, "y": 1.25},
{"matrix": [1, 3], "x": 2, "y": 1.25},
{"matrix": [1, 4], "x": 3, "y": 1.25},
{"matrix": [1, 5], "x": 4, "y": 1.25},
{"matrix": [1, 6], "x": 5, "y": 1.25},
{"matrix": [1, 7], "x": 6, "y": 1.25},
{"matrix": [1, 8], "x": 7, "y": 1.25},
{"matrix": [1, 9], "x": 8, "y": 1.25},
{"matrix": [1, 10], "x": 9, "y": 1.25},
{"matrix": [1, 11], "x": 10, "y": 1.25},
{"matrix": [1, 12], "x": 11, "y": 1.25},
{"matrix": [1, 13], "x": 12, "y": 1.25},
{"matrix": [1, 14], "x": 13, "y": 1.25, "w": 2},
{"matrix": [1, 15], "x": 15.25, "y": 1.25},
{"matrix": [2, 0], "x": -1.75, "y": 1.75},
{"matrix": [2, 1], "x": 0, "y": 2.25, "w": 1.5},
{"matrix": [2, 2], "x": 1.5, "y": 2.25},
{"matrix": [2, 3], "x": 2.5, "y": 2.25},
{"matrix": [2, 4], "x": 3.5, "y": 2.25},
{"matrix": [2, 5], "x": 4.5, "y": 2.25},
{"matrix": [2, 6], "x": 5.5, "y": 2.25},
{"matrix": [2, 7], "x": 6.5, "y": 2.25},
{"matrix": [2, 8], "x": 7.5, "y": 2.25},
{"matrix": [2, 9], "x": 8.5, "y": 2.25},
{"matrix": [2, 10], "x": 9.5, "y": 2.25},
{"matrix": [2, 11], "x": 10.5, "y": 2.25},
{"matrix": [2, 12], "x": 11.5, "y": 2.25},
{"matrix": [2, 13], "x": 12.5, "y": 2.25},
{"matrix": [2, 15], "x": 15.25, "y": 2.25},
{"matrix": [3, 0], "x": -1.75, "y": 3},
{"matrix": [3, 1], "x": 0, "y": 3.25, "w": 1.75},
{"matrix": [3, 2], "x": 1.75, "y": 3.25},
{"matrix": [3, 3], "x": 2.75, "y": 3.25},
{"matrix": [3, 4], "x": 3.75, "y": 3.25},
{"matrix": [3, 5], "x": 4.75, "y": 3.25},
{"matrix": [3, 6], "x": 5.75, "y": 3.25},
{"matrix": [3, 7], "x": 6.75, "y": 3.25},
{"matrix": [3, 8], "x": 7.75, "y": 3.25},
{"matrix": [3, 9], "x": 8.75, "y": 3.25},
{"matrix": [3, 10], "x": 9.75, "y": 3.25},
{"matrix": [3, 11], "x": 10.75, "y": 3.25},
{"matrix": [3, 12], "x": 11.75, "y": 3.25},
{"matrix": [3, 13], "x": 12.75, "y": 3.25},
{"matrix": [2, 14], "x": 13.75, "y": 2.25, "w": 1.25, "h":2},
{"matrix": [3, 14], "x": 15.25, "y": 3.25},
{"matrix": [4, 0], "x": -1.75, "y": 4},
{"matrix": [4, 1], "x": 0, "y": 4.25, "w": 1.25},
{"matrix": [4, 2], "x": 1.25, "y": 4.25},
{"matrix": [4, 3], "x": 2.25, "y": 4.25},
{"matrix": [4, 4], "x": 3.25, "y": 4.25},
{"matrix": [4, 5], "x": 4.25, "y": 4.25},
{"matrix": [4, 6], "x": 5.25, "y": 4.25},
{"matrix": [4, 7], "x": 6.25, "y": 4.25},
{"matrix": [4, 8], "x": 7.25, "y": 4.25},
{"matrix": [4, 9], "x": 8.25, "y": 4.25},
{"matrix": [4, 10], "x": 9.25, "y": 4.25},
{"matrix": [4, 11], "x": 10.25, "y": 4.25},
{"matrix": [4, 12], "x": 11.25, "y": 4.25},
{"matrix": [4, 14], "x": 12.25, "y": 4.25, "w": 1.75},
{"matrix": [4, 15], "x": 14.25, "y": 4.5},
{"matrix": [5, 0], "x": -1.75, "y": 5},
{"matrix": [5, 1], "x": 0, "y": 5.25, "w": 1.25},
{"matrix": [5, 2], "x": 1.25, "y": 5.25, "w": 1.25},
{"matrix": [5, 3], "x": 2.5, "y": 5.25, "w": 1.25},
{"matrix": [5, 7], "x": 3.75, "y": 5.25, "w": 6.25},
{"matrix": [5, 10], "x": 10, "y": 5.25},
{"matrix": [5, 11], "x": 11, "y": 5.25},
{"matrix": [5, 12], "x": 12, "y": 5.25},
{"matrix": [5, 13], "x": 13.25, "y": 5.5},
{"matrix": [5, 14], "x": 14.25, "y": 5.5},
{"matrix": [5, 15], "x": 15.25, "y": 5.5}
]
}
}
}
+153
View File
@@ -0,0 +1,153 @@
/* Copyright 2024 @ Lemokey (https://www.lemokey.com)
*
* This program is free software : you can redistribute it and /or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.If not, see < http://www.gnu.org/licenses/>.
*/
#include "quantum.h"
// clang-format off
#ifdef RGB_MATRIX_ENABLE
const snled27351_led_t g_snled27351_leds[RGB_MATRIX_LED_COUNT] = {
/* Refer to SNLED27351 manual for these locations
* driver
* | R location
* | | G location
* | | | B location
* | | | | */
{0, G_1, I_1, H_1},
{0, G_2, I_2, H_2},
{0, G_3, I_3, H_3},
{0, G_4, I_4, H_4},
{0, G_5, I_5, H_5},
{0, G_6, I_6, H_6},
{0, G_7, I_7, H_7},
{0, G_8, I_8, H_8},
{0, G_9, I_9, H_9},
{0, G_10, I_10, H_10},
{0, G_11, I_11, H_11},
{0, G_12, I_12, H_12},
{0, G_13, I_13, H_13},
{0, G_14, I_14, H_14},
{0, G_15, I_15, H_15},
{0, A_1, C_1, B_1},
{0, A_2, C_2, B_2},
{0, A_3, C_3, B_3},
{0, A_4, C_4, B_4},
{0, A_5, C_5, B_5},
{0, A_6, C_6, B_6},
{0, A_7, C_7, B_7},
{0, A_8, C_8, B_8},
{0, A_9, C_9, B_9},
{0, A_10, C_10, B_10},
{0, A_11, C_11, B_11},
{0, A_12, C_12, B_12},
{0, A_13, C_13, B_13},
{0, A_14, C_14, B_14},
{0, A_15, C_15, B_15},
{1, D_13, F_13, E_13},
{0, D_1, F_1, E_1},
{0, D_2, F_2, E_2},
{0, D_3, F_3, E_3},
{0, D_4, F_4, E_4},
{0, D_5, F_5, E_5},
{0, D_6, F_6, E_6},
{0, D_7, F_7, E_7},
{0, D_8, F_8, E_8},
{0, D_9, F_9, E_9},
{0, D_10, F_10, E_10},
{0, D_11, F_11, E_11},
{0, D_12, F_12, E_12},
{0, D_13, F_13, E_13},
{0, D_14, F_14, E_14},
{0, D_15, F_15, E_15},
{1, D_12, F_12, E_12},
{1, A_16, C_16, B_16},
{1, A_15, C_15, B_15},
{1, A_14, C_14, B_14},
{1, A_13, C_13, B_13},
{1, A_12, C_12, B_12},
{1, A_11, C_11, B_11},
{1, A_10, C_10, B_10},
{1, A_9, C_9, B_9},
{1, A_8, C_8, B_8},
{1, A_7, C_7, B_7},
{1, A_6, C_6, B_6},
{1, A_5, C_5, B_5},
{1, A_4, C_4, B_4},
{1, A_3, C_3, B_3},
{1, D_11, F_11, E_11},
{1, G_16, I_16, H_16},
{1, G_15, I_15, H_15},
{1, G_14, I_14, H_14},
{1, G_13, I_13, H_13},
{1, G_12, I_12, H_12},
{1, G_11, I_11, H_11},
{1, G_10, I_10, H_10},
{1, G_9, I_9, H_9},
{1, G_8, I_8, H_8},
{1, G_7, I_7, H_7},
{1, G_6, I_6, H_6},
{1, G_5, I_5, H_5},
{1, G_3, I_3, H_3},
{1, G_2, I_2, H_2},
{1, D_9, F_9, E_9},
{1, D_16, F_16, E_16},
{1, D_15, F_15, E_15},
{1, D_14, F_14, E_14},
{1, D_10, F_10, E_10},
{1, D_7, F_7, E_7},
{1, D_6, F_6, E_6},
{1, D_5, F_5, E_5},
{1, D_4, F_4, E_4},
{1, D_3, F_3, E_3},
{1, D_2, F_2, E_2},
};
#define __ NO_LED
led_config_t g_led_config = {
{
// Key Matrix to LED Index
{ __, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 },
{ __, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 },
{ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45 },
{ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, __ },
{ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, __, 74, 75 },
{ 76, 77, 78, 79, __, __, __, 80, __, __, 81, 82, 83, 84, 85, 86 },
},
{
// LED Index to Physical Position
{24, 0}, {40, 0}, {53, 0}, {67, 0}, {80, 0}, {96, 0}, {109, 0}, {122, 0}, {135, 0}, {152, 0}, {165, 0}, {178, 0}, {191, 0}, {207, 0}, {224, 0},
{24,15}, {37,15}, {50,15}, {63,15}, {76,15}, {90,15}, {103,15}, {116,15}, {129,15}, {142,15}, {155,15}, {168,15}, {181,15}, {203,15}, {224,15},
{0,21}, {27,26}, {44,26}, {57,26}, {70,26}, {83,26}, {96,26}, {109,26}, {122,26}, {135,26}, {148,26}, {162,26}, {175,26}, {188,26}, {204,26}, {224,26},
{0,34}, {29,38}, {47,38}, {60,38}, {73,38}, {86,38}, {99,38}, {112,38}, {126,38}, {139,38}, {152,38}, {165,38}, {178,38}, {199,38}, {224,38},
{0,46}, {26,49}, {40,49}, {53,49}, {67,49}, {80,49}, {93,49}, {106,49}, {119,49}, {132,49}, {145,49}, {158,49}, {171,49}, {189,49}, {211,52},
{0,58}, {26,61}, {42,61}, {58,61}, {107,61}, {155,61}, {168,61}, {181,61}, {197,64}, {211,64}, {224,64}
},
{
// RGB LED Index to Flag
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
}
};
#endif
@@ -0,0 +1,58 @@
/* Copyright 2024 @ Lemokey (https://www.lemokey.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
#include "lemokey_common.h"
enum layer_names {
BASE = 0,
FN,
};
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = LAYOUT_iso_87(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_INS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
MC_0, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
MC_1, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
MC_2, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
MC_3, KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[FN] = LAYOUT_iso_87(
_______, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
_______, BT_HST1, BT_HST2, BT_HST3, P2P4G, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, KC_END,
_______, _______, _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, GUI_TOG, _______, _______, _______, _______, _______, _______, _______, _______),
};
// clang-format on
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][1][2] = {
[BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
[FN] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
};
#endif // ENCODER_MAP_ENABLE
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (!process_record_lemokey_common(keycode, record)) {
return false;
}
return true;
}
@@ -0,0 +1,58 @@
/* Copyright 2024 @ Lemokey (https://www.lemokey.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include QMK_KEYBOARD_H
#include "lemokey_common.h"
enum layer_names {
BASE = 0,
FN,
};
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = LAYOUT_iso_87(
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_INS,
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_PGUP,
MC_0, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_PGDN,
MC_1, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_HOME,
MC_2, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
MC_3, KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, KC_RALT, MO(FN), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
[FN] = LAYOUT_iso_87(
_______, KC_BRID, KC_BRIU, KC_TASK, KC_FILE, RGB_VAD, RGB_VAI, KC_MPRV, KC_MPLY, KC_MNXT, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______,
_______, BT_HST1, BT_HST2, BT_HST3, P2P4G, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______, KC_END,
_______, _______, _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, GUI_TOG, _______, _______, _______, _______, _______, _______, _______, _______),
};
// clang-format on
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][1][2] = {
[BASE] = {ENCODER_CCW_CW(KC_VOLD, KC_VOLU)},
[FN] = {ENCODER_CCW_CW(RGB_VAD, RGB_VAI)},
};
#endif // ENCODER_MAP_ENABLE
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (!process_record_lemokey_common(keycode, record)) {
return false;
}
return true;
}
@@ -0,0 +1 @@
VIA_ENABLE = yes
+1
View File
@@ -0,0 +1 @@
# This file intentionally left blank