Add Lemokey L1

This commit is contained in:
lokher 2024-04-25 10:43:50 +08:00
parent e5e57f406e
commit fd0426237f
23 changed files with 1322 additions and 11 deletions

View File

@ -0,0 +1,147 @@
/* 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_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 },
},
{
// 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}, {201,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}, {32,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}, {198,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
}
};
#endif

View File

@ -0,0 +1,56 @@
/* 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 86
# define SPI_SCK_PIN A5
# define SPI_MISO_PIN A6
# define SPI_MOSI_PIN A7
# define DRIVER_CS_PINS \
{ B9, B8 }
# define SNLED23751_SPI_DIVISOR 16
# define SPI_DRIVER SPID1
/* 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 LOW_BAT_IND_INDEX \
{ 79 }
# define RGB_MATRIX_KEYPRESSES
# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
#endif

View File

@ -0,0 +1,103 @@
{
"usb": {
"pid": "0x0110",
"device_version": "1.0.0"
},
"layouts": {
"LAYOUT_ansi_86": {
"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, 14], "x": 13.5, "y": 2.25, "w": 1.5},
{"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, "w": 2.25},
{"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": 2.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}
]
}
}
}

View File

@ -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"
// clang-format off
enum layer_names {
BASE = 0,
FN,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = LAYOUT_ansi_86(
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_HOME,
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_BSLS, KC_PGUP,
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_ENT, KC_PGDN,
MC_2, KC_LSFT, 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_RIGHT ),
[FN] = LAYOUT_ansi_86(
_______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, 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;
}

View File

@ -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"
// clang-format off
enum layer_names {
BASE = 0,
FN,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[BASE] = LAYOUT_ansi_86(
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_HOME,
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_BSLS, KC_PGUP,
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_ENT, KC_PGDN,
MC_2, KC_LSFT, 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_RIGHT ),
[FN] = LAYOUT_ansi_86(
_______, 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, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END,
_______, RGB_TOG, RGB_MOD, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, RGB_RMOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, 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;
}

View File

@ -0,0 +1 @@
VIA_ENABLE = yes

View File

@ -0,0 +1 @@
# This file intentionally left blank

View File

@ -0,0 +1,226 @@
/* 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
#include_next <board.h>
// clang-format off
/* Set GPIOA_SWDIO to INPUT and NOT FLOATING */
#undef VAL_GPIOA_MODER
#define VAL_GPIOA_MODER (PIN_MODE_INPUT(GPIOA_BUTTON) | \
PIN_MODE_INPUT(GPIOA_PIN1) | \
PIN_MODE_INPUT(GPIOA_PIN2) | \
PIN_MODE_INPUT(GPIOA_PIN3) | \
PIN_MODE_ALTERNATE(GPIOA_CS43L22_LRCK) |\
PIN_MODE_ALTERNATE(GPIOA_L3GD20_SCL) | \
PIN_MODE_ALTERNATE(GPIOA_L3GD20_SD0) | \
PIN_MODE_ALTERNATE(GPIOA_L3GD20_SDI) | \
PIN_MODE_INPUT(GPIOA_PIN8) | \
PIN_MODE_INPUT(GPIOA_VBUS_FS) | \
PIN_MODE_ALTERNATE(GPIOA_OTG_FS_ID) | \
PIN_MODE_ALTERNATE(GPIOA_OTG_FS_DM) | \
PIN_MODE_ALTERNATE(GPIOA_OTG_FS_DP) | \
PIN_MODE_INPUT(GPIOA_SWDIO) | \
PIN_MODE_INPUT(GPIOA_SWCLK) | \
PIN_MODE_INPUT(GPIOA_PIN15))
#undef VAL_GPIOA_PUPDR
#define VAL_GPIOA_PUPDR (PIN_PUPDR_FLOATING(GPIOA_BUTTON) | \
PIN_PUPDR_PULLUP(GPIOA_PIN1) | \
PIN_PUPDR_PULLUP(GPIOA_PIN2) | \
PIN_PUPDR_PULLUP(GPIOA_PIN3) | \
PIN_PUPDR_FLOATING(GPIOA_CS43L22_LRCK) |\
PIN_PUPDR_FLOATING(GPIOA_L3GD20_SCL) | \
PIN_PUPDR_PULLUP(GPIOA_L3GD20_SD0) | \
PIN_PUPDR_PULLUP(GPIOA_L3GD20_SDI) | \
PIN_PUPDR_PULLUP(GPIOA_PIN8) | \
PIN_PUPDR_FLOATING(GPIOA_VBUS_FS) | \
PIN_PUPDR_FLOATING(GPIOA_OTG_FS_ID) | \
PIN_PUPDR_FLOATING(GPIOA_OTG_FS_DM) | \
PIN_PUPDR_FLOATING(GPIOA_OTG_FS_DP) | \
PIN_PUPDR_PULLUP(GPIOA_SWDIO) | \
PIN_PUPDR_PULLUP(GPIOA_SWCLK) | \
PIN_PUPDR_PULLUP(GPIOA_PIN15))
#undef VAL_GPIOB_MODER
#define VAL_GPIOB_MODER (PIN_MODE_INPUT(GPIOB_PIN0) | \
PIN_MODE_INPUT(GPIOB_PIN1) | \
PIN_MODE_INPUT(GPIOB_PIN2) | \
PIN_MODE_INPUT(GPIOB_SWO) | \
PIN_MODE_INPUT(GPIOB_PIN4) | \
PIN_MODE_INPUT(GPIOB_PIN5) | \
PIN_MODE_INPUT(GPIOB_LSM303DLHC_SCL) | \
PIN_MODE_INPUT(GPIOB_PIN7) | \
PIN_MODE_INPUT(GPIOB_PIN8) | \
PIN_MODE_INPUT(GPIOB_LSM303DLHC_SDA) | \
PIN_MODE_INPUT(GPIOB_MP45DT02_CLK_IN) |\
PIN_MODE_INPUT(GPIOB_PIN11) | \
PIN_MODE_INPUT(GPIOB_PIN12) | \
PIN_MODE_INPUT(GPIOB_PIN13) | \
PIN_MODE_INPUT(GPIOB_PIN14) | \
PIN_MODE_INPUT(GPIOB_PIN15))
#undef VAL_GPIOB_PUPDR
#define VAL_GPIOB_PUPDR (PIN_PUPDR_PULLDOWN(GPIOB_PIN0) | \
PIN_PUPDR_PULLDOWN(GPIOB_PIN1) | \
PIN_PUPDR_PULLDOWN(GPIOB_PIN2) | \
PIN_PUPDR_PULLDOWN(GPIOB_SWO) | \
PIN_PUPDR_PULLDOWN(GPIOB_PIN4) | \
PIN_PUPDR_PULLDOWN(GPIOB_PIN5) | \
PIN_PUPDR_PULLDOWN(GPIOB_LSM303DLHC_SCL) |\
PIN_PUPDR_PULLDOWN(GPIOB_PIN7) | \
PIN_PUPDR_PULLDOWN(GPIOB_PIN8) | \
PIN_PUPDR_PULLDOWN(GPIOB_LSM303DLHC_SDA) |\
PIN_PUPDR_PULLDOWN(GPIOB_MP45DT02_CLK_IN) |\
PIN_PUPDR_PULLDOWN(GPIOB_PIN11) | \
PIN_PUPDR_PULLDOWN(GPIOB_PIN12) | \
PIN_PUPDR_PULLDOWN(GPIOB_PIN13) | \
PIN_PUPDR_PULLDOWN(GPIOB_PIN14) | \
PIN_PUPDR_PULLDOWN(GPIOB_PIN15))
#undef VAL_GPIOB_AFRL
#define VAL_GPIOB_AFRL (PIN_AFIO_AF(GPIOB_PIN0, 0U) | \
PIN_AFIO_AF(GPIOB_PIN1, 0U) | \
PIN_AFIO_AF(GPIOB_PIN2, 0U) | \
PIN_AFIO_AF(GPIOB_SWO, 0U) | \
PIN_AFIO_AF(GPIOB_PIN4, 0U) | \
PIN_AFIO_AF(GPIOB_PIN5, 0U) | \
PIN_AFIO_AF(GPIOB_LSM303DLHC_SCL, 0) | \
PIN_AFIO_AF(GPIOB_PIN7, 0U))
#undef VAL_GPIOB_AFRH
#define VAL_GPIOB_AFRH (PIN_AFIO_AF(GPIOB_PIN8, 0U) | \
PIN_AFIO_AF(GPIOB_LSM303DLHC_SDA, 0) | \
PIN_AFIO_AF(GPIOB_MP45DT02_CLK_IN, 0U) |\
PIN_AFIO_AF(GPIOB_PIN11, 0U) | \
PIN_AFIO_AF(GPIOB_PIN12, 0U) | \
PIN_AFIO_AF(GPIOB_PIN13, 0U) | \
PIN_AFIO_AF(GPIOB_PIN14, 0U) | \
PIN_AFIO_AF(GPIOB_PIN15, 0U))
/* C5 Need to be pulldown */
#undef VAL_GPIOC_MODER
#define VAL_GPIOC_MODER (PIN_MODE_INPUT(GPIOC_OTG_FS_POWER_ON) |\
PIN_MODE_INPUT(GPIOC_PIN1) | \
PIN_MODE_INPUT(GPIOC_PIN2) | \
PIN_MODE_INPUT(GPIOC_CS43L22_AIN4x) | \
PIN_MODE_INPUT(GPIOC_PIN4) | \
PIN_MODE_INPUT(GPIOC_PIN5) | \
PIN_MODE_INPUT(GPIOC_PIN6) | \
PIN_MODE_INPUT(GPIOC_CS43L22_MCLK) | \
PIN_MODE_INPUT(GPIOC_PIN8) | \
PIN_MODE_INPUT(GPIOC_PIN9) | \
PIN_MODE_INPUT(GPIOC_CS43L22_SCLK) | \
PIN_MODE_INPUT(GPIOC_PIN11) | \
PIN_MODE_INPUT(GPIOC_CS43L22_SDIN) | \
PIN_MODE_INPUT(GPIOC_PIN13) | \
PIN_MODE_INPUT(GPIOC_OSC32_IN) | \
PIN_MODE_INPUT(GPIOC_OSC32_OUT))
#undef VAL_GPIOC_PUPDR
#define VAL_GPIOC_PUPDR (PIN_PUPDR_PULLUP(GPIOC_OTG_FS_POWER_ON) |\
PIN_PUPDR_PULLUP(GPIOC_PIN1) | \
PIN_PUPDR_PULLUP(GPIOC_PIN2) | \
PIN_PUPDR_PULLUP(GPIOC_CS43L22_AIN4x) |\
PIN_PUPDR_PULLUP(GPIOC_PIN4) | \
PIN_PUPDR_PULLDOWN(GPIOC_PIN5) | \
PIN_PUPDR_PULLUP(GPIOC_PIN6) | \
PIN_PUPDR_PULLUP(GPIOC_CS43L22_MCLK) | \
PIN_PUPDR_PULLUP(GPIOC_PIN8) | \
PIN_PUPDR_PULLUP(GPIOC_PIN9) | \
PIN_PUPDR_PULLUP(GPIOC_CS43L22_SCLK) | \
PIN_PUPDR_PULLUP(GPIOC_PIN11) | \
PIN_PUPDR_PULLUP(GPIOC_CS43L22_SDIN) | \
PIN_PUPDR_PULLUP(GPIOC_PIN13) | \
PIN_PUPDR_PULLUP(GPIOC_OSC32_IN) | \
PIN_PUPDR_PULLUP(GPIOC_OSC32_OUT))
/* Set all GPIOD pins to INPUT & PULLUP to avoid FLOATING */
#undef VAL_GPIOD_MODER
#define VAL_GPIOD_MODER (PIN_MODE_INPUT(GPIOD_PIN0) | \
PIN_MODE_INPUT(GPIOD_PIN1) | \
PIN_MODE_INPUT(GPIOD_PIN2) | \
PIN_MODE_INPUT(GPIOD_PIN3) | \
PIN_MODE_INPUT(GPIOD_CS43L22_RESET) | \
PIN_MODE_INPUT(GPIOD_OverCurrent) | \
PIN_MODE_INPUT(GPIOD_PIN6) | \
PIN_MODE_INPUT(GPIOD_PIN7) | \
PIN_MODE_INPUT(GPIOD_PIN8) | \
PIN_MODE_INPUT(GPIOD_PIN9) | \
PIN_MODE_INPUT(GPIOD_PIN10) | \
PIN_MODE_INPUT(GPIOD_PIN11) | \
PIN_MODE_INPUT(GPIOD_LED4) | \
PIN_MODE_INPUT(GPIOD_LED3) | \
PIN_MODE_INPUT(GPIOD_LED5) | \
PIN_MODE_INPUT(GPIOD_LED6))
#undef VAL_GPIOD_PUPDR
#define VAL_GPIOD_PUPDR (PIN_PUPDR_PULLUP(GPIOD_PIN0) | \
PIN_PUPDR_PULLUP(GPIOD_PIN1) | \
PIN_PUPDR_PULLUP(GPIOD_PIN2) | \
PIN_PUPDR_PULLUP(GPIOD_PIN3) | \
PIN_PUPDR_PULLUP(GPIOD_CS43L22_RESET) |\
PIN_PUPDR_PULLUP(GPIOD_OverCurrent) | \
PIN_PUPDR_PULLUP(GPIOD_PIN6) | \
PIN_PUPDR_PULLUP(GPIOD_PIN7) | \
PIN_PUPDR_PULLUP(GPIOD_PIN8) | \
PIN_PUPDR_PULLUP(GPIOD_PIN9) | \
PIN_PUPDR_PULLUP(GPIOD_PIN10) | \
PIN_PUPDR_PULLUP(GPIOD_PIN11) | \
PIN_PUPDR_PULLUP(GPIOD_LED4) | \
PIN_PUPDR_PULLUP(GPIOD_LED3) | \
PIN_PUPDR_PULLUP(GPIOD_LED5) | \
PIN_PUPDR_PULLUP(GPIOD_LED6))
/* Set all GPIOE pins to INPUT & PULLUP to avoid FLOATING */
#undef VAL_GPIOE_MODER
#define VAL_GPIOE_MODER (PIN_MODE_INPUT(GPIOE_L3GD20_INT1) | \
PIN_MODE_INPUT(GPIOE_L3GD20_INT2) | \
PIN_MODE_INPUT(GPIOE_LSM303DLHC_DRDY) |\
PIN_MODE_INPUT(GPIOE_L3GD20_CS) | \
PIN_MODE_INPUT(GPIOE_LSM303DLHC_INT1) |\
PIN_MODE_INPUT(GPIOE_LSM303DLHC_INT2) |\
PIN_MODE_INPUT(GPIOE_PIN6) | \
PIN_MODE_INPUT(GPIOE_PIN7) | \
PIN_MODE_INPUT(GPIOE_PIN8) | \
PIN_MODE_INPUT(GPIOE_PIN9) | \
PIN_MODE_INPUT(GPIOE_PIN10) | \
PIN_MODE_INPUT(GPIOE_PIN11) | \
PIN_MODE_INPUT(GPIOE_PIN12) | \
PIN_MODE_INPUT(GPIOE_PIN13) | \
PIN_MODE_INPUT(GPIOE_PIN14) | \
PIN_MODE_INPUT(GPIOE_PIN15))
#undef VAL_GPIOE_PUPDR
#define VAL_GPIOE_PUPDR (PIN_PUPDR_PULLUP(GPIOE_L3GD20_INT1) | \
PIN_PUPDR_PULLUP(GPIOE_L3GD20_INT2) | \
PIN_PUPDR_PULLUP(GPIOE_LSM303DLHC_DRDY) |\
PIN_PUPDR_PULLUP(GPIOE_L3GD20_CS) | \
PIN_PUPDR_PULLUP(GPIOE_LSM303DLHC_INT1) |\
PIN_PUPDR_PULLUP(GPIOE_LSM303DLHC_INT2) |\
PIN_PUPDR_PULLUP(GPIOE_PIN6) | \
PIN_PUPDR_PULLUP(GPIOE_PIN7) | \
PIN_PUPDR_PULLUP(GPIOE_PIN8) | \
PIN_PUPDR_PULLUP(GPIOE_PIN9) | \
PIN_PUPDR_PULLUP(GPIOE_PIN10) | \
PIN_PUPDR_PULLUP(GPIOE_PIN11) | \
PIN_PUPDR_PULLUP(GPIOE_PIN12) | \
PIN_PUPDR_PULLUP(GPIOE_PIN13) | \
PIN_PUPDR_PULLUP(GPIOE_PIN14) | \
PIN_PUPDR_PULLUP(GPIOE_PIN15))

