Skip to content

Commit 0b5a103

Browse files
authored
fix(core): Generate correct keymap layer names for all builds (#3047)
Properly account for studio and non-studio builds for the generation of the layer names stored within the keymap system. Fixes #3045
1 parent f09e551 commit 0b5a103

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

app/include/zmk/keymap.h

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,20 @@
77
#pragma once
88

99
#include <zmk/events/position_state_changed.h>
10+
#include <zephyr/sys/util.h>
11+
#include <zephyr/devicetree.h>
12+
13+
#define ZMK_KEYMAP_LAYERS_FOREACH(_fn) \
14+
COND_CODE_1(IS_ENABLED(CONFIG_ZMK_STUDIO), (DT_FOREACH_CHILD(DT_INST(0, zmk_keymap), _fn)), \
15+
(DT_FOREACH_CHILD_STATUS_OKAY(DT_INST(0, zmk_keymap), _fn)))
16+
17+
#define ZMK_KEYMAP_LAYERS_FOREACH_SEP(_fn, _sep) \
18+
COND_CODE_1(IS_ENABLED(CONFIG_ZMK_STUDIO), \
19+
(DT_FOREACH_CHILD_SEP(DT_INST(0, zmk_keymap), _fn, _sep)), \
20+
(DT_FOREACH_CHILD_STATUS_OKAY_SEP(DT_INST(0, zmk_keymap), _fn, _sep)))
1021

1122
#define ZMK_LAYER_CHILD_LEN_PLUS_ONE(node) 1 +
12-
#define ZMK_KEYMAP_LAYERS_LEN \
13-
(COND_CODE_1( \
14-
IS_ENABLED(CONFIG_ZMK_STUDIO), \
15-
(DT_FOREACH_CHILD(DT_INST(0, zmk_keymap), ZMK_LAYER_CHILD_LEN_PLUS_ONE)), \
16-
(DT_FOREACH_CHILD_STATUS_OKAY(DT_INST(0, zmk_keymap), ZMK_LAYER_CHILD_LEN_PLUS_ONE))) 0)
23+
#define ZMK_KEYMAP_LAYERS_LEN (ZMK_KEYMAP_LAYERS_FOREACH(ZMK_LAYER_CHILD_LEN_PLUS_ONE) 0)
1724

1825
/**
1926
* @brief A layer ID is a stable identifier to refer to a layer, regardless of ordering.

app/src/keymap.c

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,7 @@ static uint8_t keymap_layer_orders[ZMK_KEYMAP_LAYERS_LEN];
7474

7575
#define KEYMAP_VAR(_name, _opts, no_init) \
7676
static _opts struct zmk_behavior_binding _name[ZMK_KEYMAP_LAYERS_LEN][ZMK_KEYMAP_LEN] = { \
77-
COND_CODE_0( \
78-
no_init, \
79-
(COND_CODE_1(IS_ENABLED(CONFIG_ZMK_STUDIO), \
80-
(DT_INST_FOREACH_CHILD_SEP(0, TRANSFORMED_LAYER, (, ))), \
81-
(DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP(0, TRANSFORMED_LAYER, (, ))))), \
82-
(0))};
77+
COND_CODE_0(no_init, (ZMK_KEYMAP_LAYERS_FOREACH_SEP(TRANSFORMED_LAYER, (, ))), (0))};
8378

8479
KEYMAP_VAR(zmk_keymap, COND_CODE_1(IS_ENABLED(CONFIG_ZMK_KEYMAP_SETTINGS_STORAGE), (), (const)),
8580
IS_ENABLED(CONFIG_ZMK_STUDIO))
@@ -89,14 +84,14 @@ KEYMAP_VAR(zmk_keymap, COND_CODE_1(IS_ENABLED(CONFIG_ZMK_KEYMAP_SETTINGS_STORAGE
8984
KEYMAP_VAR(zmk_stock_keymap, const, 0)
9085

9186
static char zmk_keymap_layer_names[ZMK_KEYMAP_LAYERS_LEN][CONFIG_ZMK_KEYMAP_LAYER_NAME_MAX_LEN] = {
92-
DT_INST_FOREACH_CHILD_SEP(0, LAYER_NAME, (, ))};
87+
ZMK_KEYMAP_LAYERS_FOREACH_SEP(LAYER_NAME, (, ))};
9388

9489
static uint32_t changed_layer_names = 0;
9590

9691
#else
9792

9893
static const char *zmk_keymap_layer_names[ZMK_KEYMAP_LAYERS_LEN] = {
99-
DT_INST_FOREACH_CHILD_SEP(0, LAYER_NAME, (, ))};
94+
ZMK_KEYMAP_LAYERS_FOREACH_SEP(LAYER_NAME, (, ))};
10095

10196
#endif
10297

0 commit comments

Comments
 (0)