Skip to content

Commit

Permalink
Add keymap wrappers for introspection into the keymap. (#17229)
Browse files Browse the repository at this point in the history
* Introspection handlers for keymaps.

* Renaming.
  • Loading branch information
tzarc committed Jun 5, 2022
1 parent af84772 commit 08c556b
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 1 deletion.
4 changes: 3 additions & 1 deletion builddefs/build_keyboard.mk
Original file line number Diff line number Diff line change
Expand Up @@ -390,10 +390,12 @@ ifneq ("$(KEYMAP_H)","")
CONFIG_H += $(KEYMAP_H)
endif

OPT_DEFS += -DKEYMAP_C=\"$(KEYMAP_C)\"

# project specific files
SRC += \
$(KEYBOARD_SRC) \
$(KEYMAP_C) \
$(QUANTUM_DIR)/keymap_introspection.c \
$(QUANTUM_SRC) \
$(QUANTUM_DIR)/main.c \

Expand Down
2 changes: 2 additions & 0 deletions quantum/keymap.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,3 +55,5 @@ extern const uint16_t keymaps[][MATRIX_ROWS][MATRIX_COLS];
// Ensure we have a forward declaration for the encoder map
# include "encoder.h"
#endif

#include "keymap_introspection.h"
25 changes: 25 additions & 0 deletions quantum/keymap_introspection.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// Copyright 2022 Nick Brassel (@tzarc)
// SPDX-License-Identifier: GPL-2.0-or-later

// Pull the actual keymap code so that we can inspect stuff from it
#include KEYMAP_C

#include "keymap_introspection.h"

#define NUM_KEYMAP_LAYERS ((uint8_t)(sizeof(keymaps) / ((MATRIX_ROWS) * (MATRIX_COLS) * sizeof(uint16_t))))

uint8_t keymap_layer_count(void) {
return NUM_KEYMAP_LAYERS;
}

#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)

# define NUM_ENCODERMAP_LAYERS ((uint8_t)(sizeof(encoder_map) / ((NUM_ENCODERS) * (2) * sizeof(uint16_t))))

uint8_t encodermap_layer_count(void) {
return NUM_ENCODERMAP_LAYERS;
}

_Static_assert(NUM_KEYMAP_LAYERS == NUM_ENCODERMAP_LAYERS, "Number of encoder_map layers doesn't match the number of keymap layers");

#endif // defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)
15 changes: 15 additions & 0 deletions quantum/keymap_introspection.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// Copyright 2022 Nick Brassel (@tzarc)
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once

#include <stdint.h>

// Get the number of layers defined in the keymap
uint8_t keymap_layer_count(void);

#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)

// Get the number of layers defined in the encoder map
uint8_t encodermap_layer_count(void);

#endif // defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)

0 comments on commit 08c556b

Please sign in to comment.