View File

@ -0,0 +1,80 @@
/* 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
/* Encoder Configuration */
#define ENCODER_DEFAULT_POS 0x3
#define ENCODER_MAP_KEY_DELAY 2
#ifdef LK_WIRELESS_ENABLE
/* Hardware configuration */
# define P2P4_MODE_SELECT_PIN A9
# define BT_MODE_SELECT_PIN A10
# define LKBT51_RESET_PIN C4
# define LKBT51_INT_INPUT_PIN B1
# define BLUETOOTH_INT_OUTPUT_PIN A4
# define USB_POWER_SENSE_PIN B0
# define USB_POWER_CONNECTED_LEVEL 0
# define BAT_CHARGING_PIN B13
# define BAT_CHARGING_LEVEL 0
# define BT_HOST_DEVICES_COUNT 3
# if defined(RGB_MATRIX_ENABLE) || defined(LED_MATRIX_ENABLE)
# define LED_DRIVER_SHUTDOWN_PIN B7
# define BT_HOST_LED_MATRIX_LIST \
{ 16, 17, 18 }
# define P2P4G_HOST_LED_MATRIX_LIST \
{ 19 }
# define BAT_LEVEL_LED_LIST \
{ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 }
/* Backlit disable timeout when keyboard is disconnected(unit: second) */
# define DISCONNECTED_BACKLIGHT_DISABLE_TIMEOUT 40
/* Backlit disable timeout when keyboard is connected(unit: second) */
# define CONNECTED_BACKLIGHT_DISABLE_TIMEOUT 600
/* Reinit LED driver on tranport changed */
# define REINIT_LED_DRIVER 1
# endif
/* Keep USB connection in blueooth mode */
# define KEEP_USB_CONNECTION_IN_WIRELESS_MODE
/* Enable bluetooth NKRO */
# define WIRELESS_NKRO_ENABLE
/* Raw hid command for factory test and bluetooth DFU */
# define RAW_HID_CMD 0xAA ... 0xAB
#else
/* Raw hid command for factory test */
# define RAW_HID_CMD 0xAB
#endif
/* Factory test keys */
#define FN_KEY_1 MO(1)
#define FN_BL_TRIG_KEY KC_END
#define MATRIX_IO_DELAY 10

