diff options
| author | Nick Brassel <nick@tzarc.org> | 2024-11-24 20:32:30 +1100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-11-24 20:32:30 +1100 |
| commit | 7d8f193988495deb0e12ad79d5104d30c0724bf9 (patch) | |
| tree | bff63d89048b699e393e8f65ec1c059f0d953d0c | |
| parent | 859dab864a0738f577d1da8e7189748ed8109c44 (diff) | |
Allow codegen of `keymap.json` => `keymap.c` without requiring layers/layout etc. (#23451)
22 files changed, 105 insertions, 120 deletions
diff --git a/builddefs/build_keyboard.mk b/builddefs/build_keyboard.mk index ccd7e50b05..afad67a76d 100644 --- a/builddefs/build_keyboard.mk +++ b/builddefs/build_keyboard.mk | |||
| @@ -186,7 +186,10 @@ endif | |||
| 186 | # Have we found a keymap.json? | 186 | # Have we found a keymap.json? |
| 187 | ifneq ("$(wildcard $(KEYMAP_JSON))", "") | 187 | ifneq ("$(wildcard $(KEYMAP_JSON))", "") |
| 188 | ifneq ("$(wildcard $(KEYMAP_C))", "") | 188 | ifneq ("$(wildcard $(KEYMAP_C))", "") |
| 189 | $(call WARNING_MESSAGE,Keymap is specified as both keymap.json and keymap.c -- keymap.json file wins.) | 189 | # Allow a separately-found keymap.c next to keymap.json -- the keymap.c |
| 190 | # generator will include the other keymap.c in the process, if supplied. | ||
| 191 | OTHER_KEYMAP_C := $(KEYMAP_C) | ||
| 192 | OPT_DEFS += -DOTHER_KEYMAP_C=\"$(OTHER_KEYMAP_C)\" | ||
| 190 | endif | 193 | endif |
| 191 | 194 | ||
| 192 | KEYMAP_PATH := $(KEYMAP_JSON_PATH) | 195 | KEYMAP_PATH := $(KEYMAP_JSON_PATH) |
diff --git a/data/schemas/keymap.jsonschema b/data/schemas/keymap.jsonschema index 7233e896e9..e967e45c53 100644 --- a/data/schemas/keymap.jsonschema +++ b/data/schemas/keymap.jsonschema | |||
| @@ -72,10 +72,5 @@ | |||
| 72 | "notes": { | 72 | "notes": { |
| 73 | "type": "string" | 73 | "type": "string" |
| 74 | } | 74 | } |
| 75 | }, | 75 | } |
| 76 | "required": [ | ||
| 77 | "keyboard", | ||
| 78 | "layout", | ||
| 79 | "layers" | ||
| 80 | ] | ||
| 81 | } | 76 | } |
diff --git a/keyboards/handwired/onekey/info.json b/keyboards/handwired/onekey/info.json index c952758265..5cf7c600ee 100644 --- a/keyboards/handwired/onekey/info.json +++ b/keyboards/handwired/onekey/info.json | |||
| @@ -7,9 +7,6 @@ | |||
| 7 | "pid": "0x6465", | 7 | "pid": "0x6465", |
| 8 | "device_version": "0.0.1" | 8 | "device_version": "0.0.1" |
| 9 | }, | 9 | }, |
| 10 | "tapping": { | ||
| 11 | "term": 500 | ||
| 12 | }, | ||
| 13 | "diode_direction": "COL2ROW", | 10 | "diode_direction": "COL2ROW", |
| 14 | "features": { | 11 | "features": { |
| 15 | "bootmagic": false, | 12 | "bootmagic": false, |
diff --git a/keyboards/handwired/onekey/kb2040/config.h b/keyboards/handwired/onekey/kb2040/config.h index e0bf180056..e9c4eef273 100644 --- a/keyboards/handwired/onekey/kb2040/config.h +++ b/keyboards/handwired/onekey/kb2040/config.h | |||
| @@ -3,9 +3,6 @@ | |||
| 3 | 3 | ||
| 4 | #pragma once | 4 | #pragma once |
| 5 | 5 | ||
| 6 | |||
| 7 | #define DEBUG_MATRIX_SCAN_RATE | ||
| 8 | |||
| 9 | #define QMK_WAITING_TEST_BUSY_PIN GP8 | 6 | #define QMK_WAITING_TEST_BUSY_PIN GP8 |
| 10 | #define QMK_WAITING_TEST_YIELD_PIN GP9 | 7 | #define QMK_WAITING_TEST_YIELD_PIN GP9 |
| 11 | 8 | ||
| @@ -18,4 +15,4 @@ | |||
| 18 | #define I2C_DRIVER I2CD0 | 15 | #define I2C_DRIVER I2CD0 |
| 19 | #define I2C1_SDA_PIN GP12 | 16 | #define I2C1_SDA_PIN GP12 |
| 20 | #define I2C1_SCL_PIN GP13 | 17 | #define I2C1_SCL_PIN GP13 |
| 21 | 18 | ||
diff --git a/keyboards/handwired/onekey/keymaps/adc/keymap.json b/keyboards/handwired/onekey/keymaps/adc/keymap.json new file mode 100644 index 0000000000..e051d1a30b --- /dev/null +++ b/keyboards/handwired/onekey/keymaps/adc/keymap.json | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | { | ||
| 2 | "config": { | ||
| 3 | "features": { | ||
| 4 | "console": true | ||
| 5 | }, | ||
| 6 | "tapping": { | ||
| 7 | "term": 500 | ||
| 8 | } | ||
| 9 | } | ||
| 10 | } | ||
diff --git a/keyboards/handwired/onekey/keymaps/adc/rules.mk b/keyboards/handwired/onekey/keymaps/adc/rules.mk index 8b36baccb0..cc58820278 100644 --- a/keyboards/handwired/onekey/keymaps/adc/rules.mk +++ b/keyboards/handwired/onekey/keymaps/adc/rules.mk | |||
| @@ -1,3 +1 @@ | |||
| 1 | CONSOLE_ENABLE = yes | ||
| 2 | |||
| 3 | ANALOG_DRIVER_REQUIRED = yes | ANALOG_DRIVER_REQUIRED = yes | |
diff --git a/keyboards/handwired/onekey/keymaps/apa102/config.h b/keyboards/handwired/onekey/keymaps/apa102/config.h deleted file mode 100644 index bb618d77fb..0000000000 --- a/keyboards/handwired/onekey/keymaps/apa102/config.h +++ /dev/null | |||
| @@ -1,14 +0,0 @@ | |||
| 1 | #pragma once | ||
| 2 | |||
| 3 | #define RGBLIGHT_LED_COUNT 40 | ||
| 4 | #define APA102_DEFAULT_BRIGHTNESS 5 | ||
| 5 | #define RGBLIGHT_EFFECT_BREATHING | ||
| 6 | #define RGBLIGHT_EFFECT_RAINBOW_MOOD | ||
| 7 | #define RGBLIGHT_EFFECT_RAINBOW_SWIRL | ||
| 8 | #define RGBLIGHT_EFFECT_SNAKE | ||
| 9 | #define RGBLIGHT_EFFECT_KNIGHT | ||
| 10 | #define RGBLIGHT_EFFECT_CHRISTMAS | ||
| 11 | #define RGBLIGHT_EFFECT_STATIC_GRADIENT | ||
| 12 | #define RGBLIGHT_EFFECT_RGB_TEST | ||
| 13 | #define RGBLIGHT_EFFECT_ALTERNATING | ||
| 14 | #define RGBLIGHT_EFFECT_TWINKLE | ||
diff --git a/keyboards/handwired/onekey/keymaps/apa102/keymap.json b/keyboards/handwired/onekey/keymaps/apa102/keymap.json new file mode 100644 index 0000000000..917d39eb33 --- /dev/null +++ b/keyboards/handwired/onekey/keymaps/apa102/keymap.json | |||
| @@ -0,0 +1,29 @@ | |||
| 1 | { | ||
| 2 | "config": { | ||
| 3 | "features": { | ||
| 4 | "rgblight": true | ||
| 5 | }, | ||
| 6 | "tapping": { | ||
| 7 | "term": 500 | ||
| 8 | }, | ||
| 9 | "rgblight": { | ||
| 10 | "driver": "apa102", | ||
| 11 | "led_count": 40, | ||
| 12 | "default": { | ||
| 13 | "val": 5 | ||
| 14 | }, | ||
| 15 | "animations": { | ||
| 16 | "breathing": true, | ||
| 17 | "rainbow_mood": true, | ||
| 18 | "rainbow_swirl": true, | ||
| 19 | "snake": true, | ||
| 20 | "knight": true, | ||
| 21 | "christmas": true, | ||
| 22 | "static_gradient": true, | ||
| 23 | "rgb_test": true, | ||
| 24 | "alternating": true, | ||
| 25 | "twinkle": true | ||
| 26 | } | ||
| 27 | } | ||
| 28 | } | ||
| 29 | } | ||
diff --git a/keyboards/handwired/onekey/keymaps/apa102/rules.mk b/keyboards/handwired/onekey/keymaps/apa102/rules.mk deleted file mode 100644 index 5f15fa9e70..0000000000 --- a/keyboards/handwired/onekey/keymaps/apa102/rules.mk +++ /dev/null | |||
| @@ -1,2 +0,0 @@ | |||
| 1 | RGBLIGHT_ENABLE = yes | ||
| 2 | RGBLIGHT_DRIVER = apa102 | ||
diff --git a/keyboards/handwired/onekey/keymaps/backlight/config.h b/keyboards/handwired/onekey/keymaps/backlight/config.h deleted file mode 100644 index af01528b43..0000000000 --- a/keyboards/handwired/onekey/keymaps/backlight/config.h +++ /dev/null | |||
| @@ -1,3 +0,0 @@ | |||
| 1 | #pragma once | ||
| 2 | |||
| 3 | #define BACKLIGHT_BREATHING | ||
diff --git a/keyboards/handwired/onekey/keymaps/backlight/keymap.json b/keyboards/handwired/onekey/keymaps/backlight/keymap.json new file mode 100644 index 0000000000..e8895520cd --- /dev/null +++ b/keyboards/handwired/onekey/keymaps/backlight/keymap.json | |||
| @@ -0,0 +1,14 @@ | |||
| 1 | { | ||
| 2 | "config": { | ||
| 3 | "features": { | ||
| 4 | "backlight": true, | ||
| 5 | "tap_dance": true | ||
| 6 | }, | ||
| 7 | "tapping": { | ||
| 8 | "term": 500 | ||
| 9 | }, | ||
| 10 | "backlight": { | ||
| 11 | "breathing": true | ||
| 12 | } | ||
| 13 | } | ||
| 14 | } | ||
diff --git a/keyboards/handwired/onekey/keymaps/backlight/rules.mk b/keyboards/handwired/onekey/keymaps/backlight/rules.mk deleted file mode 100644 index 176e099770..0000000000 --- a/keyboards/handwired/onekey/keymaps/backlight/rules.mk +++ /dev/null | |||
| @@ -1,2 +0,0 @@ | |||
| 1 | BACKLIGHT_ENABLE = yes | ||
| 2 | TAP_DANCE_ENABLE = yes | ||
diff --git a/keyboards/handwired/onekey/keymaps/console/keymap.json b/keyboards/handwired/onekey/keymaps/console/keymap.json new file mode 100644 index 0000000000..f451f7df04 --- /dev/null +++ b/keyboards/handwired/onekey/keymaps/console/keymap.json | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | { | ||
| 2 | "config": { | ||
| 3 | "features": { | ||
| 4 | "console": true, | ||
| 5 | "debug_matrix_scan_rate": true | ||
| 6 | } | ||
| 7 | } | ||
| 8 | } | ||
diff --git a/keyboards/handwired/onekey/keymaps/console/rules.mk b/keyboards/handwired/onekey/keymaps/console/rules.mk deleted file mode 100644 index 7c83606d2d..0000000000 --- a/keyboards/handwired/onekey/keymaps/console/rules.mk +++ /dev/null | |||
| @@ -1,2 +0,0 @@ | |||
| 1 | CONSOLE_ENABLE = yes | ||
| 2 | DEBUG_MATRIX_SCAN_RATE_ENABLE = yes | ||
diff --git a/keyboards/handwired/onekey/keymaps/default/keymap.json b/keyboards/handwired/onekey/keymaps/default/keymap.json new file mode 100644 index 0000000000..5cd219693a --- /dev/null +++ b/keyboards/handwired/onekey/keymaps/default/keymap.json | |||
| @@ -0,0 +1,7 @@ | |||
| 1 | { | ||
| 2 | "config": { | ||
| 3 | "tapping": { | ||
| 4 | "term": 500 | ||
| 5 | } | ||
| 6 | } | ||
| 7 | } | ||
diff --git a/keyboards/handwired/onekey/rp2040/config.h b/keyboards/handwired/onekey/rp2040/config.h index 0563ebfa5f..0030e97b0f 100644 --- a/keyboards/handwired/onekey/rp2040/config.h +++ b/keyboards/handwired/onekey/rp2040/config.h | |||
| @@ -3,9 +3,6 @@ | |||
| 3 | 3 | ||
| 4 | #pragma once | 4 | #pragma once |
| 5 | 5 | ||
| 6 | |||
| 7 | #define DEBUG_MATRIX_SCAN_RATE | ||
| 8 | |||
| 9 | #define QMK_WAITING_TEST_BUSY_PIN GP8 | 6 | #define QMK_WAITING_TEST_BUSY_PIN GP8 |
| 10 | #define QMK_WAITING_TEST_YIELD_PIN GP9 | 7 | #define QMK_WAITING_TEST_YIELD_PIN GP9 |
| 11 | 8 | ||
diff --git a/keyboards/handwired/pterodactyl/keymaps/default/keymap.c b/keyboards/handwired/pterodactyl/keymaps/default/keymap.c index 61d650c76b..c53f6841ce 100644 --- a/keyboards/handwired/pterodactyl/keymaps/default/keymap.c +++ b/keyboards/handwired/pterodactyl/keymaps/default/keymap.c | |||
| @@ -54,7 +54,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 54 | * |------+------+------+------+------+------| |------+------+------+------+------+------| | 54 | * |------+------+------+------+------+------| |------+------+------+------+------+------| |
| 55 | * | | % | ^ | [ | ] | ~ | | & | 1 | 2 | 3 | \ | | | 55 | * | | % | ^ | [ | ] | ~ | | & | 1 | 2 | 3 | \ | | |
| 56 | * |------+------+------+------+------+------' `------+------+------+------+------+------| | 56 | * |------+------+------+------+------+------' `------+------+------+------+------+------| |
| 57 | * |QK_BOOT | | | | | | | . | 0 | = | | | 57 | * |BtLdr | | | | | | | . | 0 | = | | |
| 58 | * `----------------------------------' `----------------------------------' | 58 | * `----------------------------------' `----------------------------------' |
| 59 | * ,-------------. ,-------------. | 59 | * ,-------------. ,-------------. |
| 60 | * | | | | | | | 60 | * | | | | | | |
diff --git a/keyboards/handwired/pterodactyl/keymaps/default/keymap.json b/keyboards/handwired/pterodactyl/keymaps/default/keymap.json deleted file mode 100644 index 181b32b8c3..0000000000 --- a/keyboards/handwired/pterodactyl/keymaps/default/keymap.json +++ /dev/null | |||
| @@ -1,43 +0,0 @@ | |||
| 1 | { | ||
| 2 | "version": 1, | ||
| 3 | "notes": "", | ||
| 4 | "author": "Marcus Young", | ||
| 5 | "keyboard": "handwired/pterodactyl", | ||
| 6 | "keymap": "default", | ||
| 7 | "layout": "LAYOUT", | ||
| 8 | "layers": [ | ||
| 9 | [ | ||
| 10 | "KC_EQL", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_MINS", | ||
| 11 | "KC_DEL", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_BSLS", | ||
| 12 | "KC_BSPC", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "LT(2,KC_SCLN)", "LGUI_T(KC_QUOT)", | ||
| 13 | "KC_LSFT", "LCTL_T(KC_Z)", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "LCTL_T(KC_SLSH)", "KC_RSFT", | ||
| 14 | "LT(1,KC_GRV)", "KC_QUOT", "LALT(KC_LSFT)", "KC_LEFT", "KC_RGHT", "KC_UP", "KC_DOWN", "KC_LBRC", "KC_RBRC", "TT(1)", | ||
| 15 | |||
| 16 | "LALT_T(KC_APP)", "KC_LGUI", "KC_RALT", "LCTL_T(KC_ESC)", | ||
| 17 | "KC_HOME", "KC_PGUP", | ||
| 18 | "KC_SPC", "KC_BSPC", "KC_END", "KC_PGDN", "KC_TAB", "KC_ENT" | ||
| 19 | ], | ||
| 20 | [ | ||
| 21 | "KC_TRNS", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", | ||
| 22 | "KC_TRNS", "KC_EXLM", "KC_AT", "KC_LCBR", "KC_RCBR", "KC_PIPE", "KC_UP", "KC_7", "KC_8", "KC_9", "KC_ASTR", "KC_F12", | ||
| 23 | "KC_TRNS", "KC_HASH", "KC_DLR", "KC_LPRN", "KC_RPRN", "KC_GRV", "KC_DOWN", "KC_4", "KC_5", "KC_6", "KC_PLUS", "KC_TRNS", | ||
| 24 | "KC_TRNS", "KC_PERC", "KC_CIRC", "KC_LBRC", "KC_RBRC", "KC_TILD", "KC_AMPR", "KC_1", "KC_2", "KC_3", "KC_BSLS", "KC_TRNS", | ||
| 25 | "QK_BOOT", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_DOT", "KC_0", "KC_EQL", "KC_TRNS", | ||
| 26 | |||
| 27 | "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", | ||
| 28 | "KC_TRNS", "KC_TRNS", | ||
| 29 | "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS" | ||
| 30 | ], | ||
| 31 | [ | ||
| 32 | "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", | ||
| 33 | "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_MS_U", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", | ||
| 34 | "KC_TRNS", "KC_TRNS", "KC_MS_L", "KC_MS_D", "KC_MS_R", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_MPLY", | ||
| 35 | "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_MPRV", "KC_MNXT", "KC_TRNS", "KC_TRNS", | ||
| 36 | "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_BTN1", "KC_BTN2", "KC_VOLU", "KC_VOLD", "KC_MUTE", "KC_TRNS", "KC_TRNS", | ||
| 37 | |||
| 38 | "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", | ||
| 39 | "KC_TRNS", "KC_TRNS", | ||
| 40 | "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_WBAK" | ||
| 41 | ] | ||
| 42 | ] | ||
| 43 | } | ||
diff --git a/lib/python/qmk/commands.py b/lib/python/qmk/commands.py index 97d9c5032c..a05b3641b5 100644 --- a/lib/python/qmk/commands.py +++ b/lib/python/qmk/commands.py | |||
| @@ -55,7 +55,7 @@ def parse_configurator_json(configurator_file): | |||
| 55 | cli.log.error(f'Invalid JSON keymap: {configurator_file} : {e.message}') | 55 | cli.log.error(f'Invalid JSON keymap: {configurator_file} : {e.message}') |
| 56 | maybe_exit(1) | 56 | maybe_exit(1) |
| 57 | 57 | ||
| 58 | keyboard = user_keymap['keyboard'] | 58 | keyboard = user_keymap.get('keyboard', None) |
| 59 | aliases = keyboard_alias_definitions() | 59 | aliases = keyboard_alias_definitions() |
| 60 | 60 | ||
| 61 | while keyboard in aliases: | 61 | while keyboard in aliases: |
diff --git a/lib/python/qmk/keymap.py b/lib/python/qmk/keymap.py index 97c358788a..9dd043c4a8 100644 --- a/lib/python/qmk/keymap.py +++ b/lib/python/qmk/keymap.py | |||
| @@ -29,38 +29,40 @@ __INCLUDES__ | |||
| 29 | * This file was generated by qmk json2c. You may or may not want to | 29 | * This file was generated by qmk json2c. You may or may not want to |
| 30 | * edit it directly. | 30 | * edit it directly. |
| 31 | */ | 31 | */ |
| 32 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||
| 33 | __KEYMAP_GOES_HERE__ | ||
| 34 | }; | ||
| 35 | 32 | ||
| 36 | #if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE) | 33 | __KEYMAP_GOES_HERE__ |
| 37 | const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { | ||
| 38 | __ENCODER_MAP_GOES_HERE__ | 34 | __ENCODER_MAP_GOES_HERE__ |
| 39 | }; | ||
| 40 | #endif // defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE) | ||
| 41 | |||
| 42 | __MACRO_OUTPUT_GOES_HERE__ | 35 | __MACRO_OUTPUT_GOES_HERE__ |
| 36 | |||
| 37 | #ifdef OTHER_KEYMAP_C | ||
| 38 | # include OTHER_KEYMAP_C | ||
| 39 | #endif // OTHER_KEYMAP_C | ||
| 43 | """ | 40 | """ |
| 44 | 41 | ||
| 45 | 42 | ||
| 46 | def _generate_keymap_table(keymap_json): | 43 | def _generate_keymap_table(keymap_json): |
| 47 | lines = [] | 44 | lines = ['const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {'] |
| 48 | for layer_num, layer in enumerate(keymap_json['layers']): | 45 | for layer_num, layer in enumerate(keymap_json['layers']): |
| 49 | if layer_num != 0: | 46 | if layer_num != 0: |
| 50 | lines[-1] = lines[-1] + ',' | 47 | lines[-1] = lines[-1] + ',' |
| 51 | layer = map(_strip_any, layer) | 48 | layer = map(_strip_any, layer) |
| 52 | layer_keys = ', '.join(layer) | 49 | layer_keys = ', '.join(layer) |
| 53 | lines.append(' [%s] = %s(%s)' % (layer_num, keymap_json['layout'], layer_keys)) | 50 | lines.append(' [%s] = %s(%s)' % (layer_num, keymap_json['layout'], layer_keys)) |
| 51 | lines.append('};') | ||
| 54 | return lines | 52 | return lines |
| 55 | 53 | ||
| 56 | 54 | ||
| 57 | def _generate_encodermap_table(keymap_json): | 55 | def _generate_encodermap_table(keymap_json): |
| 58 | lines = [] | 56 | lines = [ |
| 57 | '#if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)', | ||
| 58 | 'const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {', | ||
| 59 | ] | ||
| 59 | for layer_num, layer in enumerate(keymap_json['encoders']): | 60 | for layer_num, layer in enumerate(keymap_json['encoders']): |
| 60 | if layer_num != 0: | 61 | if layer_num != 0: |
| 61 | lines[-1] = lines[-1] + ',' | 62 | lines[-1] = lines[-1] + ',' |
| 62 | encoder_keycode_txt = ', '.join([f'ENCODER_CCW_CW({_strip_any(e["ccw"])}, {_strip_any(e["cw"])})' for e in layer]) | 63 | encoder_keycode_txt = ', '.join([f'ENCODER_CCW_CW({_strip_any(e["ccw"])}, {_strip_any(e["cw"])})' for e in layer]) |
| 63 | lines.append(' [%s] = {%s}' % (layer_num, encoder_keycode_txt)) | 64 | lines.append(' [%s] = {%s}' % (layer_num, encoder_keycode_txt)) |
| 65 | lines.extend(['};', '#endif // defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE)']) | ||
| 64 | return lines | 66 | return lines |
| 65 | 67 | ||
| 66 | 68 | ||
| @@ -271,8 +273,11 @@ def generate_c(keymap_json): | |||
| 271 | A sequence of strings containing macros to implement for this keyboard. | 273 | A sequence of strings containing macros to implement for this keyboard. |
| 272 | """ | 274 | """ |
| 273 | new_keymap = DEFAULT_KEYMAP_C | 275 | new_keymap = DEFAULT_KEYMAP_C |
| 274 | layer_txt = _generate_keymap_table(keymap_json) | 276 | |
| 275 | keymap = '\n'.join(layer_txt) | 277 | keymap = '' |
| 278 | if 'layers' in keymap_json and keymap_json['layers'] is not None: | ||
| 279 | layer_txt = _generate_keymap_table(keymap_json) | ||
| 280 | keymap = '\n'.join(layer_txt) | ||
| 276 | new_keymap = new_keymap.replace('__KEYMAP_GOES_HERE__', keymap) | 281 | new_keymap = new_keymap.replace('__KEYMAP_GOES_HERE__', keymap) |
| 277 | 282 | ||
| 278 | encodermap = '' | 283 | encodermap = '' |
diff --git a/lib/python/qmk/tests/test_cli_commands.py b/lib/python/qmk/tests/test_cli_commands.py index b10fd8d19d..dd659fe0f2 100644 --- a/lib/python/qmk/tests/test_cli_commands.py +++ b/lib/python/qmk/tests/test_cli_commands.py | |||
| @@ -152,17 +152,16 @@ def test_json2c(): | |||
| 152 | * This file was generated by qmk json2c. You may or may not want to | 152 | * This file was generated by qmk json2c. You may or may not want to |
| 153 | * edit it directly. | 153 | * edit it directly. |
| 154 | */ | 154 | */ |
| 155 | |||
| 155 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | 156 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
| 156 | [0] = LAYOUT_ortho_1x1(KC_A) | 157 | [0] = LAYOUT_ortho_1x1(KC_A) |
| 157 | }; | 158 | }; |
| 158 | 159 | ||
| 159 | #if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE) | ||
| 160 | const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { | ||
| 161 | |||
| 162 | }; | ||
| 163 | #endif // defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE) | ||
| 164 | 160 | ||
| 165 | 161 | ||
| 162 | #ifdef OTHER_KEYMAP_C | ||
| 163 | # include OTHER_KEYMAP_C | ||
| 164 | #endif // OTHER_KEYMAP_C | ||
| 166 | 165 | ||
| 167 | 166 | ||
| 168 | """ | 167 | """ |
| @@ -190,28 +189,21 @@ def test_json2c_stdin(): | |||
| 190 | * This file was generated by qmk json2c. You may or may not want to | 189 | * This file was generated by qmk json2c. You may or may not want to |
| 191 | * edit it directly. | 190 | * edit it directly. |
| 192 | */ | 191 | */ |
| 192 | |||
| 193 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | 193 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
| 194 | [0] = LAYOUT_ortho_1x1(KC_A) | 194 | [0] = LAYOUT_ortho_1x1(KC_A) |
| 195 | }; | 195 | }; |
| 196 | 196 | ||
| 197 | #if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE) | ||
| 198 | const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { | ||
| 199 | |||
| 200 | }; | ||
| 201 | #endif // defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE) | ||
| 202 | 197 | ||
| 203 | 198 | ||
| 199 | #ifdef OTHER_KEYMAP_C | ||
| 200 | # include OTHER_KEYMAP_C | ||
| 201 | #endif // OTHER_KEYMAP_C | ||
| 204 | 202 | ||
| 205 | 203 | ||
| 206 | """ | 204 | """ |
| 207 | 205 | ||
| 208 | 206 | ||
| 209 | def test_json2c_wrong_json(): | ||
| 210 | result = check_subcommand('json2c', 'keyboards/handwired/pytest/info.json') | ||
| 211 | check_returncode(result, [1]) | ||
| 212 | assert 'Invalid JSON keymap' in result.stdout | ||
| 213 | |||
| 214 | |||
| 215 | def test_json2c_no_json(): | 207 | def test_json2c_no_json(): |
| 216 | result = check_subcommand('json2c', 'keyboards/handwired/pytest/basic/keymaps/default/keymap.c') | 208 | result = check_subcommand('json2c', 'keyboards/handwired/pytest/basic/keymaps/default/keymap.c') |
| 217 | check_returncode(result, [1]) | 209 | check_returncode(result, [1]) |
diff --git a/lib/python/qmk/tests/test_qmk_keymap.py b/lib/python/qmk/tests/test_qmk_keymap.py index 7482848eff..80cc679b00 100644 --- a/lib/python/qmk/tests/test_qmk_keymap.py +++ b/lib/python/qmk/tests/test_qmk_keymap.py | |||
| @@ -20,17 +20,16 @@ def test_generate_c_pytest_basic(): | |||
| 20 | * This file was generated by qmk json2c. You may or may not want to | 20 | * This file was generated by qmk json2c. You may or may not want to |
| 21 | * edit it directly. | 21 | * edit it directly. |
| 22 | */ | 22 | */ |
| 23 | |||
| 23 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | 24 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
| 24 | [0] = LAYOUT(KC_A) | 25 | [0] = LAYOUT(KC_A) |
| 25 | }; | 26 | }; |
| 26 | 27 | ||
| 27 | #if defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE) | ||
| 28 | const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = { | ||
| 29 | |||
| 30 | }; | ||
| 31 | #endif // defined(ENCODER_ENABLE) && defined(ENCODER_MAP_ENABLE) | ||
| 32 | 28 | ||
| 33 | 29 | ||
| 30 | #ifdef OTHER_KEYMAP_C | ||
| 31 | # include OTHER_KEYMAP_C | ||
| 32 | #endif // OTHER_KEYMAP_C | ||
| 34 | """ | 33 | """ |
| 35 | 34 | ||
| 36 | 35 | ||
