Skip to content

Commit e4f1454

Browse files
authored
refactor(keymap): Reduce flash usage for studio builds (#2771)
When building for ZMK Studio, we can use the constant stock keymap for init of the in-memory keymap, to avoid duplicate flash usage for the keymap from the devicetree.
1 parent c367d8f commit e4f1454

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

app/include/zmk/keymap.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@
1010

1111
#define ZMK_LAYER_CHILD_LEN_PLUS_ONE(node) 1 +
1212
#define ZMK_KEYMAP_LAYERS_LEN \
13-
(DT_FOREACH_CHILD(DT_INST(0, zmk_keymap), ZMK_LAYER_CHILD_LEN_PLUS_ONE) 0)
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)
1417

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

app/src/keymap.c

+13-6
Original file line numberDiff line numberDiff line change
@@ -72,17 +72,21 @@ static uint8_t keymap_layer_orders[ZMK_KEYMAP_LAYERS_LEN];
7272

7373
#endif // IS_ENABLED(CONFIG_ZMK_KEYMAP_LAYER_REORDERING)
7474

75-
#define KEYMAP_VAR(_name, _opts) \
75+
#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_1(IS_ENABLED(CONFIG_ZMK_STUDIO), \
78-
(DT_INST_FOREACH_CHILD_SEP(0, TRANSFORMED_LAYER, (, ))), \
79-
(DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP(0, TRANSFORMED_LAYER, (, ))))};
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))};
8083

81-
KEYMAP_VAR(zmk_keymap, COND_CODE_1(IS_ENABLED(CONFIG_ZMK_KEYMAP_SETTINGS_STORAGE), (), (const)))
84+
KEYMAP_VAR(zmk_keymap, COND_CODE_1(IS_ENABLED(CONFIG_ZMK_KEYMAP_SETTINGS_STORAGE), (), (const)),
85+
IS_ENABLED(CONFIG_ZMK_STUDIO))
8286

8387
#if IS_ENABLED(CONFIG_ZMK_KEYMAP_SETTINGS_STORAGE)
8488

85-
KEYMAP_VAR(zmk_stock_keymap, const)
89+
KEYMAP_VAR(zmk_stock_keymap, const, 0)
8690

8791
static char zmk_keymap_layer_names[ZMK_KEYMAP_LAYERS_LEN][CONFIG_ZMK_KEYMAP_LAYER_NAME_MAX_LEN] = {
8892
DT_INST_FOREACH_CHILD_SEP(0, LAYER_NAME, (, ))};
@@ -955,6 +959,9 @@ int keymap_init(void) {
955959
#if IS_ENABLED(CONFIG_ZMK_KEYMAP_LAYER_REORDERING)
956960
load_stock_keymap_layer_ordering();
957961
#endif
962+
#if IS_ENABLED(CONFIG_ZMK_STUDIO)
963+
reload_from_stock_keymap();
964+
#endif
958965

959966
return 0;
960967
}

0 commit comments

Comments
 (0)