View File

@ -0,0 +1,30 @@
/* 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
#define _CHIBIOS_HAL_CONF_VER_8_0_
#define HAL_USE_SPI TRUE
#ifdef LK_WIRELESS_ENABLE
# define HAL_USE_RTC TRUE
#endif
#if defined(LK_WIRELESS_ENABLE) || defined(ENCODER_ENABLE)
# define PAL_USE_CALLBACKS TRUE
#endif
#include_next <halconf.h>

View File

@ -0,0 +1,77 @@
{
"keyboard_name": "Lemokey L1",
"manufacturer": "Lemokey",
"url": "https://github.com/Keychron",
"maintainer": "lokher",
"processor": "STM32F401",
"bootloader": "stm32-dfu",
"usb": {
"vid": "0x362D"
},
"features": {
"bootmagic": true,
"extrakey" : true,
"mousekey" : true,
"nkro" : true,
"encoder": true,
"encoder_map": true,
"rgb_matrix": true,
"raw" : true,
"send_string": true
},
"matrix_pins": {
"rows": ["C12", "D2", "B3", "B4", "B5", "B6"],
"cols": ["A1", "C6", "C7", "C8", "A14", "A15", "C10", "C11", "C13", "C14", "C15", "C0", "C1", "C2", "C3", "A0"],
},
"diode_direction": "ROW2COL",
"encoder": {
"rotary": [
{
"pin_a": "B15",
"pin_b": "B14",
"resolution": 4
}
]
},
"rgb_matrix": {
"driver": "snled27351_spi",
"sleep": true,
"animations": {
"band_spiral_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,
"jellybean_raindrops": true,
"pixel_rain": true,
"rainbow_beacon": true,
"rainbow_moving_chevron": true,
"solid_reactive_multinexus": true,
"solid_reactive_multiwide": true,
"solid_reactive_simple": true,
"solid_splash": true,
"splash": true,
"typing_heatmap": true
}
},
"eeprom": {
"wear_leveling": {
"driver": "embedded_flash",
"logical_size": 2048,
"backing_size": 4096
}
},
"build": {
"debounce_type": "sym_eager_pk"
},
"debounce": 20,
"bootmagic": {
"matrix": [0,1]
}
}

55
keyboards/lemokey/l1/l1.c Normal file
View File

@ -0,0 +1,55 @@
/* 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 "l1.h"
#include "lemokey_task.h"
#ifdef FACTORY_TEST_ENABLE
# include "factory_test.h"
# include "lemokey_common.h"
#endif
#ifdef LK_WIRELESS_ENABLE
# include "lkbt51.h"
# include "wireless.h"
# include "lemokey_wireless_common.h"
# include "battery.h"
# include "transport.h"
#endif
bool process_record_lemokey_kb(uint16_t keycode, keyrecord_t *record) {
return true;
}
void keyboard_post_init_kb(void) {
#ifdef LK_WIRELESS_ENABLE
palSetLineMode(P2P4_MODE_SELECT_PIN, PAL_MODE_INPUT);
palSetLineMode(BT_MODE_SELECT_PIN, PAL_MODE_INPUT);
lkbt51_init(false);
wireless_init();
#endif
#ifdef ENCODER_ENABLE
encoder_cb_init();
#endif
keyboard_post_init_user();
}
#ifdef LK_WIRELESS_ENABLE
bool lpm_is_kb_idle(void) {
return !factory_reset_indicating();
}
#endif

22
keyboards/lemokey/l1/l1.h Normal file
View File

@ -0,0 +1,22 @@
/* 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
#include "quantum.h"
#ifdef VIA_ENABLE
# include "via.h"
#endif

View File

@ -0,0 +1,40 @@
/* 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
#include_next <mcuconf.h>
#undef STM32_HSECLK
#define STM32_HSECLK 16000000
#undef STM32_PLLM_VALUE
#define STM32_PLLM_VALUE 8
#undef STM32_PLLN_VALUE
#define STM32_PLLN_VALUE 96
#undef STM32_PLLP_VALUE
#define STM32_PLLP_VALUE 4
#undef STM32_PLLQ_VALUE
#define STM32_PLLQ_VALUE 4
#undef STM32_I2C_USE_I2C1
#define STM32_I2C_USE_I2C1 TRUE
#undef STM32_SPI_USE_SPI1
#define STM32_SPI_USE_SPI1 TRUE

View File

@ -0,0 +1,23 @@
# Lemokey L1
![Lemokey L1 QMK/VIA Wireless Mechanical Keyboard](https://cdn.shopify.com/s/files/1/0680/1778/3083/files/Lemokey-L1-3_0b726823-a814-4b8e-b871-27980d10b340.jpg?v=1704791152)
A 75% customizable wireless TKL keyboard.
* Keyboard Maintainer: [Keychron](https://github.com/keychron)
* Hardware Supported: Lemokey L1
* Hardware Availability: [Lemokey L1 Wireless Custom Mechanical Keyboard](https://www.lemokey.com/pages/lemokey-l1)
Make example for this keyboard (after setting up your build environment):
make lemokey/l1/ansi:default
Flashing example for this keyboard:
```
make lemokey/l1/ansi:default:flash
```
**Reset Key**: Toggle mode switch to "Cable", hold down the *Esc* key or reset button underneath space bar while connecting the USB cable,
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).

View File

@ -0,0 +1,4 @@
include keyboards/lemokey/common/wireless/wireless.mk
include keyboards/lemokey/common/lemokey_common.mk
VPATH += $(TOP_DIR)/keyboards/lemokey

View File

@ -0,0 +1,323 @@
{
"name": "Lemokey L1 ANSI",
"vendorId": "0x362D",
"productId": "0x0110",
"keycodes": ["qmk_lighting"],
"menus": [
{
"label": "Lighting",
"content": [
{
"label": "Backlight",
"content": [
{
"label": "Brightness",
"type": "range",
"options": [0, 255],
"content": ["id_qmk_rgb_matrix_brightness", 3, 1]
},
{
"label": "Effect",
"type": "dropdown",
"content": ["id_qmk_rgb_matrix_effect", 3, 2],
"options": [
["None", 0],
["Solid Color", 1],
["Breathing", 2],
["Band Spiral Val", 3],
["Cycle All", 4],
["Cycle Left Right", 5],
["Cycle Up Down", 6],
["Rainbow Moving Chevron", 7],
["Cycle Out In", 8],
["Cycle Out In Dual", 9],
["Cycle Pinwheel", 10],
["Cycle Spiral", 11],
["Dual Beacon", 12],
["Rainbow Beacon", 13],
["Jellybean Raindrops", 14],
["Pixel Rain", 15],
["Typing Heatmap", 16],
["Digital Rain", 17],
["Reactive Simple", 18],
["Reactive Multiwide", 19],
["Reactive Multinexus", 20],
["Splash", 21],
["Solid Splash", 22]
]
},
{
"showIf": "{id_qmk_rgb_matrix_effect} > 1",
"label": "Effect Speed",
"type": "range",
"options": [0, 255],
"content": ["id_qmk_rgb_matrix_effect_speed", 3, 3]
},
{
"showIf": "{id_qmk_rgb_matrix_effect} != 0 && ( {id_qmk_rgb_matrix_effect} < 4 || {id_qmk_rgb_matrix_effect} == 18 || ({id_qmk_rgb_matrix_effect} > 17 && {id_qmk_rgb_matrix_effect} != 21) ) ",
"label": "Color",
"type": "color",
"content": ["id_qmk_rgb_matrix_color", 3, 4]
}
]
}
]
}
],
"customKeycodes": [
{"name": "Task View", "title": "Task View in Windows", "shortName": "Task"},
{"name": "File Explorer", "title": "File Explorer in Windows", "shortName": "File"},
{"name": "Lock Sreen", "title": "Lock Screen Windows", "shortName": "Lock"},
{"name": "Misson Control", "title": "Misson Control in Mac", "shortName": "MCtl"},
{"name": "Lanuch Pad", "title": "Lanuch Pad in Windows", "shortName": "LPad"},
{"name": "Left Option", "title": "Left Option", "shortName": "LOpt"},
{"name": "Right Option", "title": "Right Option", "shortName": "ROpt"},
{"name": "Left Cmd", "title": "Left Command", "shortName": "LCmd"},
{"name": "Right Cmd", "title": "Right Command", "shortName": "RCmd"},
{"name": "Bluetooth Host 1", "title": "Bluetooth Host 1", "shortName": "BTH1"},
{"name": "Bluetooth Host 2", "title": "Bluetooth Host 2", "shortName": "BTH2"},
{"name": "Bluetooth Host 3", "title": "Bluetooth Host 3", "shortName": "BTH3"},
{"name": "2.4G Host", "title": "2.4G Host", "shortName": "2.4G"},
{"name": "Battery Level", "title": "Show battery level", "shortName": "Batt"}
],
"matrix": {"rows": 6, "cols" : 16},
"layouts": {
"keymap": [
[
{
"w": 1.05,
"h": 1.05,
"c": "#aaaaaa"
},
"0, 0\n\n\n\n\n\n\n\n\ne0",
{
"x": 0.75,
"c": "#777777"
},
"0, 1",
{
"x": 0.25,
"c": "#cccccc"
},
"0, 2",
"0, 3",
"0, 4",
"0, 5",
{
"x": 0.25,
"c": "#aaaaaa"
},
"0, 6",
"0, 7",
"0, 8",
"0, 9",
{
"x": 0.25,
"c": "#cccccc"
},
"0, 10",
"0, 11",
"0, 12",
"0, 13",
{
"x": 0.25,
"c": "#aaaaaa"
},
"0, 14",
{
"x": 0.25
},
"0, 15"
],
[
{
"x": 1.8,
"y": 0.25,
"c": "#aaaaaa"
},
"1, 1",
{
"c": "#cccccc"
},
"1, 2",
"1, 3",
"1, 4",
"1, 5",
"1, 6",
"1, 7",
"1, 8",
"1, 9",
"1, 10",
"1, 11",
"1, 12",
"1, 13",
{
"w": 2,
"c": "#aaaaaa"
},
"1, 14",
{
"x": 0.25
},
"1, 15"
],
[
{
"y": -0.5,
"w": 1.05,
"h": 1.05
},
"2, 0",
{
"x": 0.75,
"y": 0.5,
"w": 1.5,
"c": "#aaaaaa"
},
"2, 1",
{
"c": "#cccccc"
},
"2, 2",
"2, 3",
"2, 4",
"2, 5",
"2, 6",
"2, 7",
"2, 8",
"2, 9",
"2, 10",
"2, 11",
"2, 12",
"2, 13",
{
"w": 1.5,
"c": "#aaaaaa"
},
"2, 14",
{
"x": 0.25
},
"2, 15"
],
[
{
"y": -0.45,
"w": 1.05,
"h": 1.05
},
"3, 0",
{
"x": 0.75,
"y": 0.45,
"w": 1.75,
"c": "#aaaaaa"
},
"3, 1",
{
"c": "#cccccc"
},
"3, 2",
"3, 3",
"3, 4",
"3, 5",
"3, 6",
"3, 7",
"3, 8",
"3, 9",
"3, 10",
"3, 11",
"3, 12",
{
"w": 2.25,
"c": "#777777"
},
"3, 13",
{
"x": 0.25,
"c": "#aaaaaa"
},
"3, 14"
],
[
{
"y": -0.4,
"w": 1.05,
"h": 1.05
},
"4, 0",
{
"x": 0.75,
"y": 0.4,
"w": 2.25,
"c": "#aaaaaa"
},
"4, 1",
{
"c": "#cccccc"
},
"4, 3",
"4, 4",
"4, 5",
"4, 6",
"4, 7",
"4, 8",
"4, 9",
"4, 10",
"4, 11",
"4, 12",
{
"w": 1.75,
"c": "#aaaaaa"
},
"4, 14",
{
"x": 0.25,
"y": 0.25
},
"4, 15"
],
[
{
"y": -0.6,
"w": 1.05,
"h": 1.05
},
"5, 0",
{
"x": 0.75,
"y": 0.35,
"w": 1.25,
"c": "#aaaaaa"
},
"5, 1",
{
"w": 1.25
},
"5, 2",
{
"w": 1.25
},
"5, 3",
{
"w": 6.25,
"c": "#cccccc"
},
"5, 7",
{
"c": "#aaaaaa"
},
"5, 10",
"5, 11",
"5, 12",
{
"x": 0.25,
"y": 0.25
},
"5, 13",
"5, 14",
"5, 15"
]
]
}
}

View File

@ -123,16 +123,20 @@ const snled27351_led_t g_snled27351_leds[RGB_MATRIX_LED_COUNT] = {
{1, G_2, I_2, H_2}
};
#define __ NO_LED
led_config_t g_led_config = {
{
{ NO_LED, NO_LED, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, },
{ NO_LED, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, },
// 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, NO_LED, 64, NO_LED, NO_LED, NO_LED, },
{ 65, 66, NO_LED, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, NO_LED, 77, NO_LED, 78, NO_LED, },
{ 79, 80, 81, 82, NO_LED, NO_LED, NO_LED, 83, NO_LED, NO_LED, NO_LED, 84, 85, 86, 87, 88, 89, 90, }
{ 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, 87, 88, 89, 90, }
},
{
// LED Index to Physical Position
{21, 0}, {44, 0}, {56, 0}, {68, 0}, {79, 0}, { 97, 0}, {109, 0}, {120, 0}, {132, 0}, {150, 0}, {162, 0}, {173, 0}, {185, 0}, {200, 0}, {212, 0}, {224, 0},
{21,15}, {32,15}, {44,15}, {56,15}, {68,15}, {79,15}, { 91, 15}, {103, 15}, {115, 15}, {126, 15}, {138, 15}, {150, 15}, {162, 15}, {179, 15}, {200, 15}, {212, 15}, {224, 15},
{0,27}, {24,27}, {38,27}, {50,27}, {62,27}, {73,27}, {85,27}, { 97, 27}, {109, 27}, {121, 27}, {132, 27}, {144, 27}, {156, 27}, {168, 27}, {182, 27}, {200, 27}, {212, 27}, {224, 27},
@ -141,6 +145,7 @@ led_config_t g_led_config = {
{0,64}, {22,64}, {37,64}, {51,64}, { 96, 64}, {140, 64}, {154, 64}, {169, 64}, {184, 64}, {200, 64}, {212, 64}, {224, 64}
},
{
// RGB LED Index to Flag
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,

View File

@ -33,11 +33,11 @@
# define SPI_DRIVER SPID1
/* Scan phase of led driver set as MSKPHASE_9CHANNEL(defined as 0x03 in snled27351.h) */
# define PHASE_CHANNEL MSKPHASE_9CHANNEL
# 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 }
{ 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C, 0x1C }
/* Set to infinit, which is use in USB mode by default */
# define RGB_MATRIX_TIMEOUT RGB_MATRIX_TIMEOUT_INFINITE

View File

@ -17,6 +17,8 @@
#include QMK_KEYBOARD_H
#include "lemokey_common.h"
// clang-format off
enum layer_names {
BASE = 0,
FN,
@ -39,6 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, BAT_LVL, NK_TOGG, _______, _______, _______, _______, _______, _______,
_______, _______, GUI_TOG, _______, _______, _______, _______, _______, _______, _______, _______, _______),
};
// clang-format on
#if defined(ENCODER_MAP_ENABLE)
const uint16_t PROGMEM encoder_map[][1][2] = {

View File

@ -0,0 +1 @@
# This file intentionally left blank

View File

@ -16,9 +16,6 @@
#pragma once
/* Turn off effects when suspended */
#define RGB_DISABLE_WHEN_USB_SUSPENDED
/* Encoder Configuration */
#define ENCODER_DEFAULT_POS 0x3
#define ENCODER_MAP_KEY_DELAY 2

View File

@ -35,6 +35,7 @@
},
"rgb_matrix": {
"driver": "snled27351_spi",
"sleep": true,
"animations": {
"band_spiral_val": true,
"breathing": true,