18cca2062e889a23933043ec5bdaf3c18cb060e1

Author
Bertrand Le Roy <beleroy@microsoft.com>
Committer
GitHub <noreply@github.com>
Date

Message

DecenTKL main keyboard (#24702)

Diff

This diff is truncated to protect this page.

  1diff --git a/keyboards/decent/tkl/atari-font.c b/keyboards/decent/tkl/atari-font.c
  2new file mode 100644
  3index 0000000000000000000000000000000000000000..635e711f525450b21443ea3ddb766b255fbe11d2
  4--- /dev/null
  5+++ b/keyboards/decent/tkl/atari-font.c
  6@@ -0,0 +1,231 @@
  7+// Copyright 2023 QMK
  8+// SPDX-License-Identifier: GPL-2.0-or-later
  9+
 10+#include "progmem.h"
 11+
 12+static const unsigned char PROGMEM font[] = {
 13+    0x1C, 0x3E, 0x7C, 0x3E, 0x1C, 0x00,
 14+    0x00, 0x00, 0xFF, 0xFF, 0x18, 0x18,
 15+    0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
 16+    0x18, 0x18, 0x1F, 0x1F, 0x00, 0x00,
 17+    0x18, 0x18, 0xFF, 0xFF, 0x00, 0x00,
 18+    0x18, 0x18, 0xF8, 0xF8, 0x00, 0x00,
 19+    0xE0, 0x70, 0x38, 0x1C, 0x0E, 0x07,
 20+    0x07, 0x0E, 0x1C, 0x38, 0x70, 0xE0,
 21+    0x80, 0xC0, 0xF0, 0xF8, 0xFE, 0xFF,
 22+    0x00, 0x00, 0x00, 0xF0, 0xF0, 0xF0,
 23+    0xFF, 0xFE, 0xF8, 0xF0, 0xC0, 0x80,
 24+    0x00, 0x00, 0x00, 0x0F, 0x0F, 0x0F,
 25+    0x0F, 0x0F, 0x0F, 0x00, 0x00, 0x00,
 26+    0x03, 0x03, 0x03, 0x03, 0x03, 0x03,
 27+    0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0,
 28+    0xF0, 0xF0, 0xF0, 0x00, 0x00, 0x00,
 29+    0x18, 0x58, 0x66, 0x66, 0x58, 0x18,
 30+    0x00, 0x00, 0xF8, 0xF8, 0x18, 0x18,
 31+    0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
 32+    0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18,
 33+    0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00,
 34+    0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
 35+    0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
 36+    0x18, 0x18, 0xF8, 0xF8, 0x18, 0x18,
 37+    0x18, 0x18, 0x1F, 0x1F, 0x18, 0x18,
 38+    0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
 39+    0x00, 0x00, 0x1F, 0x1F, 0x18, 0x18,
 40+    0x1F, 0x15, 0x75, 0x50, 0x50, 0x00,
 41+    0x08, 0x0C, 0x7E, 0x0C, 0x08, 0x00,
 42+    0x10, 0x30, 0x7E, 0x30, 0x10, 0x00,
 43+    0x10, 0x38, 0x54, 0x10, 0x10, 0x00,
 44+    0x10, 0x10, 0x54, 0x38, 0x10, 0x00,
 45+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 46+    0x00, 0x00, 0x5E, 0x00, 0x00, 0x00,
 47+    0x00, 0x06, 0x00, 0x06, 0x00, 0x00,
 48+    0x24, 0x7E, 0x24, 0x7E, 0x24, 0x00,
 49+    0x24, 0x2A, 0x6B, 0x2A, 0x12, 0x00,
 50+    0x4C, 0x2C, 0x10, 0x68, 0x64, 0x00,
 51+    0x30, 0x4A, 0x55, 0x32, 0x50, 0x00,
 52+    0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
 53+    0x00, 0x1C, 0x22, 0x41, 0x00, 0x00,
 54+    0x00, 0x41, 0x22, 0x1C, 0x00, 0x00,
 55+    0x10, 0x54, 0x38, 0x54, 0x10, 0x00,
 56+    0x10, 0x10, 0x7C, 0x10, 0x10, 0x00,
 57+    0x00, 0x80, 0xE0, 0x60, 0x00, 0x00,
 58+    0x08, 0x08, 0x08, 0x08, 0x08, 0x00,
 59+    0x00, 0x00, 0x60, 0x60, 0x00, 0x00,
 60+    0x20, 0x10, 0x08, 0x04, 0x02, 0x00,
 61+    0x3C, 0x52, 0x4A, 0x46, 0x3C, 0x00,
 62+    0x00, 0x44, 0x7E, 0x40, 0x00, 0x00,
 63+    0x44, 0x62, 0x52, 0x4A, 0x44, 0x00,
 64+    0x22, 0x42, 0x4A, 0x56, 0x22, 0x00,
 65+    0x30, 0x28, 0x24, 0x7E, 0x20, 0x00,
 66+    0x2E, 0x4A, 0x4A, 0x4A, 0x32, 0x00,
 67+    0x3C, 0x4A, 0x4A, 0x4A, 0x30, 0x00,
 68+    0x62, 0x12, 0x0A, 0x06, 0x02, 0x00,
 69+    0x34, 0x4A, 0x4A, 0x4A, 0x34, 0x00,
 70+    0x04, 0x4A, 0x4A, 0x2A, 0x1C, 0x00,
 71+    0x00, 0x00, 0x48, 0x00, 0x00, 0x00,
 72+    0x00, 0x80, 0x48, 0x00, 0x00, 0x00,
 73+    0x00, 0x08, 0x14, 0x22, 0x41, 0x00,
 74+    0x48, 0x48, 0x48, 0x48, 0x48, 0x00,
 75+    0x00, 0x41, 0x22, 0x14, 0x08, 0x00,
 76+    0x04, 0x02, 0x52, 0x0A, 0x04, 0x00,
 77+    0x3C, 0x42, 0x5A, 0x5A, 0x5C, 0x00,
 78+    0x78, 0x24, 0x22, 0x24, 0x78, 0x00,
 79+    0x7E, 0x4A, 0x4A, 0x4A, 0x34, 0x00,
 80+    0x3C, 0x42, 0x42, 0x42, 0x24, 0x00,
 81+    0x7E, 0x42, 0x42, 0x24, 0x18, 0x00,
 82+    0x7E, 0x4A, 0x4A, 0x4A, 0x42, 0x00,
 83+    0x7E, 0x0A, 0x0A, 0x0A, 0x02, 0x00,
 84+    0x3C, 0x42, 0x42, 0x52, 0x72, 0x00,
 85+    0x7E, 0x08, 0x08, 0x08, 0x7E, 0x00,
 86+    0x00, 0x42, 0x7E, 0x42, 0x00, 0x00,
 87+    0x20, 0x40, 0x40, 0x3E, 0x00, 0x00,
 88+    0x7E, 0x18, 0x24, 0x42, 0x00, 0x00,
 89+    0x7E, 0x40, 0x40, 0x40, 0x40, 0x00,
 90+    0x7E, 0x04, 0x08, 0x04, 0x7E, 0x00,
 91+    0x7E, 0x0C, 0x18, 0x30, 0x7E, 0x00,
 92+    0x3C, 0x42, 0x42, 0x42, 0x3C, 0x00,
 93+    0x7E, 0x12, 0x12, 0x12, 0x0C, 0x00,
 94+    0x3C, 0x42, 0x52, 0x22, 0x5C, 0x00,
 95+    0x7E, 0x12, 0x12, 0x32, 0x4C, 0x00,
 96+    0x04, 0x4A, 0x4A, 0x4A, 0x30, 0x00,
 97+    0x02, 0x02, 0x7E, 0x02, 0x02, 0x00,
 98+    0x7E, 0x40, 0x40, 0x40, 0x7E, 0x00,
 99+    0x1E, 0x20, 0x40, 0x20, 0x1E, 0x00,
100+    0x7E, 0x20, 0x10, 0x20, 0x7E, 0x00,
101+    0x42, 0x24, 0x18, 0x24, 0x42, 0x00,
102+    0x06, 0x08, 0x70, 0x08, 0x06, 0x00,
103+    0x62, 0x52, 0x4A, 0x46, 0x42, 0x00,
104+    0x00, 0x7E, 0x42, 0x42, 0x00, 0x00,
105+    0x02, 0x04, 0x08, 0x10, 0x20, 0x00,
106diff --git a/keyboards/decent/tkl/config.h b/keyboards/decent/tkl/config.h
107new file mode 100644
108index 0000000000000000000000000000000000000000..772d6f4a27bb7c8f0d4fd4e8f254660687cd3a5d
109--- /dev/null
110+++ b/keyboards/decent/tkl/config.h
111@@ -0,0 +1,9 @@
112+// Copyright 2023 QMK
113+// SPDX-License-Identifier: GPL-2.0-or-later
114+
115+#pragma once
116+
117+#define I2C1_SDA_PIN GP26
118+#define I2C1_SCL_PIN GP27
119+
120+#define OLED_FONT_H "atari-font.c"
121diff --git a/keyboards/decent/tkl/keyboard.json b/keyboards/decent/tkl/keyboard.json
122new file mode 100644
123index 0000000000000000000000000000000000000000..96b472c6fc06588e03cb02de7461ff7424e72350
124--- /dev/null
125+++ b/keyboards/decent/tkl/keyboard.json
126@@ -0,0 +1,298 @@
127+{
128+    "manufacturer": "Bertrand Le roy",
129+    "keyboard_name": "DecenTKL",
130+    "maintainer": "bleroy",
131+    "url": "https://github.com/bleroy/3d-junkyard/blob/main/DecenTKL/",
132+    "tags": ["ansi", "tkl", "rgb", "oled", "encoder", "atari"],
133+    "bootloader": "rp2040",
134+    "processor": "RP2040",
135+    "features": {
136+        "encoder": true,
137+        "bootmagic": true,
138+        "rgb_matrix": true,
139+        "oled": true,
140+        "command": false,
141+        "console": false,
142+        "extrakey": true,
143+        "mousekey": false,
144+        "nkro": true
145+    },
146+    "diode_direction": "COL2ROW",
147+    "matrix_pins": {
148+        "cols": ["GP1", "GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9"],
149+        "rows": ["GP11", "GP12", "GP13", "GP14", "GP15", "GP16", "GP17", "GP18", "GP19", "GP20"]
150+    },
151+    "bootmagic": {
152+        "matrix": [0, 6]
153+    },
154+    "usb": {
155+        "device_version": "1.0.0",
156+        "pid": "0x0000",
157+        "vid": "0xFEED"
158+    },
159+    "encoder": {
160+        "rotary": [
161+            {
162+                "pin_a": "GP21",
163+                "pin_b": "GP22",
164+                "resolution": 1
165+            }
166+        ]
167+    },
168+    "ws2812": {
169+        "pin": "GP0",
170+        "driver": "vendor"
171+    },
172+    "layouts": {
173+        "LAYOUT": {
174+            "layout": [
175+                {"matrix": [0, 6], "x": 0.5, "y": 0, "label": "Esc"},
176+                {"matrix": [0, 5], "x": 3.5, "y": 0, "label": "F1"},
177+                {"matrix": [0, 4], "x": 5, "y": 0, "label": "F2"},
178+                {"matrix": [0, 3], "x": 6.5, "y": 0, "label": "F3"},
179+                {"matrix": [0, 2], "x": 8, "y": 0, "label": "F4"},
180+                {"matrix": [0, 1], "x": 9.5, "y": 0, "label": "F5"},
181+                {"matrix": [0, 0], "x": 11, "y": 0, "label": "F6"},
182+                {"matrix": [1, 0], "x": 12.5, "y": 0, "label": "F7"},
183+                {"matrix": [1, 1], "x": 14, "y": 0, "label": "F8"},
184+                {"matrix": [1, 2], "x": 15.5, "y": 0, "label": "F9"},
185+                {"matrix": [1, 3], "x": 17, "y": 0, "label": "F10"},
186+
187+                {"matrix": [2, 6], "x": 0, "y": 1.5, "label": "`"},
188+                {"matrix": [2, 5], "x": 1, "y": 1.5, "label": "1"},
189+                {"matrix": [2, 4], "x": 2, "y": 1.5, "label": "2"},
190+                {"matrix": [2, 3], "x": 3, "y": 1.5, "label": "3"},
191+                {"matrix": [2, 2], "x": 4, "y": 1.5, "label": "4"},
192+                {"matrix": [2, 1], "x": 5, "y": 1.5, "label": "5"},
193+                {"matrix": [2, 0], "x": 6, "y": 1.5, "label": "6"},
194+                {"matrix": [3, 0], "x": 7, "y": 1.5, "label": "7"},
195+                {"matrix": [3, 1], "x": 8, "y": 1.5, "label": "8"},
196+                {"matrix": [3, 2], "x": 9, "y": 1.5, "label": "9"},
197+                {"matrix": [3, 3], "x": 10, "y": 1.5, "label": "0"},
198+                {"matrix": [3, 4], "x": 11, "y": 1.5, "label": "-"},
199+                {"matrix": [3, 5], "x": 12, "y": 1.5, "label": "="},
200+                {"matrix": [3, 6], "x": 13, "y": 1.5, "w": 2, "label": "Backspace"},
201+                {"matrix": [1, 4], "x": 15.5, "y": 1.5, "label": "Insert"},
202+                {"matrix": [1, 5], "x": 16.5, "y": 1.5, "label": "Home"},
203+                {"matrix": [1, 6], "x": 17.5, "y": 1.5, "label": "PgUp"},
204+
205+                {"matrix": [4, 6], "x": 0, "y": 2.5, "w": 1.5, "label": "Tab"},
206+                {"matrix": [4, 5], "x": 1.5, "y": 2.5, "label": "Q"},
207+                {"matrix": [4, 4], "x": 2.5, "y": 2.5, "label": "W"},
208+                {"matrix": [4, 3], "x": 3.5, "y": 2.5, "label": "E"},
209+                {"matrix": [4, 2], "x": 4.5, "y": 2.5, "label": "R"},
210+                {"matrix": [4, 1], "x": 5.5, "y": 2.5, "label": "T"},
211+                {"matrix": [4, 0], "x": 6.5, "y": 2.5, "label": "Y"},
212+                {"matrix": [5, 0], "x": 7.5, "y": 2.5, "label": "U"},
213+                {"matrix": [5, 1], "x": 8.5, "y": 2.5, "label": "I"},
214+                {"matrix": [5, 2], "x": 9.5, "y": 2.5, "label": "O"},
215+                {"matrix": [5, 3], "x": 10.5, "y": 2.5, "label": "P"},
216+                {"matrix": [5, 4], "x": 11.5, "y": 2.5, "label": "["},
217+                {"matrix": [5, 5], "x": 12.5, "y": 2.5, "label": "]"},
218+                {"matrix": [5, 6], "x": 13.5, "y": 2.5, "w": 1.5, "label": "\\"},
219+                {"matrix": [9, 5], "x": 15.5, "y": 2.5, "label": "Del"},
220+                {"matrix": [9, 6], "x": 16.5, "y": 2.5, "label": "End"},
221+                {"matrix": [7, 6], "x": 17.5, "y": 2.5, "label": "PgDn"},
222+
223+                {"matrix": [6, 6], "x": 0, "y": 3.5, "w": 1.75, "label": "Caps"},
224+                {"matrix": [6, 5], "x": 1.75, "y": 3.5, "label": "A"},
225+                {"matrix": [6, 4], "x": 2.75, "y": 3.5, "label": "S"},
226diff --git a/keyboards/decent/tkl/keymaps/default/keymap.c b/keyboards/decent/tkl/keymaps/default/keymap.c
227new file mode 100644
228index 0000000000000000000000000000000000000000..cd842cdec37e9658a6c8895a5d59c52d990b48dc
229--- /dev/null
230+++ b/keyboards/decent/tkl/keymaps/default/keymap.c
231@@ -0,0 +1,57 @@
232+// Copyright 2023 QMK
233+// SPDX-License-Identifier: GPL-2.0-or-later
234+
235+#include QMK_KEYBOARD_H
236+
237+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
238+    /*
239+     *   /─────/       /─────/─────/─────/─────/─────/─────/─────/─────/─────/─────/
240+     *  /Esc  /       /F1   /F2   /F3   /F4   /F5   /F6   /F7   /F8   /F9   /F10  /
241+     * /─────/       /─────/─────/─────/─────/─────/─────/─────/─────/─────/─────/
242+     * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐
243+     * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │Ins│Hom│PgU│
244+     * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤
245+     * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │  \  │ │Del│End│PgD│
246+     * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘
247+     * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │  Enter │
248+     * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤     ┌───┐
249+     * │ Shift  │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │    Shift │     │ ↑ │
250+     * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤ ┌───┼───┼───┐
251+     * │Ctrl│GUI │Alt │                        │ Alt│ Fn │Menu│Ctrl│ │ ← │ ↓ │ → │
252+     * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘
253+     */
254+    [0] = LAYOUT(
255+        KC_ESC,           KC_F1,   KC_F2,   KC_F3,   KC_F4,   KC_F5,   KC_F6,   KC_F7,   KC_F8,   KC_F9,   KC_F10,
256+
257+        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_INS,  KC_HOME, KC_PGUP,
258+        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_DEL,  KC_END,  KC_PGDN,
259+        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,
260+        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,
261+        KC_LCTL, KC_LGUI, KC_LALT,                            KC_SPC,                             KC_RALT, MO(1)  , KC_APP,  KC_RCTL,    KC_LEFT, KC_DOWN, KC_RGHT
262+    ),
263+    /*
264+     *  /     /       /MyCmp/HomeP/Calc /Media/ ⏮  / ⏭  / ⏯   / ⏹   /Mute /     /
265+     *
266+     * │   │💡│   │   │   │   │   │   │   │   │   │   │   │       │ │   │   │V+ │
267+     * │     │   │🔆│   │   │   │   │   │   │   │   │   │   │BootL│ │   │   │V- │
268+     * │      │   │🔅│   │   │   │   │   │   │   │   │   │        │
269+     * │        │   │🎨│   │   │   │   │   │   │   │   │          │     │🗘 │
270+     * │    │    │    │                        │    │    │    │    │ │㉈ │🗘 │㉏ │
271+     */
272+    [1] = LAYOUT(
273+        _______,          KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MNXT, KC_MPLY, KC_MSTP, KC_MUTE, _______,
274+
275+        _______, RM_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_VOLU,
276+        _______, _______, RM_VALU, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, KC_VOLD,
277+        _______, _______, RM_VALD, _______, _______, _______, _______, _______, _______, _______, _______, _______,          _______,
278+        _______,          _______, RM_HUEU, _______, _______, _______, _______, _______, _______, _______, _______,          _______,          RM_NEXT,
279+        _______, _______, _______,                            _______,                            _______, _______, _______, _______, RM_SPDD, RM_PREV, RM_SPDU
280+    ),
281+};
282+
283+#if defined(ENCODER_MAP_ENABLE)
284+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
285+    [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
286+    [1] = { ENCODER_CCW_CW(RM_VALD, RM_VALU) }
287+};
288+#endif
289diff --git a/keyboards/decent/tkl/readme.md b/keyboards/decent/tkl/readme.md
290new file mode 100644
291index 0000000000000000000000000000000000000000..2069268bfcbe82b0e55793c1934da1210943b1bf
292--- /dev/null
293+++ b/keyboards/decent/tkl/readme.md
294@@ -0,0 +1,79 @@
295+# DecenTKL
296+
297+*A TKL keyboard inspired by the language design of Atari XE and ST computers*
298+
299+* Keyboard Maintainer: [Bertrand Le roy](https://github.com/bleroy/3d-junkyard/blob/main/DecenTKL/)
300+* Hardware Supported: DecenTKL (Pi Pico based)
301+* Hardware Availability: Custom built but open-source
302+
303+Make example for this keyboard (after setting up your build environment):
304+
305+    make decent/tkl:default
306+
307+Flashing example for this keyboard:
308+
309+    make decent/tkl:default:flash
310+
311diff --git a/keyboards/decent/tkl/tkl.c b/keyboards/decent/tkl/tkl.c
312new file mode 100644
313index 0000000000000000000000000000000000000000..96f8a9dd5afa1315939648b0bb8d28d444a6626e
314--- /dev/null
315+++ b/keyboards/decent/tkl/tkl.c
316@@ -0,0 +1,72 @@
317+// Copyright 2024 B. Le Roy
318+// SPDX-License-Identifier: GPL-2.0-or-later
319+
320+#include "quantum.h"
321+
322+static void render_logo(void) {
323+    static const char PROGMEM qmk_logo[] = {
324+        // 0     1     2     3     4     5     6     7     8     9    10    11    12    13    14    15    16    17    18    19    20
325+        0x20, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94,
326+        0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0x20,
327+        0x20, 0x20, 0x20, 0x20, 0x20, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0x20, 0x20,
328+        0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0xBC, 0xBD, 0xBE, 0xBF,
329+        0x00
330+    };
331+
332+   oled_write_P(qmk_logo, false);
333+   oled_write_pixel(126, 0, 1);
334+   oled_write_pixel(127, 0, 1);
335+   oled_write_pixel(126, 1, 1);
336+}
337+
338+static const char PROGMEM caps_on[] = { 0x9C, 0x9D, 0x9E, 0x9F };
339+static const char PROGMEM caps_off[] = { 0xBC, 0xBD, 0xBE, 0xBF };
340+
341+bool oled_task_kb(void) {
342+    if (!oled_task_user()) {
343+        return false;
344+    }
345+
346+    render_logo();
347+
348+    bool caps = host_keyboard_led_state().caps_lock;
349+
350+    if (caps) {
351+        oled_set_cursor(17, 3);
352+        oled_write_P(caps ? caps_on : caps_off, false);
353+    }
354+    return false;
355+}
356+
357+bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
358+    if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) {
359+        return false;
360+    }
361+
362+    bool caps = host_keyboard_led_state().caps_lock;
363+
364+    if (caps) {
365+        for (uint8_t i = led_min; i < led_max; i++) {
366+            if (g_led_config.flags[i] & LED_FLAG_KEYLIGHT) {
367+                rgb_matrix_set_color(i, RGB_RED);
368+            }
369+        }
370+    }
371+
372+    if (get_highest_layer(layer_state) > 0) {
373+        uint8_t layer = get_highest_layer(layer_state);
374+
375+        for (uint8_t row = 0; row < MATRIX_ROWS; ++row) {
376+            for (uint8_t col = 0; col < MATRIX_COLS; ++col) {
377+                uint8_t index = g_led_config.matrix_co[row][col];
378+
379+                if (index >= led_min && index < led_max && index != NO_LED &&
380+                keymap_key_to_keycode(layer, (keypos_t){col,row}) > KC_TRNS) {
381+                    rgb_matrix_set_color(index, RGB_GREEN);
382+                }
383+            }
384+        }
385+    }
386+
387+    return false;
388+}