diff --git a/app/include/zmk/keymap.h b/app/include/zmk/keymap.h index 9b7a00c61..eb8be9c46 100644 --- a/app/include/zmk/keymap.h +++ b/app/include/zmk/keymap.h @@ -7,13 +7,20 @@ #pragma once #include +#include +#include + +#define ZMK_KEYMAP_LAYERS_FOREACH(_fn) \ + COND_CODE_1(IS_ENABLED(CONFIG_ZMK_STUDIO), (DT_FOREACH_CHILD(DT_INST(0, zmk_keymap), _fn)), \ + (DT_FOREACH_CHILD_STATUS_OKAY(DT_INST(0, zmk_keymap), _fn))) + +#define ZMK_KEYMAP_LAYERS_FOREACH_SEP(_fn, _sep) \ + COND_CODE_1(IS_ENABLED(CONFIG_ZMK_STUDIO), \ + (DT_FOREACH_CHILD_SEP(DT_INST(0, zmk_keymap), _fn, _sep)), \ + (DT_FOREACH_CHILD_STATUS_OKAY_SEP(DT_INST(0, zmk_keymap), _fn, _sep))) #define ZMK_LAYER_CHILD_LEN_PLUS_ONE(node) 1 + -#define ZMK_KEYMAP_LAYERS_LEN \ - (COND_CODE_1( \ - IS_ENABLED(CONFIG_ZMK_STUDIO), \ - (DT_FOREACH_CHILD(DT_INST(0, zmk_keymap), ZMK_LAYER_CHILD_LEN_PLUS_ONE)), \ - (DT_FOREACH_CHILD_STATUS_OKAY(DT_INST(0, zmk_keymap), ZMK_LAYER_CHILD_LEN_PLUS_ONE))) 0) +#define ZMK_KEYMAP_LAYERS_LEN (ZMK_KEYMAP_LAYERS_FOREACH(ZMK_LAYER_CHILD_LEN_PLUS_ONE) 0) /** * @brief A layer ID is a stable identifier to refer to a layer, regardless of ordering. diff --git a/app/src/keymap.c b/app/src/keymap.c index 762dd4f41..d5c5e19bf 100644 --- a/app/src/keymap.c +++ b/app/src/keymap.c @@ -74,12 +74,7 @@ static uint8_t keymap_layer_orders[ZMK_KEYMAP_LAYERS_LEN]; #define KEYMAP_VAR(_name, _opts, no_init) \ static _opts struct zmk_behavior_binding _name[ZMK_KEYMAP_LAYERS_LEN][ZMK_KEYMAP_LEN] = { \ - COND_CODE_0( \ - no_init, \ - (COND_CODE_1(IS_ENABLED(CONFIG_ZMK_STUDIO), \ - (DT_INST_FOREACH_CHILD_SEP(0, TRANSFORMED_LAYER, (, ))), \ - (DT_INST_FOREACH_CHILD_STATUS_OKAY_SEP(0, TRANSFORMED_LAYER, (, ))))), \ - (0))}; + COND_CODE_0(no_init, (ZMK_KEYMAP_LAYERS_FOREACH_SEP(TRANSFORMED_LAYER, (, ))), (0))}; KEYMAP_VAR(zmk_keymap, COND_CODE_1(IS_ENABLED(CONFIG_ZMK_KEYMAP_SETTINGS_STORAGE), (), (const)), IS_ENABLED(CONFIG_ZMK_STUDIO)) @@ -89,14 +84,14 @@ KEYMAP_VAR(zmk_keymap, COND_CODE_1(IS_ENABLED(CONFIG_ZMK_KEYMAP_SETTINGS_STORAGE KEYMAP_VAR(zmk_stock_keymap, const, 0) static char zmk_keymap_layer_names[ZMK_KEYMAP_LAYERS_LEN][CONFIG_ZMK_KEYMAP_LAYER_NAME_MAX_LEN] = { - DT_INST_FOREACH_CHILD_SEP(0, LAYER_NAME, (, ))}; + ZMK_KEYMAP_LAYERS_FOREACH_SEP(LAYER_NAME, (, ))}; static uint32_t changed_layer_names = 0; #else static const char *zmk_keymap_layer_names[ZMK_KEYMAP_LAYERS_LEN] = { - DT_INST_FOREACH_CHILD_SEP(0, LAYER_NAME, (, ))}; + ZMK_KEYMAP_LAYERS_FOREACH_SEP(LAYER_NAME, (, ))}; #endif