diff --git a/.vscode/settings.json b/.vscode/settings.json
index 5fedaf477bb..76117e52e0b 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -6,7 +6,8 @@
"files.exclude": {
"**/.build": true,
"**/*.hex": true,
- "**/*.bin": true
+ "**/*.bin": true,
+ "**/*.uf2": true
},
"files.associations": {
"*.h": "c",
diff --git a/builddefs/build_keyboard.mk b/builddefs/build_keyboard.mk
index fe95dcaf15b..65bc0451f7c 100644
--- a/builddefs/build_keyboard.mk
+++ b/builddefs/build_keyboard.mk
@@ -428,7 +428,6 @@ include $(BUILDDEFS_PATH)/common_features.mk
include $(BUILDDEFS_PATH)/generic_features.mk
include $(TMK_PATH)/protocol.mk
include $(PLATFORM_PATH)/common.mk
-include $(BUILDDEFS_PATH)/bootloader.mk
SRC += $(patsubst %.c,%.clib,$(LIB_SRC))
SRC += $(patsubst %.c,%.clib,$(QUANTUM_LIB_SRC))
@@ -443,6 +442,7 @@ ifneq ($(REQUIRE_PLATFORM_KEY),)
endif
endif
+-include $(PLATFORM_PATH)/$(PLATFORM_KEY)/bootloader.mk
include $(PLATFORM_PATH)/$(PLATFORM_KEY)/platform.mk
-include $(PLATFORM_PATH)/$(PLATFORM_KEY)/flash.mk
diff --git a/builddefs/common_features.mk b/builddefs/common_features.mk
index a23b5e82b91..9fa9e18814f 100644
--- a/builddefs/common_features.mk
+++ b/builddefs/common_features.mk
@@ -805,31 +805,25 @@ ifeq ($(strip $(PS2_MOUSE_ENABLE)), yes)
OPT_DEFS += -DMOUSE_ENABLE
endif
-ifeq ($(strip $(PS2_USE_BUSYWAIT)), yes)
- PS2_ENABLE := yes
- SRC += ps2_busywait.c
- SRC += ps2_io.c
- OPT_DEFS += -DPS2_USE_BUSYWAIT
-endif
-
-ifeq ($(strip $(PS2_USE_INT)), yes)
- PS2_ENABLE := yes
- SRC += ps2_interrupt.c
- SRC += ps2_io.c
- OPT_DEFS += -DPS2_USE_INT
-endif
-
-ifeq ($(strip $(PS2_USE_USART)), yes)
- PS2_ENABLE := yes
- SRC += ps2_usart.c
- SRC += ps2_io.c
- OPT_DEFS += -DPS2_USE_USART
-endif
+VALID_PS2_DRIVER_TYPES := busywait interrupt usart vendor
+PS2_DRIVER ?= busywait
ifeq ($(strip $(PS2_ENABLE)), yes)
+ ifeq ($(filter $(PS2_DRIVER),$(VALID_PS2_DRIVER_TYPES)),)
+ $(call CATASTROPHIC_ERROR,Invalid PS2_DRIVER,PS2_DRIVER="$(PS2_DRIVER)" is not a valid PS/2 driver)
+ endif
+
+ OPT_DEFS += -DPS2_DRIVER_$(strip $(shell echo $(PS2_DRIVER) | tr '[:lower:]' '[:upper:]'))
+
COMMON_VPATH += $(DRIVER_PATH)/ps2
COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/ps2
OPT_DEFS += -DPS2_ENABLE
+
+ ifneq ($(strip $(PS2_DRIVER)), vendor)
+ SRC += ps2_io.c
+ endif
+
+ SRC += ps2_$(strip $(PS2_DRIVER)).c
endif
JOYSTICK_ENABLE ?= no
diff --git a/builddefs/show_options.mk b/builddefs/show_options.mk
index 98537e6da25..8d992c080c8 100644
--- a/builddefs/show_options.mk
+++ b/builddefs/show_options.mk
@@ -66,7 +66,9 @@ OTHER_OPTION_NAMES = \
KEYLOGGER_ENABLE \
LCD_BACKLIGHT_ENABLE \
MACROS_ENABLED \
+ PS2_ENABLE \
PS2_MOUSE_ENABLE \
+ PS2_DRIVER \
RAW_ENABLE \
SWAP_HANDS_ENABLE \
RING_BUFFERED_6KRO_REPORT_ENABLE \
diff --git a/data/mappings/info_config.json b/data/mappings/info_config.json
index 582b5149ea4..cc13a7cea46 100644
--- a/data/mappings/info_config.json
+++ b/data/mappings/info_config.json
@@ -40,7 +40,7 @@
"LED_COMPOSE_PIN": {"info_key": "indicators.compose"},
"LED_KANA_PIN": {"info_key": "indicators.kana"},
"LED_PIN_ON_STATE": {"info_key": "indicators.on_state", "value_type": "int"},
- "MANUFACTURER": {"info_key": "manufacturer"},
+ "MANUFACTURER": {"info_key": "manufacturer", "value_type": "str"},
"MATRIX_HAS_GHOST": {"info_key": "matrix_pins.ghost", "value_type": "bool"},
"MATRIX_IO_DELAY": {"info_key": "matrix_pins.io_delay", "value_type": "int"},
"MOUSEKEY_DELAY": {"info_key": "mousekey.delay", "value_type": "int"},
@@ -52,6 +52,8 @@
"ONESHOT_TAP_TOGGLE": {"info_key": "oneshot.tap_toggle", "value_type": "int"},
"PERMISSIVE_HOLD": {"info_key": "tapping.permissive_hold", "value_type": "bool"},
"PERMISSIVE_HOLD_PER_KEY": {"info_key": "tapping.permissive_hold_per_key", "value_type": "bool"},
+ "PS2_CLOCK_PIN": {"info_key": "ps2.clock_pin"},
+ "PS2_DATA_PIN": {"info_key": "ps2.data_pin"},
"RETRO_TAPPING": {"info_key": "tapping.retro", "value_type": "bool"},
"RETRO_TAPPING_PER_KEY": {"info_key": "tapping.retro_per_key", "value_type": "bool"},
"RGB_DI_PIN": {"info_key": "rgblight.pin"},
@@ -78,7 +80,7 @@
"RGBLIGHT_SLEEP": {"info_key": "rgblight.sleep", "value_type": "bool"},
"RGBLIGHT_SPLIT": {"info_key": "rgblight.split", "value_type": "bool"},
"RGBW": {"info_key": "rgblight.rgbw", "value_type": "bool"},
- "PRODUCT": {"info_key": "keyboard_name", "warn_duplicate": false},
+ "PRODUCT": {"info_key": "keyboard_name", "warn_duplicate": false, "value_type": "str"},
"PRODUCT_ID": {"info_key": "usb.pid", "value_type": "hex"},
"VENDOR_ID": {"info_key": "usb.vid", "value_type": "hex"},
"QMK_ESC_OUTPUT": {"info_key": "qmk_lufa_bootloader.esc_output"},
diff --git a/data/mappings/info_rules.json b/data/mappings/info_rules.json
index 3f140277fea..eaeafeda798 100644
--- a/data/mappings/info_rules.json
+++ b/data/mappings/info_rules.json
@@ -12,7 +12,7 @@
# replace_with: use with a key marked deprecated or invalid to designate a replacement
"BOARD": {"info_key": "board"},
"BOOTLOADER": {"info_key": "bootloader", "warn_duplicate": false},
- "BLUETOOTH": {"info_key": "bluetooth.driver"},
+ "BLUETOOTH_DRIVER": {"info_key": "bluetooth.driver"},
"CAPS_WORD_ENABLE": {"info_key": "caps_word.enabled", "value_type": "bool"},
"ENCODER_ENABLE": {"info_key": "encoder.enabled", "value_type": "bool"},
"FIRMWARE_FORMAT": {"info_key": "build.firmware_format"},
@@ -32,6 +32,9 @@
"WAIT_FOR_USB": {"info_key": "usb.wait_for", "value_type": "bool"},
"STENO_ENABLE": {"info_key": "stenography.enabled", "value_type": "bool"},
"STENO_PROTOCOL": {"info_key": "stenography.protocol"},
+ "PS2_ENABLE": {"info_key": "ps2.enabled", "value_type": "bool"},
+ "PS2_MOUSE_ENABLE": {"info_key": "ps2.mouse_enabled", "value_type": "bool"},
+ "PS2_DRIVER": {"info_key": "ps2.driver"},
# Items we want flagged in lint
"CTPC": {"info_key": "_deprecated.ctpc", "deprecated": true, "replace_with": "CONVERT_TO=proton_c"},
diff --git a/data/schemas/api_keyboard.jsonschema b/data/schemas/api_keyboard.jsonschema
index d638658a1d4..6a30b5d990d 100644
--- a/data/schemas/api_keyboard.jsonschema
+++ b/data/schemas/api_keyboard.jsonschema
@@ -9,7 +9,6 @@
"properties": {
"url": {"type": "string"}
}
-
},
"parse_errors": {"$ref": "qmk.definitions.v1#/string_array"},
"parse_warnings": {"$ref": "qmk.definitions.v1#/string_array"},
diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema
index 77c5a584d4b..d0375fcdc4a 100644
--- a/data/schemas/keyboard.jsonschema
+++ b/data/schemas/keyboard.jsonschema
@@ -75,8 +75,7 @@
"driver": {
"type": "string",
"enum": ["BluefruitLE", "RN42"]
- },
- "lto": {"type": "boolean"},
+ }
}
},
"board": {
@@ -86,7 +85,27 @@
},
"bootloader": {
"type": "string",
- "enum": ["atmel-dfu", "bootloadhid", "bootloadHID", "custom", "caterina", "halfkay", "kiibohd", "lufa-dfu", "lufa-ms", "md-boot", "qmk-dfu", "qmk-hid", "stm32-dfu", "stm32duino", "gd32v-dfu", "wb32-dfu", "unknown", "usbasploader", "USBasp", "tinyuf2", "rp2040"],
+ "enum": [
+ "atmel-dfu",
+ "bootloadhid",
+ "caterina",
+ "custom",
+ "gd32v-dfu",
+ "halfkay",
+ "kiibohd",
+ "lufa-dfu",
+ "lufa-ms",
+ "md-boot",
+ "qmk-dfu",
+ "qmk-hid",
+ "rp2040",
+ "stm32-dfu",
+ "stm32duino",
+ "tinyuf2",
+ "unknown",
+ "usbasploader",
+ "wb32-dfu"
+ ]
},
"bootloader_instructions": {
"type": "string",
@@ -104,7 +123,7 @@
"type": "string",
"enum": ["bin", "hex", "uf2"]
},
- "lto": {"type": "boolean"},
+ "lto": {"type": "boolean"}
}
},
"diode_direction": {
@@ -119,8 +138,8 @@
"enabled": {"type": "boolean"},
"both_shifts_turns_on": {"type": "boolean"},
"double_tap_shift_turns_on": {"type": "boolean"},
- "idle_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"},
- },
+ "idle_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}
+ }
},
"combo": {
"type": "object",
@@ -228,10 +247,10 @@
"type": "object",
"properties": {
"enabled": {"type": "boolean"},
- "delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
- "interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
- "max_speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
- "time_to_max": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
+ "delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
+ "interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
+ "max_speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
+ "time_to_max": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"wheel_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}
}
},
@@ -371,6 +390,20 @@
}
}
},
+ "ps2": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "enabled": {"type": "boolean"},
+ "mouse_enabled": {"type": "boolean"},
+ "clock_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"},
+ "data_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"},
+ "driver": {
+ "type": "string",
+ "enum": ["busywait", "interrupt", "usart", "vendor"]
+ }
+ }
+ },
"split": {
"type": "object",
"additionalProperties": false,
@@ -458,7 +491,7 @@
"retro_per_key": {"type": "boolean"},
"term": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"term_per_key": {"type": "boolean"},
- "toggle": {"$ref": "qmk.definitions.v1#/unsigned_int"},
+ "toggle": {"$ref": "qmk.definitions.v1#/unsigned_int"}
}
},
"usb": {
@@ -482,7 +515,7 @@
}
},
"suspend_wakeup_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"},
- "wait_for": {"type": "boolean"},
+ "wait_for": {"type": "boolean"}
}
},
"qmk": {
@@ -491,7 +524,7 @@
"properties": {
"keys_per_scan": {"$ref": "qmk.definitions.v1#/unsigned_int_8"},
"tap_keycode_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"},
- "tap_capslock_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"},
+ "tap_capslock_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"}
}
},
"qmk_lufa_bootloader": {
diff --git a/data/schemas/keymap.jsonschema b/data/schemas/keymap.jsonschema
index 92a1ce533db..0a4fb5d4534 100644
--- a/data/schemas/keymap.jsonschema
+++ b/data/schemas/keymap.jsonschema
@@ -31,7 +31,7 @@
"properties": {
"action": {
"type": "string",
- "enum": ['beep', 'delay', 'down', 'tap', 'up']
+ "enum": ["beep", "delay", "down", "tap", "up"]
},
"keycodes": {
"type": "array",
diff --git a/docs/config_options.md b/docs/config_options.md
index 3e011a5cc98..05e27a835c0 100644
--- a/docs/config_options.md
+++ b/docs/config_options.md
@@ -39,11 +39,11 @@ This is a C header file that is one of the first things included, and will persi
* defines your VID, and for most DIY projects, can be whatever you want
* `#define PRODUCT_ID 0x5678`
* defines your PID, and for most DIY projects, can be whatever you want
-* `#define DEVICE_VER 0`
+* `#define DEVICE_VER 0x0100`
* defines the device version (often used for revisions)
-* `#define MANUFACTURER Me`
+* `#define MANUFACTURER "Me"`
* generally who/whatever brand produced the board
-* `#define PRODUCT Board`
+* `#define PRODUCT "Board"`
* the name of the keyboard
* `#define MATRIX_ROWS 5`
* the number of rows in your keyboard's matrix
diff --git a/docs/feature_caps_word.md b/docs/feature_caps_word.md
index 0b71119917f..283f0f52889 100644
--- a/docs/feature_caps_word.md
+++ b/docs/feature_caps_word.md
@@ -6,9 +6,9 @@ a modern alternative to Caps Lock:
* Letters are capitalized while active, and Caps Word automatically disables
itself at the end of the word. That is, it stops by default once a space or
- any key other than `a`--`z`, `0`--`9`, `-`, `_`, delete, or backspace is
- pressed. Caps Word also disables itself if the keyboard is idle for 5 seconds.
- This is configurable, see below.
+ any key other than `KC_A`--`KC_Z`, `KC_0`--`KC_9`, `KC_MINS`, `KC_UNDS`,
+ `KC_DELETE`, or `KC_BACKSPACE` is pressed. Caps Word also disables itself if
+ the keyboard is idle for 5 seconds. This is configurable, see below.
* To avoid requiring a dedicated key for Caps Word, there is an option
(`BOTH_SHIFTS_TURNS_ON_CAPS_WORD`) to activate Caps Word by simultaneously
@@ -16,7 +16,17 @@ a modern alternative to Caps Lock:
* The implementation does not use the Caps Lock (`KC_CAPS`) keycode. Caps Word
works even if you're remapping Caps Lock at the OS level to Ctrl or something
- else, as Emacs and Vim users often do.
+ else, as Emacs and Vim users often do. As a consequence, Caps Word does not
+ follow the typical Caps Lock behaviour and may thus act in potentially
+ unexpected ways, especially when using an *OS* keyboard layout other than US
+ or UK. For example, Dvorak's , < key (`DV_COMM` aka `KC_W`) will
+ get shifted because Caps Word interprets that keycode as the letter 'W' by
+ default, the Spanish Ñ key (`ES_NTIL` aka `KC_SCLN`) will not get
+ capitalized because Caps Word interprets it as the semicolon ';' punctuation
+ character, and the US hyphen key (`KC_MINS`), while unaffected by Caps Lock,
+ is shifted by Caps Word. However, this is not really a problem because you can
+ [configure which keys should Caps Word
+ shift](#configure-which-keys-are-word-breaking).
## How do I enable Caps Word :id=how-do-i-enable-caps-word
@@ -60,7 +70,7 @@ time, since both use the Left Shift + Right Shift key combination."**
Many keyboards enable the [Command feature](feature_command.md), which by
default is also activated using the Left Shift + Right Shift key combination. To
-fix this conflict, please disable Command by adding in rules.mk:
+fix this conflict, please disable Command by adding in rules.mk:
```make
COMMAND_ENABLE = no
@@ -81,7 +91,7 @@ by defining `IS_COMMAND()` in config.h:
Caps Word turns off automatically if no keys are pressed for
`CAPS_WORD_IDLE_TIMEOUT` milliseconds. The default is 5000 (5 seconds).
-Configure the timeout duration in config.h, for instance
+Configure the timeout duration in config.h, for instance
```c
#define CAPS_WORD_IDLE_TIMEOUT 3000 // 3 seconds.
diff --git a/docs/feature_combo.md b/docs/feature_combo.md
index 42d965509b9..bb0b5d7aa05 100644
--- a/docs/feature_combo.md
+++ b/docs/feature_combo.md
@@ -255,7 +255,7 @@ bool combo_should_trigger(uint16_t combo_index, combo_t *combo, uint16_t keycode
```
## Variable Length Combos
-If you leave `COMBO_COUNT` undefined in `config.h`, it allows you to programmatically declare the size of the Combo data structure and avoid updating `COMBO_COUNT`. Instead a variable called `COMBO_LEN` has to be set. It can be set with something similar to the following in `keymap.c`: `uint16_t COMBO_LEN = sizeof(key_combos) / sizeof(key_combos[0]);` or by adding `COMBO_LENGTH` as the *last* entry in the combo enum and then `uint16_t COMBO_LEN = COMBO_LENGTH;` as such:
+If you leave `COMBO_COUNT` undefined in `config.h`, it allows you to programmatically declare the size of the Combo data structure and avoid updating `COMBO_COUNT`. Instead a variable called `COMBO_LEN` has to be set. It can be set with something similar to the following in `keymap.c`: `uint16_t COMBO_LEN = ARRAY_SIZE(key_combos);` or by adding `COMBO_LENGTH` as the *last* entry in the combo enum and then `uint16_t COMBO_LEN = COMBO_LENGTH;` as such:
```c
enum myCombos {
...,
diff --git a/docs/feature_encoders.md b/docs/feature_encoders.md
index fdde03ac233..f93ab9fd2d5 100644
--- a/docs/feature_encoders.md
+++ b/docs/feature_encoders.md
@@ -88,6 +88,14 @@ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
#endif
```
+Using encoder mapping pumps events through the normal QMK keycode processing pipeline, resulting in a _keydown/keyup_ combination pushed through `process_record_xxxxx()`. To configure the amount of time between the encoder "keyup" and "keydown", you can add the following to your `config.h`:
+
+```c
+#define ENCODER_MAP_KEY_DELAY 10
+```
+
+?> By default, the encoder map delay matches the value of `TAP_CODE_DELAY`.
+
## Callbacks
When not using `ENCODER_MAP_ENABLE = yes`, the callback functions can be inserted into your `.c`:
@@ -119,7 +127,7 @@ bool encoder_update_user(uint8_t index, bool clockwise) {
}
```
-!> If you return `true`, it will allow the keyboard level code to run as well. Returning `false` will override the keyboard level code, depending on how the keyboard function is set up.
+!> If you return `true`, it will allow the keyboard level code to run as well. Returning `false` will override the keyboard level code, depending on how the keyboard function is set up.
Layer conditions can also be used with the callback function like the following:
@@ -172,7 +180,7 @@ The A an B lines of the encoders should be wired directly to the MCU, and the C/
Multiple encoders may share pins so long as each encoder has a distinct pair of pins when the following conditions are met:
- using detent encoders
- pads must be high at the detent stability point which is called 'default position' in QMK
-- no more than two encoders sharing a pin can be turned at the same time
+- no more than two encoders sharing a pin can be turned at the same time
For example you can support two encoders using only 3 pins like this
```
@@ -185,4 +193,4 @@ You could even support three encoders using only three pins (one per encoder) ho
#define ENCODERS_PAD_A { B1, B1, B2 }
#define ENCODERS_PAD_B { B2, B3, B3 }
```
-Here rotating Encoder 0 `B1 B2` and Encoder 1 `B1 B3` could be interpreted as rotating Encoder 2 `B2 B3` or `B3 B2` depending on the timing. This may still be a useful configuration depending on your use case
+Here rotating Encoder 0 `B1 B2` and Encoder 1 `B1 B3` could be interpreted as rotating Encoder 2 `B2 B3` or `B3 B2` depending on the timing. This may still be a useful configuration depending on your use case
diff --git a/docs/feature_pointing_device.md b/docs/feature_pointing_device.md
index 999dd1272dd..afc57ed4930 100644
--- a/docs/feature_pointing_device.md
+++ b/docs/feature_pointing_device.md
@@ -487,3 +487,13 @@ report_mouse_t pointing_device_task_combined_user(report_mouse_t left_report, re
return pointing_device_combine_reports(left_report, right_report);
}
```
+
+# Troubleshooting
+
+If you are having issues with pointing device drivers debug messages can be enabled that will give you insights in the inner workings. To enable these add to your keyboards `config.h` file:
+
+```c
+#define POINTING_DEVICE_DEBUG
+```
+
+?> The messages will be printed out to the `CONSOLE` output. For additional information, refer to [Debugging/Troubleshooting QMK](faq_debug.md).
diff --git a/docs/feature_ps2_mouse.md b/docs/feature_ps2_mouse.md
index c980705ae7f..e714d9b8676 100644
--- a/docs/feature_ps2_mouse.md
+++ b/docs/feature_ps2_mouse.md
@@ -32,13 +32,14 @@ In rules.mk:
```make
PS2_MOUSE_ENABLE = yes
-PS2_USE_BUSYWAIT = yes
+PS2_ENABLE = yes
+PS2_DRIVER = busywait
```
In your keyboard config.h:
```c
-#ifdef PS2_USE_BUSYWAIT
+#ifdef PS2_DRIVER_BUSYWAIT
# define PS2_CLOCK_PIN D1
# define PS2_DATA_PIN D2
#endif
@@ -52,13 +53,14 @@ In rules.mk:
```make
PS2_MOUSE_ENABLE = yes
-PS2_USE_INT = yes
+PS2_ENABLE = yes
+PS2_DRIVER = interrupt
```
In your keyboard config.h:
```c
-#ifdef PS2_USE_INT
+#ifdef PS2_DRIVER_INTERRUPT
#define PS2_CLOCK_PIN D2
#define PS2_DATA_PIN D5
@@ -84,7 +86,8 @@ In rules.mk:
```
PS2_MOUSE_ENABLE = yes
-PS2_USE_INT = yes
+PS2_ENABLE = yes
+PS2_DRIVER = interrupt
```
In your keyboard config.h:
@@ -108,13 +111,14 @@ In rules.mk:
```make
PS2_MOUSE_ENABLE = yes
-PS2_USE_USART = yes
+PS2_ENABLE = yes
+PS2_DRIVER = usart
```
In your keyboard config.h:
```c
-#ifdef PS2_USE_USART
+#ifdef PS2_DRIVER_USART
#define PS2_CLOCK_PIN D5
#define PS2_DATA_PIN D2
diff --git a/docs/feature_unicode.md b/docs/feature_unicode.md
index 2389cb735c0..94873d2827b 100644
--- a/docs/feature_unicode.md
+++ b/docs/feature_unicode.md
@@ -206,6 +206,17 @@ The functions for starting and finishing Unicode input on your platform can be o
You can find the default implementations of these functions in [`process_unicode_common.c`](https://github.com/qmk/qmk_firmware/blob/master/quantum/process_keycode/process_unicode_common.c).
+### Input Mode Callbacks
+
+There are callbacks functions available that are called whenever the unicode input mode changes. The new input mode is passed to the function.
+
+|Callback |Description |
+|---------------------------------------------------|-----------------------------------------------------|
+| `unicode_input_mode_set_kb(uint8_t input_mode)` | Callback for unicode input mode set, for keyboard. |
+| `unicode_input_mode_set_user(uint8_t input_mode)` | Callback for unicode input mode set, for users. |
+
+This feature can be used, for instance, to implement LED indicators for the current unicode input mode.
+
### Input Key Configuration
You can customize the keys used to trigger Unicode input for macOS, Linux and WinCompose by adding corresponding defines to your `config.h`. The default values match the platforms' default settings, so you shouldn't need to change this unless Unicode input isn't working, or you want to use a different key (e.g. in order to free up left or right Alt).
diff --git a/docs/ja/feature_ps2_mouse.md b/docs/ja/feature_ps2_mouse.md
index 569934c1876..2798f612830 100644
--- a/docs/ja/feature_ps2_mouse.md
+++ b/docs/ja/feature_ps2_mouse.md
@@ -36,13 +36,14 @@ rules.mk で:
```makefile
PS2_MOUSE_ENABLE = yes
-PS2_USE_BUSYWAIT = yes
+PS2_ENABLE = yes
+PS2_DRIVER = busywait
```
キーボードの config.h で:
```c
-#ifdef PS2_USE_BUSYWAIT
+#ifdef PS2_DRIVER_BUSYWAIT
# define PS2_CLOCK_PIN D1
# define PS2_DATA_PIN D2
#endif
@@ -56,13 +57,14 @@ rules.mk で:
```makefile
PS2_MOUSE_ENABLE = yes
-PS2_USE_INT = yes
+PS2_ENABLE = yes
+PS2_DRIVER = interrupt
```
キーボードの config.h で:
```c
-#ifdef PS2_USE_INT
+#ifdef PS2_DRIVER_INTERRUPT
#define PS2_CLOCK_PIN D2
#define PS2_DATA_PIN D5
@@ -88,14 +90,14 @@ rules.mk で:
```makefile
PS2_MOUSE_ENABLE = yes
-PS2_USE_USART = yes
+PS2_ENABLE = yes
+PS2_DRIVER = usart
```
キーボードの config.h で:
```c
-#ifdef PS2_USE_USART
-#ifdef PS2_USE_USART
+#ifdef PS2_DRIVER_USART
#define PS2_CLOCK_PIN D5
#define PS2_DATA_PIN D2
diff --git a/drivers/haptic/solenoid.c b/drivers/haptic/solenoid.c
index 637a77da3db..4e439032552 100644
--- a/drivers/haptic/solenoid.c
+++ b/drivers/haptic/solenoid.c
@@ -20,11 +20,12 @@
#include "haptic.h"
#include "gpio.h"
#include "usb_device_state.h"
+#include "util.h"
#include
uint8_t solenoid_dwell = SOLENOID_DEFAULT_DWELL;
static pin_t solenoid_pads[] = SOLENOID_PINS;
-#define NUMBER_OF_SOLENOIDS (sizeof(solenoid_pads) / sizeof(pin_t))
+#define NUMBER_OF_SOLENOIDS ARRAY_SIZE(solenoid_pads)
bool solenoid_on[NUMBER_OF_SOLENOIDS] = {false};
bool solenoid_buzzing[NUMBER_OF_SOLENOIDS] = {false};
uint16_t solenoid_start[NUMBER_OF_SOLENOIDS] = {0};
@@ -147,7 +148,7 @@ void solenoid_check(void) {
void solenoid_setup(void) {
#ifdef SOLENOID_PINS_ACTIVE_STATE
bool state_temp[] = SOLENOID_PINS_ACTIVE_STATE;
- uint8_t bound_check = (sizeof(state_temp) / sizeof(bool));
+ uint8_t bound_check = ARRAY_SIZE(state_temp);
#endif
for (uint8_t i = 0; i < NUMBER_OF_SOLENOIDS; i++) {
diff --git a/drivers/sensors/cirque_pinnacle.c b/drivers/sensors/cirque_pinnacle.c
index 8bd4eb736e1..4aed5fe67a3 100644
--- a/drivers/sensors/cirque_pinnacle.c
+++ b/drivers/sensors/cirque_pinnacle.c
@@ -4,8 +4,6 @@
// refer to documentation: Gen2 and Gen3 (Pinnacle ASIC) at https://www.cirque.com/documentation
#include "cirque_pinnacle.h"
-#include "print.h"
-#include "debug.h"
#include "wait.h"
#include "timer.h"
@@ -27,12 +25,6 @@ void cirque_pinnacle_enable_feed(bool feedEnable);
void RAP_ReadBytes(uint8_t address, uint8_t* data, uint8_t count);
void RAP_Write(uint8_t address, uint8_t data);
-#ifdef CONSOLE_ENABLE
-void print_byte(uint8_t byte) {
- xprintf("%c%c%c%c%c%c%c%c|", (byte & 0x80 ? '1' : '0'), (byte & 0x40 ? '1' : '0'), (byte & 0x20 ? '1' : '0'), (byte & 0x10 ? '1' : '0'), (byte & 0x08 ? '1' : '0'), (byte & 0x04 ? '1' : '0'), (byte & 0x02 ? '1' : '0'), (byte & 0x01 ? '1' : '0'));
-}
-#endif
-
#if CIRQUE_PINNACLE_POSITION_MODE
/* Logical Scaling Functions */
// Clips raw coordinates to "reachable" window of sensor
diff --git a/drivers/sensors/cirque_pinnacle.h b/drivers/sensors/cirque_pinnacle.h
index fa06e047f21..8717b329911 100644
--- a/drivers/sensors/cirque_pinnacle.h
+++ b/drivers/sensors/cirque_pinnacle.h
@@ -5,6 +5,7 @@
#include "cirque_pinnacle_regdefs.h"
#include
#include
+#include "pointing_device_internal.h"
#ifndef CIRQUE_PINNACLE_TIMEOUT
# define CIRQUE_PINNACLE_TIMEOUT 20 // I2C timeout in milliseconds
diff --git a/drivers/sensors/cirque_pinnacle_i2c.c b/drivers/sensors/cirque_pinnacle_i2c.c
index b328dd9a7a3..3c11e5f0796 100644
--- a/drivers/sensors/cirque_pinnacle_i2c.c
+++ b/drivers/sensors/cirque_pinnacle_i2c.c
@@ -1,8 +1,6 @@
// Copyright (c) 2018 Cirque Corp. Restrictions apply. See: www.cirque.com/sw-license
#include "cirque_pinnacle.h"
#include "i2c_master.h"
-#include "print.h"
-#include "debug.h"
#include "stdio.h"
// Masks for Cirque Register Access Protocol (RAP)
@@ -18,9 +16,7 @@ void RAP_ReadBytes(uint8_t address, uint8_t* data, uint8_t count) {
if (touchpad_init) {
i2c_writeReg(CIRQUE_PINNACLE_ADDR << 1, cmdByte, NULL, 0, CIRQUE_PINNACLE_TIMEOUT);
if (i2c_readReg(CIRQUE_PINNACLE_ADDR << 1, cmdByte, data, count, CIRQUE_PINNACLE_TIMEOUT) != I2C_STATUS_SUCCESS) {
-#ifdef CONSOLE_ENABLE
- dprintf("error cirque_pinnacle i2c_readReg\n");
-#endif
+ pd_dprintf("error cirque_pinnacle i2c_readReg\n");
touchpad_init = false;
}
i2c_stop();
@@ -33,9 +29,7 @@ void RAP_Write(uint8_t address, uint8_t data) {
if (touchpad_init) {
if (i2c_writeReg(CIRQUE_PINNACLE_ADDR << 1, cmdByte, &data, sizeof(data), CIRQUE_PINNACLE_TIMEOUT) != I2C_STATUS_SUCCESS) {
-#ifdef CONSOLE_ENABLE
- dprintf("error cirque_pinnacle i2c_writeReg\n");
-#endif
+ pd_dprintf("error cirque_pinnacle i2c_writeReg\n");
touchpad_init = false;
}
i2c_stop();
diff --git a/drivers/sensors/cirque_pinnacle_spi.c b/drivers/sensors/cirque_pinnacle_spi.c
index bd980fc8633..5cb39aebb02 100644
--- a/drivers/sensors/cirque_pinnacle_spi.c
+++ b/drivers/sensors/cirque_pinnacle_spi.c
@@ -1,8 +1,6 @@
// Copyright (c) 2018 Cirque Corp. Restrictions apply. See: www.cirque.com/sw-license
#include "cirque_pinnacle.h"
#include "spi_master.h"
-#include "print.h"
-#include "debug.h"
// Masks for Cirque Register Access Protocol (RAP)
#define WRITE_MASK 0x80
@@ -24,9 +22,7 @@ void RAP_ReadBytes(uint8_t address, uint8_t* data, uint8_t count) {
data[i] = spi_write(FILLER_BYTE); // write filler, receive data on the third filler send
}
} else {
-#ifdef CONSOLE_ENABLE
- dprintf("error cirque_pinnacle spi_start read\n");
-#endif
+ pd_dprintf("error cirque_pinnacle spi_start read\n");
touchpad_init = false;
}
spi_stop();
@@ -42,9 +38,7 @@ void RAP_Write(uint8_t address, uint8_t data) {
spi_write(cmdByte);
spi_write(data);
} else {
-#ifdef CONSOLE_ENABLE
- dprintf("error cirque_pinnacle spi_start write\n");
-#endif
+ pd_dprintf("error cirque_pinnacle spi_start write\n");
touchpad_init = false;
}
spi_stop();
diff --git a/drivers/sensors/pimoroni_trackball.c b/drivers/sensors/pimoroni_trackball.c
index 88a351316b0..326e59744f7 100644
--- a/drivers/sensors/pimoroni_trackball.c
+++ b/drivers/sensors/pimoroni_trackball.c
@@ -14,10 +14,10 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
+
+#include "pointing_device_internal.h"
#include "pimoroni_trackball.h"
#include "i2c_master.h"
-#include "print.h"
-#include "debug.h"
#include "timer.h"
// clang-format off
@@ -58,20 +58,17 @@ void pimoroni_trackball_set_rgbw(uint8_t r, uint8_t g, uint8_t b, uint8_t w) {
uint8_t data[4] = {r, g, b, w};
__attribute__((unused)) i2c_status_t status = i2c_writeReg(PIMORONI_TRACKBALL_ADDRESS << 1, PIMORONI_TRACKBALL_REG_LED_RED, data, sizeof(data), PIMORONI_TRACKBALL_TIMEOUT);
-#ifdef CONSOLE_ENABLE
- if (debug_mouse) dprintf("Trackball RGBW i2c_status_t: %d\n", status);
-#endif
+ pd_dprintf("Trackball RGBW i2c_status_t: %d\n", status);
}
i2c_status_t read_pimoroni_trackball(pimoroni_data_t* data) {
i2c_status_t status = i2c_readReg(PIMORONI_TRACKBALL_ADDRESS << 1, PIMORONI_TRACKBALL_REG_LEFT, (uint8_t*)data, sizeof(*data), PIMORONI_TRACKBALL_TIMEOUT);
-#ifdef CONSOLE_ENABLE
- if (debug_mouse) {
- static uint16_t d_timer;
- if (timer_elapsed(d_timer) > PIMORONI_TRACKBALL_DEBUG_INTERVAL) {
- dprintf("Trackball READ i2c_status_t: %d L: %d R: %d Up: %d D: %d SW: %d\n", status, data->left, data->right, data->up, data->down, data->click);
- d_timer = timer_read();
- }
+
+#ifdef POINTING_DEVICE_DEBUG
+ static uint16_t d_timer;
+ if (timer_elapsed(d_timer) > PIMORONI_TRACKBALL_DEBUG_INTERVAL) {
+ pd_dprintf("Trackball READ i2c_status_t: %d L: %d R: %d Up: %d D: %d SW: %d\n", status, data->left, data->right, data->up, data->down, data->click);
+ d_timer = timer_read();
}
#endif
diff --git a/drivers/sensors/pmw33xx_common.c b/drivers/sensors/pmw33xx_common.c
index 13164cb1509..b8d4e532ca3 100644
--- a/drivers/sensors/pmw33xx_common.c
+++ b/drivers/sensors/pmw33xx_common.c
@@ -7,9 +7,8 @@
// Copyright 2020 Ploopy Corporation
// SPDX-License-Identifier: GPL-2.0-or-later
-#include "debug.h"
+#include "pointing_device_internal.h"
#include "pmw33xx_common.h"
-#include "print.h"
#include "string.h"
#include "wait.h"
#include "spi_master.h"
@@ -18,10 +17,10 @@
extern const uint8_t pmw33xx_firmware_data[PMW33XX_FIRMWARE_LENGTH] PROGMEM;
extern const uint8_t pmw33xx_firmware_signature[3] PROGMEM;
-static const pin_t cs_pins[] = PMW33XX_CS_PINS;
-static bool in_burst[sizeof(cs_pins) / sizeof(pin_t)] = {0};
+static const pin_t cs_pins[] = PMW33XX_CS_PINS;
+static bool in_burst[ARRAY_SIZE(cs_pins)] = {0};
-const size_t pmw33xx_number_of_sensors = sizeof(cs_pins) / sizeof(pin_t);
+const size_t pmw33xx_number_of_sensors = ARRAY_SIZE(cs_pins);
bool __attribute__((cold)) pmw33xx_upload_firmware(uint8_t sensor);
bool __attribute__((cold)) pmw33xx_check_signature(uint8_t sensor);
@@ -154,7 +153,7 @@ bool pmw33xx_init(uint8_t sensor) {
pmw33xx_read(sensor, REG_Delta_Y_H);
if (!pmw33xx_upload_firmware(sensor)) {
- dprintf("PMW33XX (%d): firmware upload failed!\n", sensor);
+ pd_dprintf("PMW33XX (%d): firmware upload failed!\n", sensor);
return false;
}
@@ -170,7 +169,7 @@ bool pmw33xx_init(uint8_t sensor) {
pmw33xx_write(sensor, REG_Lift_Config, PMW33XX_LIFTOFF_DISTANCE);
if (!pmw33xx_check_signature(sensor)) {
- dprintf("PMW33XX (%d): firmware signature verification failed!\n", sensor);
+ pd_dprintf("PMW33XX (%d): firmware signature verification failed!\n", sensor);
return false;
}
@@ -185,7 +184,7 @@ pmw33xx_report_t pmw33xx_read_burst(uint8_t sensor) {
}
if (!in_burst[sensor]) {
- dprintf("PMW33XX (%d): burst\n", sensor);
+ pd_dprintf("PMW33XX (%d): burst\n", sensor);
if (!pmw33xx_write(sensor, REG_Motion_Burst, 0x00)) {
return report;
}
@@ -208,9 +207,7 @@ pmw33xx_report_t pmw33xx_read_burst(uint8_t sensor) {
spi_stop();
- if (debug_config.mouse) {
- dprintf("PMW33XX (%d): motion: 0x%x dx: %i dy: %i\n", sensor, report.motion.w, report.delta_x, report.delta_y);
- }
+ pd_dprintf("PMW33XX (%d): motion: 0x%x dx: %i dy: %i\n", sensor, report.motion.w, report.delta_x, report.delta_y);
report.delta_x *= -1;
report.delta_y *= -1;
diff --git a/keyboards/25keys/zinc/keymaps/ginjake/keymap.c b/keyboards/25keys/zinc/keymaps/ginjake/keymap.c
index 93dfc590e9b..26190a2a916 100644
--- a/keyboards/25keys/zinc/keymaps/ginjake/keymap.c
+++ b/keyboards/25keys/zinc/keymaps/ginjake/keymap.c
@@ -333,7 +333,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
aqours_num++;
aqours_next_color_timer_count = 0;
target_col = 0;
- if (aqours_num == sizeof(aqours_h) / sizeof(int)) {
+ if (aqours_num == ARRAY_SIZE(aqours_h)) {
aqours_num = 0;
}
}
diff --git a/keyboards/40percentclub/gherkin/keymaps/mjt/config.h b/keyboards/40percentclub/gherkin/keymaps/mjt/config.h
index ce9d5ab2ae4..5a295a06ca9 100644
--- a/keyboards/40percentclub/gherkin/keymaps/mjt/config.h
+++ b/keyboards/40percentclub/gherkin/keymaps/mjt/config.h
@@ -1,5 +1,4 @@
#pragma once
-/* USB Device descriptor parameter */
#undef MANUFACTURER
-#define MANUFACTURER Some Guy
+#define MANUFACTURER "Some Guy"
diff --git a/keyboards/40percentclub/mf68/keymaps/68keys/config.h b/keyboards/40percentclub/mf68/keymaps/68keys/config.h
index 651c17069d3..66e7bbed993 100644
--- a/keyboards/40percentclub/mf68/keymaps/68keys/config.h
+++ b/keyboards/40percentclub/mf68/keymaps/68keys/config.h
@@ -9,5 +9,5 @@
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x0A0C
#define DEVICE_VER 0x0068
-#define MANUFACTURER 68Keys.io
-#define PRODUCT The 68Keys.io Keyboard
+#define MANUFACTURER "68Keys.io"
+#define PRODUCT "The 68Keys.io Keyboard"
diff --git a/keyboards/40percentclub/mf68/keymaps/delivrance/config.h b/keyboards/40percentclub/mf68/keymaps/delivrance/config.h
index 7ae88057658..50c64b4b51d 100644
--- a/keyboards/40percentclub/mf68/keymaps/delivrance/config.h
+++ b/keyboards/40percentclub/mf68/keymaps/delivrance/config.h
@@ -21,10 +21,10 @@
#pragma once
#undef MANUFACTURER
-#define MANUFACTURER Dan
+#define MANUFACTURER "Dan"
#undef PRODUCT
-#define PRODUCT Magicforce 68 QMK
+#define PRODUCT "Magicforce 68 QMK"
#undef BACKLIGHT_LEVELS
#define BACKLIGHT_LEVELS 20
diff --git a/keyboards/acheron/shark/beta/keymaps/gondolindrim/keymap.c b/keyboards/acheron/shark/beta/keymaps/gondolindrim/keymap.c
index cae98411d6e..fd7f556b569 100755
--- a/keyboards/acheron/shark/beta/keymaps/gondolindrim/keymap.c
+++ b/keyboards/acheron/shark/beta/keymaps/gondolindrim/keymap.c
@@ -94,7 +94,7 @@ encoder_mode_t encoder_modes[] = {
// Insert your custom encoder mode here
};
-#define NUM_ENCODER_MODES (sizeof(encoder_modes)/sizeof(encoder_modes[0]))
+#define NUM_ENCODER_MODES ARRAY_SIZE(encoder_modes)
// This counter is used to track what encoder mode is being used at a certain time
int encoder_mode_count = 0;
diff --git a/keyboards/adafruit/macropad/lib/ssd1306_sh1106.c b/keyboards/adafruit/macropad/lib/ssd1306_sh1106.c
index dc1289fdb13..1b058096405 100644
--- a/keyboards/adafruit/macropad/lib/ssd1306_sh1106.c
+++ b/keyboards/adafruit/macropad/lib/ssd1306_sh1106.c
@@ -94,8 +94,6 @@ along with this program. If not, see .
#define OLED_ALL_BLOCKS_MASK (((((OLED_BLOCK_TYPE)1 << (OLED_BLOCK_COUNT - 1)) - 1) << 1) | 1)
-#define ARRAY_SIZE(arr) sizeof(arr)/sizeof(arr[0])
-
// spi defines
#define OLED_STATUS_SUCCESS SPI_STATUS_SUCCESS
diff --git a/keyboards/adpenrose/shisaku/info.json b/keyboards/adpenrose/shisaku/info.json
index 6f765ba648c..a93898c33b0 100644
--- a/keyboards/adpenrose/shisaku/info.json
+++ b/keyboards/adpenrose/shisaku/info.json
@@ -1,5 +1,6 @@
{
"keyboard_name": "shisaku",
+ "manufacturer": "ADPenrose",
"url": "https://github.com/ADPenrose/shisaku_keeb",
"maintainer": "ADPenrose",
"usb": {
diff --git a/keyboards/ai/readme.md b/keyboards/ai/readme.md
index 670996640fb..f61e4933ac5 100644
--- a/keyboards/ai/readme.md
+++ b/keyboards/ai/readme.md
@@ -31,4 +31,4 @@ Enter the bootloader in 3 ways:
- **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
- **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
-- **Keycode in layout**: Press the key mapped to `RESET` if it is available
+- **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/aidansmithdotdev/fine40/readme.md b/keyboards/aidansmithdotdev/fine40/readme.md
index ad3eba7c5cc..19d23fb914e 100644
--- a/keyboards/aidansmithdotdev/fine40/readme.md
+++ b/keyboards/aidansmithdotdev/fine40/readme.md
@@ -24,4 +24,4 @@ Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (top left key) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
-* **Keycode in layout**: Press the key mapped to `RESET` if it is available
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/annepro2/annepro2_ble.c b/keyboards/annepro2/annepro2_ble.c
index 0336d6a76cc..c75de6720ce 100644
--- a/keyboards/annepro2/annepro2_ble.c
+++ b/keyboards/annepro2/annepro2_ble.c
@@ -24,15 +24,14 @@
/* -------------------- Static Function Prototypes -------------------------- */
static uint8_t ap2_ble_leds(void);
static void ap2_ble_mouse(report_mouse_t *report);
-static void ap2_ble_system(uint16_t data);
-static void ap2_ble_consumer(uint16_t data);
+static void ap2_ble_extra(uint8_t report_id, uint16_t data);
static void ap2_ble_keyboard(report_keyboard_t *report);
static void ap2_ble_swtich_ble_driver(void);
/* -------------------- Static Local Variables ------------------------------ */
static host_driver_t ap2_ble_driver = {
- ap2_ble_leds, ap2_ble_keyboard, ap2_ble_mouse, ap2_ble_system, ap2_ble_consumer,
+ ap2_ble_leds, ap2_ble_keyboard, ap2_ble_mouse, ap2_ble_extra
};
static uint8_t ble_mcu_wakeup[11] = {0x7b, 0x12, 0x53, 0x00, 0x03, 0x00, 0x01, 0x7d, 0x02, 0x01, 0x02};
@@ -131,8 +130,6 @@ static uint8_t ap2_ble_leds(void) {
static void ap2_ble_mouse(report_mouse_t *report) {}
-static void ap2_ble_system(uint16_t data) {}
-
static inline uint16_t CONSUMER2AP2(uint16_t usage) {
switch (usage) {
case AUDIO_VOL_DOWN:
@@ -152,12 +149,14 @@ static inline uint16_t CONSUMER2AP2(uint16_t usage) {
}
}
-static void ap2_ble_consumer(uint16_t data) {
- sdPut(&SD1, 0x0);
- sdWrite(&SD1, ble_mcu_send_consumer_report, sizeof(ble_mcu_send_consumer_report));
- sdPut(&SD1, CONSUMER2AP2(data));
- static const uint8_t dummy[3] = {0};
- sdWrite(&SD1, dummy, sizeof(dummy));
+static void ap2_ble_extra(uint8_t report_id, uint16_t data) {
+ if (report_id == REPORT_ID_CONSUMER) {
+ sdPut(&SD1, 0x0);
+ sdWrite(&SD1, ble_mcu_send_consumer_report, sizeof(ble_mcu_send_consumer_report));
+ sdPut(&SD1, CONSUMER2AP2(data));
+ static const uint8_t dummy[3] = {0};
+ sdWrite(&SD1, dummy, sizeof(dummy));
+ }
}
/*!
diff --git a/keyboards/at_at/660m/config.h b/keyboards/at_at/660m/config.h
index b3676e97043..cdb9b81967c 100644
--- a/keyboards/at_at/660m/config.h
+++ b/keyboards/at_at/660m/config.h
@@ -17,7 +17,7 @@ along with this program. If not, see .
#pragma once
-/* Ensure we jump to bootloader if the RESET keycode was pressed */
+/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
/* LSE clock */
diff --git a/keyboards/bandominedoni/bandominedoni.c b/keyboards/bandominedoni/bandominedoni.c
index eacbb40fa06..27df3598d46 100644
--- a/keyboards/bandominedoni/bandominedoni.c
+++ b/keyboards/bandominedoni/bandominedoni.c
@@ -117,55 +117,3 @@ static enum { UNKNOWN, LEFT, RIGHT } hand_side = UNKNOWN;
return (hand_side == LEFT);
}
}
-
-#ifdef ENCODER_ENABLE
-# ifdef ENCODERS
-static uint8_t encoder_state[ENCODERS] = {0};
-static keypos_t encoder_cw[ENCODERS] = ENCODERS_CW_KEY;
-static keypos_t encoder_ccw[ENCODERS] = ENCODERS_CCW_KEY;
-# endif
-
-void encoder_action_unregister(void) {
-# ifdef ENCODERS
- for (int index = 0; index < ENCODERS; ++index) {
- if (encoder_state[index]) {
- keyevent_t encoder_event = (keyevent_t) {
- .key = encoder_state[index] >> 1 ? encoder_cw[index] : encoder_ccw[index],
- .pressed = false,
- .time = (timer_read() | 1)
- };
- encoder_state[index] = 0;
- action_exec(encoder_event);
- }
- }
-# endif
-}
-
-void encoder_action_register(uint8_t index, bool clockwise) {
-# ifdef ENCODERS
- keyevent_t encoder_event = (keyevent_t) {
- .key = clockwise ? encoder_cw[index] : encoder_ccw[index],
- .pressed = true,
- .time = (timer_read() | 1)
- };
- encoder_state[index] = (clockwise ^ 1) | (clockwise << 1);
-# ifdef CONSOLE_ENABLE
- uprintf("encoder_action_register index = %u, clockwise = %u, row = %u, col = %u\n", index, clockwise, encoder_event.key.row, encoder_event.key.col);
-# endif
- action_exec(encoder_event);
-# endif
-}
-
-void matrix_scan_kb(void) {
- encoder_action_unregister();
- matrix_scan_user();
-}
-
-bool encoder_update_kb(uint8_t index, bool clockwise) {
- encoder_action_register(index, clockwise);
- // don't return user actions, because they are in the keymap
- // encoder_update_user(index, clockwise);
- return true;
-};
-
-#endif
diff --git a/keyboards/bandominedoni/bandominedoni.h b/keyboards/bandominedoni/bandominedoni.h
index 1eca4f8d980..6011a2cc712 100644
--- a/keyboards/bandominedoni/bandominedoni.h
+++ b/keyboards/bandominedoni/bandominedoni.h
@@ -38,7 +38,7 @@
l40, l41, l42, l43, l44, l45, l46, l47, \
\
oc, r00, r01, r02, r03, fn, \
- r10, r11, r12, r13, r14, ccw, cw,\
+ r10, r11, r12, r13, r14, \
r20, r21, r22, r23, r24, r25, \
r30, r31, r32, r33, r34, r35, r36, r37, \
r40, r41, r42, r43, r44, r45, r46, r47, \
@@ -49,7 +49,7 @@
{ l20, l21, l22, l23, l24, l25, l26 }, \
{ l30, l31, l32, l33, l34, l35, l36 }, \
{ l41, l42, l43, l44, l45, l46, l47 }, \
- { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, ccw, cw }, \
+ { KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO }, \
{ r50, r40, r31, r20, r10, r00, r30 }, \
{ r51, r41, r32, r21, r11, r01, oc }, \
{ r52, r42, r33, r22, r12, r02, fn }, \
@@ -83,6 +83,3 @@
// However, It enables to decide the handedness by the HW by adding one condition: "not to press any keys (especially r30) dusing startup."
bool is_keyboard_left(void);
-void encoder_action_unregister(void);
-
-void encoder_action_register(uint8_t index, bool clockwise);
diff --git a/keyboards/bandominedoni/config.h b/keyboards/bandominedoni/config.h
index 2e7317889c7..17f5675f607 100644
--- a/keyboards/bandominedoni/config.h
+++ b/keyboards/bandominedoni/config.h
@@ -248,13 +248,11 @@
* Encoder options
*/
#ifdef ENCODER_ENABLE
-# define ENCODERS_PAD_A { C7 } // dummy
-# define ENCODERS_PAD_B { B7 } // dummy
+# define ENCODERS_PAD_A { }
+# define ENCODERS_PAD_B { }
+# define ENCODER_RESOLUTIONS { }
# define ENCODERS_PAD_A_RIGHT { F5 }
# define ENCODERS_PAD_B_RIGHT { F4 }
-# define ENCODER_RESOLUTION 4
+# define ENCODER_RESOLUTIONS_RIGHT { 4 }
# define TAP_CODE_DELAY 10
-# define ENCODERS 2
-# define ENCODERS_CW_KEY { {4, 5}, {6, 5} }
-# define ENCODERS_CCW_KEY { {3, 5}, {5, 5} }
#endif // ENCODER_ENABLE
diff --git a/keyboards/bandominedoni/info.json b/keyboards/bandominedoni/info.json
index 040526b39c3..f78621ec412 100644
--- a/keyboards/bandominedoni/info.json
+++ b/keyboards/bandominedoni/info.json
@@ -65,9 +65,6 @@
{"label": "r13", "x": 14, "y": 1},
{"label": "r14", "x": 15, "y": 1},
- {"label": "ccw", "x": 16.5, "y": 1},
- {"label": "cw", "x": 17.5, "y": 1},
-
{"label": "r20", "x": 10.5, "y": 2},
{"label": "r21", "x": 11.5, "y": 2},
{"label": "r22", "x": 12.5, "y": 2},
diff --git a/keyboards/bandominedoni/keymaps/default/keymap.c b/keyboards/bandominedoni/keymaps/default/keymap.c
index e01253c2160..90e3f3417eb 100644
--- a/keyboards/bandominedoni/keymaps/default/keymap.c
+++ b/keyboards/bandominedoni/keymaps/default/keymap.c
@@ -41,7 +41,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
MI_D_1, MI_B_1, MI_G_3, MI_A_3, MI_Ds_3, MI_Fs_2, MI_Ds_1, MI_C_1,
MO_SWAP, MI_B_5, MI_Gs_5, MI_G_5, MI_F_5, FN_MUTE,
- MI_Cs_3, MI_A_5, MI_Fs_5, MI_E_5, MI_Ds_5, KC_VOLD, KC_VOLU,
+ MI_Cs_3, MI_A_5, MI_Fs_5, MI_E_5, MI_Ds_5,
MI_C_3, MI_D_3, MI_G_3, MI_As_4, MI_C_5, MI_D_5,
TG_SWAP, MI_B_2, MI_E_3, MI_Cs_4, MI_Fs_3, MI_A_3, MI_C_4, MI_E_4,
MI_A_2, MI_F_3, MI_As_3, MI_Gs_3, MI_B_3, MI_D_4, MI_Gs_4, MI_B_4,
@@ -56,7 +56,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
MI_E_1, MI_E_2, MI_Fs_3, MI_Gs_3, MI_B_3, MI_F_2, MI_Cs_1, MI_F_1,
MO_SWAP, MI_A_5, MI_Gs_5, MI_Fs_5, MI_F_5, FN_MUTE,
- MI_C_3, MI_G_5, MI_As_4, MI_C_5, MI_Ds_5, KC_VOLD, KC_VOLU,
+ MI_C_3, MI_G_5, MI_As_4, MI_C_5, MI_Ds_5,
MI_D_3, MI_Cs_3, MI_Gs_3, MI_As_3, MI_C_4, MI_D_5,
TG_SWAP, MI_B_2, MI_Fs_3, MI_Fs_4, MI_G_3, MI_B_3, MI_D_4, MI_G_4,
MI_A_2, MI_F_3, MI_E_3, MI_A_3, MI_Cs_4, MI_E_4, MI_A_4, MI_Cs_5,
@@ -71,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
_______, MI_OCTD, MI_OCTU, MI_VELD, MI_VELU, _______,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION,
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
@@ -79,6 +79,14 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_OPEN] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_CLOSE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_FN] = { ENCODER_CCW_CW(_______, _______) },
+};
+#endif
+
void keyboard_post_init_user(void) {
// Set octave to MI_OCT_0
midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
diff --git a/keyboards/bandominedoni/keymaps/default/rules.mk b/keyboards/bandominedoni/keymaps/default/rules.mk
new file mode 100644
index 00000000000..8006608ea92
--- /dev/null
+++ b/keyboards/bandominedoni/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes # replacing ENCODERS_CW_KEY method to this on 2022/08/31.
diff --git a/keyboards/bandominedoni/keymaps/led/keymap.c b/keyboards/bandominedoni/keymaps/led/keymap.c
index 3b1ebc57d34..8659697a919 100644
--- a/keyboards/bandominedoni/keymaps/led/keymap.c
+++ b/keyboards/bandominedoni/keymaps/led/keymap.c
@@ -71,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
MI_D_1, MI_B_1, MI_G_3, MI_A_3, MI_Ds_3, MI_Fs_2, MI_Ds_1, MI_C_1,
MO_SWAP, MI_B_5, MI_Gs_5, MI_G_5, MI_F_5, FN_MUTE,
- MI_Cs_3, MI_A_5, MI_Fs_5, MI_E_5, MI_Ds_5, KC_VOLD, KC_VOLU,
+ MI_Cs_3, MI_A_5, MI_Fs_5, MI_E_5, MI_Ds_5,
MI_C_3, MI_D_3, MI_G_3, MI_As_4, MI_C_5, MI_D_5,
TG_SWAP, MI_B_2, MI_E_3, MI_Cs_4, MI_Fs_3, MI_A_3, MI_C_4, MI_E_4,
MI_A_2, MI_F_3, MI_As_3, MI_Gs_3, MI_B_3, MI_D_4, MI_Gs_4, MI_B_4,
@@ -86,7 +86,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
MI_E_1, MI_E_2, MI_Fs_3, MI_Gs_3, MI_B_3, MI_F_2, MI_Cs_1, MI_F_1,
MO_SWAP, MI_A_5, MI_Gs_5, MI_Fs_5, MI_F_5, FN_MUTE,
- MI_C_3, MI_G_5, MI_As_4, MI_C_5, MI_Ds_5, KC_VOLD, KC_VOLU,
+ MI_C_3, MI_G_5, MI_As_4, MI_C_5, MI_Ds_5,
MI_D_3, MI_Cs_3, MI_Gs_3, MI_As_3, MI_C_4, MI_D_5,
TG_SWAP, MI_B_2, MI_Fs_3, MI_Fs_4, MI_G_3, MI_B_3, MI_D_4, MI_G_4,
MI_A_2, MI_F_3, MI_E_3, MI_A_3, MI_Cs_4, MI_E_4, MI_A_4, MI_Cs_5,
@@ -101,7 +101,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_GRV, KC_LGUI, KC_LALT, MIS_EIS, KC_SPC, KC_SPC, KC_PSCR,
MO(_MISC), KC_LBRC, KC_RBRC, KC_BSLS, KC_0, _______,
- KC_6, KC_7, KC_8, KC_9, KC_BSPC, _______, _______,
+ KC_6, KC_7, KC_8, KC_9, KC_BSPC,
_________________QWERTY_R1_________________, KC_DEL,
KC_PGUP, KC_G, _________________QWERTY_R2_________________, KC_ENT,
KC_PGDN, KC_B, _________________QWERTY_R3_________________, KC_RSFT,
@@ -116,7 +116,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_CAPS, KC_GRV, KC_LGUI, KC_LALT, MIS_EIS, KC_SPC, KC_SPC, KC_PSCR,
MO(_MISC), KC_LBRC, KC_RBRC, KC_BSLS, KC_0, _______,
- KC_6, KC_7, KC_8, KC_9, KC_BSPC, _______, _______,
+ KC_6, KC_7, KC_8, KC_9, KC_BSPC,
_________________COLEMAK_R1________________, KC_DEL,
KC_PGUP, KC_D, _________________COLEMAK_R2________________, KC_ENT,
KC_PGDN, KC_B, _________________COLEMAK_R3________________, KC_RSFT,
@@ -131,7 +131,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, KC_F10, _______,
- KC_F6, KC_F7, KC_F8, KC_F9, _______, _______, _______,
+ KC_F6, KC_F7, KC_F8, KC_F9, _______,
_______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, KC_QUOT, _______,
_______, _______, _______, _______, _______, _______, _______, _______,
@@ -146,7 +146,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
XXXXXXX, XXXXXXX, AG_NORM, AG_SWAP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
_______, MI_OCTD, MI_OCTU, MI_VELD, MI_VELU, _______,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_RMOD, RGB_MOD,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION,
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
RGB_SAD, RGB_SAI, RGB_HUD, RGB_HUI, RGB_SPD, RGB_SPI, RGB_VAD, RGB_VAI,
@@ -154,6 +154,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_OPEN] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_CLOSE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_QWERTY] = { ENCODER_CCW_CW(_______, _______) },
+ [_COLEMAK] = { ENCODER_CCW_CW(_______, _______) },
+ [_MISC] = { ENCODER_CCW_CW(_______, _______) },
+ [_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) },
+};
+#endif
+
void my_init(void){
// Set octave to MI_OCT_0
midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
diff --git a/keyboards/bandominedoni/keymaps/led/rules.mk b/keyboards/bandominedoni/keymaps/led/rules.mk
index 08ed472ad68..0a1c4b1858e 100644
--- a/keyboards/bandominedoni/keymaps/led/rules.mk
+++ b/keyboards/bandominedoni/keymaps/led/rules.mk
@@ -1,2 +1,4 @@
RGB_MATRIX_ENABLE = yes # Use RGB matrix (Don't enable this when RGBLIGHT_ENABLE is used.)
RGB_MATRIX_CUSTOM_KB = yes #
+
+ENCODER_MAP_ENABLE = yes # replacing ENCODERS_CW_KEY method to this on 2022/08/31.
diff --git a/keyboards/bandominedoni/keymaps/lednotg/keymap.c b/keyboards/bandominedoni/keymaps/lednotg/keymap.c
index fa523793b18..ba25c1d55fa 100644
--- a/keyboards/bandominedoni/keymaps/lednotg/keymap.c
+++ b/keyboards/bandominedoni/keymaps/lednotg/keymap.c
@@ -49,10 +49,10 @@ enum layer_names {
#ifdef PEDAL_NORMALLY_CLOSED
_OPEN,
#endif
- _QWERTY,
- _COLEMAK,
- _MISC,
- _FN
+ _QWERTY,
+ _COLEMAK,
+ _MISC,
+ _FN
};
enum custom_keycodes {
@@ -71,7 +71,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
MI_D_1, MI_B_1, MI_G_3, MI_A_3, MI_Ds_3, MI_Fs_2, MI_Ds_1, MI_C_1,
MO_SWAP, MI_B_5, MI_Gs_5, MI_G_5, MI_F_5, FN_MUTE,
- MI_Cs_3, MI_A_5, MI_Fs_5, MI_E_5, MI_Ds_5, KC_VOLD, KC_VOLU,
+ MI_Cs_3, MI_A_5, MI_Fs_5, MI_E_5, MI_Ds_5,
MI_C_3, MI_D_3, MI_G_3, MI_As_4, MI_C_5, MI_D_5,
MI_G_2, MI_B_2, MI_E_3, MI_Cs_4, MI_Fs_3, MI_A_3, MI_C_4, MI_E_4,
MI_A_2, MI_F_3, MI_As_3, MI_Gs_3, MI_B_3, MI_D_4, MI_Gs_4, MI_B_4,
@@ -86,7 +86,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
MI_E_1, MI_E_2, MI_Fs_3, MI_Gs_3, MI_B_3, MI_F_2, MI_Cs_1, MI_F_1,
MO_SWAP, MI_A_5, MI_Gs_5, MI_Fs_5, MI_F_5, FN_MUTE,
- MI_C_3, MI_G_5, MI_As_4, MI_C_5, MI_Ds_5, KC_VOLD, KC_VOLU,
+ MI_C_3, MI_G_5, MI_As_4, MI_C_5, MI_Ds_5,
MI_D_3, MI_Cs_3, MI_Gs_3, MI_As_3, MI_C_4, MI_D_5,
MI_G_2, MI_B_2, MI_Fs_3, MI_Fs_4, MI_G_3, MI_B_3, MI_D_4, MI_G_4,
MI_A_2, MI_F_3, MI_E_3, MI_A_3, MI_Cs_4, MI_E_4, MI_A_4, MI_Cs_5,
@@ -101,7 +101,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_GRV, KC_LGUI, KC_LALT, MIS_EIS, KC_SPC, KC_SPC, KC_PSCR,
MO(_MISC), KC_LBRC, KC_RBRC, KC_BSLS, KC_0, _______,
- KC_6, KC_7, KC_8, KC_9, KC_BSPC, _______, _______,
+ KC_6, KC_7, KC_8, KC_9, KC_BSPC,
_________________QWERTY_R1_________________, KC_DEL,
KC_PGUP, KC_G, _________________QWERTY_R2_________________, KC_ENT,
KC_PGDN, KC_B, _________________QWERTY_R3_________________, KC_RSFT,
@@ -116,7 +116,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_CAPS, KC_GRV, KC_LGUI, KC_LALT, MIS_EIS, KC_SPC, KC_SPC, KC_PSCR,
MO(_MISC), KC_LBRC, KC_RBRC, KC_BSLS, KC_0, _______,
- KC_6, KC_7, KC_8, KC_9, KC_BSPC, _______, _______,
+ KC_6, KC_7, KC_8, KC_9, KC_BSPC,
_________________COLEMAK_R1________________, KC_DEL,
KC_PGUP, KC_D, _________________COLEMAK_R2________________, KC_ENT,
KC_PGDN, KC_B, _________________COLEMAK_R3________________, KC_RSFT,
@@ -131,7 +131,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, KC_F10, _______,
- KC_F6, KC_F7, KC_F8, KC_F9, _______, _______, _______,
+ KC_F6, KC_F7, KC_F8, KC_F9, _______,
_______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, KC_QUOT, _______,
_______, _______, _______, _______, _______, _______, _______, _______,
@@ -145,8 +145,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, AG_NORM, AG_SWAP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
- _______, MI_OCTD, MI_OCTU, MI_VELD, MI_VELU, _______,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_RMOD, RGB_MOD,
+ _______, KC_VOLD, KC_VOLU, MI_VELD, MI_VELU, _______,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION,
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
RGB_SAD, RGB_SAI, RGB_HUD, RGB_HUI, RGB_SPD, RGB_SPI, RGB_VAD, RGB_VAI,
@@ -154,6 +154,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_OPEN] = { ENCODER_CCW_CW(MI_OCTD, MI_OCTU) },
+ [_CLOSE] = { ENCODER_CCW_CW(MI_OCTD, MI_OCTU) },
+ [_QWERTY] = { ENCODER_CCW_CW(_______, _______) },
+ [_COLEMAK] = { ENCODER_CCW_CW(_______, _______) },
+ [_MISC] = { ENCODER_CCW_CW(_______, _______) },
+ [_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) },
+};
+#endif
+
void my_init(void){
// Set octave to MI_OCT_0
midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
diff --git a/keyboards/bandominedoni/keymaps/lednotg/rules.mk b/keyboards/bandominedoni/keymaps/lednotg/rules.mk
index 08ed472ad68..0a1c4b1858e 100644
--- a/keyboards/bandominedoni/keymaps/lednotg/rules.mk
+++ b/keyboards/bandominedoni/keymaps/lednotg/rules.mk
@@ -1,2 +1,4 @@
RGB_MATRIX_ENABLE = yes # Use RGB matrix (Don't enable this when RGBLIGHT_ENABLE is used.)
RGB_MATRIX_CUSTOM_KB = yes #
+
+ENCODER_MAP_ENABLE = yes # replacing ENCODERS_CW_KEY method to this on 2022/08/31.
diff --git a/keyboards/bandominedoni/keymaps/via/keymap.c b/keyboards/bandominedoni/keymaps/via/keymap.c
index 7264853b555..aa668af154e 100644
--- a/keyboards/bandominedoni/keymaps/via/keymap.c
+++ b/keyboards/bandominedoni/keymaps/via/keymap.c
@@ -42,7 +42,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
MI_D_1, MI_B_1, MI_G_3, MI_A_3, MI_Ds_3, MI_Fs_2, MI_Ds_1, MI_C_1,
MO_SWAP, MI_B_5, MI_Gs_5, MI_G_5, MI_F_5, FN_MUTE,
- MI_Cs_3, MI_A_5, MI_Fs_5, MI_E_5, MI_Ds_5, KC_VOLD, KC_VOLU,
+ MI_Cs_3, MI_A_5, MI_Fs_5, MI_E_5, MI_Ds_5,
MI_C_3, MI_D_3, MI_G_3, MI_As_4, MI_C_5, MI_D_5,
TG_SWAP, MI_B_2, MI_E_3, MI_Cs_4, MI_Fs_3, MI_A_3, MI_C_4, MI_E_4,
MI_A_2, MI_F_3, MI_As_3, MI_Gs_3, MI_B_3, MI_D_4, MI_Gs_4, MI_B_4,
@@ -57,7 +57,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
MI_E_1, MI_E_2, MI_Fs_3, MI_Gs_3, MI_B_3, MI_F_2, MI_Cs_1, MI_F_1,
MO_SWAP, MI_A_5, MI_Gs_5, MI_Fs_5, MI_F_5, FN_MUTE,
- MI_C_3, MI_G_5, MI_As_4, MI_C_5, MI_Ds_5, KC_VOLD, KC_VOLU,
+ MI_C_3, MI_G_5, MI_As_4, MI_C_5, MI_Ds_5,
MI_D_3, MI_Cs_3, MI_Gs_3, MI_As_3, MI_C_4, MI_D_5,
TG_SWAP, MI_B_2, MI_Fs_3, MI_Fs_4, MI_G_3, MI_B_3, MI_D_4, MI_G_4,
MI_A_2, MI_F_3, MI_E_3, MI_A_3, MI_Cs_4, MI_E_4, MI_A_4, MI_Cs_5,
@@ -72,7 +72,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______,
@@ -87,7 +87,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
_______, MI_OCTD, MI_OCTU, MI_VELD, MI_VELU, _______,
- XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_RMOD, RGB_MOD,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION,
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
RGB_SAD, RGB_SAI, RGB_HUD, RGB_HUI, RGB_SPD, RGB_SPI, RGB_VAD, RGB_VAI,
@@ -95,6 +95,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_OPEN] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_CLOSE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_MISC] = { ENCODER_CCW_CW(_______, _______) },
+ [_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) },
+};
+#endif
+
void my_init(void){
// Set octave to MI_OCT_0
midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
diff --git a/keyboards/bandominedoni/keymaps/via/rules.mk b/keyboards/bandominedoni/keymaps/via/rules.mk
index 71eb1ebf8eb..8fa76afafc1 100644
--- a/keyboards/bandominedoni/keymaps/via/rules.mk
+++ b/keyboards/bandominedoni/keymaps/via/rules.mk
@@ -1,3 +1,5 @@
RGB_MATRIX_ENABLE = yes # Use RGB matrix (Don't enable this when RGBLIGHT_ENABLE is used.)
RGB_MATRIX_CUSTOM_KB = yes #
VIA_ENABLE = yes
+
+ENCODER_MAP_ENABLE = yes # replacing ENCODERS_CW_KEY method to this on 2022/08/31.
diff --git a/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/config.h b/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/config.h
index 39204a3667e..f3e8f83b2a5 100644
--- a/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/config.h
+++ b/keyboards/bastardkb/charybdis/3x5/keymaps/drashna/config.h
@@ -19,7 +19,7 @@ along with this program. If not, see .
#pragma once
#undef PRODUCT
-#define PRODUCT Charybdis Nano (Blackpill)
+#define PRODUCT "Charybdis Nano (Blackpill)"
#undef MATRIX_ROW_PINS
#define MATRIX_ROW_PINS \
diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/config.h b/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/config.h
index 6711212cb1e..7e47953d630 100644
--- a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/config.h
+++ b/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/config.h
@@ -16,6 +16,9 @@
*/
#pragma once
+#undef PRODUCT
+#define PRODUCT "Charybdis (4x6) Blackpill"
+
#undef MATRIX_COL_PINS
#define MATRIX_COL_PINS \
{ B0, B1, B12, B3, B4, B5 }
@@ -34,7 +37,7 @@
#define DIODE_DIRECTION ROW2COL
#define SPLIT_HAND_PIN A3
#undef MASTER_RIGHT
-// #define USB_VBUS_PIN B10
+#define USB_VBUS_PIN B10
#undef RGB_DI_PIN
#define RGB_DI_PIN A1
@@ -55,6 +58,8 @@
#define AUDIO_PWM_PAL_MODE 2
#define AUDIO_STATE_TIMER GPTD3
#define AUDIO_INIT_DELAY
+#define AUDIO_ENABLE_TONE_MULTIPLEXING
+#define AUDIO_TONE_MULTIPLEXING_RATE_DEFAULT 10
#undef SOFT_SERIAL_PIN
// #define SERIAL_USART_FULL_DUPLEX // Enable full duplex operation mode.
@@ -64,12 +69,8 @@
// #define SERIAL_USART_TX_PAL_MODE 7 // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 7
// #define SERIAL_USART_RX_PAL_MODE 7 // Pin "alternate function", see the respective datasheet for the appropriate values for your MCU. default: 7
// #define SERIAL_USART_TIMEOUT 100 // USART driver timeout. default 100
-// // #define SERIAL_USART_PIN_SWAP // swap RX and TX pins on master
-// // To use the highest possible baudrate (3.75Mbit/s) uncomment the following
-// // line, this can result in dropped communications so lower the speed if there
-// // are many timeouts.
-// // #define SERIAL_USART_SPEED (STM32_PCLK2 >> 4)
-#define SERIAL_USART_SPEED 921600
+// #define SERIAL_USART_SPEED 921600
+#define SERIAL_USART_SPEED (1.5 * 1024 * 1024)
#define CRC8_USE_TABLE
#define CRC8_OPTIMIZE_SPEED
@@ -103,3 +104,12 @@
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150
#define CHARYBDIS_CONFIG_SYNC
+
+#define BOOTMAGIC_LITE_ROW 0
+#define BOOTMAGIC_LITE_COLUMN 0
+#define BOOTMAGIC_LITE_ROW_RIGHT 5
+#define BOOTMAGIC_LITE_COLUMN_RIGHT 0
+#define BOOTMAGIC_LITE_EEPROM_ROW 1
+#define BOOTMAGIC_LITE_EEPROM_COLUMN 0
+#define BOOTMAGIC_LITE_EEPROM_ROW_RIGHT 1
+#define BOOTMAGIC_LITE_EEPROM_COLUMN_RIGHT 0
diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/keymap.c b/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/keymap.c
index 1268d1a8ba5..a0f290ad577 100644
--- a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/keymap.c
+++ b/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/keymap.c
@@ -26,8 +26,8 @@
KC_ESC, ________________NUMBER_LEFT________________, ________________NUMBER_RIGHT_______________, UC_CLUE, \
SH_TT, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, SH_TT, \
LALT_T(KC_TAB), K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, RALT_T(K1B), \
- OS_LSFT,CTL_T(K21),ALT_T(K22),GUI_T(K23),K24,K25, K26,K27,RGUI_T(K28),RALT_T(K29),RCTL_T(K2A), OS_RSFT, \
- SFT_T(KC_GRV), UC_IRNY, OS_LGUI, TT(_MOUSE), KC_ENT, \
+ OS_LSFT,CTL_T(K21), K22, K23, K24, K25, K26,K27,RGUI_T(K28),RALT_T(K29),RCTL_T(K2A), OS_RSFT, \
+ SFT_T(KC_GRV), OS_LALT, OS_LGUI, TT(_MOUSE), KC_ENT, \
KC_SPC, BK_LWER, DL_RAIS \
)
diff --git a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/rules.mk b/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/rules.mk
index d9c1a5a9baf..336750bc904 100644
--- a/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/rules.mk
+++ b/keyboards/bastardkb/charybdis/4x6/keymaps/drashna/rules.mk
@@ -31,3 +31,4 @@ TAP_DANCE_ENABLE = yes
DEBOUNCE_TYPE = asym_eager_defer_pk
WPM_ENABLE = yes
LTO_ENABLE = no
+# OPT = 3
diff --git a/keyboards/bastardkb/dilemma/keymaps/drashna/config.h b/keyboards/bastardkb/dilemma/keymaps/drashna/config.h
new file mode 100644
index 00000000000..d7b1351d89a
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/keymaps/drashna/config.h
@@ -0,0 +1,8 @@
+// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define CIRQUE_PINNACLE_TAP_ENABLE
+#define POINTING_DEVICE_GESTURES_CURSOR_GLIDE_ENABLE
+#define POINTING_DEVICE_GESTURES_SCROLL_ENABLE
diff --git a/keyboards/bastardkb/dilemma/keymaps/drashna/keymap.c b/keyboards/bastardkb/dilemma/keymaps/drashna/keymap.c
new file mode 100644
index 00000000000..9cd21c3c1f8
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/keymaps/drashna/keymap.c
@@ -0,0 +1,160 @@
+/**
+ * Copyright 2022 Charly Delay (@0xcharly)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "drashna.h"
+
+// clang-format off
+#define LAYOUT_split_3x5_2_wrapper(...) LAYOUT_split_3x5_2(__VA_ARGS__)
+#define LAYOUT_split_3x5_2_base( \
+ K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
+ K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, \
+ K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A \
+ ) \
+ LAYOUT_split_3x5_2 ( \
+ K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, \
+ ALT_T(K11), K12, K13, K14, GUI_T(K15), LGUI_T(K16), K17, K18, K19, LALT_T(K1A), \
+ CTL_T(K21), K22, K23, K24, K25, K26, K27, K28, K29, RCTL_T(K2A), \
+ KC_SPC, BK_LWER, DL_RAIS, RSFT_T(KC_ENT) \
+ )
+
+#define LAYOUT_split_3x5_2_base_wrapper(...) LAYOUT_split_3x5_2_base(__VA_ARGS__)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_DEFAULT_LAYER_1] = LAYOUT_split_3x5_2_base_wrapper(
+ _________________QWERTY_L1_________________, _________________QWERTY_R1_________________,
+ _________________QWERTY_L2_________________, _________________QWERTY_R2_________________,
+ _________________QWERTY_L3_________________, _________________QWERTY_R3_________________
+ ),
+
+ [_DEFAULT_LAYER_2] = LAYOUT_split_3x5_2_base_wrapper(
+ ______________COLEMAK_MOD_DH_L1____________, ______________COLEMAK_MOD_DH_R1____________,
+ ______________COLEMAK_MOD_DH_L2____________, ______________COLEMAK_MOD_DH_R2____________,
+ ______________COLEMAK_MOD_DH_L3____________, ______________COLEMAK_MOD_DH_R3____________
+ ),
+ [_DEFAULT_LAYER_3] = LAYOUT_split_3x5_2_base_wrapper(
+ _________________COLEMAK_L1________________, _________________COLEMAK_R1________________,
+ _________________COLEMAK_L2________________, _________________COLEMAK_R2________________,
+ _________________COLEMAK_L3________________, _________________COLEMAK_R3________________
+ ),
+
+ [_DEFAULT_LAYER_4] = LAYOUT_split_3x5_2_base_wrapper(
+ _________________DVORAK_L1_________________, _________________DVORAK_R1_________________,
+ _________________DVORAK_L2_________________, _________________DVORAK_R2_________________,
+ _________________DVORAK_L3_________________, _________________DVORAK_R3_________________
+ ),
+
+ [_MOUSE] = LAYOUT_split_3x5_2(
+ _______, _______, _______, _______, _______, KC_WH_U, DPI_RMOD,DPI_MOD, S_D_RMOD,S_D_MOD,
+ _______, _______, _______, _______, _______, KC_WH_D, KC_BTN1, KC_BTN3, KC_BTN2, KC_BTN6,
+ _______, _______, _______, _______, _______, KC_BTN7, KC_BTN4, KC_BTN5, KC_BTN8, _______,
+ SNIPING, _______, _______, _______
+ ),
+ [_LOWER] = LAYOUT_split_3x5_2_wrapper(
+ _________________LOWER_L1__________________, _________________LOWER_R1__________________,
+ _________________LOWER_L2__________________, _________________LOWER_R2__________________,
+ _________________LOWER_L3__________________, _________________LOWER_R3__________________,
+ _______, _______, _______, AUTO_CTN
+ ),
+ [_RAISE] = LAYOUT_split_3x5_2_wrapper(
+ _________________RAISE_L1__________________, _________________RAISE_R1__________________,
+ _________________RAISE_L2__________________, _________________RAISE_R2__________________,
+ _________________RAISE_L3__________________, _________________RAISE_R3__________________,
+ _______, _______, _______, _______
+ ),
+ [_ADJUST] = LAYOUT_split_3x5_2_wrapper(
+ _________________ADJUST_L1_________________, _________________ADJUST_R1_________________,
+ _________________ADJUST_L2_________________, _________________ADJUST_R2_________________,
+ _________________ADJUST_L3_________________, _________________ADJUST_R3_________________,
+ KC_NUKE, _______, _______, QK_BOOT
+ ),
+};
+
+
+void matrix_output_unselect_delay(uint8_t line, bool key_pressed) {
+ for (int32_t i = 0; i < 40; i++) {
+ __asm__ volatile("nop" ::: "memory");
+ }
+}
+
+
+#if defined(OLED_ENABLE) && defined(OLED_DISPLAY_128X128)
+# ifdef UNICODE_COMMON_ENABLE
+# include "process_unicode_common.h"
+# include "keyrecords/unicode.h"
+# endif
+
+extern const char PROGMEM display_border[3];
+
+
+extern uint32_t oled_timer;
+extern bool is_oled_enabled;
+
+
+bool oled_task_keymap(void) {
+ static const char PROGMEM header_image[] = {
+ 0, 192, 32, 16, 8, 4, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 7, 15, 31, 63, 127, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127, 63, 31, 15, 7, 3, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 8, 16, 32, 192, 0,
+ // 0,255, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 7, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 7, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,255, 0
+ };
+ oled_write_raw_P(header_image, sizeof(header_image));
+ oled_set_cursor(7, 0);
+ oled_write_P(PSTR("Rock On"), true);
+
+ render_default_layer_state(1, 1);
+ render_layer_state(1, 2);
+ render_kitty(0, 5);
+ render_wpm(1, 7, 5);
+# if defined(POINTING_DEVICE_ENABLE)
+ render_pointing_dpi_status(dilemma_get_pointer_sniping_enabled() ? dilemma_get_pointer_sniping_dpi() : dilemma_get_pointer_default_dpi(), 1, 7, 6);
+ render_mouse_mode(17, 6);
+# elif defined(WPM_ENABLE) && defined(DEBUG_MATRIX_SCAN_RATE)
+ render_matrix_scan_rate(1, 7, 6);
+# endif
+ render_bootmagic_status(7, 7);
+ render_user_status(1, 9);
+
+ render_mod_status(get_mods() | get_oneshot_mods(), 1, 10);
+ render_keylock_status(host_keyboard_led_state(), 1, 11);
+ render_unicode_mode(1, 12);
+
+// render_rgb_hsv(1, 13);
+ oled_set_cursor(1, 13);
+ // oled_write_P(PSTR("Timer:"), false);
+ // oled_write(get_u8_str((uint8_t)(timer_elapsed32(oled_timer) / 1000), ' '), false);
+ oled_write_P(PSTR("Status: "), false);
+ if (is_oled_enabled) {
+ oled_write_P(PSTR("on "), false);
+ } else {
+ oled_write_P(PSTR("off"), false);
+ }
+
+ render_keylogger_status(1, 14);
+
+ for (uint8_t i = 1; i < 15; i++) {
+ oled_set_cursor(0, i);
+ oled_write_raw_P(display_border, sizeof(display_border));
+ oled_set_cursor(21, i);
+ oled_write_raw_P(display_border, sizeof(display_border));
+ }
+
+ static const char PROGMEM footer_image[] = {0, 3, 4, 8, 16, 32, 64, 128, 128, 128, 128, 128, 128, 128, 192, 224, 240, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 248, 240, 224, 192, 128, 128, 128, 128, 128, 128, 128, 64, 32, 16, 8, 4, 3, 0};
+ oled_set_cursor(0, 15);
+ oled_write_raw_P(footer_image, sizeof(footer_image));
+
+ return false;
+}
+#endif
diff --git a/keyboards/bastardkb/dilemma/keymaps/drashna/rules.mk b/keyboards/bastardkb/dilemma/keymaps/drashna/rules.mk
new file mode 100644
index 00000000000..5f4afb7259b
--- /dev/null
+++ b/keyboards/bastardkb/dilemma/keymaps/drashna/rules.mk
@@ -0,0 +1,8 @@
+SWAP_HANDS_ENABLE = no
+AUTOCORRECTION_ENABLE = yes
+CAPS_WORD_ENABLE = yes
+CONSOLE_ENABLE = yes
+KEYLOGGER_ENABLE = no
+WPM_ENABLE = yes
+OLED_ENABLE = yes
+OLED_DRIVER = custom
diff --git a/keyboards/bbrfkr/dynamis/dynamis.c b/keyboards/bbrfkr/dynamis/dynamis.c
index e7f780ef1a5..8655cbc7bcb 100644
--- a/keyboards/bbrfkr/dynamis/dynamis.c
+++ b/keyboards/bbrfkr/dynamis/dynamis.c
@@ -18,16 +18,12 @@
#ifdef ENCODER_ENABLE
bool encoder_update_kb(uint8_t index, bool clockwise) {
- if (!encoder_update_user(index, clockwise)) {
- return false;
+ if (!encoder_update_user(index, clockwise)) { return false; }
+ if (clockwise) {
+ tap_code(layer_state == 0 ? KC_WH_D : KC_VOLD);
+ } else {
+ tap_code(layer_state == 0 ? KC_WH_U : KC_VOLU);
}
- if (index == 0) { /* First encoder */
- if (clockwise) {
- tap_code(KC_WH_D);
- } else {
- tap_code(KC_WH_U);
- }
- }
- return false;
+ return true;
}
#endif
diff --git a/keyboards/bbrfkr/dynamis/info.json b/keyboards/bbrfkr/dynamis/info.json
index b29666b98ec..b59fef99467 100644
--- a/keyboards/bbrfkr/dynamis/info.json
+++ b/keyboards/bbrfkr/dynamis/info.json
@@ -17,62 +17,62 @@
"y": 0
},
{
- "label": "F1",
+ "label": "1",
"x": 1,
"y": 0
},
{
- "label": "F2",
+ "label": "2",
"x": 2,
"y": 0
},
{
- "label": "F3",
+ "label": "3",
"x": 3,
"y": 0
},
{
- "label": "F4",
+ "label": "4",
"x": 4,
"y": 0
},
{
- "label": "F5",
+ "label": "5",
"x": 5,
"y": 0
},
{
- "label": "F6",
+ "label": "6",
"x": 6,
"y": 0
},
{
- "label": "F7",
+ "label": "7",
"x": 7,
"y": 0
},
{
- "label": "F8",
+ "label": "8",
"x": 8,
"y": 0
},
{
- "label": "F9",
+ "label": "9",
"x": 9,
"y": 0
},
{
- "label": "F10",
+ "label": "0",
"x": 10,
"y": 0
},
{
- "label": "F11",
+ "label": "-",
"x": 11,
"y": 0
},
{
- "label": "F12",
+ "label": "=",
"x": 12,
"y": 0
},
@@ -292,7 +292,7 @@
"w": 1.75
},
{
- "label": "Raise",
+ "label": "Lower",
"x": 14,
"y": 3
},
@@ -308,13 +308,13 @@
"w": 1.25
},
{
- "label": "Super",
+ "label": "Alt",
"x": 1.25,
"y": 4,
"w": 1.25
},
{
- "label": "Alt",
+ "label": "Lower",
"x": 2.5,
"y": 4,
"w": 1.25
@@ -326,25 +326,25 @@
"w": 2.25
},
{
- "label": "Lower",
+ "label": "Space",
"x": 6,
"y": 4,
"w": 1.25
},
{
- "label": "Raise",
+ "label": "Enter",
"x": 7.25,
"y": 4,
"w": 2.75
},
{
- "label": "Alt",
+ "label": "Raise",
"x": 10,
"y": 4,
"w": 1.25
},
{
- "label": "Super",
+ "label": "Alt",
"x": 11.25,
"y": 4,
"w": 1.25
@@ -380,62 +380,62 @@
"y": 0
},
{
- "label": "F1",
+ "label": "1",
"x": 1,
"y": 0
},
{
- "label": "F2",
+ "label": "2",
"x": 2,
"y": 0
},
{
- "label": "F3",
+ "label": "3",
"x": 3,
"y": 0
},
{
- "label": "F4",
+ "label": "4",
"x": 4,
"y": 0
},
{
- "label": "F5",
+ "label": "5",
"x": 5,
"y": 0
},
{
- "label": "F6",
+ "label": "6",
"x": 6,
"y": 0
},
{
- "label": "F7",
+ "label": "7",
"x": 7,
"y": 0
},
{
- "label": "F8",
+ "label": "8",
"x": 8,
"y": 0
},
{
- "label": "F9",
+ "label": "9",
"x": 9,
"y": 0
},
{
- "label": "F10",
+ "label": "0",
"x": 10,
"y": 0
},
{
- "label": "F11",
+ "label": "-",
"x": 11,
"y": 0
},
{
- "label": "F12",
+ "label": "=",
"x": 12,
"y": 0
},
@@ -655,7 +655,7 @@
"w": 1.75
},
{
- "label": "Raise",
+ "label": "Lower",
"x": 14,
"y": 3
},
@@ -671,13 +671,13 @@
"w": 1.25
},
{
- "label": "Super",
+ "label": "Alt",
"x": 1.25,
"y": 4,
"w": 1.25
},
{
- "label": "Alt",
+ "label": "Lower",
"x": 2.5,
"y": 4,
"w": 1.25
@@ -689,25 +689,25 @@
"w": 2.25
},
{
- "label": "Lower",
+ "label": "Space",
"x": 6,
"y": 4,
"w": 1.25
},
{
- "label": "Raise",
+ "label": "Enter",
"x": 7.25,
"y": 4,
"w": 2.75
},
{
- "label": "Alt",
+ "label": "Raise",
"x": 10,
"y": 4,
"w": 1.25
},
{
- "label": "Super",
+ "label": "Alt",
"x": 11.25,
"y": 4,
"w": 1.25
diff --git a/keyboards/bbrfkr/dynamis/keymaps/default/keymap.c b/keyboards/bbrfkr/dynamis/keymaps/default/keymap.c
index d31ef59f321..686c0162421 100644
--- a/keyboards/bbrfkr/dynamis/keymaps/default/keymap.c
+++ b/keyboards/bbrfkr/dynamis/keymaps/default/keymap.c
@@ -20,40 +20,40 @@ enum layer_names {
_QWERTY,
_LOWER,
_RAISE,
- _SETTINGS
+ _SETTINGS,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT_ansi(
- KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_DEL,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_TAB, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(2), KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), MO(2), KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ KC_TAB, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LALT, MO(1), KC_SPC, KC_SPC, KC_ENT, MO(2), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_LOWER] = LAYOUT_ansi(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_PSCR, KC_TRNS, KC_TRNS, KC_WH_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_BTN3, KC_BTN2, KC_WH_D, KC_BTN1, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END, KC_TRNS, KC_TRNS, MO(3), KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_BTN3, KC_BTN2, KC_BTN1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_RGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE
),
[_RAISE] = LAYOUT_ansi(
- KC_ESC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS,
- KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_QUOT, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_UNDS, KC_PLUS, KC_DQUO, KC_LCBR, KC_RCBR, KC_TRNS, MO(3), KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LGUI, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE
),
[_SETTINGS] = LAYOUT_ansi(
- QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, RGB_RMOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- )
+ QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, RGB_TOG, RGB_MOD, RGB_RMOD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ ),
};
diff --git a/keyboards/bbrfkr/dynamis/keymaps/iso/keymap.c b/keyboards/bbrfkr/dynamis/keymaps/iso/keymap.c
index 3099b482a96..c715dc3577e 100644
--- a/keyboards/bbrfkr/dynamis/keymaps/iso/keymap.c
+++ b/keyboards/bbrfkr/dynamis/keymaps/iso/keymap.c
@@ -20,40 +20,40 @@ enum layer_names {
_QWERTY,
_LOWER,
_RAISE,
- _SETTINGS
+ _SETTINGS,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT_iso(
- KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_DEL,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
- KC_TAB, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(2), KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), MO(2), KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ KC_TAB, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LALT, MO(1), KC_SPC, KC_SPC, KC_ENT, MO(2), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_LOWER] = LAYOUT_iso(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, KC_TRNS,
- KC_PSCR, KC_TRNS, KC_TRNS, KC_WH_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_BTN3, KC_BTN2, KC_WH_D, KC_BTN1, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END, KC_TRNS, KC_TRNS, MO(3), KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_BTN3, KC_BTN2, KC_BTN1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_RGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE
),
[_RAISE] = LAYOUT_iso(
- KC_ESC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS,
- KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_QUOT, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_UNDS, KC_PLUS, KC_DQUO, KC_LCBR, KC_RCBR, KC_TRNS, MO(3), KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LGUI, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_RGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE
),
[_SETTINGS] = LAYOUT_iso(
- QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, RGB_RMOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- )
+ QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, RGB_TOG, RGB_MOD, RGB_RMOD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ ),
};
diff --git a/keyboards/bbrfkr/dynamis/keymaps/via/keymap.c b/keyboards/bbrfkr/dynamis/keymaps/via/keymap.c
index 2c93213d99f..cef34da6b32 100644
--- a/keyboards/bbrfkr/dynamis/keymaps/via/keymap.c
+++ b/keyboards/bbrfkr/dynamis/keymaps/via/keymap.c
@@ -20,40 +20,49 @@ enum layer_names {
_QWERTY,
_LOWER,
_RAISE,
- _SETTINGS
+ _SETTINGS,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT_ansi(
- KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_DEL,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_TAB, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(2), KC_UP,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), MO(2), KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ KC_TAB, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LALT, MO(1), KC_SPC, KC_SPC, KC_ENT, MO(2), KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
),
[_LOWER] = LAYOUT_ansi(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_PSCR, KC_TRNS, KC_TRNS, KC_WH_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_BTN3, KC_BTN2, KC_WH_D, KC_BTN1, KC_TRNS, KC_TRNS, KC_HOME, KC_PGDN, KC_END, KC_TRNS, KC_TRNS, MO(3), KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_BTN3, KC_BTN2, KC_BTN1, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_RGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE
),
[_RAISE] = LAYOUT_ansi(
- KC_ESC, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_DEL, KC_TRNS,
- KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_QUOT, KC_LBRC, KC_RBRC, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_UNDS, KC_PLUS, KC_DQUO, KC_LCBR, KC_RCBR, KC_TRNS, MO(3), KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_PSCR, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_LGUI, MO(3), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_RGUI, KC_TRNS, KC_TRNS, KC_TRNS, KC_MUTE
),
[_SETTINGS] = LAYOUT_ansi(
- QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, RGB_RMOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- )
+ QK_BOOT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, RGB_TOG, RGB_MOD, RGB_RMOD, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
+ ),
};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_QWERTY] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D), },
+ [_LOWER] = { ENCODER_CCW_CW(KC_VOLU, KC_VOLD) },
+ [_RAISE] = { ENCODER_CCW_CW(RGB_MOD, RGB_RMOD) },
+ [_SETTINGS] = { ENCODER_CCW_CW(KC_WH_U, KC_WH_D) },
+};
+#endif
diff --git a/keyboards/bbrfkr/dynamis/keymaps/via/rules.mk b/keyboards/bbrfkr/dynamis/keymaps/via/rules.mk
index 1e5b99807cb..f1adcab005e 100644
--- a/keyboards/bbrfkr/dynamis/keymaps/via/rules.mk
+++ b/keyboards/bbrfkr/dynamis/keymaps/via/rules.mk
@@ -1 +1,2 @@
VIA_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/bbrfkr/dynamis/readme.md b/keyboards/bbrfkr/dynamis/readme.md
index 1db398f08be..2cfd225b1b5 100644
--- a/keyboards/bbrfkr/dynamis/readme.md
+++ b/keyboards/bbrfkr/dynamis/readme.md
@@ -1,13 +1,13 @@
# dynamis
## general information
-
+
Gasket mounted 65% row staggered keyboard integrated a trackball
* Keyboard Maintainer: [bbrfkr](https://github.com/bbrfkr/)
* Hardware Supported: dynamis PCBs
-* Hardware Availability: http://github.com/bbrfkr/keyboards
+* Hardware Availability: https://github.com/bbrfkr/dynamis-keyboard
## bootloader
diff --git a/keyboards/bioi/ble.c b/keyboards/bioi/ble.c
index d941f7c43de..b050b2f6cbd 100644
--- a/keyboards/bioi/ble.c
+++ b/keyboards/bioi/ble.c
@@ -96,15 +96,14 @@ static void bluefruit_serial_send(uint8_t data)
static uint8_t keyboard_leds(void);
static void send_keyboard(report_keyboard_t *report);
static void send_mouse(report_mouse_t *report);
-static void send_system(uint16_t data);
-static void send_consumer(uint16_t data);
+static void send_extra(uint8_t report_id, uint16_t data);
host_driver_t bluefruit_driver = {
keyboard_leds,
send_keyboard,
send_mouse,
- send_system,
- send_consumer};
+ send_extra
+};
host_driver_t null_driver = {};
@@ -156,10 +155,6 @@ static void send_mouse(report_mouse_t *report)
#endif
}
-static void send_system(uint16_t data)
-{
-}
-
/*
+-----------------+-------------------+-------+
| Consumer Key | Bit Map | Hex |
@@ -182,30 +177,32 @@ static void send_system(uint16_t data)
#define CONSUMER2BLUEFRUIT(usage) \
(usage == AUDIO_MUTE ? 0x00e2 : (usage == AUDIO_VOL_UP ? 0x00e9 : (usage == AUDIO_VOL_DOWN ? 0x00ea : (usage == TRANSPORT_NEXT_TRACK ? 0x00b5 : (usage == TRANSPORT_PREV_TRACK ? 0x00b6 : (usage == TRANSPORT_STOP ? 0x00b7 : (usage == TRANSPORT_STOP_EJECT ? 0x00b8 : (usage == TRANSPORT_PLAY_PAUSE ? 0x00b1 : (usage == AL_CC_CONFIG ? 0x0183 : (usage == AL_EMAIL ? 0x018c : (usage == AL_CALCULATOR ? 0x0192 : (usage == AL_LOCAL_BROWSER ? 0x0196 : (usage == AC_SEARCH ? 0x021f : (usage == AC_HOME ? 0x0223 : (usage == AC_BACK ? 0x0224 : (usage == AC_FORWARD ? 0x0225 : (usage == AC_STOP ? 0x0226 : (usage == AC_REFRESH ? 0x0227 : (usage == AC_BOOKMARKS ? 0x022a : 0)))))))))))))))))))
-static void send_consumer(uint16_t data)
+static void send_extra(uint8_t report_id, uint16_t data)
{
- static uint16_t last_data = 0;
- if (data == last_data)
- return;
- last_data = data;
+ if (report_id == REPORT_ID_CONSUMER) {
+ static uint16_t last_data = 0;
+ if (data == last_data)
+ return;
+ last_data = data;
- uint16_t bitmap = CONSUMER2BLUEFRUIT(data);
+ uint16_t bitmap = CONSUMER2BLUEFRUIT(data);
#ifdef BLUEFRUIT_TRACE_SERIAL
- dprintf("\nData: ");
- debug_hex16(data);
- dprintf("; bitmap: ");
- debug_hex16(bitmap);
- dprintf("\n");
- bluefruit_trace_header();
+ dprintf("\nData: ");
+ debug_hex16(data);
+ dprintf("; bitmap: ");
+ debug_hex16(bitmap);
+ dprintf("\n");
+ bluefruit_trace_header();
#endif
- send_str(PSTR("AT+BLEHIDCONTROLKEY=0x"));
- send_bytes((bitmap >> 8) & 0xFF);
- send_bytes(bitmap & 0xFF);
- send_str(PSTR("\r\n"));
+ send_str(PSTR("AT+BLEHIDCONTROLKEY=0x"));
+ send_bytes((bitmap >> 8) & 0xFF);
+ send_bytes(bitmap & 0xFF);
+ send_str(PSTR("\r\n"));
#ifdef BLUEFRUIT_TRACE_SERIAL
- bluefruit_trace_footer();
+ bluefruit_trace_footer();
#endif
+ }
}
void usart_init(void)
diff --git a/keyboards/boardrun/bizarre/readme.md b/keyboards/boardrun/bizarre/readme.md
index 5c73313d381..3ca84dfac27 100644
--- a/keyboards/boardrun/bizarre/readme.md
+++ b/keyboards/boardrun/bizarre/readme.md
@@ -18,6 +18,6 @@ Flashing example for this keyboard:
make boardrun/bizarre:default:flash
-The board may be reset into bootloader mode via either the reset button (on the bottom of the PCB) or a configured RESET shortcut (which may vary depending on when the PCB was flashed).
+The board may be reset into bootloader mode via either the reset button (on the bottom of the PCB) or a configured `QK_BOOT` shortcut (which may vary depending on when the PCB was flashed).
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/boardrun/classic/readme.md b/keyboards/boardrun/classic/readme.md
index 2ed4ff1bd01..eeb2c0d55c8 100644
--- a/keyboards/boardrun/classic/readme.md
+++ b/keyboards/boardrun/classic/readme.md
@@ -18,6 +18,6 @@ Flashing example for this keyboard:
make boardrun/classic:default:flash
-The board may be reset into bootloader mode via either the reset button (on the bottom of the PCB) or a configured RESET shortcut (which may vary depending on when the PCB was flashed).
+The board may be reset into bootloader mode via either the reset button (on the bottom of the PCB) or a configured `QK_BOOT` shortcut (which may vary depending on when the PCB was flashed).
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/boardsource/lulu/avr/info.json b/keyboards/boardsource/lulu/avr/info.json
new file mode 100644
index 00000000000..ad7eefa77f7
--- /dev/null
+++ b/keyboards/boardsource/lulu/avr/info.json
@@ -0,0 +1,21 @@
+{
+ "build": {
+ "lto": true
+ },
+ "development_board": "elite_c",
+ "matrix_pins": {
+ "cols": ["F6", "F7", "B1", "B3", "B2", "B6"],
+ "rows": ["C6", "D7", "E6", "B4", "B5"]
+ },
+ "split": {
+ "soft_serial_pin": "D2"
+ },
+ "rgblight": {
+ "pin": "D3"
+ },
+ "encoder": {
+ "rotary": [
+ { "pin_a": "F0", "pin_b": "F1" }
+ ]
+ }
+}
diff --git a/keyboards/boardsource/lulu/avr/rules.mk b/keyboards/boardsource/lulu/avr/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/boardsource/lulu/avr/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/boardsource/lulu/config.h b/keyboards/boardsource/lulu/config.h
index f96a2284297..8e635a24eb1 100644
--- a/keyboards/boardsource/lulu/config.h
+++ b/keyboards/boardsource/lulu/config.h
@@ -2,8 +2,6 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
-#include "config_common.h"
-#define RGB_DI_PIN D3
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 150
#define DRIVER_LED_TOTAL 70
#define RGB_MATRIX_SPLIT { 35, 35 }
diff --git a/keyboards/boardsource/lulu/info.json b/keyboards/boardsource/lulu/info.json
index 5ee5c59c1ad..3418cd6e7a3 100644
--- a/keyboards/boardsource/lulu/info.json
+++ b/keyboards/boardsource/lulu/info.json
@@ -2,11 +2,7 @@
"manufacturer": "Boardsource",
"keyboard_name": "lulu",
"maintainer": "waffle87",
- "bootloader": "atmel-dfu",
"diode_direction": "COL2ROW",
- "build": {
- "lto": true
- },
"features": {
"bootmagic": true,
"extrakey": true,
@@ -15,11 +11,6 @@
"rgb_matrix": true,
"oled": true
},
- "matrix_pins": {
- "cols": ["F6", "F7", "B1", "B3", "B2", "B6"],
- "rows": ["C6", "D7", "E6", "B4", "B5"]
- },
- "processor": "atmega32u4",
"url": "https://boardsource.xyz/projects/60de24d6847112054777bbdd",
"usb": {
"device_version": "1.0.0",
@@ -27,16 +18,17 @@
"vid": "0x4273"
},
"split": {
- "enabled": true,
- "soft_serial_pin": "D2"
+ "enabled": true
},
"encoder": {
- "enabled": true,
- "rotary": [
- { "pin_a": "F0", "pin_b": "F1" }
- ]
+ "enabled": true
+ },
+ "matrix_size": {
+ "cols": 6,
+ "rows": 10
},
"rgb_matrix": {
+ "driver": "WS2812",
"layout": [
{ "flags": 2, "x": 86, "y": 55 },
{ "flags": 2, "x": 51, "y": 55 },
diff --git a/keyboards/boardsource/lulu/readme.md b/keyboards/boardsource/lulu/readme.md
index e7c530161bb..a1c184eaacd 100644
--- a/keyboards/boardsource/lulu/readme.md
+++ b/keyboards/boardsource/lulu/readme.md
@@ -12,13 +12,20 @@ The lulu is what the ergo community has needed for a long time, a high-end aesth
Make example for this keyboard (after setting up your build environment):
- make boardsource/lulu:default
+ make boardsource/lulu/rp2040:default
+ make boardsource/lulu/avr:default
Flashing example for this keyboard:
- make boardsource/lulu:default:flash
+ make boardsource/lulu/rp2040:default:flash
+ make boardsource/lulu/avr:default:flash
-Reset keyboard by holding down top left key while you plug in the usb cable. Or by pushing the reset switch on the pcb.
+
+Compile `rp2040` firmware if you purchased PCB in lulu group buy (integrated microcontroller).
+Compile `avr` firmware if your PCB uses a drop-in microcontroller like Pro Micro.
+
+
+Enter bootloader by holding down the upper outer key while you plug in the usb cable, or by pushing the reset switch on the pcb.
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/boardsource/lulu/rp2040/config.h b/keyboards/boardsource/lulu/rp2040/config.h
new file mode 100644
index 00000000000..2e02e035008
--- /dev/null
+++ b/keyboards/boardsource/lulu/rp2040/config.h
@@ -0,0 +1,11 @@
+// Copyright 2022 jack (@waffle87)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U
+#define SERIAL_USART_FULL_DUPLEX
+#define SERIAL_USART_TX_PIN GP0
+#define SERIAL_USART_RX_PIN GP1
+#define I2C_DRIVER I2CD2
+#define I2C1_SDA_PIN GP22
+#define I2C1_SCL_PIN GP23
diff --git a/keyboards/boardsource/lulu/rp2040/halconf.h b/keyboards/boardsource/lulu/rp2040/halconf.h
new file mode 100644
index 00000000000..9b8ab5d0233
--- /dev/null
+++ b/keyboards/boardsource/lulu/rp2040/halconf.h
@@ -0,0 +1,5 @@
+// Copyright 2022 jack (@waffle87)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+#define HAL_USE_I2C TRUE
+#include_next
diff --git a/keyboards/boardsource/lulu/rp2040/info.json b/keyboards/boardsource/lulu/rp2040/info.json
new file mode 100644
index 00000000000..a3842419445
--- /dev/null
+++ b/keyboards/boardsource/lulu/rp2040/info.json
@@ -0,0 +1,17 @@
+{
+ "bootloader": "rp2040",
+ "matrix_pins": {
+ "cols": ["GP2", "GP3", "GP4", "GP5", "GP6", "GP7"],
+ "rows": ["GP14", "GP15", "GP16", "GP17", "GP18"]
+ },
+ "processor": "RP2040",
+ "rgblight": {
+ "pin": "GP29",
+ "led_count": 70
+ },
+ "encoder": {
+ "rotary": [
+ { "pin_a": "GP8", "pin_b": "GP9" }
+ ]
+ }
+}
diff --git a/keyboards/boardsource/lulu/rp2040/mcuconf.h b/keyboards/boardsource/lulu/rp2040/mcuconf.h
new file mode 100644
index 00000000000..6f05b8bbe8e
--- /dev/null
+++ b/keyboards/boardsource/lulu/rp2040/mcuconf.h
@@ -0,0 +1,6 @@
+// Copyright 2022 jack (@waffle87)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#pragma once
+#include_next
+#undef RP_I2C_USE_I2C1
+#define RP_I2C_USE_I2C1 TRUE
diff --git a/keyboards/boardsource/lulu/rp2040/rules.mk b/keyboards/boardsource/lulu/rp2040/rules.mk
new file mode 100644
index 00000000000..8fb51ec82d5
--- /dev/null
+++ b/keyboards/boardsource/lulu/rp2040/rules.mk
@@ -0,0 +1,2 @@
+SERIAL_DRIVER = vendor
+WS2812_DRIVER = vendor
diff --git a/keyboards/boardsource/lulu/rules.mk b/keyboards/boardsource/lulu/rules.mk
deleted file mode 100644
index 32afd216356..00000000000
--- a/keyboards/boardsource/lulu/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-RGB_MATRIX_DRIVER = WS2812
diff --git a/keyboards/bpiphany/pegasushoof/keymaps/citadel/config.h b/keyboards/bpiphany/pegasushoof/keymaps/citadel/config.h
index 122627e88f4..9ff01f7e842 100644
--- a/keyboards/bpiphany/pegasushoof/keymaps/citadel/config.h
+++ b/keyboards/bpiphany/pegasushoof/keymaps/citadel/config.h
@@ -3,4 +3,4 @@
/* overridden settings: */
#undef PRODUCT
-#define PRODUCT Pegasus Hoof Citadel
+#define PRODUCT "Pegasus Hoof Citadel"
diff --git a/keyboards/buzzard/rev1/config.h b/keyboards/buzzard/rev1/config.h
index 66c1a9a42ef..67555ba92c0 100644
--- a/keyboards/buzzard/rev1/config.h
+++ b/keyboards/buzzard/rev1/config.h
@@ -35,7 +35,7 @@
#define SPLIT_OLED_ENABLE
#endif
-#ifdef PS2_USE_INT
+#ifdef PS2_DRIVER_INTERRUPT
#define PS2_CLOCK_PIN E6
#define PS2_DATA_PIN D7
diff --git a/keyboards/buzzard/rev1/rules.mk b/keyboards/buzzard/rev1/rules.mk
index 9a479c64e69..13c63d5b176 100644
--- a/keyboards/buzzard/rev1/rules.mk
+++ b/keyboards/buzzard/rev1/rules.mk
@@ -1,3 +1,4 @@
OLED_DRIVER = SSD1306
-PS2_USE_INT = yes
+PS2_ENABLE = yes
+PS2_DRIVER = interrupt
diff --git a/keyboards/cannonkeys/atlas/atlas.h b/keyboards/cannonkeys/atlas/atlas.h
index b2f64dab73c..2a6bf7d88ae 100644
--- a/keyboards/cannonkeys/atlas/atlas.h
+++ b/keyboards/cannonkeys/atlas/atlas.h
@@ -37,12 +37,12 @@
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, \
- k40, k41, k42, k43, k44, k46 , k48, k49, k4a, k4b \
+ k40, k41, k42, k43, k45, k47, k48, k49, k4a, k4b \
) \
{ \
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b }, \
- { k40, k41, k42, k43, k44, KC_NO, k46, KC_NO, k48, k49, k4a, k4b }, \
+ { k40, k41, k42, k43, KC_NO, k45, KC_NO, k47, k48, k49, k4a, k4b }, \
}
diff --git a/keyboards/xelus/kangaroo/chconf.h b/keyboards/cannonkeys/malicious_ergo/chconf.h
similarity index 85%
rename from keyboards/xelus/kangaroo/chconf.h
rename to keyboards/cannonkeys/malicious_ergo/chconf.h
index 71b34b0591c..308855ab7a8 100644
--- a/keyboards/xelus/kangaroo/chconf.h
+++ b/keyboards/cannonkeys/malicious_ergo/chconf.h
@@ -1,4 +1,4 @@
-/* Copyright 2020 QMK
+/* Copyright 2022 Andrew Kannan
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,7 +16,7 @@
/*
* This file was auto-generated by:
- * `qmk chibios-confmigrate -i keyboards/xelus/kangaroo/chconf.h -r platforms/chibios/common/configs/chconf.h`
+ * `qmk chibios-confmigrate -i keyboards/projectkb/alice/chconf.h -r platforms/chibios/common/configs/chconf.h`
*/
#pragma once
diff --git a/keyboards/cannonkeys/malicious_ergo/config.h b/keyboards/cannonkeys/malicious_ergo/config.h
new file mode 100644
index 00000000000..1f9eecf119b
--- /dev/null
+++ b/keyboards/cannonkeys/malicious_ergo/config.h
@@ -0,0 +1,96 @@
+#pragma once
+
+/*
+Copyright 2022 Andrew Kannan
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 17
+
+#define MATRIX_COL_PINS { B1, B0, A7, A1, A5, A4, A3, A10, B9, B8, B7, B6, B5, B4, B3, A15, A14 }
+#define MATRIX_ROW_PINS { B2, B10, B11, A2, A0 }
+#define DIODE_DIRECTION COL2ROW
+
+#define BACKLIGHT_PIN A6
+#define BACKLIGHT_PWM_DRIVER PWMD3
+#define BACKLIGHT_PWM_CHANNEL 1
+#define BACKLIGHT_PAL_MODE 1
+#define BACKLIGHT_LEVELS 6
+#define BACKLIGHT_BREATHING
+#define BREATHING_PERIOD 6
+
+/* define if matrix has ghost */
+//#define MATRIX_HAS_GHOST
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+#define RGBLIGHT_EFFECT_BREATHING
+#define RGBLIGHT_EFFECT_RAINBOW_MOOD
+#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+#define RGBLIGHT_EFFECT_SNAKE
+#define RGBLIGHT_EFFECT_KNIGHT
+#define RGBLIGHT_EFFECT_CHRISTMAS
+#define RGBLIGHT_EFFECT_STATIC_GRADIENT
+#define RGBLIGHT_EFFECT_RGB_TEST
+#define RGBLIGHT_EFFECT_ALTERNATING
+#define RGBLIGHT_EFFECT_TWINKLE
+#define RGB_DI_PIN B15
+#define RGBLED_NUM 14
+#define WS2812_SPI SPID2
+#define WS2812_SPI_MOSI_PAL_MODE 0
+#define WS2812_SPI_SCK_PAL_MODE 0
+#define WS2812_SPI_SCK_PIN B13
+
+// Indicator LEDs
+#define LED_CAPS_LOCK_PIN A8
+#define LED_NUM_LOCK_PIN A9
+#define LED_SCROLL_LOCK_PIN B12
+#define LED_PIN_ON_STATE 0
+
+
+
+// 2 bits for 4 layout options
+#define VIA_EEPROM_LAYOUT_OPTIONS_SIZE 2
+
+#define SLEEP_LED_GPT_DRIVER GPTD1
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+
+
+
diff --git a/keyboards/cannonkeys/malicious_ergo/halconf.h b/keyboards/cannonkeys/malicious_ergo/halconf.h
new file mode 100644
index 00000000000..d696c3bd227
--- /dev/null
+++ b/keyboards/cannonkeys/malicious_ergo/halconf.h
@@ -0,0 +1,31 @@
+/* Copyright 2022 Andrew Kannan
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+/*
+ * This file was auto-generated by:
+ * `qmk chibios-confmigrate -i keyboards/projectkb/alice/halconf.h -r platforms/chibios/common/configs/halconf.h`
+ */
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+
+#define HAL_USE_SPI TRUE
+
+#define HAL_USE_GPT TRUE
+
+#include_next
+
diff --git a/keyboards/cannonkeys/malicious_ergo/info.json b/keyboards/cannonkeys/malicious_ergo/info.json
new file mode 100644
index 00000000000..b6ec4589179
--- /dev/null
+++ b/keyboards/cannonkeys/malicious_ergo/info.json
@@ -0,0 +1,16 @@
+{
+ "keyboard_name": "Malicious Ergo",
+ "manufacturer": "CannonKeys",
+ "url": "https://cannonkeys.com",
+ "maintainer": "awkannan",
+ "usb": {
+ "vid": "0xCA04",
+ "pid": "0x0009",
+ "device_version": "0.0.1"
+ },
+ "layouts": {
+ "LAYOUT_default": {
+ "layout": [{"x":0.5, "y":0}, {"x":1.75, "y":0}, {"x":2.75, "y":0}, {"x":3.75, "y":0}, {"x":4.75, "y":0}, {"x":5.75, "y":0}, {"x":6.75, "y":0}, {"x":7.75, "y":0}, {"x":9.75, "y":0}, {"x":10.75, "y":0}, {"x":11.75, "y":0}, {"x":12.75, "y":0}, {"x":13.75, "y":0}, {"x":14.75, "y":0}, {"x":15.75, "y":0}, {"x":16.75, "y":0}, {"x":18, "y":0}, {"x":0.25, "y":1}, {"x":1.5, "y":1, "w":1.5}, {"x":3, "y":1}, {"x":4, "y":1}, {"x":5, "y":1}, {"x":6, "y":1}, {"x":7, "y":1}, {"x":9.5, "y":1}, {"x":10.5, "y":1}, {"x":11.5, "y":1}, {"x":12.5, "y":1}, {"x":13.5, "y":1}, {"x":14.5, "y":1}, {"x":15.5, "y":1}, {"x":16.5, "y":1, "w":1.5}, {"x":18.25, "y":1}, {"x":0, "y":2}, {"x":1.375, "y":2, "w":1.75}, {"x":3.125, "y":2}, {"x":4.13, "y":2}, {"x":5.13, "y":2}, {"x":6.13, "y":2}, {"x":7.13, "y":2}, {"x":9.88, "y":2}, {"x":10.88, "y":2}, {"x":11.88, "y":2}, {"x":12.88, "y":2}, {"x":13.88, "y":2}, {"x":14.88, "y":2}, {"x":15.88, "y":2, "w":2.25}, {"x":18.5, "y":2}, {"x":1.25, "y":3, "w":2.25}, {"x":3.5, "y":3}, {"x":4.5, "y":3}, {"x":5.5, "y":3}, {"x":6.5, "y":3}, {"x":7.5, "y":3}, {"x":9.5, "y":3}, {"x":10.5, "y":3}, {"x":11.5, "y":3}, {"x":12.5, "y":3}, {"x":13.5, "y":3}, {"x":14.5, "y":3}, {"x":15.5, "y":3, "w":1.75}, {"x":17.25, "y":3}, {"x":1.5, "y":4, "w":1.5}, {"x":4.25, "y":4, "w":1.5}, {"x":5.75, "y":4, "w":2}, {"x":7.75, "y":4, "w":1.25}, {"x":9.5, "y":4, "w":2.75}, {"x":12.25, "y":4, "w":1.5}, {"x":14.25, "y":4, "w":1.5}, {"x":16.25, "y":4}, {"x":17.25, "y":4}, {"x":18.25, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/cannonkeys/malicious_ergo/keymaps/default/keymap.c b/keyboards/cannonkeys/malicious_ergo/keymaps/default/keymap.c
new file mode 100644
index 00000000000..e5c58bfc0ff
--- /dev/null
+++ b/keyboards/cannonkeys/malicious_ergo/keymaps/default/keymap.c
@@ -0,0 +1,42 @@
+/*
+Copyright 2012,2013 Jun Wako
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_names {
+ _BASE,
+ _FN1
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_default(
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC, KC_DEL,
+ KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
+ KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_END,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, MO(_FN1), KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ [_FN1] = LAYOUT_default(
+ RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, _______,
+ RGB_MOD, _______, _______, KC_UP, _______, _______, _______, RGB_SAI, RGB_HUI, RGB_VAI, _______, _______, _______, _______, _______, _______,
+ RGB_RMOD, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, RGB_SAD, RGB_HUD, RGB_VAD, _______, _______, _______, _______, _______,
+ _______, BL_INC, BL_DEC, BL_TOGG, BL_BRTG, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______
+ )
+};
diff --git a/keyboards/cannonkeys/malicious_ergo/keymaps/via/keymap.c b/keyboards/cannonkeys/malicious_ergo/keymaps/via/keymap.c
new file mode 100644
index 00000000000..f8d3753f43c
--- /dev/null
+++ b/keyboards/cannonkeys/malicious_ergo/keymaps/via/keymap.c
@@ -0,0 +1,60 @@
+/*
+Copyright 2012,2013 Jun Wako
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+enum layer_names {
+ _BASE,
+ _FN1,
+ _FN2,
+ _FN3
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_default(
+ KC_ESC, KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_DEL, KC_BSPC, KC_DEL,
+ KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_HOME,
+ KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_END,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, MO(_FN1), KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT
+ ),
+
+ [_FN1] = LAYOUT_default(
+ RGB_TOG, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL, _______,
+ RGB_MOD, _______, _______, KC_UP, _______, _______, _______, RGB_SAI, RGB_HUI, RGB_VAI, _______, _______, _______, _______, _______, _______,
+ RGB_RMOD, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, RGB_SAD, RGB_HUD, RGB_VAD, _______, _______, _______, _______, _______,
+ _______, BL_INC, BL_DEC, BL_TOGG, BL_BRTG, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______
+ ),
+
+ [_FN2] = LAYOUT_default(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ [_FN3] = LAYOUT_default(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/cannonkeys/malicious_ergo/keymaps/via/rules.mk b/keyboards/cannonkeys/malicious_ergo/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/cannonkeys/malicious_ergo/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/mechwild/bde/bde.c b/keyboards/cannonkeys/malicious_ergo/malicious_ergo.c
similarity index 72%
rename from keyboards/mechwild/bde/bde.c
rename to keyboards/cannonkeys/malicious_ergo/malicious_ergo.c
index 911d1c04349..58e33a3889c 100644
--- a/keyboards/mechwild/bde/bde.c
+++ b/keyboards/cannonkeys/malicious_ergo/malicious_ergo.c
@@ -1,17 +1,16 @@
-/* Copyright 2022 Kyle McCreery
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
+/* Copyright 2022 Andrew Kannan
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
*/
-
-#include "bde.h"
+#include "malicious_ergo.h"
diff --git a/keyboards/cannonkeys/malicious_ergo/malicious_ergo.h b/keyboards/cannonkeys/malicious_ergo/malicious_ergo.h
new file mode 100644
index 00000000000..191baf768ff
--- /dev/null
+++ b/keyboards/cannonkeys/malicious_ergo/malicious_ergo.h
@@ -0,0 +1,34 @@
+/* Copyright 2022 Andrew Kannan
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#include "quantum.h"
+
+#define ___ KC_NO
+
+#define LAYOUT_default( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G,\
+ K10, K11, K12, K13, K14, K15, K16, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G,\
+ K20, K21, K22, K23, K24, K25, K26, K28, K29, K2A, K2B, K2C, K2D, K2F, K2G,\
+ K31, K32, K33, K34, K35, K36, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, \
+ K41, K43, K44, K46, K49, K4B, K4D, K4E, K4F, K3G \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G }, \
+ { K10, K11, K12, K13, K14, K15, K16, ___, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G }, \
+ { K20, K21, K22, K23, K24, K25, K26, ___, K28, K29, K2A, K2B, K2C, K2D, ___, K2F, K2G }, \
+ { ___, K31, K32, K33, K34, K35, K36, ___, K38, K39, K3A, K3B, K3C, K3D, K3E, K3F, ___ }, \
+ { ___, K41, ___, K43, K44, ___, K46, ___, ___, K49, ___, K4B, ___, K4D, K4E, K4F, K3G } \
+}
diff --git a/keyboards/cannonkeys/malicious_ergo/mcuconf.h b/keyboards/cannonkeys/malicious_ergo/mcuconf.h
new file mode 100644
index 00000000000..d1335e0f445
--- /dev/null
+++ b/keyboards/cannonkeys/malicious_ergo/mcuconf.h
@@ -0,0 +1,33 @@
+/* Copyright 2022 Andrew Kannan
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+/*
+ * This file was auto-generated by:
+ * `qmk chibios-confmigrate -i keyboards/projectkb/alice/mcuconf.h -r platforms/chibios/GENERIC_STM32_F072XB/configs/mcuconf.h`
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_TIM3
+#define STM32_PWM_USE_TIM3 TRUE
+
+#undef STM32_SPI_USE_SPI2
+#define STM32_SPI_USE_SPI2 TRUE
+
+#undef STM32_GPT_USE_TIM1
+#define STM32_GPT_USE_TIM1 TRUE
diff --git a/keyboards/cannonkeys/malicious_ergo/readme.md b/keyboards/cannonkeys/malicious_ergo/readme.md
new file mode 100644
index 00000000000..72cb9630701
--- /dev/null
+++ b/keyboards/cannonkeys/malicious_ergo/readme.md
@@ -0,0 +1,18 @@
+# CannonKeys Malicious Ergo
+
+* Keyboard Maintainer: [Andrew Kannan](https://github.com/awkannan)
+* Hardware Supported: STM32F072CBT6
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cannonkeys/malicious_ergo:default
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Toggle the switch on the back of the pcb to "0" and briefly press the button on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/cannonkeys/malicious_ergo/rules.mk b/keyboards/cannonkeys/malicious_ergo/rules.mk
new file mode 100644
index 00000000000..0d99007c16f
--- /dev/null
+++ b/keyboards/cannonkeys/malicious_ergo/rules.mk
@@ -0,0 +1,25 @@
+# MCU name
+MCU = STM32F072
+
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -v FFFF -p FFFF
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Enable N-Key Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+WS2812_DRIVER = spi
+
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
diff --git a/keyboards/cannonkeys/nearfield/config.h b/keyboards/cannonkeys/nearfield/config.h
new file mode 100755
index 00000000000..7d8f9049152
--- /dev/null
+++ b/keyboards/cannonkeys/nearfield/config.h
@@ -0,0 +1,35 @@
+/*
+Copyright 2021 Dr.Doof
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { B4, D2, D4, D6, D7 }
+#define MATRIX_COL_PINS { D3, D5, C6, C7, B6, B5, B7, F0, F1, F4, F5, F6, F7, B3, B2, D1 }
+#define UNUSED_PINS { E2, E6, D0, B1, B0 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 0
diff --git a/keyboards/cannonkeys/nearfield/info.json b/keyboards/cannonkeys/nearfield/info.json
new file mode 100644
index 00000000000..ffd1bf6ac63
--- /dev/null
+++ b/keyboards/cannonkeys/nearfield/info.json
@@ -0,0 +1,376 @@
+{
+ "keyboard_name":"Nearfield",
+ "manufacturer":"JLC",
+ "url":"",
+ "maintainer":"tominabox1",
+ "usb":{
+ "vid":"0x0004",
+ "pid":"0x0002",
+ "device_version":"0.0.1"
+ },
+ "layouts":{
+ "LAYOUT_all":{
+ "layout":[
+ {
+ "label":"~",
+ "x":0,
+ "y":0
+ },
+ {
+ "label":"!",
+ "x":1,
+ "y":0
+ },
+ {
+ "label":"@",
+ "x":2,
+ "y":0
+ },
+ {
+ "label":"#",
+ "x":3,
+ "y":0
+ },
+ {
+ "label":"$",
+ "x":4,
+ "y":0
+ },
+ {
+ "label":"%",
+ "x":5,
+ "y":0
+ },
+ {
+ "label":"^",
+ "x":7.5,
+ "y":0
+ },
+ {
+ "label":"&",
+ "x":8.5,
+ "y":0
+ },
+ {
+ "label":"*",
+ "x":9.5,
+ "y":0
+ },
+ {
+ "label":"(",
+ "x":10.5,
+ "y":0
+ },
+ {
+ "label":")",
+ "x":11.5,
+ "y":0
+ },
+ {
+ "label":"_",
+ "x":12.5,
+ "y":0
+ },
+ {
+ "label":"+",
+ "x":13.5,
+ "y":0
+ },
+ {
+ "label":"Insert",
+ "x":15.5,
+ "y":0
+ },
+ {
+ "label":"Home",
+ "x":16.5,
+ "y":0
+ },
+ {
+ "label":"PgUp",
+ "x":17.5,
+ "y":0
+ },
+ {
+ "label":"Tab",
+ "x":0,
+ "y":1.5
+ },
+ {
+ "label":"Q",
+ "x":1,
+ "y":1.5
+ },
+ {
+ "label":"W",
+ "x":2,
+ "y":1.5
+ },
+ {
+ "label":"E",
+ "x":3,
+ "y":1.5
+ },
+ {
+ "label":"R",
+ "x":4,
+ "y":1.5
+ },
+ {
+ "label":"T",
+ "x":5,
+ "y":1.5
+ },
+ {
+ "label":"Y",
+ "x":7.5,
+ "y":1.5
+ },
+ {
+ "label":"U",
+ "x":8.5,
+ "y":1.5
+ },
+ {
+ "label":"I",
+ "x":9.5,
+ "y":1.5
+ },
+ {
+ "label":"O",
+ "x":10.5,
+ "y":1.5
+ },
+ {
+ "label":"P",
+ "x":11.5,
+ "y":1.5
+ },
+ {
+ "label":"{",
+ "x":12.5,
+ "y":1.5
+ },
+ {
+ "label":"}",
+ "x":13.5,
+ "y":1.5
+ },
+ {
+ "label":"Insert",
+ "x":15.5,
+ "y":1.5
+ },
+ {
+ "label":"Home",
+ "x":16.5,
+ "y":1.5
+ },
+ {
+ "label":"PgUp",
+ "x":17.5,
+ "y":1.5
+ },
+ {
+ "label":"Caps Lock",
+ "x":0,
+ "y":2.5,
+ "w":1.25
+ },
+ {
+ "label":"A",
+ "x":1.25,
+ "y":2.5
+ },
+ {
+ "label":"S",
+ "x":2.25,
+ "y":2.5
+ },
+ {
+ "label":"D",
+ "x":3.25,
+ "y":2.5
+ },
+ {
+ "label":"F",
+ "x":4.25,
+ "y":2.5
+ },
+ {
+ "label":"G",
+ "x":5.25,
+ "y":2.5
+ },
+ {
+ "label":"H",
+ "x":7.75,
+ "y":2.5
+ },
+ {
+ "label":"J",
+ "x":8.75,
+ "y":2.5
+ },
+ {
+ "label":"K",
+ "x":9.75,
+ "y":2.5
+ },
+ {
+ "label":"L",
+ "x":10.75,
+ "y":2.5
+ },
+ {
+ "label":"\"",
+ "x":11.75,
+ "y":2.5
+ },
+ {
+ "label":"Enter",
+ "x":12.75,
+ "y":2.5,
+ "w":1.75
+ },
+ {
+ "label":"Delete",
+ "x":15.5,
+ "y":2.5
+ },
+ {
+ "label":"End",
+ "x":16.5,
+ "y":2.5
+ },
+ {
+ "label":"PgDn",
+ "x":17.5,
+ "y":2.5
+ },
+ {
+ "label":"Shift",
+ "x":0,
+ "y":3.5,
+ "w":1.75
+ },
+ {
+ "label":"Z",
+ "x":1.75,
+ "y":3.5
+ },
+ {
+ "label":"X",
+ "x":2.75,
+ "y":3.5
+ },
+ {
+ "label":"C",
+ "x":3.75,
+ "y":3.5
+ },
+ {
+ "label":"V",
+ "x":4.75,
+ "y":3.5
+ },
+ {
+ "label":"B",
+ "x":5.75,
+ "y":3.5
+ },
+ {
+ "label":"N",
+ "x":8.25,
+ "y":3.5
+ },
+ {
+ "label":"M",
+ "x":9.25,
+ "y":3.5
+ },
+ {
+ "label":"<",
+ "x":10.25,
+ "y":3.5
+ },
+ {
+ "label":">",
+ "x":11.25,
+ "y":3.5
+ },
+ {
+ "label":"?",
+ "x":12.25,
+ "y":3.5
+ },
+ {
+ "label":"r4 dogshift",
+ "x":13.25,
+ "y":3.5,
+ "w":1.25
+ },
+ {
+ "label":"Ctrl",
+ "x":0,
+ "y":4.5,
+ "w":1.25
+ },
+ {
+ "label":"Alt",
+ "x":2.5,
+ "y":4.5,
+ "w":1.25
+ },
+ {
+ "x":3.75,
+ "y":4.5
+ },
+ {
+ "label":"",
+ "x":4.75,
+ "y":4.5,
+ "w":2
+ },
+ {
+ "label":"",
+ "x":8.25,
+ "y":4.5,
+ "w":2.25
+ },
+ {
+ "label":"Alt",
+ "x":10.5,
+ "y":4.5,
+ "w":1.25
+ },
+ {
+ "label":"Ctrl",
+ "x":13,
+ "y":4.5,
+ "w":1.5
+ },
+ {
+ "label":"\u2191",
+ "x":16.5,
+ "y":4.5
+ },
+ {
+ "label":"\u2190",
+ "x":15.5,
+ "y":5.5
+ },
+ {
+ "label":"\u2193",
+ "x":16.5,
+ "y":5.5
+ },
+ {
+ "label":"\u2192",
+ "x":17.5,
+ "y":5.5
+ }
+ ]
+ }
+ }
+ }
diff --git a/keyboards/cannonkeys/nearfield/keymaps/default/keymap.c b/keyboards/cannonkeys/nearfield/keymaps/default/keymap.c
new file mode 100755
index 00000000000..62f2fa68b90
--- /dev/null
+++ b/keyboards/cannonkeys/nearfield/keymaps/default/keymap.c
@@ -0,0 +1,30 @@
+/*
+Copyright 2021 Dr.Doof
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_INS, KC_HOME, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT, KC_DEL, KC_END, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LALT, KC_SPC, KC_NO, KC_SPC, KC_LALT, KC_LCTL, KC_UP, KC_LEFT, KC_DOWN, KC_RIGHT
+
+ )
+};
diff --git a/keyboards/cannonkeys/nearfield/nearfield.c b/keyboards/cannonkeys/nearfield/nearfield.c
new file mode 100755
index 00000000000..7a635209deb
--- /dev/null
+++ b/keyboards/cannonkeys/nearfield/nearfield.c
@@ -0,0 +1,18 @@
+/*
+Copyright 2021 Dr.Doof
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include "nearfield.h"
diff --git a/keyboards/cannonkeys/nearfield/nearfield.h b/keyboards/cannonkeys/nearfield/nearfield.h
new file mode 100755
index 00000000000..610c6489b51
--- /dev/null
+++ b/keyboards/cannonkeys/nearfield/nearfield.h
@@ -0,0 +1,35 @@
+/*
+Copyright 2021 Dr.Doof
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#pragma once
+
+#include "quantum.h"
+
+#define XXX KC_NO
+
+#define LAYOUT_all( \
+ K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \
+ K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, \
+ K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2E, K2F, K2G, \
+ K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, \
+ K41, K42, K44, K45, K47, K49, K4B, K4D, K4E, K4F, K4G \
+) { \
+ { K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G }, \
+ { K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G }, \
+ { K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, XXX, K2E, K2F, K2G }, \
+ { K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, XXX, XXX, XXX, XXX }, \
+ { K41, K42, XXX, K44, K45, XXX, K47, XXX, K49, XXX, K4B, XXX, K4D, K4E, K4F, K4G } \
+}
diff --git a/keyboards/cannonkeys/nearfield/readme.md b/keyboards/cannonkeys/nearfield/readme.md
new file mode 100644
index 00000000000..fca9388ce79
--- /dev/null
+++ b/keyboards/cannonkeys/nearfield/readme.md
@@ -0,0 +1,31 @@
+# Nearfield
+
+
+
+The LZ ErGO is a classic ergonomic design, predating the alice layout, and drawing inspiration from the "Microsoft natural ergonomic" series.
+Nearfield expands on this by increasing the rotation of the two halves of the alpha cluster, each half is rotated 15 degrees towards the center of the board.
+This increased angle forces the user to widen their elbow stance, and align their hands straighter with their forearms while typing.
+
+Aesthetic design: Aside from the obvious layout homage to the ergo, retaining the nav cluster,
+the case design draws inspiration from the M0110 keyboard series from Apple.
+
+bog standard mx and alps support pcb, uses unified c3 daughterboard. 100mm JST cable recommended.
+
+
+* Keyboard Maintainer: [TJ Campie](https://github.com/tominabox1)
+* Hardware Supported: Nearfield
+* Hardware Availability: [Cannonkeys](https://cannonkeys.com/collections/nearfield/products/nearfield-extra-pcb-and-daughterboard)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make nearfield:default
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the top left key and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/cannonkeys/nearfield/rules.mk b/keyboards/cannonkeys/nearfield/rules.mk
new file mode 100755
index 00000000000..476cf49f278
--- /dev/null
+++ b/keyboards/cannonkeys/nearfield/rules.mk
@@ -0,0 +1,18 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/cannonkeys/satisfaction75/config.h b/keyboards/cannonkeys/satisfaction75/config.h
index ef4123770d1..615ad1d0564 100644
--- a/keyboards/cannonkeys/satisfaction75/config.h
+++ b/keyboards/cannonkeys/satisfaction75/config.h
@@ -17,7 +17,7 @@ along with this program. If not, see .
#pragma once
-/* Ensure we jump to bootloader if the RESET keycode was pressed */
+/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
/* LSE clock */
diff --git a/keyboards/cantor/keymaps/zeromist/keymap.c b/keyboards/cantor/keymaps/zeromist/keymap.c
new file mode 100644
index 00000000000..1c4f56a727a
--- /dev/null
+++ b/keyboards/cantor/keymaps/zeromist/keymap.c
@@ -0,0 +1,107 @@
+// Copyright 2022 Diego Palacios (@diepala)
+// SPDX-License-Identifier: GPL-2.0
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐
+ * │Tab│ Q │ W │ E │ R │ T │ │ Y │ U │ I │ O │ P │Bsp│
+ * ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
+ * │ESC│ A │ S │ D │ F │ G │ │ H │ J │ K │ L │ ; │ ' │
+ * ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
+ * │Sft│ Z │ X │ C │ V │ B │ │ N │ M │ , │ . │ / │Sft│
+ * └───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┘
+ * ┌────┐ ┌───┐
+ * │LCTL├───────┐ ┌─────┤Alt│
+ * └────┤GUI/Bsp├───────┐ ┌───┤TO(1)├───┘
+ * └───────┤ALT/ENT│ │SPC├─────┘
+ * └───────┘ └───┘
+ */
+ [0] = LAYOUT_split_3x6_3(
+ //-------------------------------------------------------------------------- ---------------------------------------------------------------------------------
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ //-------------------------------------------------------------------------- ---------------------------------------------------------------------------------
+ KC_ESCAPE, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ //-------------------------------------------------------------------------- ---------------------------------------------------------------------------------
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ //-------------------------------------------------------------------------- ---------------------------------------------------------------------------------
+ KC_LCTL, MT(MOD_LGUI, KC_BSPC), MT(MOD_LALT, KC_ENT), KC_SPC, TO(1), KC_RALT
+ //-------------------------------------------------------------------------- ---------------------------------------------------------------------------------
+ ),
+ /*
+ * ┌───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┬───┬───┬───┐
+ * │`~ │ 1 │ 2 │ 3 │ 4 │ 5 │ │ 6 │ 7 │ 8 │ 9 │ 0 │Bsp│
+ * ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
+ * │ │ ! │ @ │ # │ $ │ % │ │ ^ │ & │ * │ ( │ ) │ | │
+ * ├───┼───┼───┼───┼───┼───┤ ├───┼───┼───┼───┼───┼───┤
+ * │Sft│ += │ -_│ + │ { │ } │ │ [ │ ] │ ; │ : │ \ │ │
+ * └───┴───┴───┴───┴───┴───┘ └───┴───┴───┴───┴───┴───┘
+ * ┌────────┐ ┌─────┐
+ * │ MLCKSCN ├─────┐ ┌────┤TO(3)│
+ * └────────┤TO(0)├───┐ ┌───┤TO(2)├─────┘
+ * └─────┤ < │ │ > ├────┘
+ * └───┘ └───┘
+ */
+ [1] = LAYOUT_split_3x6_3(
+ //-------------------------------------------------------------- ---------------------------------------------------------------------------------
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ //-------------------------------------------------------------- ---------------------------------------------------------------------------------
+ KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PIPE,
+ //-------------------------------------------------------------- ---------------------------------------------------------------------------------
+ KC_LSFT, KC_EQL, KC_MINS, KC_PLUS, KC_LCBR, KC_RCBR, KC_LBRC, KC_RBRC, KC_SCLN, KC_COLN, KC_BSLS, KC_RSFT,
+ //-------------------------------------------------------------- ---------------------------------------------------------------------------------
+ KC_TRNS, TO(0), KC_LT, KC_GT, TO(2), TO(3)
+ //-------------------------------------------------------------- ---------------------------------------------------------------------------------
+ ),
+ /*
+ * ┌────┬──────┬──────┬──────┬──────────┬──────┐ ┌──────┬──────┬──────┬───────┬──────┬───┐
+ * │MSTP│ Play │ PRVS │ Next │ │ CAPS │ │ PgDn │ PgUp │ INS │ Print │ │Bsp│
+ * ├────┼──────┼──────┼───────┼─────────┼──────┤ ├──────┼──────┼──────┼───────┼──────┼───┤
+ * │ │ HOME │ END │ LCTRL+C │ LCTRL+V │ │ │ Left │ Down │ Up │ Right │ Del │ │
+ * ├────┼──────┼──────┼───────┼────────┼──────┤ ├──────┼──────┼──────┼───────┼──────┼───┤
+ * │Sft │ UNDO │ CUT │ COPY │ PASTE │ RApp │ │ Vol- │ Vol+ │ Mute │ │ RGui │ │
+ * └────┴──────┴──────┴──────┴───────┴──────┘ └──────┴──────┴──────┴───────┴──────┴───┘
+ * ┌─────┐ ┌─────┐
+ * │LCTRL├─────┐ ┌─────┤TO(3)│
+ * └─────┤TO(0)├───┐ ┌───┤TO(0)├─────┘
+ * └─────┤ALT│ │SPC├─────┘
+ * └───┘ └───┘
+ */
+ [2] = LAYOUT_split_3x6_3(
+ //-------------------------------------------------------------- ---------------------------------------------------------------------------------
+ KC_MSTP, KC_MPLY, KC_MPRV, KC_MNXT, KC_NO, KC_CAPS, KC_PGDOWN, KC_PGUP, KC_INS, KC_PSCR, KC_NO, KC_BSPC,
+ //-------------------------------------------------------------- ---------------------------------------------------------------------------------
+ KC_NO, KC_HOME, KC_END, C(KC_C), C(KC_V), KC_NO, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_DEL, KC_NO,
+ //-------------------------------------------------------------- ---------------------------------------------------------------------------------
+ KC_TAB, KC_UNDO, KC_CUT, KC_COPY, KC_PASTE, KC_APP, KC_VOLD, KC_VOLU, KC_MUTE, KC_NO, KC_NO, KC_RSFT,
+ //-------------------------------------------------------------- ---------------------------------------------------------------------------------
+ KC_LCTL, TO(0), KC_LALT, KC_TRNS, KC_TRNS, TO(3)
+ //-------------------------------------------------------------- ---------------------------------------------------------------------------------
+ ),
+ /*
+ * ┌──┬────┬────┬────┬────┬────┐ ┌────┬────┬────┬────┬─────┬─────┐
+ * │ │ F1 │ F2 │ F3 │ F4 │ F5 │ │ F6 │ F7 │ F8 │ F9 │ F10 │ F11 │
+ * ├──┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼─────┼─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ F12 │
+ * ├──┼────┼────┼────┼────┼────┤ ├────┼────┼────┼────┼─────┼─────┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ │ │
+ * └──┴────┴────┴────┴────┴────┘ └────┴────┴────┴────┴─────┴─────┘
+ * ┌───┐ ┌───┐
+ * │ ├─────┐ ┌─────┤ │
+ * └───┤TO(0)├───┐ ┌───┤ ├───┘
+ * └─────┤ENT│ │ ├─────┘
+ * └───┘ └───┘
+ */
+ [3] = LAYOUT_split_3x6_3(
+ //-------------------------------------------------------------- ---------------------------------------------------------------------------------
+ KC_NO, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
+ //-------------------------------------------------------------- ---------------------------------------------------------------------------------
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12,
+ //-------------------------------------------------------------- ---------------------------------------------------------------------------------
+ KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
+ //-------------------------------------------------------------- ---------------------------------------------------------------------------------
+ KC_NO, TO(0), KC_NO, KC_NO, KC_NO, KC_NO
+ //-------------------------------------------------------------- ---------------------------------------------------------------------------------
+ )
+};
diff --git a/keyboards/capsunlocked/cu75/cu75.c b/keyboards/capsunlocked/cu75/cu75.c
index e52edd90fab..690d72055ac 100644
--- a/keyboards/capsunlocked/cu75/cu75.c
+++ b/keyboards/capsunlocked/cu75/cu75.c
@@ -91,7 +91,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record)
if (click_toggle && record->event.pressed){
click(click_hz, click_time);
}
- if (keycode == RESET) {
+ if (keycode == QK_BOOT) {
reset_keyboard_kb();
} else {
}
diff --git a/keyboards/carbo65/config.h b/keyboards/carbo65/config.h
index 2e547604d10..dfbd4db1ac9 100644
--- a/keyboards/carbo65/config.h
+++ b/keyboards/carbo65/config.h
@@ -32,7 +32,7 @@ along with this program. If not, see .
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
-/* Ensure we jump to bootloader if the RESET keycode was pressed */
+/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
/* Indicator LEDs */
diff --git a/keyboards/chord/zero/config.h b/keyboards/chord/zero/config.h
new file mode 100644
index 00000000000..9d552d5af42
--- /dev/null
+++ b/keyboards/chord/zero/config.h
@@ -0,0 +1,4 @@
+// Copyright (c) 2022 Simon Hengel
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
diff --git a/keyboards/chord/zero/info.json b/keyboards/chord/zero/info.json
new file mode 100644
index 00000000000..c49a8a3c2f2
--- /dev/null
+++ b/keyboards/chord/zero/info.json
@@ -0,0 +1,65 @@
+{
+ "manufacturer": "Simon Hengel",
+ "keyboard_name": "CHORD ZERO",
+ "usb": {
+ "device_version": "1.0.0",
+ "vid": "0x1D50",
+ "pid": "0x617C"
+ },
+ "url": "https://github.com/sol/chord-zero#readme",
+ "maintainer": "sol",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "steno": true
+ },
+ "processor": "RP2040",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "cols": ["GP22", "GP9", "GP21", "GP11", "GP19", "GP12"],
+ "rows": ["GP26", "GP20", "GP18", "GP17", "GP7", "GP10", "GP13", "GP14"]
+ },
+ "layouts": {
+ "LAYOUT_zero": {
+ "layout": [
+ { "matrix": [0, 0], "y": 0, "x": 0 },
+ { "matrix": [0, 1], "y": 0, "x": 1 },
+ { "matrix": [0, 2], "y": 0, "x": 2 },
+ { "matrix": [0, 3], "y": 0, "x": 3 },
+ { "matrix": [0, 4], "y": 0, "x": 4 },
+ { "matrix": [0, 5], "y": 0, "x": 5 },
+ { "matrix": [4, 5], "y": 0, "x": 8 },
+ { "matrix": [4, 4], "y": 0, "x": 9 },
+ { "matrix": [4, 3], "y": 0, "x": 10 },
+ { "matrix": [4, 2], "y": 0, "x": 11 },
+ { "matrix": [4, 1], "y": 0, "x": 12 },
+ { "matrix": [4, 0], "y": 0, "x": 13 },
+
+ { "matrix": [1, 0], "y": 1, "x": 0 },
+ { "matrix": [1, 1], "y": 1, "x": 1 },
+ { "matrix": [1, 2], "y": 1, "x": 2 },
+ { "matrix": [1, 3], "y": 1, "x": 3 },
+ { "matrix": [1, 4], "y": 1, "x": 4 },
+ { "matrix": [1, 5], "y": 1, "x": 5 },
+ { "matrix": [5, 5], "y": 1, "x": 8 },
+ { "matrix": [5, 4], "y": 1, "x": 9 },
+ { "matrix": [5, 3], "y": 1, "x": 10 },
+ { "matrix": [5, 2], "y": 1, "x": 11 },
+ { "matrix": [5, 1], "y": 1, "x": 12 },
+ { "matrix": [5, 0], "y": 1, "x": 13 },
+
+ { "matrix": [3, 3], "y": 3, "x": 3 },
+ { "matrix": [3, 4], "y": 3, "x": 4 },
+ { "matrix": [3, 5], "y": 3, "x": 5 },
+ { "matrix": [7, 5], "y": 3, "x": 8 },
+ { "matrix": [7, 4], "y": 3, "x": 9 },
+ { "matrix": [7, 3], "y": 3, "x": 10 }
+ ]
+ }
+ }
+}
diff --git a/keyboards/chord/zero/keymaps/default/keymap.c b/keyboards/chord/zero/keymaps/default/keymap.c
new file mode 100644
index 00000000000..a394893e1b8
--- /dev/null
+++ b/keyboards/chord/zero/keymaps/default/keymap.c
@@ -0,0 +1,25 @@
+// Copyright (c) 2022 Simon Hengel
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+#include "keymap_steno.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_zero(
+ STN_FN, STN_S1, STN_TL, STN_PL, STN_HL, STN_ST1, STN_ST3, STN_FR, STN_PR, STN_LR, STN_TR, STN_DR,
+ STN_PWR, STN_S2, STN_KL, STN_WL, STN_RL, STN_ST2, STN_ST4, STN_RR, STN_BR, STN_GR, STN_SR, STN_ZR,
+ STN_N1, STN_A, STN_O, STN_E, STN_U, STN_N7
+ )
+};
+
+const uint16_t PROGMEM bootloader_combo[] = {
+ keymaps[0][0][0], keymaps[0][4][0],
+ keymaps[0][1][0], keymaps[0][5][0],
+ keymaps[0][3][3], keymaps[0][7][3]
+, COMBO_END };
+
+combo_t key_combos[] = {
+ COMBO(bootloader_combo, QK_BOOTLOADER),
+};
+
+uint16_t COMBO_LEN = sizeof(key_combos) / sizeof(key_combos[0]);
diff --git a/keyboards/chord/zero/keymaps/default/rules.mk b/keyboards/chord/zero/keymaps/default/rules.mk
new file mode 100644
index 00000000000..ab1e438182a
--- /dev/null
+++ b/keyboards/chord/zero/keymaps/default/rules.mk
@@ -0,0 +1 @@
+COMBO_ENABLE = yes
diff --git a/keyboards/chord/zero/readme.md b/keyboards/chord/zero/readme.md
new file mode 100644
index 00000000000..51e3f2ce10c
--- /dev/null
+++ b/keyboards/chord/zero/readme.md
@@ -0,0 +1,37 @@
+# CHORD ZERO Stenographic Keyboard
+
+
+
+CHORD ZERO is a stenographic keyboard that can be used with
+[Plover](https://www.openstenoproject.org/plover/) or any other application
+that supports the [TX
+Bolt](https://docs.qmk.fm/#/feature_stenography?id=tx-bolt) or
+[GeminiPR](https://docs.qmk.fm/#/feature_stenography?id=geminipr) protocol.
+
+* Keyboard Maintainer: [Simon Hengel](https://github.com/sol)
+* Hardware Supported: REV 0, REV 1
+* Hardware Availability: https://github.com/sol/chord-zero#readme
+
+Make example for this keyboard (after setting up your build environment):
+
+ make chord/zero:default
+
+or
+
+ qmk compile -kb chord/zero -km default
+
+This will generate `chord_zero_default.uf2`.
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Reset key combo**: Press the six keys at the outer columns on each side of the keyboard simultaneously while it is plugged in
+* **Bootmagic reset**: Hold down the top left key and plug in the keyboard
+* **Physical reset button**: Press the button on the back of the PCB and plug in the keyboard
+
+Once the keyboard is in bootloader mode you can mount it as a USB mass storage
+device and copy the firmware (the file `chord_zero_default.uf2`) onto it. Once
+copying is completed the keyboard will reboot automatically.
diff --git a/keyboards/chord/zero/rules.mk b/keyboards/chord/zero/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/chord/zero/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/clueboard/17/info.json b/keyboards/clueboard/17/info.json
index 5ea4937e50e..5d87806703e 100644
--- a/keyboards/clueboard/17/info.json
+++ b/keyboards/clueboard/17/info.json
@@ -4,6 +4,7 @@
"maintainer": "skullydazed",
"diode_direction": "COL2ROW",
"processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
"features": {
"backlight": true,
"bootmagic": false,
diff --git a/keyboards/clueboard/66/rev1/info.json b/keyboards/clueboard/66/rev1/info.json
index bc3e1e23b65..76aa685768b 100644
--- a/keyboards/clueboard/66/rev1/info.json
+++ b/keyboards/clueboard/66/rev1/info.json
@@ -3,6 +3,7 @@
"keyboard_name": "Clueboard 66%",
"maintainer": "skullydazed",
"processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
"debounce": 5,
"diode_direction": "COL2ROW",
"features": {
diff --git a/keyboards/clueboard/66/rev2/info.json b/keyboards/clueboard/66/rev2/info.json
index 0cfb6903889..7ee7a88df02 100644
--- a/keyboards/clueboard/66/rev2/info.json
+++ b/keyboards/clueboard/66/rev2/info.json
@@ -3,6 +3,7 @@
"keyboard_name": "Clueboard 66%",
"maintainer": "skullydazed",
"processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
"debounce": 5,
"diode_direction": "COL2ROW",
"features": {
diff --git a/keyboards/clueboard/66/rev3/info.json b/keyboards/clueboard/66/rev3/info.json
index 208bc22dd1f..0dc0097a52c 100644
--- a/keyboards/clueboard/66/rev3/info.json
+++ b/keyboards/clueboard/66/rev3/info.json
@@ -3,6 +3,7 @@
"keyboard_name": "Clueboard 66% rev3",
"maintainer": "skullydazed",
"processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
"debounce": 5,
"diode_direction": "COL2ROW",
"features": {
diff --git a/keyboards/clueboard/66/rev4/mine/keymap.c b/keyboards/clueboard/66/rev4/mine/keymap.c
deleted file mode 100644
index df145eb4885..00000000000
--- a/keyboards/clueboard/66/rev4/mine/keymap.c
+++ /dev/null
@@ -1,13 +0,0 @@
-#include QMK_KEYBOARD_H
-
-/* THIS FILE WAS GENERATED!
- *
- * This file was generated by qmk json2c. You may or may not want to
- * edit it directly.
- */
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_GRV, KC_BSPC, KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RO, KC_RSFT, KC_UP, KC_LCTL, KC_LGUI, KC_LALT, KC_MHEN, KC_SPC, KC_SPC, KC_HENK, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
- [1] = LAYOUT(KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_TRNS, KC_DEL, KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_MPLY, KC_MNXT, KC_TRNS, KC_MUTE, KC_VOLD, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGUP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(1), KC_TRNS, KC_HOME, KC_PGDN, KC_END),
- [2] = LAYOUT(BL_STEP, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_X, RGB_M_G, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_TOG, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_VAD, KC_TRNS, KC_TRNS, MO(2), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, MO(1), KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_MOD, RGB_MOD, KC_TRNS, KC_TRNS, MO(1), KC_TRNS, RGB_HUD, RGB_SAD, RGB_HUI)
-};
diff --git a/keyboards/clueboard/66_hotswap/prototype/info.json b/keyboards/clueboard/66_hotswap/prototype/info.json
index 4940af8439f..21db54513f8 100644
--- a/keyboards/clueboard/66_hotswap/prototype/info.json
+++ b/keyboards/clueboard/66_hotswap/prototype/info.json
@@ -5,6 +5,7 @@
"debounce": 5,
"diode_direction": "COL2ROW",
"processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
"features": {
"audio": true,
"backlight": true,
diff --git a/keyboards/clueboard/card/info.json b/keyboards/clueboard/card/info.json
index aaeda61b94b..739d2539716 100644
--- a/keyboards/clueboard/card/info.json
+++ b/keyboards/clueboard/card/info.json
@@ -4,6 +4,7 @@
"maintainer": "skullydazed",
"debounce": 20,
"processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
"diode_direction": "ROW2COL",
"features": {
"audio": true,
diff --git a/keyboards/converter/ibm_terminal/config.h b/keyboards/converter/ibm_terminal/config.h
index 9e7d140809e..9b44bfa3ea2 100644
--- a/keyboards/converter/ibm_terminal/config.h
+++ b/keyboards/converter/ibm_terminal/config.h
@@ -36,7 +36,7 @@ along with this program. If not, see .
/*
* PS/2 USART configuration for ATMega32U4
*/
-#ifdef PS2_USE_USART
+#ifdef PS2_DRIVER_USART
/* XCK for clock line */
#define PS2_CLOCK_PIN D5
#define PS2_DATA_PIN D2
@@ -77,7 +77,7 @@ along with this program. If not, see .
/*
* PS/2 Interrupt configuration
*/
-#ifdef PS2_USE_INT
+#ifdef PS2_DRIVER_INTERRUPT
/* uses INT1 for clock line(ATMega32U4) */
#define PS2_CLOCK_PIN D1
#define PS2_DATA_PIN D0
@@ -99,7 +99,7 @@ along with this program. If not, see .
/*
* PS/2 Busywait configuration
*/
-#ifdef PS2_USE_BUSYWAIT
+#ifdef PS2_DRIVER_BUSYWAIT
#define PS2_CLOCK_PIN D1
#define PS2_DATA_PIN D0
#endif
diff --git a/keyboards/converter/ibm_terminal/keymaps/default/rules.mk b/keyboards/converter/ibm_terminal/keymaps/default/rules.mk
index e3cb087a76f..10f43dc416b 100644
--- a/keyboards/converter/ibm_terminal/keymaps/default/rules.mk
+++ b/keyboards/converter/ibm_terminal/keymaps/default/rules.mk
@@ -7,4 +7,5 @@ NKRO_ENABLE = yes
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
AUDIO_ENABLE = no # Audio output
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-PS2_USE_USART = yes
+PS2_ENABLE = yes
+PS2_DRIVER = usart
diff --git a/keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk b/keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk
index 8c5f3d70343..b18dc2d4d85 100644
--- a/keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk
+++ b/keyboards/converter/ibm_terminal/keymaps/priyadi/rules.mk
@@ -1,5 +1,5 @@
# Build Options
-# change to "no" to disable the options, or define them in the Makefile in
+# change to "no" to disable the options, or define them in the Makefile in
# the appropriate keymap folder that will get included automatically
#
BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
@@ -14,8 +14,9 @@ AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
UNICODEMAP_ENABLE = yes
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
-RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-PS2_USE_USART = yes
+RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
+PS2_ENABLE = yes
+PS2_DRIVER = usart
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/converter/ibm_terminal/rules.mk b/keyboards/converter/ibm_terminal/rules.mk
index 277e8282696..6304e20fb46 100644
--- a/keyboards/converter/ibm_terminal/rules.mk
+++ b/keyboards/converter/ibm_terminal/rules.mk
@@ -16,7 +16,8 @@ NKRO_ENABLE = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
AUDIO_ENABLE = no # Audio output
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-PS2_USE_USART = yes
+PS2_ENABLE = yes
+PS2_DRIVER = usart
CUSTOM_MATRIX = yes
SRC = matrix.c led.c
diff --git a/keyboards/crkbd/keymaps/gotham/oled.c b/keyboards/crkbd/keymaps/gotham/oled.c
index c4ac5e736c7..c285a37c5ba 100644
--- a/keyboards/crkbd/keymaps/gotham/oled.c
+++ b/keyboards/crkbd/keymaps/gotham/oled.c
@@ -176,7 +176,7 @@ void add_keylog(uint16_t keycode) {
keylog_str[i] = keylog_str[i - 1];
}
- if (keycode < (sizeof(code_to_name) / sizeof(char))) {
+ if (keycode < ARRAY_SIZE(code_to_name)) {
keylog_str[0] = pgm_read_byte(&code_to_name[keycode]);
}
}
diff --git a/keyboards/crkbd/keymaps/julian_turner/config.h b/keyboards/crkbd/keymaps/julian_turner/config.h
index cf3e80b23e6..fbe5277c40e 100644
--- a/keyboards/crkbd/keymaps/julian_turner/config.h
+++ b/keyboards/crkbd/keymaps/julian_turner/config.h
@@ -17,7 +17,7 @@
#pragma once
#undef MANUFACTURER
-#define MANUFACTURER Trner
+#define MANUFACTURER "Trner"
/* Select hand configuration */
#define MASTER_LEFT
diff --git a/keyboards/crkbd/keymaps/kidbrazil/config.h b/keyboards/crkbd/keymaps/kidbrazil/config.h
index 2801436709e..fefb8eb0eef 100644
--- a/keyboards/crkbd/keymaps/kidbrazil/config.h
+++ b/keyboards/crkbd/keymaps/kidbrazil/config.h
@@ -34,7 +34,7 @@ along with this program. If not, see .
#define TAPPING_FORCE_HOLD
#define TAPPING_TERM 150
#undef PRODUCT
-#define PRODUCT CRKBD Loose Transistor Ed.
+#define PRODUCT "CRKBD Loose Transistor Ed."
#ifdef RGBLIGHT_ENABLE
//#undef RGBLED_NUM
diff --git a/keyboards/crkbd/keymaps/rpbaptist/config.h b/keyboards/crkbd/keymaps/rpbaptist/config.h
index 994aef314e7..fd53b57c683 100644
--- a/keyboards/crkbd/keymaps/rpbaptist/config.h
+++ b/keyboards/crkbd/keymaps/rpbaptist/config.h
@@ -131,7 +131,7 @@ along with this program. If not, see .
#define NO_ACTION_ONESHOT
#undef PRODUCT
-#define PRODUCT Corne Keyboard
+#define PRODUCT "Corne Keyboard"
#define LCPC_KEYS KC_LCTL, KC_LSFT, KC_9
#define RCPC_KEYS KC_RCTL, KC_RSFT, KC_0
diff --git a/keyboards/crkbd/keymaps/thunderbird2086/oled.c b/keyboards/crkbd/keymaps/thunderbird2086/oled.c
index bee9bc26dee..108f3e0cdde 100644
--- a/keyboards/crkbd/keymaps/thunderbird2086/oled.c
+++ b/keyboards/crkbd/keymaps/thunderbird2086/oled.c
@@ -189,7 +189,7 @@ void add_keylog(uint16_t keycode) {
keylog_str[i] = keylog_str[i - 1];
}
- if (keycode < (sizeof(code_to_name) / sizeof(char))) {
+ if (keycode < ARRAY_SIZE(code_to_name)) {
keylog_str[0] = pgm_read_byte(&code_to_name[keycode]);
}
}
diff --git a/keyboards/dm9records/plaid/keymaps/brickbots/keymap.c b/keyboards/dm9records/plaid/keymaps/brickbots/keymap.c
index 819b76e739d..0442c930fe8 100644
--- a/keyboards/dm9records/plaid/keymaps/brickbots/keymap.c
+++ b/keyboards/dm9records/plaid/keymaps/brickbots/keymap.c
@@ -242,7 +242,7 @@ layer_state_t layer_state_set_user(layer_state_t state) {
void led_keypress_update(uint8_t led, uint8_t led_mode, uint16_t keycode, keyrecord_t *record) {
switch (led_mode) {
case LEDMODE_MODS:
- for (int i=0;ievent.pressed) {
writePinHigh(led);
diff --git a/keyboards/dm9records/plaid/keymaps/default/keymap.c b/keyboards/dm9records/plaid/keymaps/default/keymap.c
index d96c2506091..aa0bd8b093e 100644
--- a/keyboards/dm9records/plaid/keymaps/default/keymap.c
+++ b/keyboards/dm9records/plaid/keymaps/default/keymap.c
@@ -245,7 +245,7 @@ layer_state_t layer_state_set_user(layer_state_t state) {
void led_keypress_update(uint8_t led, uint8_t led_mode, uint16_t keycode, keyrecord_t *record) {
switch (led_mode) {
case LEDMODE_MODS:
- for (int i=0;ievent.pressed) {
writePinHigh(led);
diff --git a/keyboards/dm9records/plaid/keymaps/stephen-huan/keymap.c b/keyboards/dm9records/plaid/keymaps/stephen-huan/keymap.c
index 354599f3403..9a0e89bd894 100644
--- a/keyboards/dm9records/plaid/keymaps/stephen-huan/keymap.c
+++ b/keyboards/dm9records/plaid/keymaps/stephen-huan/keymap.c
@@ -184,7 +184,7 @@ layer_state_t layer_state_set_user(layer_state_t state) {
void led_keypress_update(uint8_t led, uint8_t led_mode, uint16_t keycode, keyrecord_t *record) {
switch (led_mode) {
case LEDMODE_MODS:
- for (int i=0;ievent.pressed) {
writePinHigh(led);
diff --git a/keyboards/dmqdesign/spin/keymaps/spidey3_pad/config.h b/keyboards/dmqdesign/spin/keymaps/spidey3_pad/config.h
index 1851f07f1d9..b9a0b53fbf2 100644
--- a/keyboards/dmqdesign/spin/keymaps/spidey3_pad/config.h
+++ b/keyboards/dmqdesign/spin/keymaps/spidey3_pad/config.h
@@ -24,7 +24,7 @@
#undef LOCKING_SUPPORT_ENABLE
#define LAYER_STATE_8BIT
-#define MAX_LAYER 4
+#define MAX_LAYER 5
#undef RGBLIGHT_ANIMATIONS
#define RGBLIGHT_EFFECT_BREATHING
diff --git a/keyboards/dmqdesign/spin/keymaps/spidey3_pad/keymap.c b/keyboards/dmqdesign/spin/keymaps/spidey3_pad/keymap.c
index 58aa5554c21..77534b9a757 100644
--- a/keyboards/dmqdesign/spin/keymaps/spidey3_pad/keymap.c
+++ b/keyboards/dmqdesign/spin/keymaps/spidey3_pad/keymap.c
@@ -61,11 +61,20 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
RGB_RMOD, RGB_TOG, RGB_MOD),
[_FN] = LAYOUT(
- KC_TRNS, DEBUG, QK_BOOT, KC_TRNS,
+ KC_NO, DEBUG, QK_BOOT, KC_TRNS,
KC_NO, KC_NO, EEP_RST, KC_TRNS,
KC_NO, KC_NO, KC_NO, KC_TRNS,
- KC_NO, KC_NO, KC_NO),
+ KC_TRNS, KC_NO, KC_NO),
};
+
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_MACRO] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(C(KC_MINS), C(KC_EQL)), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_NUMPAD] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(C(KC_MINS), C(KC_EQL)), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_CURSOR] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(C(KC_MINS), C(KC_EQL)), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_RGB] = { ENCODER_CCW_CW(RGB_HUD, RGB_HUI ), ENCODER_CCW_CW(RGB_SAD, RGB_SAI ), ENCODER_CCW_CW(RGB_VAD, RGB_VAI) },
+ [_FN] = { ENCODER_CCW_CW(KC_BRID, KC_BRIU), ENCODER_CCW_CW(C(KC_MINS), C(KC_EQL)), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+};
+
// clang-format on
typedef enum layer_ack {
@@ -102,7 +111,7 @@ const rgblight_segment_t *const PROGMEM _rgb_layers[] = {
};
// clang-format off
-const uint8_t PROGMEM _n_rgb_layers = sizeof(_rgb_layers) / sizeof(_rgb_layers[0]) - 1;
+const uint8_t PROGMEM _n_rgb_layers = ARRAY_SIZE(_rgb_layers) - 1;
void clear_rgb_layers(void) {
dprint("clear_rgb_layers()\n");
@@ -153,9 +162,22 @@ void spidey_glow(void) {
rgblight_sethsv(255, 230, 128);
}
-void eeconfig_init_user(void) { spidey_glow(); }
+void eeconfig_init_user(void) {
+ spidey_glow();
+}
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ dprintf("key event: kc: %02X, col: %02u, row: %02u, pressed: %u mods: %08b "
+#if !defined(NO_ACTION_ONESHOT)
+ "os: %08b "
+#endif
+ "weak: %08b\n",
+ keycode, record->event.key.col, record->event.key.row, record->event.pressed, bitrev(get_mods()),
+#if !defined(NO_ACTION_ONESHOT)
+ bitrev(get_oneshot_mods()),
+#endif
+ bitrev(get_weak_mods()));
+
if (record->event.pressed) {
switch (keycode) {
// Re-implement this here, but fix the persistence!
@@ -208,39 +230,3 @@ void post_process_record_user(uint16_t keycode, keyrecord_t *record) {
}
}
-bool encoder_update_user(uint8_t index, bool clockwise) {
- switch (get_highest_layer(layer_state)) {
- case _RGB:
- if (index == 0) {
- if (clockwise) {
- rgblight_increase_hue();
- } else {
- rgblight_decrease_hue();
- }
- } else if (index == 1) {
- if (clockwise) {
- rgblight_increase_sat();
- } else {
- rgblight_decrease_sat();
- }
- } else if (index == 2) {
- if (clockwise) {
- rgblight_increase_val();
- } else {
- rgblight_decrease_val();
- }
- }
- break;
-
- default:
- if (index == 0) {
- tap_code16(C(S(clockwise ? KC_EQL : KC_MINS)));
- } else if (index == 1) {
- tap_code16(C(clockwise ? KC_EQL : KC_MINS));
- } else if (index == 2) {
- tap_code(clockwise ? KC_VOLU : KC_VOLD);
- }
- break;
- }
- return true;
-}
diff --git a/keyboards/dmqdesign/spin/keymaps/spidey3_pad/rules.mk b/keyboards/dmqdesign/spin/keymaps/spidey3_pad/rules.mk
index 7fe1f992aa0..5d543e2c7ec 100644
--- a/keyboards/dmqdesign/spin/keymaps/spidey3_pad/rules.mk
+++ b/keyboards/dmqdesign/spin/keymaps/spidey3_pad/rules.mk
@@ -1,7 +1,7 @@
MOUSEKEY_ENABLE = no
MIDI_ENABLE = no
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+BOOTMAGIC_ENABLE = yes
LTO_ENABLE = yes
-CONSOLE_ENABLE = yes # Console for debug
+CONSOLE_ENABLE = yes
GRAVE_ESC_ENABLE = no
-
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/dz60/keymaps/LEdiodes/config.h b/keyboards/dz60/keymaps/LEdiodes/config.h
index e5ead20c122..bb6c5c55e41 100644
--- a/keyboards/dz60/keymaps/LEdiodes/config.h
+++ b/keyboards/dz60/keymaps/LEdiodes/config.h
@@ -1,48 +1,5 @@
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x2260
-#define DEVICE_VER 0x0001
-#define MANUFACTURER KBDFans
-#define PRODUCT DZ60
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 15
-
-/* key matrix pins */
-#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
-#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B7, D4, B1, B0, B5, B4, D7, D6, B3, F4 }
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* number of backlight levels */
-#define BACKLIGHT_PIN B6
-#define BACKLIGHT_LEVELS 5
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE 5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-#define RGB_DI_PIN E2
-#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 16
-#define RGBLIGHT_HUE_STEP 8
-#define RGBLIGHT_SAT_STEP 8
-#define RGBLIGHT_VAL_STEP 8
+#pragma once
/* sets 'Auto Shift' timeouts */
#define AUTO_SHIFT_TIMEOUT 150
#define NO_AUTO_SHIFT_SPECIAL
-
-#endif
diff --git a/keyboards/emery65/config.h b/keyboards/emery65/config.h
index 2e547604d10..dfbd4db1ac9 100644
--- a/keyboards/emery65/config.h
+++ b/keyboards/emery65/config.h
@@ -32,7 +32,7 @@ along with this program. If not, see .
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
-/* Ensure we jump to bootloader if the RESET keycode was pressed */
+/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
/* Indicator LEDs */
diff --git a/keyboards/evolv/keymaps/gondolindrim/keymap.c b/keyboards/evolv/keymaps/gondolindrim/keymap.c
index 3ab66bd056e..bf0944fbd10 100755
--- a/keyboards/evolv/keymaps/gondolindrim/keymap.c
+++ b/keyboards/evolv/keymaps/gondolindrim/keymap.c
@@ -129,7 +129,7 @@ const encoder_mode_t encoder_modes[] = {
// Insert your custom encoder mode here
};
-#define NUM_ENCODER_MODES (sizeof(encoder_modes)/sizeof(encoder_modes[0])) // DO NOT CHANGE THIS. NUM_ENCODER_MODES calculates how many modes there are.
+#define NUM_ENCODER_MODES ARRAY_SIZE(encoder_modes) // DO NOT CHANGE THIS. NUM_ENCODER_MODES calculates how many modes there are.
// This counter is used to track what encoder mode is being used at a certain time
int encoder_mode_count = 0;
diff --git a/keyboards/evyd13/gh80_3700/keymaps/ps2/config.h b/keyboards/evyd13/gh80_3700/keymaps/ps2/config.h
index b77ac95d7d4..5f6d8559661 100644
--- a/keyboards/evyd13/gh80_3700/keymaps/ps2/config.h
+++ b/keyboards/evyd13/gh80_3700/keymaps/ps2/config.h
@@ -16,7 +16,7 @@
#pragma once
-#ifdef PS2_USE_USART
+#ifdef PS2_DRIVER_USART
#define PS2_CLOCK_PIN D5
#define PS2_DATA_PIN D2
@@ -51,7 +51,7 @@
#define PS2_USART_ERROR (UCSR1A & ((1<
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include "avalon.h"
diff --git a/keyboards/fjlabs/avalon/avalon.h b/keyboards/fjlabs/avalon/avalon.h
new file mode 100644
index 00000000000..c24b0e53ce8
--- /dev/null
+++ b/keyboards/fjlabs/avalon/avalon.h
@@ -0,0 +1,32 @@
+/*
+Copyright 2022
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+/* Phantom Keymap Definitions */
+#define LAYOUT_all( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K43, K47, K4A, K4B, K4D, K4E, K4F \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E, K2F }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, KC_NO }, \
+ { K40, K41, K42, K43, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, K4A, K4B, KC_NO, K4D, K4E, K4F } \
+}
diff --git a/keyboards/fjlabs/avalon/config.h b/keyboards/fjlabs/avalon/config.h
new file mode 100644
index 00000000000..2d2c53c14e1
--- /dev/null
+++ b/keyboards/fjlabs/avalon/config.h
@@ -0,0 +1,76 @@
+/*
+Copyright 2022
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *å
+*/
+
+// Checked with Eagle Schematic
+#define MATRIX_ROW_PINS { F4, F1, F7, F6, F5 }
+#define MATRIX_COL_PINS { B0, F0, B1, B2, B3, B7, D0, D1, D2, D3, D5, D7, B4, B5, B6, C6 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* Define Indicator LED's */
+#define LED_CAPS_LOCK_PIN C7
+
+/* Define RGB Underglow */
+#define RGB_DI_PIN D6
+#define RGBLED_NUM 6
+#define RGBLIGHT_EFFECT_BREATHING
+#define RGBLIGHT_EFFECT_RAINBOW_MOOD
+#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+#define RGBLIGHT_EFFECT_SNAKE
+#define RGBLIGHT_EFFECT_KNIGHT
+#define RGBLIGHT_EFFECT_CHRISTMAS
+#define RGBLIGHT_EFFECT_STATIC_GRADIENT
+#define RGBLIGHT_EFFECT_RGB_TEST
+#define RGBLIGHT_EFFECT_ALTERNATING
+#define RGBLIGHT_EFFECT_TWINKLE
+#define RGBLIGHT_LIMIT_VAL 255
+#define RGB_VAL_STEP 12
+#define RGBLIGHT_DEFAULT_SPD 144
+#define RGBLIGHT_DEFAULT_MODE RGBLIGHT_MODE_RAINBOW_SWIRL
+
diff --git a/keyboards/fjlabs/avalon/info.json b/keyboards/fjlabs/avalon/info.json
new file mode 100644
index 00000000000..040db5f1978
--- /dev/null
+++ b/keyboards/fjlabs/avalon/info.json
@@ -0,0 +1,94 @@
+{
+ "keyboard_name": "Avalon",
+ "manufacturer": "Trailblazer Keyboards",
+ "url": "https://fjlaboratories.com/",
+ "maintainer": "FJLaboratories",
+ "usb": {
+ "vid": "0x7074",
+ "pid": "0x0015",
+ "device_version": "0.0.1"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1.25, "y": 0},
+ {"x": 2.25, "y": 0},
+ {"x": 3.25, "y": 0},
+ {"x": 4.25, "y": 0},
+ {"x": 5.25, "y": 0},
+ {"x": 6.25, "y": 0},
+ {"x": 7.25, "y": 0},
+ {"x": 8.25, "y": 0},
+ {"x": 9.25, "y": 0},
+ {"x": 10.25, "y": 0},
+ {"x": 11.25, "y": 0},
+ {"x": 12.25, "y": 0},
+ {"x": 13.25, "y": 0},
+ {"x": 14.25, "y": 0},
+ {"x": 15.25, "y": 0},
+ {"x": 16.5, "y": 0},
+
+ {"x": 0, "y": 1},
+ {"x": 1.25, "y": 1, "w": 1.5},
+ {"x": 2.75, "y": 1},
+ {"x": 3.75, "y": 1},
+ {"x": 4.75, "y": 1},
+ {"x": 5.75, "y": 1},
+ {"x": 6.75, "y": 1},
+ {"x": 7.75, "y": 1},
+ {"x": 8.75, "y": 1},
+ {"x": 9.75, "y": 1},
+ {"x": 10.75, "y": 1},
+ {"x": 11.75, "y": 1},
+ {"x": 12.75, "y": 1},
+ {"x": 13.75, "y": 1},
+ {"x": 14.75, "y": 1, "w": 1.5},
+ {"x": 16.5, "y": 1},
+
+ {"x": 0, "y": 2},
+ {"x": 1.25, "y": 2, "w": 1.75},
+ {"x": 3, "y": 2},
+ {"x": 4, "y": 2},
+ {"x": 5, "y": 2},
+ {"x": 6, "y": 2},
+ {"x": 7, "y": 2},
+ {"x": 8, "y": 2},
+ {"x": 9, "y": 2},
+ {"x": 10, "y": 2},
+ {"x": 11, "y": 2},
+ {"x": 12, "y": 2},
+ {"x": 13, "y": 2},
+ {"x": 14, "y": 2, "w": 2.25},
+ {"x": 16.5, "y": 2},
+
+ {"x": 0, "y": 3},
+ {"x": 1.25, "y": 3, "w": 1.25},
+ {"x": 2.5, "y": 3},
+ {"x": 3.5, "y": 3},
+ {"x": 4.5, "y": 3},
+ {"x": 5.5, "y": 3},
+ {"x": 6.5, "y": 3},
+ {"x": 7.5, "y": 3},
+ {"x": 8.5, "y": 3},
+ {"x": 9.5, "y": 3},
+ {"x": 19.5, "y": 3},
+ {"x": 11.5, "y": 3},
+ {"x": 12.5, "y": 3},
+ {"x": 13.5, "y": 3, "w": 1.75},
+ {"x": 15.25, "y": 3},
+
+ {"x": 0, "y": 4},
+ {"x": 1.25, "y": 4, "w": 1.25},
+ {"x": 2.5, "y": 4, "w": 1.25},
+ {"x": 3.75, "y": 4, "w": 1.25},
+ {"x": 5, "y": 4, "w": 6.25},
+ {"x": 11.25, "y": 4, "w": 1.25},
+ {"x": 12.5, "y": 4, "w": 1.25},
+ {"x": 14.25, "y": 4},
+ {"x": 15.25, "y": 4},
+ {"x": 16.25, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/fjlabs/avalon/keymaps/default/keymap.c b/keyboards/fjlabs/avalon/keymaps/default/keymap.c
new file mode 100644
index 00000000000..3601ba8fed1
--- /dev/null
+++ b/keyboards/fjlabs/avalon/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
+/*
+Copyright 2022
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _LAYER0,
+ _LAYER1,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_LAYER0] = LAYOUT_all(
+ KC_F1, KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL, KC_GRV,
+ KC_F2, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_F3, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_F4, KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_F5, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_LAYER1] = LAYOUT_all(
+ KC_TRNS, KC_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_DEL, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, RESET, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT
+ )
+};
diff --git a/keyboards/fjlabs/avalon/keymaps/via/keymap.c b/keyboards/fjlabs/avalon/keymaps/via/keymap.c
new file mode 100644
index 00000000000..08869cc59d1
--- /dev/null
+++ b/keyboards/fjlabs/avalon/keymaps/via/keymap.c
@@ -0,0 +1,57 @@
+/*
+Copyright 2022
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _LAYER0,
+ _LAYER1,
+ _LAYER2,
+ _LAYER3,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_LAYER0] = LAYOUT_all(
+ KC_F1, KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_GRV,
+ KC_F2, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_F3, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_DEL, KC_PGDN,
+ KC_F4, KC_LSFT, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_F5, KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_LAYER1] = LAYOUT_all(
+ KC_TRNS, KC_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC, KC_DEL, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, RESET, KC_PGUP, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT
+ ),
+
+ [_LAYER2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [_LAYER3] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/fjlabs/avalon/keymaps/via/rules.mk b/keyboards/fjlabs/avalon/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/fjlabs/avalon/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/fjlabs/avalon/readme.md b/keyboards/fjlabs/avalon/readme.md
new file mode 100644
index 00000000000..154f48ac6c2
--- /dev/null
+++ b/keyboards/fjlabs/avalon/readme.md
@@ -0,0 +1,19 @@
+# Avalon PCB by FJLaboratories
+
+The following is the QMK Firmware for the Avalon PCB, both Solder and Hotswap, for Trailblazer Keyboards.
+* Keyboard Maintainer: FJLaboratories
+* Hardware Supported: Avalon
+
+Make example for this keyboard (after setting up your build environment):
+
+ make fjlabs/avalon:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/fjlabs/avalon/rules.mk b/keyboards/fjlabs/avalon/rules.mk
new file mode 100644
index 00000000000..f54595dd648
--- /dev/null
+++ b/keyboards/fjlabs/avalon/rules.mk
@@ -0,0 +1,21 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency
+F_CPU = 8000000
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/fjlabs/peaker/config.h b/keyboards/fjlabs/peaker/config.h
new file mode 100644
index 00000000000..c7d19f0c6c1
--- /dev/null
+++ b/keyboards/fjlabs/peaker/config.h
@@ -0,0 +1,93 @@
+/*
+Copyright 2022
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 17
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *å
+*/
+
+// Checked with Eagle Schematic
+#define MATRIX_ROW_PINS { B5, B6, C0, E1, E0 }
+#define MATRIX_COL_PINS { F2, F3, F4, F5, F6, F7, A0, A1, A2, A3, A4, A5, A6, A7, D5, D6, D7 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* Define less important options */
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
diff --git a/keyboards/fjlabs/peaker/info.json b/keyboards/fjlabs/peaker/info.json
new file mode 100644
index 00000000000..92e622725cd
--- /dev/null
+++ b/keyboards/fjlabs/peaker/info.json
@@ -0,0 +1,94 @@
+{
+ "keyboard_name": "Peaker",
+ "manufacturer": "FJLaboratories",
+ "url": "http://www.lucidkb.com",
+ "maintainer": "Lucid",
+ "usb": {
+ "vid": "0x7074",
+ "pid": "0x0020",
+ "device_version": "0.0.1"
+ },
+ "layouts": {
+ "LAYOUT_tkl_all": {
+ "layout": [
+ {"label":"~", "x":0, "y":0},
+ {"label":"!", "x":1, "y":0},
+ {"label":"@", "x":2, "y":0},
+ {"label":"#", "x":3, "y":0},
+ {"label":"$", "x":4, "y":0},
+ {"label":"%", "x":5, "y":0},
+ {"label":"^", "x":6, "y":0},
+ {"label":"&", "x":7, "y":0},
+ {"label":"*", "x":8, "y":0},
+ {"label":"(", "x":9, "y":0},
+ {"label":")", "x":10, "y":0},
+ {"label":"_", "x":11, "y":0},
+ {"label":"+", "x":12, "y":0},
+ {"label":"Back Space", "x":13, "y":0},
+ {"label":"Back Space", "x":14, "y":0},
+ {"label":"Insert", "x":15.25, "y":0},
+ {"label":"Home", "x":16.25, "y":0},
+ {"label":"PgUp", "x":17.25, "y":0},
+
+ {"label":"Tab", "x":0, "y":1, "w":1.5},
+ {"label":"Q", "x":1.5, "y":1},
+ {"label":"W", "x":2.5, "y":1},
+ {"label":"E", "x":3.5, "y":1},
+ {"label":"R", "x":4.5, "y":1},
+ {"label":"T", "x":5.5, "y":1},
+ {"label":"Y", "x":6.5, "y":1},
+ {"label":"U", "x":7.5, "y":1},
+ {"label":"I", "x":8.5, "y":1},
+ {"label":"O", "x":9.5, "y":1},
+ {"label":"P", "x":10.5, "y":1},
+ {"label":"{", "x":11.5, "y":1},
+ {"label":"}", "x":12.5, "y":1},
+ {"label":"|", "x":13.5, "y":1, "w":1.5},
+ {"label":"Delete", "x":15.25, "y":1},
+ {"label":"End", "x":16.25, "y":1},
+ {"label":"PgDn", "x":17.25, "y":1},
+
+ {"label":"Caps Lock", "x":0, "y":2, "w":1.75},
+ {"label":"A", "x":1.75, "y":2},
+ {"label":"S", "x":2.75, "y":2},
+ {"label":"D", "x":3.75, "y":2},
+ {"label":"F", "x":4.75, "y":2},
+ {"label":"G", "x":5.75, "y":2},
+ {"label":"H", "x":6.75, "y":2},
+ {"label":"J", "x":7.75, "y":2},
+ {"label":"K", "x":8.75, "y":2},
+ {"label":"L", "x":9.75, "y":2},
+ {"label":":", "x":10.75, "y":2},
+ {"label":"SQ", "x":11.75, "y":2},
+ {"label":"Enter", "x":12.75, "y":2, "w":2.25},
+
+ {"label":"Shift", "x":0, "y":3, "w":2.25},
+ {"label":"Z", "x":2.25, "y":3},
+ {"label":"X", "x":3.25, "y":3},
+ {"label":"C", "x":4.25, "y":3},
+ {"label":"V", "x":5.25, "y":3},
+ {"label":"B", "x":6.25, "y":3},
+ {"label":"N", "x":7.25, "y":3},
+ {"label":"M", "x":8.25, "y":3},
+ {"label":"<", "x":9.25, "y":3},
+ {"label":">", "x":10.25, "y":3},
+ {"label":"?", "x":11.25, "y":3},
+ {"label":"Shift", "x":12.25, "y":3, "w":1.75},
+ {"label":"Shift", "x":14, "y":3},
+ {"label":"\u2191", "x":16.25, "y":3},
+
+ {"label":"Ctrl", "x":0, "y":4, "w":1.25},
+ {"label":"Win", "x":1.25, "y":4, "w":1.25},
+ {"label":"Alt", "x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"label":"Alt", "x":10, "y":4, "w":1.25},
+ {"label":"Win", "x":11.25, "y":4, "w":1.25},
+ {"label":"Menu", "x":12.5, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13.75, "y":4, "w":1.25},
+ {"label":"\u2190", "x":15.25, "y":4},
+ {"label":"\u2193", "x":16.25, "y":4},
+ {"label":"\u2192", "x":17.25, "y":4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/fjlabs/peaker/keymaps/default/keymap.c b/keyboards/fjlabs/peaker/keymaps/default/keymap.c
new file mode 100644
index 00000000000..ab46cd89db7
--- /dev/null
+++ b/keyboards/fjlabs/peaker/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
+/*
+Copyright 2022
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _LAYER0,
+ _LAYER1,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_LAYER0] = LAYOUT_tkl_all(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSPC, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_LAYER1] = LAYOUT_tkl_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/fjlabs/peaker/keymaps/via/keymap.c b/keyboards/fjlabs/peaker/keymaps/via/keymap.c
new file mode 100644
index 00000000000..9e8ece8ff92
--- /dev/null
+++ b/keyboards/fjlabs/peaker/keymaps/via/keymap.c
@@ -0,0 +1,57 @@
+/*
+Copyright 2022
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _LAYER0,
+ _LAYER1,
+ _LAYER2,
+ _LAYER3,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_LAYER0] = LAYOUT_tkl_all(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSPC, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [_LAYER1] = LAYOUT_tkl_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [_LAYER1] = LAYOUT_tkl_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [_LAYER1] = LAYOUT_tkl_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/fjlabs/peaker/keymaps/via/rules.mk b/keyboards/fjlabs/peaker/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/fjlabs/peaker/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/fjlabs/peaker/peaker.c b/keyboards/fjlabs/peaker/peaker.c
new file mode 100644
index 00000000000..2c8830a731d
--- /dev/null
+++ b/keyboards/fjlabs/peaker/peaker.c
@@ -0,0 +1,14 @@
+/*
+Copyright 2022
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include "peaker.h"
diff --git a/keyboards/fjlabs/peaker/peaker.h b/keyboards/fjlabs/peaker/peaker.h
new file mode 100644
index 00000000000..a1f53a87d63
--- /dev/null
+++ b/keyboards/fjlabs/peaker/peaker.h
@@ -0,0 +1,32 @@
+/*
+Copyright 2022
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+/* === All used matrix spots populated === */
+#define LAYOUT_tkl_all( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3C, K3D, K3F, \
+ K40, K41, K42, K45, K49, K4A, K4B, K4D, K4E, K4F, K4G \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K21, K1D, K1E, K1F, K1G }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, KC_NO, KC_NO, KC_NO }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, KC_NO, K3C, K3D, KC_NO, K3F, KC_NO }, \
+ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, K49, K4A, K4B, KC_NO, K4D, K4E, K4F, K4G } \
+}
diff --git a/keyboards/fjlabs/peaker/readme.md b/keyboards/fjlabs/peaker/readme.md
new file mode 100644
index 00000000000..ca85b99629a
--- /dev/null
+++ b/keyboards/fjlabs/peaker/readme.md
@@ -0,0 +1,13 @@
+# Peaker Hotswap PCB by FJLaboratories
+
+The following is the QMK Firmware for the Peaker by [FJLaboratories](http://www.fjlaboratories.com).
+* Keyboard Maintainer: FJLaboratories
+* Hardware Supported: Peaker
+
+Make example for this keyboard (after setting up your build environment):
+
+ make fjlabs/peaker:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+You can enter the bootloader by pressing the Reset button on the back of the PCB.
\ No newline at end of file
diff --git a/keyboards/fjlabs/peaker/rules.mk b/keyboards/fjlabs/peaker/rules.mk
new file mode 100644
index 00000000000..aed2d80b8b8
--- /dev/null
+++ b/keyboards/fjlabs/peaker/rules.mk
@@ -0,0 +1,21 @@
+# MCU name
+MCU = at90usb646
+
+# Processor frequency
+F_CPU = 8000000
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/fjlabs/sinanjuwk/config.h b/keyboards/fjlabs/sinanjuwk/config.h
new file mode 100644
index 00000000000..01d81a2f3dc
--- /dev/null
+++ b/keyboards/fjlabs/sinanjuwk/config.h
@@ -0,0 +1,96 @@
+/*
+Copyright 2022
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 14
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+*/
+
+// Checked with Eagle Schematic
+#define MATRIX_ROW_PINS { F4, F1, F7, F6, F5 }
+#define MATRIX_COL_PINS { F0, B1, B2, B3, B7, D0, D1, D2, D3, D5, D7, B4, B5, B6 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
+
+/* Define Indicator LED's */
+#define LED_CAPS_LOCK_PIN C7
+
+/* Define less important options */
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
diff --git a/keyboards/fjlabs/sinanjuwk/info.json b/keyboards/fjlabs/sinanjuwk/info.json
new file mode 100644
index 00000000000..3f1d7b44639
--- /dev/null
+++ b/keyboards/fjlabs/sinanjuwk/info.json
@@ -0,0 +1,84 @@
+{
+ "keyboard_name": "Sinanju WK",
+ "manufacturer": "FJLabs",
+ "url": "https://www.fjlaboratories.com",
+ "maintainer": "FJLabs",
+ "usb": {
+ "vid": "0x7074",
+ "pid": "0x1023",
+ "device_version": "0.0.1"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6, "y":0},
+ {"x":7, "y":0},
+ {"x":8, "y":0},
+ {"x":9, "y":0},
+ {"x":10, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0},
+ {"x":14, "y":0},
+
+ {"x":0, "y":1, "w":1.5},
+ {"x":1.5, "y":1},
+ {"x":2.5, "y":1},
+ {"x":3.5, "y":1},
+ {"x":4.5, "y":1},
+ {"x":5.5, "y":1},
+ {"x":6.5, "y":1},
+ {"x":7.5, "y":1},
+ {"x":8.5, "y":1},
+ {"x":9.5, "y":1},
+ {"x":10.5, "y":1},
+ {"x":11.5, "y":1},
+ {"x":12.5, "y":1},
+ {"x":13.5, "y":1, "w":1.5},
+
+ {"x":0, "y":2, "w":1.75},
+ {"x":1.75, "y":2},
+ {"x":2.75, "y":2},
+ {"x":3.75, "y":2},
+ {"x":4.75, "y":2},
+ {"x":5.75, "y":2},
+ {"x":6.75, "y":2},
+ {"x":7.75, "y":2},
+ {"x":8.75, "y":2},
+ {"x":9.75, "y":2},
+ {"x":10.75, "y":2},
+ {"x":11.75, "y":2},
+ {"x":12.75, "y":2, "w":2.25},
+
+ {"x":0, "y":3, "w":2.25},
+ {"x":2.25, "y":3},
+ {"x":3.25, "y":3},
+ {"x":4.25, "y":3},
+ {"x":5.25, "y":3},
+ {"x":6.25, "y":3},
+ {"x":7.25, "y":3},
+ {"x":8.25, "y":3},
+ {"x":9.25, "y":3},
+ {"x":10.25, "y":3},
+ {"x":11.25, "y":3},
+ {"x":12.25, "y":3, "w":1.75},
+ {"x":14, "y":3},
+
+ {"x":0, "y":4, "w":1.25},
+ {"x":1.25, "y":4, "w":1.25}
+ {"x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"x":10, "y":4, "w":1.25},
+ {"x":11.25, "y":4, "w":1.25},
+ {"x":12.5, "y":4, "w":1.25},
+ {"x":13.75, "y":4, "w":1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/fjlabs/sinanjuwk/keymaps/default/keymap.c b/keyboards/fjlabs/sinanjuwk/keymaps/default/keymap.c
new file mode 100644
index 00000000000..e5dcc81c4fd
--- /dev/null
+++ b/keyboards/fjlabs/sinanjuwk/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
+/*
+Copyright 2022
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _LAYER0,
+ _LAYER1,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_LAYER0] = LAYOUT_all(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_DEL,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, MO(1), KC_RALT, KC_RWIN, KC_RCTL
+ ),
+
+ [_LAYER1] = LAYOUT_all(
+ KC_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, RESET,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/fjlabs/sinanjuwk/keymaps/via/keymap.c b/keyboards/fjlabs/sinanjuwk/keymaps/via/keymap.c
new file mode 100644
index 00000000000..2520da0cda5
--- /dev/null
+++ b/keyboards/fjlabs/sinanjuwk/keymaps/via/keymap.c
@@ -0,0 +1,58 @@
+/*
+Copyright 2022
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+enum layers {
+ _LAYER0,
+ _LAYER1,
+ _LAYER2,
+ _LAYER3,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_LAYER0] = LAYOUT_all(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_DEL,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LWIN, KC_LALT, KC_SPC, MO(1), KC_RALT, KC_RWIN, KC_RCTL
+ ),
+
+ [_LAYER1] = LAYOUT_all(
+ KC_GESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_TRNS, KC_PSCR, KC_SLCK, KC_PAUS, RESET,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [_LAYER2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [_LAYER3] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, NK_TOGG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+
+};
diff --git a/keyboards/fjlabs/sinanjuwk/keymaps/via/rules.mk b/keyboards/fjlabs/sinanjuwk/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/fjlabs/sinanjuwk/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/fjlabs/sinanjuwk/readme.md b/keyboards/fjlabs/sinanjuwk/readme.md
new file mode 100644
index 00000000000..126fc73ec8a
--- /dev/null
+++ b/keyboards/fjlabs/sinanjuwk/readme.md
@@ -0,0 +1,17 @@
+# Sinanju WK
+
+The following is the QMK Firmware for the Windz Sinanju WK PCB.
+
+
+* Keyboard Maintainer: FJLabs
+* Hardware Supported: Sinanju WK
+
+Make example for this keyboard (after setting up your build environment):
+
+ make fjlabs/sinanjuwk:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Bootloader can be entered by pressing the reset button near the main microcontroller while the board is plugged in. Alternatively, it may be entered by holding the top-left-most switch and plugging in the PCB while held.
\ No newline at end of file
diff --git a/keyboards/fjlabs/sinanjuwk/rules.mk b/keyboards/fjlabs/sinanjuwk/rules.mk
new file mode 100644
index 00000000000..67f00abb1ef
--- /dev/null
+++ b/keyboards/fjlabs/sinanjuwk/rules.mk
@@ -0,0 +1,21 @@
+# MCU name
+MCU = atmega32u4
+
+# Processor frequency
+F_CPU = 8000000
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/fjlabs/sinanjuwk/sinanjuwk.c b/keyboards/fjlabs/sinanjuwk/sinanjuwk.c
new file mode 100644
index 00000000000..e6af5203ad9
--- /dev/null
+++ b/keyboards/fjlabs/sinanjuwk/sinanjuwk.c
@@ -0,0 +1,14 @@
+/*
+Copyright 2022
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include "sinanjuwk.h"
diff --git a/keyboards/fjlabs/sinanjuwk/sinanjuwk.h b/keyboards/fjlabs/sinanjuwk/sinanjuwk.h
new file mode 100644
index 00000000000..045e34621df
--- /dev/null
+++ b/keyboards/fjlabs/sinanjuwk/sinanjuwk.h
@@ -0,0 +1,32 @@
+/*
+Copyright 2022
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "quantum.h"
+
+/* Midway60 Keymap Definitions */
+#define LAYOUT_all( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
+ K40, K41, K42, K47, K4A, K4B, K4C, K4D \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
+ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
+ { K40, K41, K42, KC_NO, KC_NO, KC_NO, KC_NO, K47, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
+}
diff --git a/keyboards/foostan/cornelius/readme.md b/keyboards/foostan/cornelius/readme.md
index ffd6b60a16d..ce0854dd75e 100644
--- a/keyboards/foostan/cornelius/readme.md
+++ b/keyboards/foostan/cornelius/readme.md
@@ -16,6 +16,6 @@ Flashing example for this keyboard:
make foostan/cornelius:default:flash
-The board reset into bootloader mode via either the reset button (on the back of the PCB) or a configured RESET shortcut (which may vary depending on when the PCB was flashed).
+The board reset into bootloader mode via either the reset button (on the back of the PCB) or a configured `QK_BOOT` shortcut (which may vary depending on when the PCB was flashed).
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/gboards/butterstick/keymaps/default/keymap.c b/keyboards/gboards/butterstick/keymaps/default/keymap.c
index 749e9ba0713..d0c6af65df5 100644
--- a/keyboards/gboards/butterstick/keymaps/default/keymap.c
+++ b/keyboards/gboards/butterstick/keymaps/default/keymap.c
@@ -180,4 +180,4 @@ uint32_t processQwerty(bool lookup) {
}
// Don't fuck with this, thanks.
-size_t keymapsCount = sizeof(keymaps)/sizeof(keymaps[0]);
+size_t keymapsCount = ARRAY_SIZE(keymaps);
diff --git a/keyboards/gboards/butterstick/sten.c b/keyboards/gboards/butterstick/sten.c
index 197abaf92f5..88201278480 100644
--- a/keyboards/gboards/butterstick/sten.c
+++ b/keyboards/gboards/butterstick/sten.c
@@ -21,7 +21,7 @@ uint32_t tChord = 0; // Protects state of cChord
#ifndef STENOLAYERS
uint32_t stenoLayers[] = { PWR };
-size_t stenoLayerCount = sizeof(stenoLayers)/sizeof(stenoLayers[0]);
+size_t stenoLayerCount = ARRAY_SIZE(stenoLayers);
#endif
// Mode state
diff --git a/keyboards/gboards/engine/keymap_engine.h b/keyboards/gboards/engine/keymap_engine.h
index c8a42a052bf..599c1ca3e40 100644
--- a/keyboards/gboards/engine/keymap_engine.h
+++ b/keyboards/gboards/engine/keymap_engine.h
@@ -114,8 +114,8 @@ void testCollisions(void) {
#include "dicts.def"
// Get size data back into the engine
-size_t funcsLen = sizeof(funDict) / sizeof(funDict[0]);
-size_t stringLen = sizeof(strDict) / sizeof(strDict[0]);
-size_t keyLen = sizeof(keyDict) / sizeof(keyDict[0]);
-size_t comboLen = sizeof(cmbDict) / sizeof(cmbDict[0]);
-size_t specialLen = sizeof(spcDict) / sizeof(spcDict[0]);
+size_t funcsLen = ARRAY_SIZE(funDict);
+size_t stringLen = ARRAY_SIZE(strDict);
+size_t keyLen = ARRAY_SIZE(keyDict);
+size_t comboLen = ARRAY_SIZE(cmbDict);
+size_t specialLen = ARRAY_SIZE(spcDict);
diff --git a/keyboards/gboards/g/keymap_engine.h b/keyboards/gboards/g/keymap_engine.h
index 93a4423340f..055b5941e43 100644
--- a/keyboards/gboards/g/keymap_engine.h
+++ b/keyboards/gboards/g/keymap_engine.h
@@ -115,8 +115,8 @@ void testCollisions(void) {
#include "dicts.def"
// Get size data back into the engine
-size_t funcsLen = sizeof(funDict) / sizeof(funDict[0]);
-size_t stringLen = sizeof(strDict) / sizeof(strDict[0]);
-size_t keyLen = sizeof(keyDict) / sizeof(keyDict[0]);
-size_t comboLen = sizeof(cmbDict) / sizeof(cmbDict[0]);
-size_t specialLen = sizeof(spcDict) / sizeof(spcDict[0]);
+size_t funcsLen = ARRAY_SIZE(funDict);
+size_t stringLen = ARRAY_SIZE(strDict);
+size_t keyLen = ARRAY_SIZE(keyDict);
+size_t comboLen = ARRAY_SIZE(cmbDict);
+size_t specialLen = ARRAY_SIZE(spcDict);
diff --git a/keyboards/gboards/georgi/keymaps/colemak-dh/keymap.c b/keyboards/gboards/georgi/keymaps/colemak-dh/keymap.c
index 29b35f6abd9..af7edc2a9b9 100644
--- a/keyboards/gboards/georgi/keymaps/colemak-dh/keymap.c
+++ b/keyboards/gboards/georgi/keymaps/colemak-dh/keymap.c
@@ -302,5 +302,5 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
// Don't fuck with this, thanks.
-size_t keymapsCount = sizeof(keymaps)/sizeof(keymaps[0]);
-size_t stenoLayerCount = sizeof(stenoLayers)/sizeof(stenoLayers[0]);
+size_t keymapsCount = ARRAY_SIZE(keymaps);
+size_t stenoLayerCount = ARRAY_SIZE(stenoLayers);
diff --git a/keyboards/gboards/georgi/keymaps/default-flipped/keymap.c b/keyboards/gboards/georgi/keymaps/default-flipped/keymap.c
index 09243f2a248..a3324b11cdf 100644
--- a/keyboards/gboards/georgi/keymaps/default-flipped/keymap.c
+++ b/keyboards/gboards/georgi/keymaps/default-flipped/keymap.c
@@ -234,4 +234,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
// Don't fuck with this, thanks.
-size_t keymapsCount = sizeof(keymaps)/sizeof(keymaps[0]);
+size_t keymapsCount = ARRAY_SIZE(keymaps);
diff --git a/keyboards/gboards/georgi/keymaps/default/keymap.c b/keyboards/gboards/georgi/keymaps/default/keymap.c
index 93c551af274..78964dc8406 100644
--- a/keyboards/gboards/georgi/keymaps/default/keymap.c
+++ b/keyboards/gboards/georgi/keymaps/default/keymap.c
@@ -244,4 +244,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
// Don't fuck with this, thanks.
-size_t keymapsCount = sizeof(keymaps)/sizeof(keymaps[0]);
+size_t keymapsCount = ARRAY_SIZE(keymaps);
diff --git a/keyboards/gboards/georgi/keymaps/minimal/keymap.c b/keyboards/gboards/georgi/keymaps/minimal/keymap.c
index e9294c5cc83..c4e78033bde 100644
--- a/keyboards/gboards/georgi/keymaps/minimal/keymap.c
+++ b/keyboards/gboards/georgi/keymaps/minimal/keymap.c
@@ -219,4 +219,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
)
};
// Don't fuck with this, thanks.
-size_t keymapsCount = sizeof(keymaps)/sizeof(keymaps[0]);
+size_t keymapsCount = ARRAY_SIZE(keymaps);
diff --git a/keyboards/gboards/georgi/keymaps/norman/keymap.c b/keyboards/gboards/georgi/keymaps/norman/keymap.c
index 4591aab22fe..870e460e2c5 100644
--- a/keyboards/gboards/georgi/keymaps/norman/keymap.c
+++ b/keyboards/gboards/georgi/keymaps/norman/keymap.c
@@ -263,4 +263,4 @@ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PGDN, KC_LEFT, KC
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
};
// Don't fuck with this, thanks.
-size_t keymapsCount = sizeof(keymaps)/sizeof(keymaps[0]);
+size_t keymapsCount = ARRAY_SIZE(keymaps);
diff --git a/keyboards/gboards/georgi/sten.c b/keyboards/gboards/georgi/sten.c
index c7469b6394e..bd96dee758e 100644
--- a/keyboards/gboards/georgi/sten.c
+++ b/keyboards/gboards/georgi/sten.c
@@ -21,7 +21,7 @@ uint32_t tChord = 0; // Protects state of cChord
#ifndef STENOLAYERS
uint32_t stenoLayers[] = { PWR };
-size_t stenoLayerCount = sizeof(stenoLayers)/sizeof(stenoLayers[0]);
+size_t stenoLayerCount = ARRAY_SIZE(stenoLayers);
#endif
// Mode state
diff --git a/keyboards/gh60/satan/keymaps/admiralStrokers/config.h b/keyboards/gh60/satan/keymaps/admiralStrokers/config.h
index 5bb9bd59a82..60c6ad4a12c 100644
--- a/keyboards/gh60/satan/keymaps/admiralStrokers/config.h
+++ b/keyboards/gh60/satan/keymaps/admiralStrokers/config.h
@@ -1,87 +1,3 @@
-/*
-Copyright 2012 Jun Wako
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-*/
-
-#ifndef CONFIG_H_ADMSTROK
-#define CONFIG_H_ADMSTROK
-
-#include "config_common.h"
-#include "../../config.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0003
-#define MANUFACTURER SATAN
-#define PRODUCT GH60
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 14
-
-// ROWS: Top to bottom, COLS: Left to right
-
-#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
-#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B7, D4, B1, B0, B5, B4, D7, D6, B3 }
-
-#define BACKLIGHT_PIN B6
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE 5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
-/* Backlight configuration */
-#define BACKLIGHT_LEVELS 4
-
-/* Underlight configuration */
-#define RGB_DI_PIN E2
-#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 8 // Number of LEDs
-#define RGBLIGHT_HUE_STEP 10
-#define RGBLIGHT_SAT_STEP 17
-#define RGBLIGHT_VAL_STEP 17
+#pragma once
#define DISABLE_SPACE_CADET_ROLLOVER
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/gh60/satan/keymaps/ben_iso/config.h b/keyboards/gh60/satan/keymaps/ben_iso/config.h
index e59015dcbd8..34add127271 100644
--- a/keyboards/gh60/satan/keymaps/ben_iso/config.h
+++ b/keyboards/gh60/satan/keymaps/ben_iso/config.h
@@ -1,57 +1,8 @@
-/*
-Copyright 2012 Jun Wako
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-*/
-
-#ifndef CONFIG_H_BEN
-#define CONFIG_H_BEN
-
-#include "config_common.h"
-#include "../../config.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0003
-#define MANUFACTURER SATAN
-#define PRODUCT GH60
+#pragma once
/*MOUSE CONFIG OPTIONS */
-
#define MOUSEKEY_INTERVAL 20
#define MOUSEKEY_DELAY 0
#define MOUSEKEY_TIME_TO_MAX 45
#define MOUSEKEY_MAX_SPEED 3
#define MOUSEKEY_WHEEL_DELAY 0
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/gh60/satan/keymaps/fakb/config.h b/keyboards/gh60/satan/keymaps/fakb/config.h
index 720b359c1e7..f7314a86716 100644
--- a/keyboards/gh60/satan/keymaps/fakb/config.h
+++ b/keyboards/gh60/satan/keymaps/fakb/config.h
@@ -1,76 +1,9 @@
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6060
-#define DEVICE_VER 0x0003
-#define MANUFACTURER SATAN
-#define PRODUCT GH60
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 14
-
-// ROWS: Top to bottom, COLS: Left to right
-
-#define MATRIX_ROW_PINS { D0, D1, D2, D3, D5 }
-#define MATRIX_COL_PINS { F0, F1, E6, C7, C6, B7, D4, B1, B0, B5, B4, D7, D6, B3 }
-
-#define BACKLIGHT_PIN B6
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE 5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-//#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-//#define LOCKING_RESYNC_ENABLE
-
-/* Backlight configuration
- */
+#undef BACKLIGHT_LEVELS
#define BACKLIGHT_LEVELS 8
-/* Underlight configuration
- */
-
-#define RGB_DI_PIN E2
-#define RGBLIGHT_ANIMATIONS
-#define RGBLED_NUM 8 // Number of LEDs
-#define RGBLIGHT_HUE_STEP 10
-#define RGBLIGHT_SAT_STEP 17
-#define RGBLIGHT_VAL_STEP 17
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
#define NO_ACTION_ONESHOT
-#define NO_ACTION_MACRO
-#define NO_ACTION_FUNCTION
-
-#endif
-
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
#define MOUSEKEY_DELAY 0
#define MOUSEKEY_INTERVAL 1
@@ -79,8 +12,5 @@
#define MOUSEKEY_WHEEL_MAX_SPEED 1
#define MOUSEKEY_WHEEL_TIME_TO_MAX 255
-// only change
#undef RGB_DI_PIN
#define RGB_DI_PIN B2
-
-#endif
diff --git a/keyboards/giabalanai/config.h b/keyboards/giabalanai/config.h
new file mode 100644
index 00000000000..efad053aaeb
--- /dev/null
+++ b/keyboards/giabalanai/config.h
@@ -0,0 +1,294 @@
+/*
+Copyright 2020 3araht
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* key matrix size */
+#define MATRIX_ROWS 12
+#define MATRIX_COLS 10
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+#define MATRIX_ROW_PINS { B5, B4, E6, D7, C6, D4 }
+#define MATRIX_COL_PINS { B1, F7, F6, F5, F4, B3, B2, B6, D0, D1 }
+#define MATRIX_ROW_PINS_RIGHT { D1, D0, D4, C6, D7, E6 }
+#define MATRIX_COL_PINS_RIGHT { F4, F5, F6, F7, B1, B3, B2, C7, B7, F1 }
+
+/* COL2ROW, ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/*
+ * Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
+ */
+#define SOFT_SERIAL_PIN D2
+#define SELECT_SOFT_SERIAL_SPEED 1
+/*Sets the protocol speed when using serial communication*/
+//Speeds:
+//0: about 189kbps (Experimental only)
+//1: about 137kbps (default)
+//2: about 75kbps
+//3: about 39kbps
+//4: about 26kbps
+//5: about 20kbps
+
+// Right side has to be the master since 1, LED data is output from right side, and 2, Audio pin is prepared on right side as a reserve.
+#define MASTER_RIGHT
+
+// for "Generic" Promicro to be detected correctly as lefthand side (slave)
+#define SPLIT_USB_DETECT
+
+//#define BACKLIGHT_PIN B7
+//#define BACKLIGHT_LEVELS 3
+//#define BACKLIGHT_BREATHING
+
+/* ws2812 RGB LED */
+#define RGB_DI_PIN D3
+
+#ifdef RGBLIGHT_ENABLE
+# define RGBLED_NUM 123
+
+// Do not define "RGBLED_SPLIT" since somehow it doesn't work well yet.
+// Even thhough "#define RGBLED_SPLIT { 60, 63 }" was set, LEDs on the sub keyboad side didn't turn on.
+// Not sure but rgblight_sethsv_at() might not support RGBLED_SPLIT yet.
+// Instead, LED data is tranferred from right side to the left via TRRS cable.
+
+# define RGBLIGHT_LIMIT_VAL 80
+# define RGBLIGHT_LAYERS
+
+// By default, LEDs of the buttons which are pressed turn on.
+// # define RGBLIGHT_EFFECT_TWINKLE
+// # define RGBLIGHT_EFFECT_KNIGHT
+
+
+// RGBLIGHT LED MAP
+// Right 1st row (12 LEDs)
+// ENCODER
+// Right 2nd .. 5th row(13, 12, 13, 12 LEDs)
+// Left 1st .. 5th row (12 LEDs x 5 rows)
+
+# define RGBLIGHT_LED_MAP { \
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, \
+ 97, \
+ 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, \
+ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, \
+ 110, 109, 108, 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, \
+ 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, \
+ \
+ 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, \
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, \
+ 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, \
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, \
+ 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48 \
+ }
+#endif
+
+#ifdef RGB_MATRIX_ENABLE
+/* ws2812 RGB MATRIX */
+# define DRIVER_LED_TOTAL 123
+# define RGB_MATRIX_KEYPRESSES // reacts to keypresses
+
+// for all fingers used at once.
+# define LED_HITS_TO_REMEMBER 10
+
+# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 50
+
+// the above brighness setting has no effect on rgb_matrix_set_color().
+// Use darker colors instead.
+/* RGB darker COLORS */
+# define RGB_DARKWHITE 0x66, 0x66, 0x66
+# define RGB_DARKRED 0x66, 0x0, 0x0
+# define RGB_DARKCORAL 0x66, 0x31, 0x1E
+# define RGB_DARKORANGE 0x66, 0x33, 0x0
+# define RGB_DARKGOLDENROD 0x56, 0x42, 0xD
+# define RGB_DARKGOLD 0x66, 0x56, 0x0
+# define RGB_DARKYELLOW 0x66, 0x66, 0x0
+# define RGB_DARKCHARTREUSE 0x33, 0x66, 0x0
+# define RGB_DARKGREEN 0x0, 0x66, 0x0
+# define RGB_DARKSPRINGGREEN 0x0, 0x66, 0x33
+# define RGB_DARKTURQUOISE 0x1C, 0x2C, 0x2A
+# define RGB_DARKTEAL 0x0, 0x33, 0x33
+# define RGB_DARKCYAN 0x0, 0x66, 0x66
+# define RGB_DARKAZURE 0x3D, 0x62, 0x66
+# define RGB_DARKBLUE 0x0, 0x0, 0x66
+# define RGB_DARKPURPLE 0x30, 0x0, 0x66
+# define RGB_DARKMAGENTA 0x66, 0x0, 0x66
+# define RGB_DARKPINK 0x66, 0x33, 0x4C
+
+// https://docs.qmk.fm/#/feature_rgb_matrix
+// Enable suspend mode.
+// # define RGB_DISABLE_WHEN_USB_SUSPENDED true
+
+# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+// #define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+// #define ENABLE_RGB_MATRIX_BREATHING
+// #define ENABLE_RGB_MATRIX_BAND_SAT
+// #define ENABLE_RGB_MATRIX_BAND_VAL
+// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+// #define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+// #define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+// #define ENABLE_RGB_MATRIX_CYCLE_ALL
+// #define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+// #define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+// #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+// #define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+// #define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+// #define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+// #define ENABLE_RGB_MATRIX_DUAL_BEACON
+// # define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+// #define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+// #define ENABLE_RGB_MATRIX_RAINDROPS
+// #define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+# define ENABLE_RGB_MATRIX_HUE_BREATHING
+// #define ENABLE_RGB_MATRIX_HUE_PENDULUM
+// #define ENABLE_RGB_MATRIX_HUE_WAVE
+// #define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+// #define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+// #define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+// #define ENABLE_RGB_MATRIX_SPLASH
+# define ENABLE_RGB_MATRIX_MULTISPLASH
+// #define ENABLE_RGB_MATRIX_SOLID_SPLASH
+// #define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+#endif // RGB_MATRIX_ENABLE
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+// /* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+// #define LOCKING_SUPPORT_ENABLE
+// /* Locking resynchronize hack */
+// #define LOCKING_RESYNC_ENABLE
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is useful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+//#define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+//#define FORCE_NKRO
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
+
+/* Bootmagic Lite key configuration */
+//#define BOOTMAGIC_LITE_ROW 0
+//#define BOOTMAGIC_LITE_COLUMN 0
+
+/* Audio */
+#ifdef AUDIO_ENABLE
+# define AUDIO_PIN B5 // use EX1 = PB5 = PIN9 as Audio output
+// #define DAC_SAMPLE_MAX 32768U
+# define DAC_SAMPLE_MAX 65535U
+// #define AUDIO_CLICKY
+# define NO_MUSIC_MODE
+// #define STARTUP_SONG SONG(FANTASIE_IMPROMPTU)
+// #define STARTUP_SONG SONG(NOCTURNE_OP_9_NO_1)
+// #define STARTUP_SONG SONG(USSR_ANTHEM)
+// #define STARTUP_SONG SONG(CAMPANELLA)
+#endif
+
+/*
+ * MIDI options
+ */
+
+/* enable basic MIDI features:
+ - MIDI notes can be sent when in Music mode is on
+*/
+//#define MIDI_BASIC
+
+/* enable advanced MIDI features:
+ - MIDI notes can be added to the keymap
+ - Octave shift and transpose
+ - Virtual sustain, portamento, and modulation wheel
+ - etc.
+*/
+#ifdef MIDI_ENABLE
+# define MIDI_ADVANCED
+// Initial velocity value (avoid using 127 since it is used as a special number in some sound sources.)
+# define MIDI_INITIAL_VELOCITY 117
+#endif // MIDI_ENABLE
+
+/*
+ * Encoder options
+ */
+#ifdef ENCODER_ENABLE
+# define ENCODERS_PAD_A { }
+# define ENCODERS_PAD_B { }
+# define ENCODER_RESOLUTIONS { }
+# define ENCODERS_PAD_A_RIGHT { B4 }
+# define ENCODERS_PAD_B_RIGHT { B6 }
+# define ENCODER_RESOLUTIONS_RIGHT { 4 }
+# define TAP_CODE_DELAY 10
+#endif // ENCODER_ENABLE
+
+/* 2021/01/22 added to shrink firmware size */
+// NO_ACTION_TAPPING -1964 bytes, however, this disables Layer mods...
+// #define NO_ACTION_TAPPING
+// NO_ACTION_ONESHOT -388 bytes
+#define NO_ACTION_ONESHOT
diff --git a/keyboards/giabalanai/giabalanai.c b/keyboards/giabalanai/giabalanai.c
new file mode 100644
index 00000000000..6f8e359479a
--- /dev/null
+++ b/keyboards/giabalanai/giabalanai.c
@@ -0,0 +1,255 @@
+/* Copyright 2020 3araht
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "giabalanai.h"
+
+// the velocity difference from the velocity of the root note.
+#define UNISON_VELOCITY_OFFSET 30
+
+#ifdef RGBLIGHT_ENABLE
+# define NO_LED 255
+/* Conversion map from keylocation (MATRIX_ROWS x2(split) x MATRIX_COLS) to led IDs.
+ led IDs are the number starts "0" from upper left corner of left side,
+ enumerated from left to right, from top to bottom.
+ Then emumeration follows to the right side, starting from "60".
+
+ Note that the conversion from physical LED serial alighment to
+ the led IDs is done with RGBLIGHT_LED_MAP beforehand. */
+
+# ifdef GIABARINAIX2
+const uint8_t PROGMEM convert_key_to_led[] =
+{
+ 0, 12, 24, 36, 48, 11, 23, 35, 47, 59,
+ 1, 13, 25, 37, 49, 10, 22, 34, 46, 58,
+ 2, 14, 26, 38, 50, 9, 21, 33, 45, 57,
+ 3, 15, 27, 39, 51, 8, 20, 32, 44, 56,
+ 4, 16, 28, 40, 52, 7, 19, 31, 43, 55,
+ 5, 17, 29, 41, 53, 6, 18, 30, 42, 54,
+ 119, 107, 95, 83, 71, 108, 96, 84, 72, 60,
+ 118, 106, 94, 82, 70, 109, 97, 85, 73, 61,
+ 117, 105, 93, 81, 69, 110, 98, 86, 74, 62,
+ 116, 104, 92, 80, 68, 111, 99, 87, 75, 63,
+ 115, 103, 91, 79, 67, 112, 100, 88, 76, 64,
+ 114, 102, 90, 78, 66, 113, 101, 89, 77, 65
+};
+
+# else
+const uint8_t PROGMEM convert_key_to_led[] =
+{
+0, 12, 24, 36, 48, 11, 23, 35, 47, 59,
+1, 13, 25, 37, 49, 10, 22, 34, 46, 58,
+2, 14, 26, 38, 50, 9, 21, 33, 45, 57,
+3, 15, 27, 39, 51, 8, 20, 32, 44, 56,
+4, 16, 28, 40, 52, 7, 19, 31, 43, 55,
+5, 17, 29, 41, 53, 6, 18, 30, 42, 54,
+
+85, 86, 87, 88, 89, 90, 91, NO_LED, NO_LED, NO_LED,
+98, 99, 100, 101, 102, 103, 104, NO_LED, NO_LED, NO_LED,
+NO_LED, 111, 112, 113, 114, 115, 116, NO_LED, NO_LED, NO_LED,
+NO_LED, 97, 96, 95, 94, 93, 92, NO_LED, NO_LED, NO_LED,
+NO_LED, 110, 109, 108, 107, 106, 105, NO_LED, NO_LED, NO_LED,
+NO_LED, 122, 121, 120, 119, 118, 117, NO_LED, NO_LED, NO_LED
+};
+
+/* Top 2 rows on the right side (LED:60-84) are
+ duplicates of the bottom 2 rows (LED:85-122).
+ LED:97 = Encoder,
+ LED:110 don't have a duplicate on the top row,
+ LED:72 is used when r20 is pressed (not a duplicate) */
+const uint8_t PROGMEM convert_key_to_led2[] =
+{
+NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED,
+NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED,
+NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED,
+NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED,
+NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED,
+NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED,
+
+NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED,
+60, 61, 62, 63, 64, 65, 66, NO_LED, NO_LED, NO_LED,
+72, 73, 74, 75, 76, 77, 78, NO_LED, NO_LED, NO_LED,
+NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED, NO_LED,
+NO_LED, NO_LED, 71, 70, 69, 68, 67, NO_LED, NO_LED, NO_LED,
+NO_LED, 84, 83, 82, 81, 80, 79, NO_LED, NO_LED, NO_LED
+};
+# endif
+#endif // RGBLIGHT_ENABLE
+
+#ifdef RGB_MATRIX_ENABLE
+
+led_config_t g_led_config = {
+ {
+ { 74, 75, 98, 99, 122, 63, 86, 87, 110, 111 },
+ { 73, 76, 97, 100, 121, 64, 85, 88, 109, 112 },
+ { 72, 77, 96, 101, 120, 65, 84, 89, 108, 113 },
+ { 71, 78, 95, 102, 119, 66, 83, 90, 107, 114 },
+ { 70, 79, 94, 103, 118, 67, 82, 91, 106, 115 },
+ { 69, 80, 93, 104, 117, 68, 81, 92, 105, 116 },
+ { 26, 27, 28, 29, 30, 31, 32, NO_LED, NO_LED, NO_LED },
+ { 50, 49, 48, 47, 46, 45, 44, NO_LED, NO_LED, NO_LED },
+ { 25, 51, 52, 53, 54, 55, 56, NO_LED, NO_LED, NO_LED },
+ { NO_LED, 12, 37, 36, 35, 34, 33, NO_LED, NO_LED, NO_LED },
+ { NO_LED, 38, 39, 40, 41, 42, 43, NO_LED, NO_LED, NO_LED },
+ { NO_LED, 62, 61, 60, 59, 58, 57, NO_LED, NO_LED, NO_LED }
+ }, {
+ { 120, 0 }, { 128, 0 }, { 136, 0 }, { 144, 0 }, { 152, 0 }, { 160, 0 }, { 168, 0 }, { 176, 0 }, { 184, 0 }, { 192, 0 }, { 200, 0 }, { 208, 0 },
+ { 224, 32 },
+ { 212, 16 }, { 204, 16 }, { 196, 16 }, { 188, 16 }, { 180, 16 }, { 172, 16 }, { 164, 16 }, { 156, 16 }, { 148, 16 }, { 140, 16 }, { 132, 16 }, { 124, 16 }, { 116, 16 },
+ { 120, 32 }, { 128, 32 }, { 136, 32 }, { 144, 32 }, { 152, 32 }, { 160, 32 }, { 168, 32 }, { 176, 32 }, { 184, 32 }, { 192, 32 }, { 200, 32 }, { 208, 32 },
+ { 212, 48 }, { 204, 48 }, { 196, 48 }, { 188, 48 }, { 180, 48 }, { 172, 48 }, { 164, 48 }, { 156, 48 }, { 148, 48 }, { 140, 48 }, { 132, 48 }, { 124, 48 }, { 116, 48 },
+ { 120, 64 }, { 128, 64 }, { 136, 64 }, { 144, 64 }, { 152, 64 }, { 160, 64 }, { 168, 64 }, { 176, 64 }, { 184, 64 }, { 192, 64 }, { 200, 64 }, { 208, 64 },
+
+ { 88, 0 }, { 80, 0 }, { 72, 0 }, { 64, 0 }, { 56, 0 }, { 48, 0 }, { 40, 0 }, { 32, 0 }, { 24, 0 }, { 16, 0 }, { 8, 0 }, { 0, 0 },
+ { 4, 16 }, { 12, 16 }, { 20, 16 }, { 28, 16 }, { 36, 16 }, { 44, 16 }, { 52, 16 }, { 60, 16 }, { 68, 16 }, { 76, 16 }, { 84, 16 }, { 92, 16 },
+ { 96, 32 }, { 88, 32 }, { 80, 32 }, { 72, 32 }, { 64, 32 }, { 56, 32 }, { 48, 32 }, { 40, 32 }, { 32, 32 }, { 24, 32 }, { 16, 32 }, { 8, 32 },
+ { 12, 48 }, { 20, 48 }, { 28, 48 }, { 36, 48 }, { 44, 48 }, { 52, 48 }, { 60, 48 }, { 68, 48 }, { 76, 48 }, { 84, 48 }, { 92, 48 }, { 100, 48 },
+ { 104, 64 }, { 96, 64 }, { 88, 64 }, { 80, 64 }, { 72, 64 }, { 64, 64 }, { 56, 64 }, { 48, 64 }, { 40, 64 }, { 32, 64 }, { 24, 64 }, { 16, 64 }
+ }, {
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ }
+};
+
+// const uint8_t PROGMEM convert_led_location2number[] = {
+// 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63,
+// 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
+// 98, 97, 96, 95, 94, 93, 92, 91, 90, 89, 88, 87,
+// 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+// 122, 121, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111,
+//
+// 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+// 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13,
+// 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 12,
+// 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38,
+// 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62
+// };
+#endif
+
+void my_process_midi4Bass(uint8_t channel, keyrecord_t *record,
+ uint8_t *chord_status, uint8_t chord, uint16_t root_note, bool is_single_bass) {
+ uint8_t velocity = midi_config.velocity;
+ if (record->event.pressed) {
+ if (chord_status[chord] == MIDI_INVALID_NOTE) {
+ uint8_t note = midi_compute_note(root_note);
+ if (is_single_bass) {
+ midi_send_noteon(&midi_device, channel, note, velocity);
+ } else {
+ midi_send_noteon(&midi_device, channel, note, velocity);
+ midi_send_noteon(&midi_device, channel, note + 12, velocity); // +1 Octave
+ }
+ dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity);
+ chord_status[chord] = note; // store root_note status.
+ }
+ } else {
+ uint8_t note = chord_status[chord];
+ if (note != MIDI_INVALID_NOTE) {
+ if (is_single_bass) {
+ midi_send_noteoff(&midi_device, channel, note, velocity);
+ } else {
+ midi_send_noteoff(&midi_device, channel, note, velocity);
+ midi_send_noteoff(&midi_device, channel, note + 12, velocity); // +1 Octave
+ }
+ dprintf("midi noteoff channel:%d note:%d velocity:%d\n", channel, note, velocity);
+ }
+ chord_status[chord] = MIDI_INVALID_NOTE;
+ }
+}
+
+void my_process_midi4TriadChords(uint8_t channel, keyrecord_t *record,
+ uint8_t *chord_status, uint8_t chord, uint16_t root_note,
+ int8_t offset1, int8_t offset2, int8_t offset3) {
+ uint8_t velocity = midi_config.velocity;
+ if (record->event.pressed) {
+ if (chord_status[chord] == MIDI_INVALID_NOTE) {
+ uint8_t note = midi_compute_note(root_note);
+ midi_send_noteon(&midi_device, channel, note + offset1, velocity);
+ midi_send_noteon(&midi_device, channel, note + offset2, velocity);
+ midi_send_noteon(&midi_device, channel, note + offset3, velocity);
+ dprintf("midi noteon channel:%d note:%d velocity:%d\n", channel, note, velocity);
+ chord_status[chord] = note; // store root_note status.
+ }
+ } else {
+ uint8_t note = chord_status[chord];
+ if (note != MIDI_INVALID_NOTE) {
+ midi_send_noteoff(&midi_device, channel, note + offset1, velocity);
+ midi_send_noteoff(&midi_device, channel, note + offset2, velocity);
+ midi_send_noteoff(&midi_device, channel, note + offset3, velocity);
+ dprintf("midi noteoff channel:%d note:%d velocity:%d\n", channel, note, velocity);
+ }
+ chord_status[chord] = MIDI_INVALID_NOTE;
+ }
+}
+
+void my_process_midi(uint8_t channel, uint16_t keycode, keyrecord_t *record, uint8_t *my_tone_status, int8_t offset, bool melody_unison_suppress) {
+
+ uint8_t tone = keycode - MIDI_TONE_MIN;
+
+ uint8_t melody_unison_velocity;
+ if (melody_unison_suppress) {
+ if (midi_config.velocity > UNISON_VELOCITY_OFFSET){
+ melody_unison_velocity = midi_config.velocity - UNISON_VELOCITY_OFFSET;
+ } else {
+ melody_unison_velocity = 0;
+ }
+ } else {
+ melody_unison_velocity = midi_config.velocity;
+ }
+
+ if (record->event.pressed) {
+ if (my_tone_status[tone] == MIDI_INVALID_NOTE) {
+ uint8_t note = midi_compute_note(keycode);
+ midi_send_noteon(&midi_device, channel, note + offset, melody_unison_velocity);
+ dprintf("midi noteon channel:%d note:%d tone:%d velocity:%d\n", channel, note, tone, melody_unison_velocity);
+ my_tone_status[tone] = note; // store root_note status.
+ }
+ } else {
+ uint8_t note = my_tone_status[tone];
+ if (note != MIDI_INVALID_NOTE) {
+ midi_send_noteoff(&midi_device, channel, note + offset, melody_unison_velocity);
+ dprintf("midi noteoff channel:%d note:%d velocity:%d\n", channel, note, melody_unison_velocity);
+ }
+ my_tone_status[tone] = MIDI_INVALID_NOTE;
+ }
+}
+
+#ifdef RGBLIGHT_ENABLE
+void keylight_manager(keyrecord_t *record, uint8_t hue, uint8_t sat, uint8_t val, uint8_t keylocation) {
+ if (keylocation == NO_LED) {
+ return; // do nothing.
+# ifdef CONSOLE_ENABLE
+ uprintf("keylight_manager, NO_LED\n");
+# endif
+ }
+
+ if (record->event.pressed) {
+ rgblight_sethsv_at(hue, sat, val, keylocation);
+ } else {
+ rgblight_sethsv_at(HSV_BLACK, keylocation);
+ }
+}
+
+#endif // RGBLIGHT_ENABLE
+
diff --git a/keyboards/giabalanai/giabalanai.h b/keyboards/giabalanai/giabalanai.h
new file mode 100644
index 00000000000..df4759f00fb
--- /dev/null
+++ b/keyboards/giabalanai/giabalanai.h
@@ -0,0 +1,132 @@
+/* Copyright 2020 3araht
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+/* This is a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define LAYOUT( \
+ l00, l01, l02, l03, l04, l05, l06, l07, l08, l09, l0a, l0b, \
+ l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l1a, l1b, \
+ l20, l21, l22, l23, l24, l25, l26, l27, l28, l29, l2a, l2b, \
+ l30, l31, l32, l33, l34, l35, l36, l37, l38, l39, l3a, l3b, \
+ l40, l41, l42, l43, l44, l45, l46, l47, l48, l49, l4a, l4b, \
+ \
+ r20, \
+ r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, r0a, r0b, renc, \
+ r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r1a, r1b, r1c, \
+ r21, r22, r23, r24, r25, r26, r27, r28, r29, r2a, r2b, r2c \
+) { \
+ { l00, l10, l20, l30, l40, l0b, l1b, l2b, l3b, l4b }, \
+ { l01, l11, l21, l31, l41, l0a, l1a, l2a, l3a, l4a }, \
+ { l02, l12, l22, l32, l42, l09, l19, l29, l39, l49 }, \
+ { l03, l13, l23, l33, l43, l08, l18, l28, l38, l48 }, \
+ { l04, l14, l24, l34, l44, l07, l17, l27, l37, l47 }, \
+ { l05, l15, l25, l35, l45, l06, l16, l26, l36, l46 }, \
+ \
+ { r00, r01, r02, r03, r04, r05, r06, KC_NO, KC_NO, KC_NO }, \
+ { r10, r11, r12, r13, r14, r15, r16, KC_NO, KC_NO, KC_NO }, \
+ { r20, r21, r22, r23, r24, r25, r26, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, renc, r0b, r0a, r09, r08, r07, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, r1c, r1b, r1a, r19, r18, r17, KC_NO, KC_NO, KC_NO }, \
+ { KC_NO, r2c, r2b, r2a, r29, r28, r27, KC_NO, KC_NO, KC_NO } \
+}
+
+#define LAYOUT_giabarinaix2( \
+ l00, l01, l02, l03, l04, l05, l06, l07, l08, l09, l0a, l0b, \
+ l10, l11, l12, l13, l14, l15, l16, l17, l18, l19, l1a, l1b, \
+ l20, l21, l22, l23, l24, l25, l26, l27, l28, l29, l2a, l2b, \
+ l30, l31, l32, l33, l34, l35, l36, l37, l38, l39, l3a, l3b, \
+ l40, l41, l42, l43, l44, l45, l46, l47, l48, l49, l4a, l4b, \
+ \
+ r00, r01, r02, r03, r04, r05, r06, r07, r08, r09, r0a, r0b, \
+ r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r1a, r1b, \
+ r20, r21, r22, r23, r24, r25, r26, r27, r28, r29, r2a, r2b, \
+ r30, r31, r32, r33, r34, r35, r36, r37, r38, r39, r3a, r3b, \
+ r40, r41, r42, r43, r44, r45, r46, r47, r48, r49, r4a, r4b \
+) { \
+ { l00, l10, l20, l30, l40, l0b, l1b, l2b, l3b, l4b }, \
+ { l01, l11, l21, l31, l41, l0a, l1a, l2a, l3a, l4a }, \
+ { l02, l12, l22, l32, l42, l09, l19, l29, l39, l49 }, \
+ { l03, l13, l23, l33, l43, l08, l18, l28, l38, l48 }, \
+ { l04, l14, l24, l34, l44, l07, l17, l27, l37, l47 }, \
+ { l05, l15, l25, l35, l45, l06, l16, l26, l36, l46 }, \
+ \
+ { r4b, r3b, r2b, r1b, r0b, r40, r30, r20, r10, r00 }, \
+ { r4a, r3a, r2a, r1a, r0a, r41, r31, r21, r11, r01 }, \
+ { r49, r39, r29, r19, r09, r42, r32, r22, r12, r02 }, \
+ { r48, r38, r28, r18, r08, r43, r33, r23, r13, r03 }, \
+ { r47, r37, r27, r17, r07, r44, r34, r24, r14, r04 }, \
+ { r46, r36, r26, r16, r06, r45, r35, r25, r15, r05 } \
+}
+
+
+#define _________________QWERTY_L1_________________ KC_Q, KC_W, KC_E, KC_R, KC_T
+#define _________________QWERTY_L2_________________ KC_A, KC_S, KC_D, KC_F, KC_G
+#define _________________QWERTY_L3_________________ KC_Z, KC_X, KC_C, KC_V, KC_B
+
+#define _________________QWERTY_R1_________________ KC_Y, KC_U, KC_I, KC_O, KC_P
+#define _________________QWERTY_R2_________________ KC_H, KC_J, KC_K, KC_L, KC_SCLN
+#define _________________QWERTY_R3_________________ KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH
+
+#define _________________COLEMAK_L1________________ KC_Q, KC_W, KC_F, KC_P, KC_G
+#define _________________COLEMAK_L2________________ KC_A, KC_R, KC_S, KC_T, KC_D
+#define _________________COLEMAK_L3________________ KC_Z, KC_X, KC_C, KC_V, KC_B
+
+#define _________________COLEMAK_R1________________ KC_J, KC_L, KC_U, KC_Y, KC_SCLN
+#define _________________COLEMAK_R2________________ KC_H, KC_N, KC_E, KC_I, KC_O
+#define _________________COLEMAK_R3________________ KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH
+
+#define _________________NUMBER_L__________________ KC_1, KC_2, KC_3, KC_4, KC_5
+#define _________________NUMBER_R__________________ KC_6, KC_7, KC_8, KC_9, KC_0
+
+#define _________________FUNC__L___________________ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5
+#define _________________FUNC__R___________________ KC_F6, KC_F7, KC_F8, KC_F9, KC_F10
+
+#ifdef RGBLIGHT_ENABLE
+
+extern const uint8_t PROGMEM convert_key_to_led[];
+# ifndef GIABARINAIX2
+extern const uint8_t PROGMEM convert_key_to_led2[];
+# endif
+#endif // RGBLIGHT_ENABLE
+
+// #ifdef RGB_MATRIX_ENABLE
+// extern const uint8_t PROGMEM convert_led_location2number[];
+// #endif
+
+extern MidiDevice midi_device;
+void my_process_midi4Bass(uint8_t channel, keyrecord_t *record,
+ uint8_t *chord_status, uint8_t chord, uint16_t root_note, bool is_single_bass);
+
+void my_process_midi4TriadChords(uint8_t channel, keyrecord_t *record,
+ uint8_t *chord_status, uint8_t chord, uint16_t root_note,
+ int8_t offset1, int8_t offset2, int8_t offset3);
+
+void my_process_midi(uint8_t channel, uint16_t keycode, keyrecord_t *record, uint8_t *my_tone_status, int8_t offset, bool melody_unison_suppress);
+
+
+#ifdef RGBLIGHT_ENABLE
+void keylight_manager(keyrecord_t *record, uint8_t hue, uint8_t sat, uint8_t val, uint8_t keylocation);
+#endif // RGBLIGHT_ENABLE
diff --git a/keyboards/giabalanai/info.json b/keyboards/giabalanai/info.json
new file mode 100644
index 00000000000..b0b52b4ab8d
--- /dev/null
+++ b/keyboards/giabalanai/info.json
@@ -0,0 +1,125 @@
+{
+ "keyboard_name": "giabalanai",
+ "manufacturer": "3araht",
+ "url": "https://github.com/3araht",
+ "maintainer": "3araht",
+ "usb": {
+ "vid": "0xFEED",
+ "pid": "0xF4B0",
+ "device_version": "0.0.1"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "l00", "x": 0, "y": 0},
+ {"label": "l01", "x": 1, "y": 0},
+ {"label": "l02", "x": 2, "y": 0},
+ {"label": "l03", "x": 3, "y": 0},
+ {"label": "l04", "x": 4, "y": 0},
+ {"label": "l05", "x": 5, "y": 0},
+ {"label": "l06", "x": 6, "y": 0},
+ {"label": "l07", "x": 7, "y": 0},
+ {"label": "l08", "x": 8, "y": 0},
+ {"label": "l09", "x": 9, "y": 0},
+ {"label": "l0a", "x": 10, "y": 0},
+ {"label": "l0b", "x": 11, "y": 0},
+
+ {"label": "l10", "x": 0.5, "y": 1},
+ {"label": "l11", "x": 1.5, "y": 1},
+ {"label": "l12", "x": 2.5, "y": 1},
+ {"label": "l13", "x": 3.5, "y": 1},
+ {"label": "l14", "x": 4.5, "y": 1},
+ {"label": "l15", "x": 5.5, "y": 1},
+ {"label": "l16", "x": 6.5, "y": 1},
+ {"label": "l17", "x": 7.5, "y": 1},
+ {"label": "l18", "x": 8.5, "y": 1},
+ {"label": "l19", "x": 9.5, "y": 1},
+ {"label": "l1a", "x": 10.5, "y": 1},
+ {"label": "l1b", "x": 11.5, "y": 1},
+
+ {"label": "r20", "x": 14.5, "y": 1},
+
+ {"label": "l20", "x": 1, "y": 2},
+ {"label": "l21", "x": 2, "y": 2},
+ {"label": "l22", "x": 3, "y": 2},
+ {"label": "l23", "x": 4, "y": 2},
+ {"label": "l24", "x": 5, "y": 2},
+ {"label": "l25", "x": 6, "y": 2},
+ {"label": "l26", "x": 7, "y": 2},
+ {"label": "l27", "x": 8, "y": 2},
+ {"label": "l28", "x": 9, "y": 2},
+ {"label": "l29", "x": 10, "y": 2},
+ {"label": "l2a", "x": 11, "y": 2},
+ {"label": "l2b", "x": 12, "y": 2},
+
+ {"label": "r00", "x": 15, "y": 2},
+ {"label": "r01", "x": 16, "y": 2},
+ {"label": "r02", "x": 17, "y": 2},
+ {"label": "r03", "x": 18, "y": 2},
+ {"label": "r04", "x": 19, "y": 2},
+ {"label": "r05", "x": 20, "y": 2},
+ {"label": "r06", "x": 21, "y": 2},
+ {"label": "r07", "x": 22, "y": 2},
+ {"label": "r08", "x": 23, "y": 2},
+ {"label": "r09", "x": 24, "y": 2},
+ {"label": "r0a", "x": 25, "y": 2},
+ {"label": "r0b", "x": 26, "y": 2},
+
+ {"label": "renc", "x": 27.5, "y": 2},
+
+ {"label": "l30", "x": 1.5, "y": 3},
+ {"label": "l31", "x": 2.5, "y": 3},
+ {"label": "l32", "x": 3.5, "y": 3},
+ {"label": "l33", "x": 4.5, "y": 3},
+ {"label": "l34", "x": 5.5, "y": 3},
+ {"label": "l35", "x": 6.5, "y": 3},
+ {"label": "l36", "x": 7.5, "y": 3},
+ {"label": "l37", "x": 8.5, "y": 3},
+ {"label": "l38", "x": 9.5, "y": 3},
+ {"label": "l39", "x": 10.5, "y": 3},
+ {"label": "l3a", "x": 11.5, "y": 3},
+ {"label": "l3b", "x": 12.5, "y": 3},
+
+ {"label": "r10", "x": 14.5, "y": 3},
+ {"label": "r11", "x": 15.5, "y": 3},
+ {"label": "r12", "x": 16.5, "y": 3},
+ {"label": "r13", "x": 17.5, "y": 3},
+ {"label": "r14", "x": 18.5, "y": 3},
+ {"label": "r15", "x": 19.5, "y": 3},
+ {"label": "r16", "x": 20.5, "y": 3},
+ {"label": "r17", "x": 21.5, "y": 3},
+ {"label": "r18", "x": 22.5, "y": 3},
+ {"label": "r19", "x": 23.5, "y": 3},
+ {"label": "r1a", "x": 24.5, "y": 3},
+ {"label": "r1b", "x": 25.5, "y": 3},
+ {"label": "r1c", "x": 26.5, "y": 3},
+
+ {"label": "l40", "x": 2, "y": 4},
+ {"label": "l41", "x": 3, "y": 4},
+ {"label": "l42", "x": 4, "y": 4},
+ {"label": "l43", "x": 5, "y": 4},
+ {"label": "l44", "x": 6, "y": 4},
+ {"label": "l45", "x": 7, "y": 4},
+ {"label": "l46", "x": 8, "y": 4},
+ {"label": "l47", "x": 9, "y": 4},
+ {"label": "l48", "x": 10, "y": 4},
+ {"label": "l49", "x": 11, "y": 4},
+ {"label": "l4a", "x": 12, "y": 4},
+ {"label": "l4b", "x": 13, "y": 4},
+
+ {"label": "r21", "x": 15, "y": 4},
+ {"label": "r22", "x": 16, "y": 4},
+ {"label": "r23", "x": 17, "y": 4},
+ {"label": "r24", "x": 18, "y": 4},
+ {"label": "r25", "x": 19, "y": 4},
+ {"label": "r26", "x": 20, "y": 4},
+ {"label": "r27", "x": 21, "y": 4},
+ {"label": "r28", "x": 22, "y": 4},
+ {"label": "r29", "x": 23, "y": 4},
+ {"label": "r2a", "x": 24, "y": 4},
+ {"label": "r2b", "x": 25, "y": 4},
+ {"label": "r2c", "x": 26, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/giabalanai/keymaps/2firmware/config.h b/keyboards/giabalanai/keymaps/2firmware/config.h
new file mode 100644
index 00000000000..a9c772adefe
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/2firmware/config.h
@@ -0,0 +1,9 @@
+#pragma once
+
+//#define USE_MATRIX_I2C
+
+/* Select hand configuration */
+
+// #define MASTER_LEFT
+// #define MASTER_RIGHT
+#define EE_HANDS
diff --git a/keyboards/giabalanai/keymaps/2firmware/keymap.c b/keyboards/giabalanai/keymaps/2firmware/keymap.c
new file mode 100644
index 00000000000..2877f8ecd85
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/2firmware/keymap.c
@@ -0,0 +1,739 @@
+/* Copyright 2020 3araht
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+#include "split_util.h"
+#include "print.h"
+#include "version.h"
+
+// Alias layout macros that expand groups of keys.
+#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
+
+#define DF_QWER DF(_QWERTY)
+#define DF_COLE DF(_COLEMAK)
+#define MO_ADJ MO(_ADJUST)
+// Long press: go to _FN layer, tap: MUTE
+#define FN_MUTE LT(_FN, KC_MUTE)
+#define SHIF_UP RSFT_T(KC_UP)
+#define ADJ_EIS LT(_ADJUST,KC_LANG2)
+#define MIS_KAN LT(_MISC,KC_LANG1)
+
+// Used to set octave to MI_OCT_0
+extern midi_config_t midi_config;
+uint8_t midi_bass_ch = 0, midi_chord_ch = 0; // By default, all use the same channel.
+
+// UNISON flags
+static bool melody_dyad_high = false; // true when +1 octave unison dyad is enabled.
+static bool melody_dyad_low = false; // true when -1 octave unison dyad is enabled.
+
+static bool melody_unison_suppress = true; // true: velocity of octave unison note is suppressd to UNISON_VELOCITY_RATIO
+
+// To record the status of Bass Chord (single or dyad, default: dyad.)
+typedef union {
+ uint32_t raw;
+ struct {
+ bool isSingleBass:1;
+ };
+} user_config_t;
+user_config_t user_config;
+
+#define IS_SINGLE_BASS() (user_config.isSingleBass)
+
+#ifdef RGBLIGHT_ENABLE
+/* used to specify there is no LED on the keylocation. */
+# define NO_LED 255
+#endif // RGBLIGHT_ENABLE
+
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _C_SYSTEM_BASE, // MIDI C-system
+ _FAKE_B_SYSTEM, // MIDI fake B-system doesn't have correct assignments on top two rows. The bottom 3 rows are B-system.
+ _C_SYSTEM_BASS2ROW, // counter bass system
+ _C_SYSTEM_ENTIRELY, // single notes for both left and right keybaords.
+ _CHROMATONE,
+ _CFLIP_BASS2ROW, // 180 degree flipped layout on right side keyboard
+ _QWERTY,
+ _COLEMAK,
+ _ADJUST, // for Fn keys, etc.
+ _FN // for changing layers, octaves, etc.
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+
+ // MIDI Chord Keycodes - Root notes
+ MY_CHORD_MIN = SAFE_RANGE,
+
+ MI_CH_Cr = MY_CHORD_MIN,
+ MI_CH_Csr,
+ MI_CH_Dbr = MI_CH_Csr,
+ MI_CH_Dr,
+ MI_CH_Dsr,
+ MI_CH_Ebr = MI_CH_Dsr,
+ MI_CH_Er,
+ MI_CH_Fr,
+ MI_CH_Fsr,
+ MI_CH_Gbr = MI_CH_Fsr,
+ MI_CH_Gr,
+ MI_CH_Gsr,
+ MI_CH_Abr = MI_CH_Gsr,
+ MI_CH_Ar,
+ MI_CH_Asr,
+ MI_CH_Bbr = MI_CH_Asr,
+ MI_CH_Br,
+
+ // MIDI Chord Keycodes - Major
+
+ MI_CH_C,
+ MI_CH_Cs,
+ MI_CH_Db = MI_CH_Cs,
+ MI_CH_D,
+ MI_CH_Ds,
+ MI_CH_Eb = MI_CH_Ds,
+ MI_CH_E,
+ MI_CH_F,
+ MI_CH_Fs,
+ MI_CH_Gb = MI_CH_Fs,
+ MI_CH_G,
+ MI_CH_Gs,
+ MI_CH_Ab = MI_CH_Gs,
+ MI_CH_A,
+ MI_CH_As,
+ MI_CH_Bb = MI_CH_As,
+ MI_CH_B,
+
+ // MIDI Chord Keycodes Minor
+
+ MI_CH_Cm,
+ MI_CH_Csm,
+ MI_CH_Dbm = MI_CH_Csm,
+ MI_CH_Dm,
+ MI_CH_Dsm,
+ MI_CH_Ebm = MI_CH_Dsm,
+ MI_CH_Em,
+ MI_CH_Fm,
+ MI_CH_Fsm,
+ MI_CH_Gbm = MI_CH_Fsm,
+ MI_CH_Gm,
+ MI_CH_Gsm,
+ MI_CH_Abm = MI_CH_Gsm,
+ MI_CH_Am,
+ MI_CH_Asm,
+ MI_CH_Bbm = MI_CH_Asm,
+ MI_CH_Bm,
+
+ //MIDI Chord Keycodes Dominant Seventh
+
+ MI_CH_CDom7,
+ MI_CH_CsDom7,
+ MI_CH_DbDom7 = MI_CH_CsDom7,
+ MI_CH_DDom7,
+ MI_CH_DsDom7,
+ MI_CH_EbDom7 = MI_CH_DsDom7,
+ MI_CH_EDom7,
+ MI_CH_FDom7,
+ MI_CH_FsDom7,
+ MI_CH_GbDom7 = MI_CH_FsDom7,
+ MI_CH_GDom7,
+ MI_CH_GsDom7,
+ MI_CH_AbDom7 = MI_CH_GsDom7,
+ MI_CH_ADom7,
+ MI_CH_AsDom7,
+ MI_CH_BbDom7 = MI_CH_AsDom7,
+ MI_CH_BDom7,
+
+ // MIDI Chord Keycodes Diminished Seventh
+
+ MI_CH_CDim7,
+ MI_CH_CsDim7,
+ MI_CH_DbDim7 = MI_CH_CsDim7,
+ MI_CH_DDim7,
+ MI_CH_DsDim7,
+ MI_CH_EbDim7 = MI_CH_DsDim7,
+ MI_CH_EDim7,
+ MI_CH_FDim7,
+ MI_CH_FsDim7,
+ MI_CH_GbDim7 = MI_CH_FsDim7,
+ MI_CH_GDim7,
+ MI_CH_GsDim7,
+ MI_CH_AbDim7 = MI_CH_GsDim7,
+ MI_CH_ADim7,
+ MI_CH_AsDim7,
+ MI_CH_BbDim7 = MI_CH_AsDim7,
+ MI_CH_BDim7,
+
+ MY_CHORD_MAX = MI_CH_BDim7,
+
+ VERSION,
+ CSYSTEM, // C-SYSTEM layout
+ BSYSTEM, // B-SYSTEM layout
+ CNTBASC, // CouNTer BASs C-system layout
+ CSYSALL, // C-SYStem ALL layout
+ CHRTONE, // CHRomaTONE layout
+ CFLIP2B, // C-system FLIPped 2(to) Backwards
+ TGLBASS, // ToGgLe BASS unison
+ TGLMICH, // ToGgLe MIdi CHannel separation
+ MELDYAL, // MELody DYad Low
+ MELODYS, // MELODY Single
+ MELDYAH, // MELody DYad High
+ TGLUVEL // ToGgLe Unison VELocity
+};
+
+#define MY_CHORD_COUNT (MY_CHORD_MAX - MY_CHORD_MIN + 1)
+static uint8_t chord_status[MY_CHORD_COUNT];
+static uint8_t my_tone_status[MIDI_TONE_COUNT];
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* C-system Base */
+ [_C_SYSTEM_BASE] = LAYOUT(
+ MI_CH_Dbr, MI_CH_Abr, MI_CH_Ebr, MI_CH_Bbr, MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr,
+ MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Fs,
+ MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm,
+ MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, MI_CH_FDom7, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_FsDom7,
+ MI_CH_DbDim7, MI_CH_AbDim7, MI_CH_EbDim7, MI_CH_BbDim7, MI_CH_FDim7, MI_CH_CDim7, MI_CH_GDim7, MI_CH_DDim7, MI_CH_ADim7, MI_CH_EDim7, MI_CH_BDim7, MI_CH_FsDim7,
+
+ MI_Fs_2,
+ MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5, MI_F_5, FN_MUTE,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5, MI_G_5,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5, MI_Fs_5
+ ),
+
+ /* fake B-system */
+ [_FAKE_B_SYSTEM] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+
+ MI_Ab_2,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Gb_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Gb_4, MI_A_4, MI_C_5, MI_Eb_5, MI_Gb_5, _______,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5, MI_G_5,
+ MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5, MI_F_5
+ ),
+
+ /* BASS2row */
+ [_C_SYSTEM_BASS2ROW] = LAYOUT(
+ MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr, MI_CH_Csr, MI_CH_Gsr, MI_CH_Dsr, MI_CH_Asr,
+ MI_CH_Dbr, MI_CH_Abr, MI_CH_Ebr, MI_CH_Bbr, MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr,
+ MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Fs,
+ MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm,
+ MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, MI_CH_FDom7, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_FsDom7,
+
+ MI_Fs_2,
+ MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5, MI_F_5, _______,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5, MI_G_5,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5, MI_Fs_5
+ ),
+
+ /* C-system entirely */
+ [_C_SYSTEM_ENTIRELY] = LAYOUT(
+ MI_BENDU, XXXXXXX, XXXXXXX, MI_Db, MI_E, MI_G, MI_Bb, MI_Db_1, MI_E_1, MI_G_1, MI_Bb_1, MI_Db_2,
+ MI_BENDD, XXXXXXX, MI_C, MI_Eb, MI_Fs, MI_A, MI_C_1, MI_Eb_1, MI_Fs_1, MI_A_1, MI_C_2, MI_Eb_2,
+ XXXXXXX, XXXXXXX, MI_D, MI_F, MI_Ab, MI_B, MI_D_1, MI_F_1, MI_Ab_1, MI_B_1, MI_D_2, MI_F_2,
+ XXXXXXX, MI_Db, MI_E, MI_G, MI_Bb, MI_Db_1, MI_E_1, MI_G_1, MI_Bb_1, MI_Db_2, MI_E_2, MI_G_2,
+ MI_C, MI_Eb, MI_Fs, MI_A, MI_C_1, MI_Eb_1, MI_Fs_1, MI_A_1, MI_C_2, MI_Eb_2, MI_Fs_2, MI_A_2,
+
+ MI_Fs_2,
+ MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5, MI_F_5, FN_MUTE,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5, MI_G_5,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5, MI_Fs_5
+ ),
+
+ /* Chromatone */
+ [_CHROMATONE] = LAYOUT(
+ MI_Db, MI_Eb, MI_F, MI_G, MI_A, MI_B, MI_Db_1, MI_Eb_1, MI_F_1, MI_G_1, MI_A_1, MI_B_1,
+ MI_D, MI_E, MI_Fs, MI_Ab, MI_Bb, MI_C_1, MI_D_1, MI_E_1, MI_Fs_1, MI_Ab_1, MI_Bb_1, MI_C_2,
+ MI_Eb, MI_F, MI_G, MI_A, MI_B, MI_Db_1, MI_Eb_1, MI_F_1, MI_G_1, MI_A_1, MI_B_1, MI_Db_2,
+ MI_E, MI_Fs, MI_Ab, MI_Bb, MI_C_1, MI_D_1, MI_E_1, MI_Fs_1, MI_Ab_1, MI_Bb_1, MI_C_2, MI_D_2,
+ MI_F, MI_G, MI_A, MI_B, MI_Db_1, MI_Eb_1, MI_F_1, MI_G_1, MI_A_1, MI_B_1, MI_Db_2, MI_Eb_2,
+
+ MI_C_2,
+ MI_Db_2, MI_Eb_2, MI_F_2, MI_G_2, MI_A_2, MI_B_2, MI_Db_3, MI_Eb_3, MI_F_3, MI_G_3, MI_A_3, MI_B_3, FN_MUTE,
+ MI_C_2, MI_D_2, MI_E_2, MI_Gb_2, MI_Ab_2, MI_Bb_2, MI_C_3, MI_D_3, MI_E_3, MI_Gb_3, MI_Ab_3, MI_Bb_3, MI_C_4,
+ MI_Db_2, MI_Eb_2, MI_F_2, MI_G_2, MI_A_2, MI_B_2, MI_Db_3, MI_Eb_3, MI_F_3, MI_G_3, MI_A_3, MI_B_3
+ ),
+
+ [_CFLIP_BASS2ROW] = LAYOUT(
+ MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr, MI_CH_Csr, MI_CH_Gsr, MI_CH_Dsr, MI_CH_Asr,
+ MI_CH_Dbr, MI_CH_Abr, MI_CH_Ebr, MI_CH_Bbr, MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr,
+ MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Fs,
+ MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm,
+ MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, MI_CH_FDom7, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_FsDom7,
+
+ MI_G_5,
+ MI_F_5, MI_D_5, MI_B_4, MI_Ab_4, MI_F_4, MI_D_4, MI_B_3, MI_Ab_3, MI_F_3, MI_D_3, MI_B_2, MI_Ab_2, FN_MUTE,
+ MI_Fs_5, MI_Eb_5, MI_C_5, MI_A_4, MI_Fs_4, MI_Eb_4, MI_C_4, MI_A_3, MI_Fs_3, MI_Eb_3, MI_C_3, MI_A_2, MI_Fs_2,
+ MI_E_5, MI_Db_5, MI_Bb_4, MI_G_4, MI_E_4, MI_Db_4, MI_Bb_3, MI_G_3, MI_E_3, MI_Db_3, MI_Bb_2, MI_G_2
+ ),
+
+ /* QWERTY */
+ [_QWERTY] = LAYOUT_wrapper(
+ KC_GESC, _________________NUMBER_L__________________, _________________NUMBER_R__________________, KC_BSPC,
+ KC_TAB, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_DEL,
+ KC_CAPS, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_ENT,
+ KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, ADJ_EIS, KC_SPC, KC_SPC, KC_LANG1, KC_APP, MO_ADJ, KC_LEFT, KC_DOWN, KC_RGHT,
+
+ _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ /* COLEMAK */
+ [_COLEMAK] = LAYOUT_wrapper(
+ KC_GESC, _________________NUMBER_L__________________, _________________NUMBER_R__________________, KC_BSPC,
+ KC_TAB, _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, KC_DEL,
+ KC_LCTL, _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, KC_ENT,
+ KC_LSFT, _________________COLEMAK_L3________________, _________________COLEMAK_R3________________, SHIF_UP,
+ KC_CAPS, KC_LGUI, KC_LALT, ADJ_EIS, KC_SPC, KC_SPC, KC_LANG1, KC_APP, MO_ADJ, KC_LEFT, KC_DOWN, KC_RGHT,
+
+ _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ /* ADJUST */
+ [_ADJUST] = LAYOUT_wrapper(
+ _______, _________________FUNC__L___________________, _________________FUNC__R___________________, _______,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL, _______,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_GRV, _______,
+ _______, KC_BRID, KC_BRIU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LBRC, KC_RBRC, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_QUOT, KC_BSLS, _______,
+
+ _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+
+ /* Fn */
+ [_FN] = LAYOUT(
+ CSYSTEM, BSYSTEM, CNTBASC, CSYSALL, CHRTONE, CFLIP2B, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG,
+ DF_QWER, TGLBASS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ DF_COLE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TGLMICH,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ XXXXXXX,
+ MI_OCT_N2, MI_OCT_N1, MI_OCT_0, MI_OCT_1, MI_OCT_2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION, EEP_RST, _______,
+ CSYSTEM, BSYSTEM, CNTBASC, CSYSALL, CHRTONE, CFLIP2B, XXXXXXX, XXXXXXX, XXXXXXX, MI_VELD, MI_VELU, XXXXXXX, RGB_TOG,
+ XXXXXXX, TGLBASS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TGLUVEL, MELDYAL, MELODYS, MELDYAH
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_C_SYSTEM_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_FAKE_B_SYSTEM] = { ENCODER_CCW_CW(_______, _______) },
+ [_C_SYSTEM_BASS2ROW] = { ENCODER_CCW_CW(_______, _______) },
+ [_C_SYSTEM_ENTIRELY] = { ENCODER_CCW_CW(_______, _______) },
+ [_CHROMATONE] = { ENCODER_CCW_CW(_______, _______) },
+ [_CFLIP_BASS2ROW] = { ENCODER_CCW_CW(_______, _______) },
+ [_QWERTY] = { ENCODER_CCW_CW(_______, _______) },
+ [_COLEMAK] = { ENCODER_CCW_CW(_______, _______) },
+ [_ADJUST] = { ENCODER_CCW_CW(_______, _______) },
+ [_FN] = { ENCODER_CCW_CW(_______, _______) },
+};
+#endif
+
+#ifdef RGBLIGHT_ENABLE
+
+// Light up adjust layer keys (left keyboard)
+const rgblight_segment_t PROGMEM my_adjust_layer[] = RGBLIGHT_LAYER_SEGMENTS({1, 10, HSV_ORANGE},
+ {21, 2, HSV_ORANGE},
+ {25, 3, HSV_ORANGE},
+ {30, 5, HSV_ORANGE},
+ {37, 2, HSV_ORANGE},
+ {45, 2, HSV_ORANGE},
+ {57, 2, HSV_ORANGE}
+);
+
+// Light up fn layer keys
+const rgblight_segment_t PROGMEM my_fn_layer[] = RGBLIGHT_LAYER_SEGMENTS( // left keyboard
+ {0, 6, HSV_ORANGE}, // MIDI layouts
+ {11, 1, HSV_RED}, // RGB_TOG
+ {12, 1, HSV_WHITE}, // DF_QWER
+ {13, 1, HSV_CORAL}, // TGLBASS
+ {24, 1, HSV_WHITE}, // DF_COLE
+ {35, 1, HSV_TEAL}, // TGLMICH
+#if 0 // Color Test
+ {36, 1, HSV_WHITE},
+ {37, 1, HSV_RED},
+ {38, 1, HSV_CORAL},
+ {39, 1, HSV_ORANGE},
+ {40, 1, HSV_GOLDENROD},
+ {41, 1, HSV_GOLD},
+ {42, 1, HSV_YELLOW},
+ {43, 1, HSV_CHARTREUSE},
+ {44, 1, HSV_GREEN},
+ {45, 1, HSV_SPRINGGREEN},
+ {46, 1, HSV_TURQUOISE},
+ {47, 1, HSV_TEAL},
+ {48, 1, HSV_CYAN},
+ {49, 1, HSV_AZURE},
+ {50, 1, HSV_BLUE},
+ {51, 1, HSV_PURPLE},
+ {52, 1, HSV_MAGENTA},
+ {53, 1, HSV_PINK},
+#endif
+ // right keyboard
+ {60, 6, HSV_ORANGE}, // MIDI layouts
+ {74, 1, HSV_CORAL}, // TGLBASS
+ {85, 1, HSV_BLUE}, // MIDI Oct
+ {86, 1, HSV_CYAN}, // MIDI Oct
+ {87, 1, HSV_SPRINGGREEN}, // MIDI Oct
+ {88, 1, HSV_GREEN}, // MIDI Oct
+ {89, 1, HSV_CHARTREUSE}, // MIDI Oct
+ {96, 1, HSV_PINK}, // EEP_RST
+ {98, 6, HSV_ORANGE}, // MIDI layouts
+ {107, 1, HSV_YELLOW}, // MI_VELD
+ {108, 1, HSV_GREEN}, // MI_VELU
+ {110, 1, HSV_RED}, // RGB_TOG
+ {112, 1, HSV_CORAL}, // TGLBASS
+ {119, 1, HSV_CORAL}, // TGLUVEL
+ {120, 1, HSV_CYAN}, // MELDYAL
+ {121, 1, HSV_GOLD}, // MELODYS
+ {122, 1, HSV_SPRINGGREEN} // MELDYAH
+);
+
+
+
+// Now define the array of layers. Later layers take precedence
+const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_fn_layer, my_adjust_layer);
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ // Both layers will light up if both kb layers are active
+ rgblight_set_layer_state(0, layer_state_cmp(state, _FN));
+ rgblight_set_layer_state(1, layer_state_cmp(state, _ADJUST));
+ return state;
+};
+
+#endif // RGBLIGHT_ENABLE
+
+void my_init(void){
+ // Set octave to MI_OCT_0
+ midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
+ // avoid using 127 since it is used as a special number in some sound sources.
+ midi_config.velocity = MIDI_INITIAL_VELOCITY;
+}
+
+void eeconfig_init_user(void) {
+ midi_init();
+ my_init();
+
+ // Used to set octave to MI_OCT_0
+ midi_bass_ch = 0, midi_chord_ch = 0; // By default, all use the same channel.
+
+ // UNISON flags
+ melody_dyad_high = false; // true when +1 octave unison dyad is enabled.
+ melody_dyad_low = false; // true when -1 octave unison dyad is enabled.
+ melody_unison_suppress = true; // true: velocity of octave unison note is suppressd to UNISON_VELOCITY_RATIO
+
+ // Reset Bass setting
+ user_config.raw = 0; // default: dyad
+ eeconfig_update_user(user_config.raw);
+
+ // Reset the midi keyboard layout
+ set_single_persistent_default_layer(_C_SYSTEM_BASS2ROW);
+}
+
+void keyboard_post_init_user(void) {
+ my_init();
+
+ for (uint8_t i = 0; i < MY_CHORD_COUNT; i++) {
+ chord_status[i] = MIDI_INVALID_NOTE;
+ }
+
+ for (uint8_t i = 0; i < MIDI_TONE_COUNT; i++) {
+ my_tone_status[i] = MIDI_INVALID_NOTE;
+ }
+ // load EEPROM data for isSingleBass
+ user_config.raw = eeconfig_read_user();
+
+ // When USB cable is connected to the left side keyboard, use QWERTY layout by default.
+ if (is_keyboard_master() && isLeftHand) {
+ default_layer_set(1UL << _QWERTY);
+ }
+
+#ifdef RGBLIGHT_ENABLE
+
+ rgblight_layers = my_rgb_layers;
+
+ // Reset LED off
+ rgblight_sethsv(HSV_BLACK);
+# if defined(RGBLIGHT_EFFECT_KNIGHT) || defined(RGBLIGHT_EFFECT_TWINKLE)
+ rgblight_sethsv(30, 50, 40);
+# ifdef RGBLIGHT_EFFECT_KNIGHT
+ rgblight_mode(RGBLIGHT_MODE_KNIGHT);
+# elif defined(RGBLIGHT_EFFECT_TWINKLE)
+ rgblight_mode(RGBLIGHT_MODE_TWINKLE+3);
+# endif
+# endif
+#endif // RGBLIGHT_ENABLE
+};
+
+void toggle_isSingleBass(void) {
+#ifdef CONSOLE_ENABLE
+ uprintf("isSingleBass(before) %u\n", user_config.isSingleBass);
+#endif
+ user_config.isSingleBass = !user_config.isSingleBass;
+#ifdef CONSOLE_ENABLE
+ uprintf("isSingleBass(after) %u\n", user_config.isSingleBass);
+#endif
+
+ eeconfig_update_user(user_config.raw);
+}
+
+void toggle_MIDI_channel_separation(void) {
+ if (midi_chord_ch > 0) {
+ midi_chord_ch = 0;
+ midi_bass_ch = 0;
+ } else {
+ midi_chord_ch = 1;
+ midi_bass_ch = 2;
+ }
+}
+
+#ifdef RGBLIGHT_ENABLE
+void switch_keylight_color4bass(keyrecord_t *record, uint8_t keylocation){
+ switch (biton32(default_layer_state)) {
+ case _C_SYSTEM_BASE:
+ keylight_manager(record, HSV_GREEN, keylocation);
+ break;
+ case _FAKE_B_SYSTEM:
+ keylight_manager(record, HSV_ORANGE, keylocation);
+ break;
+ case _C_SYSTEM_BASS2ROW:
+ keylight_manager(record, HSV_YELLOW, keylocation);
+ break;
+ case _CFLIP_BASS2ROW:
+ keylight_manager(record, HSV_PURPLE, keylocation);
+ break;
+ }
+}
+void switch_keylight_color4chords(keyrecord_t *record, uint8_t keylocation){
+ switch (biton32(default_layer_state)) {
+ case _C_SYSTEM_BASE:
+ keylight_manager(record, HSV_SPRINGGREEN, keylocation);
+ break;
+ case _FAKE_B_SYSTEM:
+ keylight_manager(record, HSV_YELLOW, keylocation);
+ break;
+ case _C_SYSTEM_BASS2ROW:
+ keylight_manager(record, HSV_GOLDENROD, keylocation);
+ break;
+ case _CFLIP_BASS2ROW:
+ keylight_manager(record, HSV_MAGENTA, keylocation);
+ break;
+ }
+}
+#endif // RGBLIGHT_ENABLE
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint16_t root_note = MIDI_INVALID_NOTE; // Starting value for the root note of each chord
+
+#ifdef RGBLIGHT_ENABLE
+ /* prepare for turning on LEDs when keys are pressed. */
+ uint8_t r = record->event.key.row;
+ uint8_t c = record->event.key.col;
+ // uint8_t keylocation = convert_key_to_led[MATRIX_COLS * r + c];
+ // uint8_t keylocation2 = convert_key_to_led2[MATRIX_COLS * r + c];
+ uint8_t keylocation = pgm_read_byte(&convert_key_to_led[MATRIX_COLS * r + c]);
+ uint8_t keylocation2 = pgm_read_byte(&convert_key_to_led2[MATRIX_COLS * r + c]);
+#endif // RGBLIGHT_ENABLE
+
+ uint8_t chord = keycode - MY_CHORD_MIN;
+
+ switch (keycode) {
+ case VERSION: // Output firmware info.
+ if (record->event.pressed) {
+ SEND_STRING(QMK_KEYBOARD ":" QMK_KEYMAP " @ " QMK_VERSION " | " QMK_BUILDDATE);
+ }
+ break;
+
+ // set default layer and save it to EEPROM when MIDI key layers are selected.
+ case CSYSTEM:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_C_SYSTEM_BASE);
+ }
+ break;
+
+ case BSYSTEM:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_FAKE_B_SYSTEM);
+ }
+ break;
+
+ case CNTBASC:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_C_SYSTEM_BASS2ROW);
+ }
+ break;
+
+ case CSYSALL:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_C_SYSTEM_ENTIRELY);
+ }
+ break;
+
+ case CHRTONE:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_CHROMATONE);
+ }
+ break;
+
+ case CFLIP2B:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_CFLIP_BASS2ROW);
+ }
+ break;
+
+ case TGLBASS:
+ if (record->event.pressed) {
+ toggle_isSingleBass();
+ };
+ break;
+
+ case TGLMICH:
+ if (record->event.pressed) {
+ toggle_MIDI_channel_separation();
+ };
+ break;
+
+ case MELDYAL:
+ if (record->event.pressed) {
+ melody_dyad_low = true;
+ melody_dyad_high = false;
+ };
+ break;
+
+ case MELODYS:
+ if (record->event.pressed) {
+ melody_dyad_low = false;
+ melody_dyad_high = false;
+ };
+ break;
+
+ case MELDYAH:
+ if (record->event.pressed) {
+ melody_dyad_low = false;
+ melody_dyad_high = true;
+ };
+ break;
+
+ case TGLUVEL:
+ if (record->event.pressed) {
+ melody_unison_suppress = !melody_unison_suppress;
+ };
+ break;
+
+ // MIDI Chord Keycodes, on the left side.
+ case MI_CH_Cr ... MI_CH_Br: // Root Notes
+ root_note = keycode - MI_CH_Cr + MI_C_1;
+ my_process_midi4Bass(midi_bass_ch, record, chord_status, chord, root_note, IS_SINGLE_BASS());
+#ifdef RGBLIGHT_ENABLE
+ switch_keylight_color4bass(record, keylocation);
+#endif
+ break;
+
+ case MI_CH_C ... MI_CH_B: // Major Chords
+ root_note = keycode - MI_CH_C + MI_C_2;
+ // Root, Major Third, and Fifth Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 4, 7);
+#ifdef RGBLIGHT_ENABLE
+ switch_keylight_color4chords(record, keylocation);
+#endif
+ break;
+
+ case MI_CH_Cm ... MI_CH_Bm: // Minor Chord
+ root_note = keycode - MI_CH_Cm + MI_C_2;
+ // Root, Minor Third, and Fifth Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 3, 7);
+#ifdef RGBLIGHT_ENABLE
+ switch_keylight_color4chords(record, keylocation);
+#endif
+ break;
+
+ case MI_CH_CDom7 ... MI_CH_BDom7: // Dominant 7th Chord
+ root_note = keycode - MI_CH_CDom7 + MI_C_2;
+ // Major Third, Major Fifth, and Minor Seventh Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 4, 7, 10);
+#ifdef RGBLIGHT_ENABLE
+ switch_keylight_color4chords(record, keylocation);
+#endif
+ break;
+
+ case MI_CH_CDim7 ... MI_CH_BDim7: // Diminished 7th Chord
+ root_note = keycode - MI_CH_CDim7 + MI_C_2;
+ // Root, Minor Third, and Diminished 5th Note
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 3, 6);
+#ifdef RGBLIGHT_ENABLE
+ switch_keylight_color4chords(record, keylocation);
+#endif
+ break;
+
+#ifdef RGBLIGHT_ENABLE
+ case KC_A ... KC_RGUI: // for QWERTY
+ case KC_GESC:
+ case ADJ_EIS:
+ case MO_ADJ:
+ case SHIF_UP:
+ keylight_manager(record, HSV_RED, keylocation);
+ break;
+#endif
+
+ // Keycodes on the right side.
+ case MIDI_TONE_MIN ... MIDI_TONE_MAX: // notes on the right side keyboard.
+ // root_note is played by process_midi().
+ if ( melody_dyad_high == true ) { // play 1 octave higher as well.
+ my_process_midi(0, keycode, record, my_tone_status, 12, melody_unison_suppress);
+#ifdef RGBLIGHT_ENABLE
+ keylight_manager(record, HSV_RED, keylocation);
+ keylight_manager(record, HSV_RED, keylocation2);
+#endif
+ } else if ( melody_dyad_low == true ) { // play 1 octave lower as well.
+ my_process_midi(0, keycode, record, my_tone_status, -12, melody_unison_suppress);
+#ifdef RGBLIGHT_ENABLE
+ keylight_manager(record, HSV_CYAN, keylocation);
+ keylight_manager(record, HSV_CYAN, keylocation2);
+#endif
+ } else {
+ uprintf("layer=%u, default_layer_state = %u\n", biton32(default_layer_state), default_layer_state);
+#ifdef RGBLIGHT_ENABLE
+ keylight_manager(record, HSV_GOLDENROD, keylocation);
+ keylight_manager(record, HSV_GOLDENROD, keylocation2);
+#endif
+ }
+ break;
+
+#ifdef RGBLIGHT_ENABLE
+ // case KC_MUTE:
+ case FN_MUTE:
+ keylight_manager(record, HSV_GOLDENROD, keylocation);
+ break;
+#endif
+ }
+ // If console is enabled, it will print the matrix position and status of each key pressed
+#if defined(CONSOLE_ENABLE) && defined(RGBLIGHT_ENABLE)
+ uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
+ uprintf("r=%d, c=%d, keyloc=%d, keyloc2=%d, matrix_col x r + c = %d\n", r, c, keylocation, keylocation2, MATRIX_COLS * r + c);
+#endif
+ return true;
+}
diff --git a/keyboards/giabalanai/keymaps/2firmware/readme.md b/keyboards/giabalanai/keymaps/2firmware/readme.md
new file mode 100644
index 00000000000..e851c97af8c
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/2firmware/readme.md
@@ -0,0 +1,12 @@
+# A personal keymap for giabalanai with RGBLIGHT_ENABLE = yes in rules.mk, which 3araht is using.
+"2firmware" requires writing the firmware separately to left and right keyboards in order to have different functionality when USB cable is connected to the left side keyboard. It can be used without the right side.
+(EE_HANDS is defined in 2firmware/config.h).
+
+When USB cable is connected to the left side keyboard, QWERTY layout is used by default.
+
+
+Use below for writing the firmware to the left side keyboard.
+> make giabalanai:2firmware:avrdude-split-left
+
+Use below for writing the firmware to the right side keyboard.
+> make giabalanai:2firmware:avrdude-split-right
diff --git a/keyboards/giabalanai/keymaps/2firmware/rules.mk b/keyboards/giabalanai/keymaps/2firmware/rules.mk
new file mode 100644
index 00000000000..2ecc5f55c19
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/2firmware/rules.mk
@@ -0,0 +1,4 @@
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+CONSOLE_ENABLE = no # Console for debug
+
+ENCODER_MAP_ENABLE = yes # replacing ENCODERS_CW_KEY method to this on 2022/08/31.
diff --git a/keyboards/giabalanai/keymaps/3araht/keymap.c b/keyboards/giabalanai/keymaps/3araht/keymap.c
new file mode 100644
index 00000000000..418b6e0ceb0
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/3araht/keymap.c
@@ -0,0 +1,754 @@
+/* Copyright 2020 3araht
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+#include "print.h"
+#include "version.h"
+
+// Alias layout macros that expand groups of keys.
+#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
+
+#define DF_QWER DF(_QWERTY)
+#define DF_COLE DF(_COLEMAK)
+#define MO_ADJ MO(_ADJUST)
+// Long press: go to _FN layer, tap: MUTE
+#define FN_MUTE LT(_FN, KC_MUTE)
+#define SHIF_UP RSFT_T(KC_UP)
+#define ADJ_EIS LT(_ADJUST,KC_LANG2)
+#define MIS_KAN LT(_MISC,KC_LANG1)
+
+// Used to set octave to MI_OCT_0
+extern midi_config_t midi_config;
+uint8_t midi_bass_ch = 0, midi_chord_ch = 0; // By default, all use the same channel.
+
+// UNISON flags
+static bool melody_dyad_high = false; // true when +1 octave unison dyad is enabled.
+static bool melody_dyad_low = false; // true when -1 octave unison dyad is enabled.
+
+static bool melody_unison_suppress = true; // true: velocity of octave unison note is suppressd to UNISON_VELOCITY_RATIO
+
+// To record the status of Bass Chord (single or dyad, default: dyad.)
+typedef union {
+ uint32_t raw;
+ struct {
+ bool isSingleBass:1;
+ };
+} user_config_t;
+user_config_t user_config;
+
+#define IS_SINGLE_BASS() (user_config.isSingleBass)
+
+#ifdef RGBLIGHT_ENABLE
+/* used to specify there is no LED on the keylocation. */
+# define NO_LED 255
+#endif // RGBLIGHT_ENABLE
+
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _C_SYSTEM_BASE, // MIDI C-system
+ _FAKE_B_SYSTEM, // MIDI fake B-system doesn't have correct assignments on top two rows. The bottom 3 rows are B-system.
+ _C_SYSTEM_BASS2ROW, // counter bass system
+ _C_SYSTEM_ENTIRELY, // single notes for both left and right keybaords.
+ _C_SYSTEM_FREEBASS, // C-system Free Bass
+ _CHROMATONE,
+ _CFLIP_BASS2ROW, // 180 degree flipped layout on right side keyboard
+ _QWERTY,
+ _COLEMAK,
+ _ADJUST, // for Fn keys, etc.
+ _FN // for changing layers, octaves, etc.
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+
+ // MIDI Chord Keycodes - Root notes
+ MY_CHORD_MIN = SAFE_RANGE,
+
+ MI_CH_Cr = MY_CHORD_MIN,
+ MI_CH_Csr,
+ MI_CH_Dbr = MI_CH_Csr,
+ MI_CH_Dr,
+ MI_CH_Dsr,
+ MI_CH_Ebr = MI_CH_Dsr,
+ MI_CH_Er,
+ MI_CH_Fr,
+ MI_CH_Fsr,
+ MI_CH_Gbr = MI_CH_Fsr,
+ MI_CH_Gr,
+ MI_CH_Gsr,
+ MI_CH_Abr = MI_CH_Gsr,
+ MI_CH_Ar,
+ MI_CH_Asr,
+ MI_CH_Bbr = MI_CH_Asr,
+ MI_CH_Br,
+
+ // MIDI Chord Keycodes - Major
+
+ MI_CH_C,
+ MI_CH_Cs,
+ MI_CH_Db = MI_CH_Cs,
+ MI_CH_D,
+ MI_CH_Ds,
+ MI_CH_Eb = MI_CH_Ds,
+ MI_CH_E,
+ MI_CH_F,
+ MI_CH_Fs,
+ MI_CH_Gb = MI_CH_Fs,
+ MI_CH_G,
+ MI_CH_Gs,
+ MI_CH_Ab = MI_CH_Gs,
+ MI_CH_A,
+ MI_CH_As,
+ MI_CH_Bb = MI_CH_As,
+ MI_CH_B,
+
+ // MIDI Chord Keycodes Minor
+
+ MI_CH_Cm,
+ MI_CH_Csm,
+ MI_CH_Dbm = MI_CH_Csm,
+ MI_CH_Dm,
+ MI_CH_Dsm,
+ MI_CH_Ebm = MI_CH_Dsm,
+ MI_CH_Em,
+ MI_CH_Fm,
+ MI_CH_Fsm,
+ MI_CH_Gbm = MI_CH_Fsm,
+ MI_CH_Gm,
+ MI_CH_Gsm,
+ MI_CH_Abm = MI_CH_Gsm,
+ MI_CH_Am,
+ MI_CH_Asm,
+ MI_CH_Bbm = MI_CH_Asm,
+ MI_CH_Bm,
+
+ //MIDI Chord Keycodes Dominant Seventh
+
+ MI_CH_CDom7,
+ MI_CH_CsDom7,
+ MI_CH_DbDom7 = MI_CH_CsDom7,
+ MI_CH_DDom7,
+ MI_CH_DsDom7,
+ MI_CH_EbDom7 = MI_CH_DsDom7,
+ MI_CH_EDom7,
+ MI_CH_FDom7,
+ MI_CH_FsDom7,
+ MI_CH_GbDom7 = MI_CH_FsDom7,
+ MI_CH_GDom7,
+ MI_CH_GsDom7,
+ MI_CH_AbDom7 = MI_CH_GsDom7,
+ MI_CH_ADom7,
+ MI_CH_AsDom7,
+ MI_CH_BbDom7 = MI_CH_AsDom7,
+ MI_CH_BDom7,
+
+ // MIDI Chord Keycodes Diminished Seventh
+
+ MI_CH_CDim7,
+ MI_CH_CsDim7,
+ MI_CH_DbDim7 = MI_CH_CsDim7,
+ MI_CH_DDim7,
+ MI_CH_DsDim7,
+ MI_CH_EbDim7 = MI_CH_DsDim7,
+ MI_CH_EDim7,
+ MI_CH_FDim7,
+ MI_CH_FsDim7,
+ MI_CH_GbDim7 = MI_CH_FsDim7,
+ MI_CH_GDim7,
+ MI_CH_GsDim7,
+ MI_CH_AbDim7 = MI_CH_GsDim7,
+ MI_CH_ADim7,
+ MI_CH_AsDim7,
+ MI_CH_BbDim7 = MI_CH_AsDim7,
+ MI_CH_BDim7,
+
+ MY_CHORD_MAX = MI_CH_BDim7,
+
+ VERSION,
+ CSYSTEM, // C-SYSTEM layout
+ BSYSTEM, // B-SYSTEM layout
+ CNTBASC, // CouNTer BASs C-system layout
+ CSYSALL, // C-SYStem ALL layout
+ CSYSFBS, // C-SYStem Free BaSs
+ CHRTONE, // CHRomaTONE layout
+ CFLIP2B, // C-system FLIPped 2(to) Backwards
+ TGLBASS, // ToGgLe BASS unison
+ TGLMICH, // ToGgLe MIdi CHannel separation
+ MELDYAL, // MELody DYad Low
+ MELODYS, // MELODY Single
+ MELDYAH, // MELody DYad High
+ TGLUVEL // ToGgLe Unison VELocity
+};
+
+#define MY_CHORD_COUNT (MY_CHORD_MAX - MY_CHORD_MIN + 1)
+static uint8_t chord_status[MY_CHORD_COUNT];
+static uint8_t my_tone_status[MIDI_TONE_COUNT];
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* C-system Base */
+ [_C_SYSTEM_BASE] = LAYOUT(
+ MI_CH_Dbr, MI_CH_Abr, MI_CH_Ebr, MI_CH_Bbr, MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr,
+ MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Fs,
+ MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm,
+ MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, MI_CH_FDom7, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_FsDom7,
+ MI_CH_DbDim7, MI_CH_AbDim7, MI_CH_EbDim7, MI_CH_BbDim7, MI_CH_FDim7, MI_CH_CDim7, MI_CH_GDim7, MI_CH_DDim7, MI_CH_ADim7, MI_CH_EDim7, MI_CH_BDim7, MI_CH_FsDim7,
+
+ MI_Fs_2,
+ MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5, MI_F_5, FN_MUTE,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5, MI_G_5,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5, MI_Fs_5
+ ),
+
+ /* fake B-system */
+ [_FAKE_B_SYSTEM] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+
+ MI_Ab_2,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Gb_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Gb_4, MI_A_4, MI_C_5, MI_Eb_5, MI_Gb_5, _______,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5, MI_G_5,
+ MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5, MI_F_5
+ ),
+
+ /* BASS2row */
+ [_C_SYSTEM_BASS2ROW] = LAYOUT(
+ MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr, MI_CH_Csr, MI_CH_Gsr, MI_CH_Dsr, MI_CH_Asr,
+ MI_CH_Dbr, MI_CH_Abr, MI_CH_Ebr, MI_CH_Bbr, MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr,
+ MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Fs,
+ MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm,
+ MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, MI_CH_FDom7, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_FsDom7,
+
+ MI_Fs_2,
+ MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5, MI_F_5, _______,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5, MI_G_5,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5, MI_Fs_5
+ ),
+
+ /* C-system entirely */
+ [_C_SYSTEM_ENTIRELY] = LAYOUT(
+ MI_BENDU, XXXXXXX, XXXXXXX, MI_Db, MI_E, MI_G, MI_Bb, MI_Db_1, MI_E_1, MI_G_1, MI_Bb_1, MI_Db_2,
+ MI_BENDD, XXXXXXX, MI_C, MI_Eb, MI_Fs, MI_A, MI_C_1, MI_Eb_1, MI_Fs_1, MI_A_1, MI_C_2, MI_Eb_2,
+ XXXXXXX, XXXXXXX, MI_D, MI_F, MI_Ab, MI_B, MI_D_1, MI_F_1, MI_Ab_1, MI_B_1, MI_D_2, MI_F_2,
+ XXXXXXX, MI_Db, MI_E, MI_G, MI_Bb, MI_Db_1, MI_E_1, MI_G_1, MI_Bb_1, MI_Db_2, MI_E_2, MI_G_2,
+ MI_C, MI_Eb, MI_Fs, MI_A, MI_C_1, MI_Eb_1, MI_Fs_1, MI_A_1, MI_C_2, MI_Eb_2, MI_Fs_2, MI_A_2,
+
+ MI_Fs_2,
+ MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5, MI_F_5, FN_MUTE,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5, MI_G_5,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5, MI_Fs_5
+ ),
+
+ /* C-system free bass */
+ [_C_SYSTEM_FREEBASS] = LAYOUT(
+ MI_Db_3, MI_Bb_2, MI_G_2, MI_E_2, MI_Db_2, MI_Bb_1, MI_G_1, MI_E_1, MI_Db_1, MI_Bb, MI_G, MI_E,
+ MI_C_3, MI_A_2, MI_Fs_2, MI_Eb_2, MI_C_2, MI_A_1, MI_Fs_1, MI_Eb_1, MI_C_1, MI_A, MI_Fs, MI_Eb,
+ MI_B_2, MI_Ab_2, MI_F_2, MI_D_2, MI_B_1, MI_Ab_1, MI_F_1, MI_D_1, MI_B, MI_Ab, MI_F, MI_D,
+ MI_Bb_2, MI_G_2, MI_E_2, MI_Db_2, MI_Bb_1, MI_G_1, MI_E_1, MI_Db_1, MI_Bb, MI_G, MI_E, MI_Db,
+ MI_A_2, MI_Fs_2, MI_Eb_2, MI_C_2, MI_A_1, MI_Fs_1, MI_Eb_1, MI_C_1, MI_A, MI_Fs, MI_Eb, MI_C,
+
+ MI_Fs_2,
+ MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5, MI_F_5, FN_MUTE,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5, MI_G_5,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5, MI_Fs_5
+ ),
+
+ /* Chromatone */
+ [_CHROMATONE] = LAYOUT(
+ MI_Db, MI_Eb, MI_F, MI_G, MI_A, MI_B, MI_Db_1, MI_Eb_1, MI_F_1, MI_G_1, MI_A_1, MI_B_1,
+ MI_D, MI_E, MI_Fs, MI_Ab, MI_Bb, MI_C_1, MI_D_1, MI_E_1, MI_Fs_1, MI_Ab_1, MI_Bb_1, MI_C_2,
+ MI_Eb, MI_F, MI_G, MI_A, MI_B, MI_Db_1, MI_Eb_1, MI_F_1, MI_G_1, MI_A_1, MI_B_1, MI_Db_2,
+ MI_E, MI_Fs, MI_Ab, MI_Bb, MI_C_1, MI_D_1, MI_E_1, MI_Fs_1, MI_Ab_1, MI_Bb_1, MI_C_2, MI_D_2,
+ MI_F, MI_G, MI_A, MI_B, MI_Db_1, MI_Eb_1, MI_F_1, MI_G_1, MI_A_1, MI_B_1, MI_Db_2, MI_Eb_2,
+
+ MI_C_2,
+ MI_Db_2, MI_Eb_2, MI_F_2, MI_G_2, MI_A_2, MI_B_2, MI_Db_3, MI_Eb_3, MI_F_3, MI_G_3, MI_A_3, MI_B_3, FN_MUTE,
+ MI_C_2, MI_D_2, MI_E_2, MI_Gb_2, MI_Ab_2, MI_Bb_2, MI_C_3, MI_D_3, MI_E_3, MI_Gb_3, MI_Ab_3, MI_Bb_3, MI_C_4,
+ MI_Db_2, MI_Eb_2, MI_F_2, MI_G_2, MI_A_2, MI_B_2, MI_Db_3, MI_Eb_3, MI_F_3, MI_G_3, MI_A_3, MI_B_3
+ ),
+
+ [_CFLIP_BASS2ROW] = LAYOUT(
+ MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr, MI_CH_Csr, MI_CH_Gsr, MI_CH_Dsr, MI_CH_Asr,
+ MI_CH_Dbr, MI_CH_Abr, MI_CH_Ebr, MI_CH_Bbr, MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr,
+ MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Fs,
+ MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm,
+ MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, MI_CH_FDom7, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_FsDom7,
+
+ MI_G_5,
+ MI_F_5, MI_D_5, MI_B_4, MI_Ab_4, MI_F_4, MI_D_4, MI_B_3, MI_Ab_3, MI_F_3, MI_D_3, MI_B_2, MI_Ab_2, FN_MUTE,
+ MI_Fs_5, MI_Eb_5, MI_C_5, MI_A_4, MI_Fs_4, MI_Eb_4, MI_C_4, MI_A_3, MI_Fs_3, MI_Eb_3, MI_C_3, MI_A_2, MI_Fs_2,
+ MI_E_5, MI_Db_5, MI_Bb_4, MI_G_4, MI_E_4, MI_Db_4, MI_Bb_3, MI_G_3, MI_E_3, MI_Db_3, MI_Bb_2, MI_G_2
+ ),
+
+ /* QWERTY */
+ [_QWERTY] = LAYOUT_wrapper(
+ KC_GESC, _________________NUMBER_L__________________, _________________NUMBER_R__________________, KC_BSPC,
+ KC_TAB, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_DEL,
+ KC_CAPS, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_ENT,
+ KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, ADJ_EIS, KC_SPC, KC_SPC, KC_LANG1, KC_APP, MO_ADJ, KC_LEFT, KC_DOWN, KC_RGHT,
+
+ _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ /* COLEMAK */
+ [_COLEMAK] = LAYOUT_wrapper(
+ KC_GESC, _________________NUMBER_L__________________, _________________NUMBER_R__________________, KC_BSPC,
+ KC_TAB, _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, KC_DEL,
+ KC_LCTL, _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, KC_ENT,
+ KC_LSFT, _________________COLEMAK_L3________________, _________________COLEMAK_R3________________, SHIF_UP,
+ KC_CAPS, KC_LGUI, KC_LALT, ADJ_EIS, KC_SPC, KC_SPC, KC_LANG1, KC_APP, MO_ADJ, KC_LEFT, KC_DOWN, KC_RGHT,
+
+ _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ /* ADJUST */
+ [_ADJUST] = LAYOUT_wrapper(
+ _______, _________________FUNC__L___________________, _________________FUNC__R___________________, _______,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL, _______,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_GRV, _______,
+ _______, KC_BRID, KC_BRIU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LBRC, KC_RBRC, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_QUOT, KC_BSLS, _______,
+
+ _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+
+ /* Fn */
+ [_FN] = LAYOUT(
+ CSYSTEM, BSYSTEM, CNTBASC, CSYSALL, CHRTONE, CFLIP2B, CSYSFBS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG,
+ DF_QWER, TGLBASS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ DF_COLE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TGLMICH,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ XXXXXXX,
+ MI_OCT_N2, MI_OCT_N1, MI_OCT_0, MI_OCT_1, MI_OCT_2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION, EEP_RST, _______,
+ CSYSTEM, BSYSTEM, CNTBASC, CSYSALL, CHRTONE, CFLIP2B, CSYSFBS, XXXXXXX, XXXXXXX, MI_VELD, MI_VELU, XXXXXXX, RGB_TOG,
+ XXXXXXX, TGLBASS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TGLUVEL, MELDYAL, MELODYS, MELDYAH
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_C_SYSTEM_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_FAKE_B_SYSTEM] = { ENCODER_CCW_CW(_______, _______) },
+ [_C_SYSTEM_BASS2ROW] = { ENCODER_CCW_CW(_______, _______) },
+ [_C_SYSTEM_ENTIRELY] = { ENCODER_CCW_CW(_______, _______) },
+ [_C_SYSTEM_FREEBASS] = { ENCODER_CCW_CW(_______, _______) },
+ [_CHROMATONE] = { ENCODER_CCW_CW(_______, _______) },
+ [_CFLIP_BASS2ROW] = { ENCODER_CCW_CW(_______, _______) },
+ [_QWERTY] = { ENCODER_CCW_CW(_______, _______) },
+ [_COLEMAK] = { ENCODER_CCW_CW(_______, _______) },
+ [_ADJUST] = { ENCODER_CCW_CW(_______, _______) },
+ [_FN] = { ENCODER_CCW_CW(_______, _______) },
+};
+#endif
+
+#ifdef RGBLIGHT_ENABLE
+
+// Light up adjust layer keys (left keyboard)
+const rgblight_segment_t PROGMEM my_adjust_layer[] = RGBLIGHT_LAYER_SEGMENTS({1, 10, HSV_ORANGE},
+ {21, 2, HSV_ORANGE},
+ {25, 3, HSV_ORANGE},
+ {30, 5, HSV_ORANGE},
+ {37, 2, HSV_ORANGE},
+ {45, 2, HSV_ORANGE},
+ {57, 2, HSV_ORANGE}
+);
+
+// Light up fn layer keys
+const rgblight_segment_t PROGMEM my_fn_layer[] = RGBLIGHT_LAYER_SEGMENTS( // left keyboard
+ {0, 7, HSV_ORANGE}, // MIDI layouts
+ {11, 1, HSV_RED}, // RGB_TOG
+ {12, 1, HSV_WHITE}, // DF_QWER
+ {13, 1, HSV_CORAL}, // TGLBASS
+ {24, 1, HSV_WHITE}, // DF_COLE
+ {35, 1, HSV_TEAL}, // TGLMICH
+#if 0 // Color Test
+ {36, 1, HSV_WHITE},
+ {37, 1, HSV_RED},
+ {38, 1, HSV_CORAL},
+ {39, 1, HSV_ORANGE},
+ {40, 1, HSV_GOLDENROD},
+ {41, 1, HSV_GOLD},
+ {42, 1, HSV_YELLOW},
+ {43, 1, HSV_CHARTREUSE},
+ {44, 1, HSV_GREEN},
+ {45, 1, HSV_SPRINGGREEN},
+ {46, 1, HSV_TURQUOISE},
+ {47, 1, HSV_TEAL},
+ {48, 1, HSV_CYAN},
+ {49, 1, HSV_AZURE},
+ {50, 1, HSV_BLUE},
+ {51, 1, HSV_PURPLE},
+ {52, 1, HSV_MAGENTA},
+ {53, 1, HSV_PINK},
+#endif
+ // right keyboard
+ {60, 7, HSV_ORANGE}, // MIDI layouts
+ {74, 1, HSV_CORAL}, // TGLBASS
+ {85, 1, HSV_BLUE}, // MIDI Oct
+ {86, 1, HSV_CYAN}, // MIDI Oct
+ {87, 1, HSV_SPRINGGREEN}, // MIDI Oct
+ {88, 1, HSV_GREEN}, // MIDI Oct
+ {89, 1, HSV_CHARTREUSE}, // MIDI Oct
+ {96, 1, HSV_PINK}, // EEP_RST
+ {98, 7, HSV_ORANGE}, // MIDI layouts
+ {107, 1, HSV_YELLOW}, // MI_VELD
+ {108, 1, HSV_GREEN}, // MI_VELU
+ {110, 1, HSV_RED}, // RGB_TOG
+ {112, 1, HSV_CORAL}, // TGLBASS
+ {119, 1, HSV_CORAL}, // TGLUVEL
+ {120, 1, HSV_CYAN}, // MELDYAL
+ {121, 1, HSV_GOLD}, // MELODYS
+ {122, 1, HSV_SPRINGGREEN} // MELDYAH
+);
+
+// Now define the array of layers. Later layers take precedence
+const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_fn_layer, my_adjust_layer);
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ // Both layers will light up if both kb layers are active
+ rgblight_set_layer_state(0, layer_state_cmp(state, _FN));
+ rgblight_set_layer_state(1, layer_state_cmp(state, _ADJUST));
+ return state;
+};
+
+#endif // RGBLIGHT_ENABLE
+
+void my_init(void){
+ // Set octave to MI_OCT_0
+ midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
+ // avoid using 127 since it is used as a special number in some sound sources.
+ midi_config.velocity = MIDI_INITIAL_VELOCITY;
+}
+
+void eeconfig_init_user(void) {
+ midi_init();
+ my_init();
+
+ // Used to set octave to MI_OCT_0
+ midi_bass_ch = 0, midi_chord_ch = 0; // By default, all use the same channel.
+
+ // UNISON flags
+ melody_dyad_high = false; // true when +1 octave unison dyad is enabled.
+ melody_dyad_low = false; // true when -1 octave unison dyad is enabled.
+ melody_unison_suppress = true; // true: velocity of octave unison note is suppressd to UNISON_VELOCITY_RATIO
+
+ // Reset Bass setting
+ user_config.raw = 0; // default: dyad
+ eeconfig_update_user(user_config.raw);
+
+ // Reset the midi keyboard layout
+ set_single_persistent_default_layer(_C_SYSTEM_BASS2ROW);
+}
+
+void keyboard_post_init_user(void) {
+ my_init();
+
+ for (uint8_t i = 0; i < MY_CHORD_COUNT; i++) {
+ chord_status[i] = MIDI_INVALID_NOTE;
+ }
+
+ for (uint8_t i = 0; i < MIDI_TONE_COUNT; i++) {
+ my_tone_status[i] = MIDI_INVALID_NOTE;
+ }
+ // load EEPROM data for isSingleBass
+ user_config.raw = eeconfig_read_user();
+
+#ifdef RGBLIGHT_ENABLE
+
+ rgblight_layers = my_rgb_layers;
+
+ // Reset LED off
+ rgblight_sethsv(HSV_BLACK);
+# if defined(RGBLIGHT_EFFECT_KNIGHT) || defined(RGBLIGHT_EFFECT_TWINKLE)
+ rgblight_sethsv(30, 50, 40);
+# ifdef RGBLIGHT_EFFECT_KNIGHT
+ rgblight_mode(RGBLIGHT_MODE_KNIGHT);
+# elif defined(RGBLIGHT_EFFECT_TWINKLE)
+ rgblight_mode(RGBLIGHT_MODE_TWINKLE+3);
+# endif
+# endif
+#endif // RGBLIGHT_ENABLE
+};
+
+void toggle_isSingleBass(void) {
+#ifdef CONSOLE_ENABLE
+ uprintf("isSingleBass(before) %u\n", user_config.isSingleBass);
+#endif
+ user_config.isSingleBass = !user_config.isSingleBass;
+#ifdef CONSOLE_ENABLE
+ uprintf("isSingleBass(after) %u\n", user_config.isSingleBass);
+#endif
+
+ eeconfig_update_user(user_config.raw);
+}
+
+void toggle_MIDI_channel_separation(void) {
+ if (midi_chord_ch > 0) {
+ midi_chord_ch = 0;
+ midi_bass_ch = 0;
+ } else {
+ midi_chord_ch = 1;
+ midi_bass_ch = 2;
+ }
+}
+
+#ifdef RGBLIGHT_ENABLE
+void switch_keylight_color4bass(keyrecord_t *record, uint8_t keylocation){
+ switch (biton32(default_layer_state)) {
+ case _C_SYSTEM_BASE:
+ keylight_manager(record, HSV_GREEN, keylocation);
+ break;
+ case _FAKE_B_SYSTEM:
+ keylight_manager(record, HSV_ORANGE, keylocation);
+ break;
+ case _C_SYSTEM_BASS2ROW:
+ keylight_manager(record, HSV_YELLOW, keylocation);
+ break;
+ case _CFLIP_BASS2ROW:
+ keylight_manager(record, HSV_PURPLE, keylocation);
+ break;
+ }
+}
+void switch_keylight_color4chords(keyrecord_t *record, uint8_t keylocation){
+ switch (biton32(default_layer_state)) {
+ case _C_SYSTEM_BASE:
+ keylight_manager(record, HSV_SPRINGGREEN, keylocation);
+ break;
+ case _FAKE_B_SYSTEM:
+ keylight_manager(record, HSV_YELLOW, keylocation);
+ break;
+ case _C_SYSTEM_BASS2ROW:
+ keylight_manager(record, HSV_GOLDENROD, keylocation);
+ break;
+ case _CFLIP_BASS2ROW:
+ keylight_manager(record, HSV_MAGENTA, keylocation);
+ break;
+ }
+}
+#endif // RGBLIGHT_ENABLE
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint16_t root_note = MIDI_INVALID_NOTE; // Starting value for the root note of each chord
+
+#ifdef RGBLIGHT_ENABLE
+ /* prepare for turning on LEDs when keys are pressed. */
+ uint8_t r = record->event.key.row;
+ uint8_t c = record->event.key.col;
+ // uint8_t keylocation = convert_key_to_led[MATRIX_COLS * r + c];
+ // uint8_t keylocation2 = convert_key_to_led2[MATRIX_COLS * r + c];
+ uint8_t keylocation = pgm_read_byte(&convert_key_to_led[MATRIX_COLS * r + c]);
+ uint8_t keylocation2 = pgm_read_byte(&convert_key_to_led2[MATRIX_COLS * r + c]);
+#endif // RGBLIGHT_ENABLE
+
+ uint8_t chord = keycode - MY_CHORD_MIN;
+
+ switch (keycode) {
+ case VERSION: // Output firmware info.
+ if (record->event.pressed) {
+ SEND_STRING(QMK_KEYBOARD ":" QMK_KEYMAP " @ " QMK_VERSION " | " QMK_BUILDDATE);
+ }
+ break;
+
+ // set default layer and save it to EEPROM when MIDI key layers are selected.
+ case CSYSTEM:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_C_SYSTEM_BASE);
+ }
+ break;
+
+ case BSYSTEM:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_FAKE_B_SYSTEM);
+ }
+ break;
+
+ case CNTBASC:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_C_SYSTEM_BASS2ROW);
+ }
+ break;
+
+ case CSYSALL:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_C_SYSTEM_ENTIRELY);
+ }
+ break;
+
+ case CHRTONE:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_CHROMATONE);
+ }
+ break;
+
+ case CFLIP2B:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_CFLIP_BASS2ROW);
+ }
+ break;
+
+ case CSYSFBS:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_C_SYSTEM_FREEBASS);
+ }
+ break;
+
+ case TGLBASS:
+ if (record->event.pressed) {
+ toggle_isSingleBass();
+ };
+ break;
+
+ case TGLMICH:
+ if (record->event.pressed) {
+ toggle_MIDI_channel_separation();
+ };
+ break;
+
+ case MELDYAL:
+ if (record->event.pressed) {
+ melody_dyad_low = true;
+ melody_dyad_high = false;
+ };
+ break;
+
+ case MELODYS:
+ if (record->event.pressed) {
+ melody_dyad_low = false;
+ melody_dyad_high = false;
+ };
+ break;
+
+ case MELDYAH:
+ if (record->event.pressed) {
+ melody_dyad_low = false;
+ melody_dyad_high = true;
+ };
+ break;
+
+ case TGLUVEL:
+ if (record->event.pressed) {
+ melody_unison_suppress = !melody_unison_suppress;
+ };
+ break;
+
+ // MIDI Chord Keycodes, on the left side.
+ case MI_CH_Cr ... MI_CH_Br: // Root Notes
+ root_note = keycode - MI_CH_Cr + MI_C_1;
+ my_process_midi4Bass(midi_bass_ch, record, chord_status, chord, root_note, IS_SINGLE_BASS());
+#ifdef RGBLIGHT_ENABLE
+ switch_keylight_color4bass(record, keylocation);
+#endif
+ break;
+
+ case MI_CH_C ... MI_CH_B: // Major Chords
+ root_note = keycode - MI_CH_C + MI_C_2;
+ // Root, Major Third, and Fifth Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 4, 7);
+#ifdef RGBLIGHT_ENABLE
+ switch_keylight_color4chords(record, keylocation);
+#endif
+ break;
+
+ case MI_CH_Cm ... MI_CH_Bm: // Minor Chord
+ root_note = keycode - MI_CH_Cm + MI_C_2;
+ // Root, Minor Third, and Fifth Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 3, 7);
+#ifdef RGBLIGHT_ENABLE
+ switch_keylight_color4chords(record, keylocation);
+#endif
+ break;
+
+ case MI_CH_CDom7 ... MI_CH_BDom7: // Dominant 7th Chord
+ root_note = keycode - MI_CH_CDom7 + MI_C_2;
+ // Major Third, Major Fifth, and Minor Seventh Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 4, 7, 10);
+#ifdef RGBLIGHT_ENABLE
+ switch_keylight_color4chords(record, keylocation);
+#endif
+ break;
+
+ case MI_CH_CDim7 ... MI_CH_BDim7: // Diminished 7th Chord
+ root_note = keycode - MI_CH_CDim7 + MI_C_2;
+ // Root, Minor Third, and Diminished 5th Note
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 3, 6);
+#ifdef RGBLIGHT_ENABLE
+ switch_keylight_color4chords(record, keylocation);
+#endif
+ break;
+
+#ifdef RGBLIGHT_ENABLE
+ case KC_A ... KC_RGUI: // for QWERTY
+ case KC_GESC:
+ case ADJ_EIS:
+ case MO_ADJ:
+ case SHIF_UP:
+ keylight_manager(record, HSV_RED, keylocation);
+ break;
+#endif
+
+ // Keycodes on the right side.
+ case MIDI_TONE_MIN ... MIDI_TONE_MAX: // notes on the right side keyboard.
+ // root_note is played by process_midi().
+ if ( melody_dyad_high == true ) { // play 1 octave higher as well.
+ my_process_midi(0, keycode, record, my_tone_status, 12, melody_unison_suppress);
+#ifdef RGBLIGHT_ENABLE
+ keylight_manager(record, HSV_RED, keylocation);
+ keylight_manager(record, HSV_RED, keylocation2);
+#endif
+ } else if ( melody_dyad_low == true ) { // play 1 octave lower as well.
+ my_process_midi(0, keycode, record, my_tone_status, -12, melody_unison_suppress);
+#ifdef RGBLIGHT_ENABLE
+ keylight_manager(record, HSV_CYAN, keylocation);
+ keylight_manager(record, HSV_CYAN, keylocation2);
+#endif
+ } else {
+ uprintf("layer=%u, default_layer_state = %u\n", biton32(default_layer_state), default_layer_state);
+#ifdef RGBLIGHT_ENABLE
+ keylight_manager(record, HSV_GOLDENROD, keylocation);
+ keylight_manager(record, HSV_GOLDENROD, keylocation2);
+#endif
+ }
+ break;
+
+#ifdef RGBLIGHT_ENABLE
+ // case KC_MUTE:
+ case FN_MUTE:
+ keylight_manager(record, HSV_GOLDENROD, keylocation);
+ break;
+#endif
+ }
+ // If console is enabled, it will print the matrix position and status of each key pressed
+#if defined(CONSOLE_ENABLE) && defined(RGBLIGHT_ENABLE)
+ uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
+ uprintf("r=%d, c=%d, keyloc=%d, keyloc2=%d, matrix_col x r + c = %d\n", r, c, keylocation, keylocation2, MATRIX_COLS * r + c);
+#endif
+ return true;
+}
diff --git a/keyboards/giabalanai/keymaps/3araht/readme.md b/keyboards/giabalanai/keymaps/3araht/readme.md
new file mode 100644
index 00000000000..a731456db61
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/3araht/readme.md
@@ -0,0 +1 @@
+# A personal keymap for giabalanai with RGBLIGHT_ENABLE = yes in rules.mk, which 3araht is using.
diff --git a/keyboards/giabalanai/keymaps/3araht/rules.mk b/keyboards/giabalanai/keymaps/3araht/rules.mk
new file mode 100644
index 00000000000..2ecc5f55c19
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/3araht/rules.mk
@@ -0,0 +1,4 @@
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+CONSOLE_ENABLE = no # Console for debug
+
+ENCODER_MAP_ENABLE = yes # replacing ENCODERS_CW_KEY method to this on 2022/08/31.
diff --git a/keyboards/giabalanai/keymaps/default/keymap.c b/keyboards/giabalanai/keymaps/default/keymap.c
new file mode 100644
index 00000000000..7b5f524a4fe
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/default/keymap.c
@@ -0,0 +1,259 @@
+/* Copyright 2020 3araht
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+#include "version.h"
+
+// Alias layout macros that expand groups of keys.
+#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
+
+#define DFCBASE DF(_C_SYSTEM_BASE)
+#define DF_QWER DF(_QWERTY)
+// Long press: go to _FN layer, tap: MUTE
+#define FN_MUTE LT(_FN, KC_MUTE)
+
+// Used to set octave to MI_OCT_0
+extern midi_config_t midi_config;
+uint8_t midi_bass_ch = 0, midi_chord_ch = 0; // By default, all use the same channel.
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _C_SYSTEM_BASE, // MIDI C-system
+ _QWERTY, // just in case
+ _FN
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+
+ // MIDI Chord Keycodes - Root notes
+ MY_CHORD_MIN = SAFE_RANGE,
+
+ MI_CH_Cr = MY_CHORD_MIN,
+ MI_CH_Csr,
+ MI_CH_Dbr = MI_CH_Csr,
+ MI_CH_Dr,
+ MI_CH_Dsr,
+ MI_CH_Ebr = MI_CH_Dsr,
+ MI_CH_Er,
+ MI_CH_Fr,
+ MI_CH_Fsr,
+ MI_CH_Gbr = MI_CH_Fsr,
+ MI_CH_Gr,
+ MI_CH_Gsr,
+ MI_CH_Abr = MI_CH_Gsr,
+ MI_CH_Ar,
+ MI_CH_Asr,
+ MI_CH_Bbr = MI_CH_Asr,
+ MI_CH_Br,
+
+ // MIDI Chord Keycodes - Major
+
+ MI_CH_C,
+ MI_CH_Cs,
+ MI_CH_Db = MI_CH_Cs,
+ MI_CH_D,
+ MI_CH_Ds,
+ MI_CH_Eb = MI_CH_Ds,
+ MI_CH_E,
+ MI_CH_F,
+ MI_CH_Fs,
+ MI_CH_Gb = MI_CH_Fs,
+ MI_CH_G,
+ MI_CH_Gs,
+ MI_CH_Ab = MI_CH_Gs,
+ MI_CH_A,
+ MI_CH_As,
+ MI_CH_Bb = MI_CH_As,
+ MI_CH_B,
+
+ // MIDI Chord Keycodes Minor
+
+ MI_CH_Cm,
+ MI_CH_Csm,
+ MI_CH_Dbm = MI_CH_Csm,
+ MI_CH_Dm,
+ MI_CH_Dsm,
+ MI_CH_Ebm = MI_CH_Dsm,
+ MI_CH_Em,
+ MI_CH_Fm,
+ MI_CH_Fsm,
+ MI_CH_Gbm = MI_CH_Fsm,
+ MI_CH_Gm,
+ MI_CH_Gsm,
+ MI_CH_Abm = MI_CH_Gsm,
+ MI_CH_Am,
+ MI_CH_Asm,
+ MI_CH_Bbm = MI_CH_Asm,
+ MI_CH_Bm,
+
+ //MIDI Chord Keycodes Dominant Seventh
+
+ MI_CH_CDom7,
+ MI_CH_CsDom7,
+ MI_CH_DbDom7 = MI_CH_CsDom7,
+ MI_CH_DDom7,
+ MI_CH_DsDom7,
+ MI_CH_EbDom7 = MI_CH_DsDom7,
+ MI_CH_EDom7,
+ MI_CH_FDom7,
+ MI_CH_FsDom7,
+ MI_CH_GbDom7 = MI_CH_FsDom7,
+ MI_CH_GDom7,
+ MI_CH_GsDom7,
+ MI_CH_AbDom7 = MI_CH_GsDom7,
+ MI_CH_ADom7,
+ MI_CH_AsDom7,
+ MI_CH_BbDom7 = MI_CH_AsDom7,
+ MI_CH_BDom7,
+
+ // MIDI Chord Keycodes Diminished Seventh
+
+ MI_CH_CDim7,
+ MI_CH_CsDim7,
+ MI_CH_DbDim7 = MI_CH_CsDim7,
+ MI_CH_DDim7,
+ MI_CH_DsDim7,
+ MI_CH_EbDim7 = MI_CH_DsDim7,
+ MI_CH_EDim7,
+ MI_CH_FDim7,
+ MI_CH_FsDim7,
+ MI_CH_GbDim7 = MI_CH_FsDim7,
+ MI_CH_GDim7,
+ MI_CH_GsDim7,
+ MI_CH_AbDim7 = MI_CH_GsDim7,
+ MI_CH_ADim7,
+ MI_CH_AsDim7,
+ MI_CH_BbDim7 = MI_CH_AsDim7,
+ MI_CH_BDim7,
+
+ MY_CHORD_MAX = MI_CH_BDim7,
+
+ VERSION
+};
+
+#define MY_CHORD_COUNT (MY_CHORD_MAX - MY_CHORD_MIN + 1)
+static uint8_t chord_status[MY_CHORD_COUNT];
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* C-system Base */
+ [_C_SYSTEM_BASE] = LAYOUT(
+ MI_CH_Dbr, MI_CH_Abr, MI_CH_Ebr, MI_CH_Bbr, MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr,
+ MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Fs,
+ MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm,
+ MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, MI_CH_FDom7, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_FsDom7,
+ MI_CH_DbDim7, MI_CH_AbDim7, MI_CH_EbDim7, MI_CH_BbDim7, MI_CH_FDim7, MI_CH_CDim7, MI_CH_GDim7, MI_CH_DDim7, MI_CH_ADim7, MI_CH_EDim7, MI_CH_BDim7, MI_CH_FsDim7,
+
+ MI_Fs_2,
+ MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5, MI_F_5, FN_MUTE,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5, MI_G_5,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5, MI_Fs_5
+ ),
+
+ /* QWERTY */
+ [_QWERTY] = LAYOUT_wrapper(
+ KC_GESC, _________________NUMBER_L__________________, _________________NUMBER_R__________________, KC_BSPC,
+ KC_TAB, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_DEL,
+ KC_CAPS, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_ENT,
+ KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LANG2, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_LANG1, KC_RALT, KC_RGUI, KC_RCTRL,
+
+ _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ /* Fn */
+ [_FN] = LAYOUT(
+ DFCBASE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ DF_QWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION, XXXXXXX, _______,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_C_SYSTEM_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_QWERTY] = { ENCODER_CCW_CW(_______, _______) },
+ [_FN] = { ENCODER_CCW_CW(_______, _______) },
+};
+#endif
+
+void keyboard_post_init_user(void) {
+ // Set otave to MI_OCT_0
+ midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
+
+ // avoid using 127 since it is used as a special number in some sound sources.
+ midi_config.velocity = MIDI_INITIAL_VELOCITY;
+
+ for (uint8_t i = 0; i < MY_CHORD_COUNT; i++) {
+ chord_status[i] = MIDI_INVALID_NOTE;
+ }
+
+ default_layer_set(1UL << _C_SYSTEM_BASE);
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint16_t root_note = MIDI_INVALID_NOTE; // Starting value for the root note of each chord
+
+ uint8_t chord = keycode - MY_CHORD_MIN;
+
+ switch (keycode) {
+ case VERSION: // Output firmware info.
+ if (record->event.pressed) {
+ SEND_STRING(QMK_KEYBOARD ":" QMK_KEYMAP " @ " QMK_VERSION " | " QMK_BUILDDATE);
+ }
+ break;
+
+ // MIDI Chord Keycodes, on the left side.
+ case MI_CH_Cr ... MI_CH_Br: // Root Notes
+ root_note = keycode - MI_CH_Cr + MI_C_1;
+ my_process_midi4Bass(midi_bass_ch, record, chord_status, chord, root_note, false);
+ break;
+
+ case MI_CH_C ... MI_CH_B: // Major Chords
+ root_note = keycode - MI_CH_C + MI_C_2;
+ // Root, Major Third, and Fifth Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 4, 7);
+ break;
+
+ case MI_CH_Cm ... MI_CH_Bm: // Minor Chord
+ root_note = keycode - MI_CH_Cm + MI_C_2;
+ // Root, Minor Third, and Fifth Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 3, 7);
+ break;
+
+ case MI_CH_CDom7 ... MI_CH_BDom7: // Dominant 7th Chord
+ root_note = keycode - MI_CH_CDom7 + MI_C_2;
+ // Major Third, Major Fifth, and Minor Seventh Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 4, 7, 10);
+ break;
+
+ case MI_CH_CDim7 ... MI_CH_BDim7: // Diminished 7th Chord
+ root_note = keycode - MI_CH_CDim7 + MI_C_2;
+ // Root, Minor Third, and Diminished 5th Note
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 3, 6);
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/giabalanai/keymaps/default/readme.md b/keyboards/giabalanai/keymaps/default/readme.md
new file mode 100644
index 00000000000..d929aa1f5e5
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for giabalanai
diff --git a/keyboards/giabalanai/keymaps/default/rules.mk b/keyboards/giabalanai/keymaps/default/rules.mk
new file mode 100644
index 00000000000..8006608ea92
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes # replacing ENCODERS_CW_KEY method to this on 2022/08/31.
diff --git a/keyboards/giabalanai/keymaps/default_giabarinaix2/config.h b/keyboards/giabalanai/keymaps/default_giabarinaix2/config.h
new file mode 100644
index 00000000000..684287ba98b
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/default_giabarinaix2/config.h
@@ -0,0 +1,26 @@
+#pragma once
+
+#define GIABARINAIX2
+#ifdef GIABARINAIX2
+# undef MATRIX_ROW_PINS_RIGHT
+# undef MATRIX_COL_PINS_RIGHT
+
+# ifdef RGBLIGHT_ENABLE
+# undef RGBLED_NUM
+# define RGBLED_NUM 120
+# undef RGBLIGHT_LED_MAP
+# define RGBLIGHT_LED_MAP { \
+ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, \
+ 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, \
+ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, \
+ 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, \
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, \
+ \
+ 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, \
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, \
+ 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, \
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, \
+ 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48 \
+ }
+# endif
+#endif
diff --git a/keyboards/giabalanai/keymaps/default_giabarinaix2/info.json b/keyboards/giabalanai/keymaps/default_giabarinaix2/info.json
new file mode 100644
index 00000000000..20a52326dd6
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/default_giabarinaix2/info.json
@@ -0,0 +1,146 @@
+{
+ "keyboard_name": "giabarinaix2",
+ "manufacturer": "3araht",
+ "url": "https://github.com/3araht",
+ "maintainer": "3araht",
+ "usb": {
+ "vid": "0xFEED",
+ "pid": "0xF4B2",
+ "device_version": "0.0.1"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "l00", "x": 0, "y": 0},
+ {"label": "l01", "x": 1, "y": 0},
+ {"label": "l02", "x": 2, "y": 0},
+ {"label": "l03", "x": 3, "y": 0},
+ {"label": "l04", "x": 4, "y": 0},
+ {"label": "l05", "x": 5, "y": 0},
+ {"label": "l06", "x": 6, "y": 0},
+ {"label": "l07", "x": 7, "y": 0},
+ {"label": "l08", "x": 8, "y": 0},
+ {"label": "l09", "x": 9, "y": 0},
+ {"label": "l0a", "x": 10, "y": 0},
+ {"label": "l0b", "x": 11, "y": 0},
+
+ {"label": "r00", "x": 14.5, "y": 0},
+ {"label": "r01", "x": 15.5, "y": 0},
+ {"label": "r02", "x": 16.5, "y": 0},
+ {"label": "r03", "x": 17.5, "y": 0},
+ {"label": "r04", "x": 18.5, "y": 0},
+ {"label": "r05", "x": 19.5, "y": 0},
+ {"label": "r06", "x": 20.5, "y": 0},
+ {"label": "r07", "x": 21.5, "y": 0},
+ {"label": "r08", "x": 22.5, "y": 0},
+ {"label": "r09", "x": 23.5, "y": 0},
+ {"label": "r0a", "x": 24.5, "y": 0},
+ {"label": "r0b", "x": 25.5, "y": 0},
+
+ {"label": "l10", "x": 0.5, "y": 1},
+ {"label": "l11", "x": 1.5, "y": 1},
+ {"label": "l12", "x": 2.5, "y": 1},
+ {"label": "l13", "x": 3.5, "y": 1},
+ {"label": "l14", "x": 4.5, "y": 1},
+ {"label": "l15", "x": 5.5, "y": 1},
+ {"label": "l16", "x": 6.5, "y": 1},
+ {"label": "l17", "x": 7.5, "y": 1},
+ {"label": "l18", "x": 8.5, "y": 1},
+ {"label": "l19", "x": 9.5, "y": 1},
+ {"label": "l1a", "x": 10.5, "y": 1},
+ {"label": "l1b", "x": 11.5, "y": 1},
+
+ {"label": "r10", "x": 15, "y": 1},
+ {"label": "r11", "x": 16, "y": 1},
+ {"label": "r12", "x": 17, "y": 1},
+ {"label": "r13", "x": 18, "y": 1},
+ {"label": "r14", "x": 19, "y": 1},
+ {"label": "r15", "x": 20, "y": 1},
+ {"label": "r16", "x": 21, "y": 1},
+ {"label": "r17", "x": 22, "y": 1},
+ {"label": "r18", "x": 23, "y": 1},
+ {"label": "r19", "x": 24, "y": 1},
+ {"label": "r1a", "x": 25, "y": 1},
+ {"label": "r1b", "x": 26, "y": 1},
+
+ {"label": "l20", "x": 1, "y": 2},
+ {"label": "l21", "x": 2, "y": 2},
+ {"label": "l22", "x": 3, "y": 2},
+ {"label": "l23", "x": 4, "y": 2},
+ {"label": "l24", "x": 5, "y": 2},
+ {"label": "l25", "x": 6, "y": 2},
+ {"label": "l26", "x": 7, "y": 2},
+ {"label": "l27", "x": 8, "y": 2},
+ {"label": "l28", "x": 9, "y": 2},
+ {"label": "l29", "x": 10, "y": 2},
+ {"label": "l2a", "x": 11, "y": 2},
+ {"label": "l2b", "x": 12, "y": 2},
+
+ {"label": "r20", "x": 15.5, "y": 2},
+ {"label": "r21", "x": 16.5, "y": 2},
+ {"label": "r22", "x": 17.5, "y": 2},
+ {"label": "r23", "x": 18.5, "y": 2},
+ {"label": "r24", "x": 19.5, "y": 2},
+ {"label": "r25", "x": 20.5, "y": 2},
+ {"label": "r26", "x": 21.5, "y": 2},
+ {"label": "r27", "x": 22.5, "y": 2},
+ {"label": "r28", "x": 23.5, "y": 2},
+ {"label": "r29", "x": 24.5, "y": 2},
+ {"label": "r2a", "x": 25.5, "y": 2},
+ {"label": "r2b", "x": 26.5, "y": 2},
+
+ {"label": "l30", "x": 1.5, "y": 3},
+ {"label": "l31", "x": 2.5, "y": 3},
+ {"label": "l32", "x": 3.5, "y": 3},
+ {"label": "l33", "x": 4.5, "y": 3},
+ {"label": "l34", "x": 5.5, "y": 3},
+ {"label": "l35", "x": 6.5, "y": 3},
+ {"label": "l36", "x": 7.5, "y": 3},
+ {"label": "l37", "x": 8.5, "y": 3},
+ {"label": "l38", "x": 9.5, "y": 3},
+ {"label": "l39", "x": 10.5, "y": 3},
+ {"label": "l3a", "x": 11.5, "y": 3},
+ {"label": "l3b", "x": 12.5, "y": 3},
+
+ {"label": "r30", "x": 16, "y": 3},
+ {"label": "r31", "x": 17, "y": 3},
+ {"label": "r32", "x": 18, "y": 3},
+ {"label": "r33", "x": 19, "y": 3},
+ {"label": "r34", "x": 20, "y": 3},
+ {"label": "r35", "x": 21, "y": 3},
+ {"label": "r36", "x": 22, "y": 3},
+ {"label": "r37", "x": 23, "y": 3},
+ {"label": "r38", "x": 24, "y": 3},
+ {"label": "r39", "x": 25, "y": 3},
+ {"label": "r3a", "x": 26, "y": 3},
+ {"label": "r3b", "x": 27, "y": 3},
+
+ {"label": "l40", "x": 2, "y": 4},
+ {"label": "l41", "x": 3, "y": 4},
+ {"label": "l42", "x": 4, "y": 4},
+ {"label": "l43", "x": 5, "y": 4},
+ {"label": "l44", "x": 6, "y": 4},
+ {"label": "l45", "x": 7, "y": 4},
+ {"label": "l46", "x": 8, "y": 4},
+ {"label": "l47", "x": 9, "y": 4},
+ {"label": "l48", "x": 10, "y": 4},
+ {"label": "l49", "x": 11, "y": 4},
+ {"label": "l4a", "x": 12, "y": 4},
+ {"label": "l4b", "x": 13, "y": 4},
+
+ {"label": "r40", "x": 16.5, "y": 4},
+ {"label": "r41", "x": 17.5, "y": 4},
+ {"label": "r42", "x": 18.5, "y": 4},
+ {"label": "r43", "x": 19.5, "y": 4},
+ {"label": "r44", "x": 20.5, "y": 4},
+ {"label": "r45", "x": 21.5, "y": 4},
+ {"label": "r46", "x": 22.5, "y": 4},
+ {"label": "r47", "x": 23.5, "y": 4},
+ {"label": "r48", "x": 24.5, "y": 4},
+ {"label": "r49", "x": 25.5, "y": 4},
+ {"label": "r4a", "x": 26.5, "y": 4},
+ {"label": "r4b", "x": 27.5, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/giabalanai/keymaps/default_giabarinaix2/keymap.c b/keyboards/giabalanai/keymaps/default_giabarinaix2/keymap.c
new file mode 100644
index 00000000000..82d86594dfb
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/default_giabarinaix2/keymap.c
@@ -0,0 +1,262 @@
+/* Copyright 2020 3araht
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+#include "version.h"
+
+// Alias layout macros that expand groups of keys.
+#define LAYOUT_wrapper_giabarinaix2(...) LAYOUT_giabarinaix2(__VA_ARGS__)
+
+#define DFCBASE DF(_C_SYSTEM_BASE)
+#define DF_QWER DF(_QWERTY)
+// Long press: go to _FN layer, tap: MUTE
+#define FN_MUTE LT(_FN, KC_MUTE)
+
+// Used to set octave to MI_OCT_0
+extern midi_config_t midi_config;
+uint8_t midi_bass_ch = 0, midi_chord_ch = 0; // By default, all use the same channel.
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _C_SYSTEM_BASE, // MIDI C-system
+ _QWERTY, // just in case
+ _FN
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+
+ // MIDI Chord Keycodes - Root notes
+ MY_CHORD_MIN = SAFE_RANGE,
+
+ MI_CH_Cr = MY_CHORD_MIN,
+ MI_CH_Csr,
+ MI_CH_Dbr = MI_CH_Csr,
+ MI_CH_Dr,
+ MI_CH_Dsr,
+ MI_CH_Ebr = MI_CH_Dsr,
+ MI_CH_Er,
+ MI_CH_Fr,
+ MI_CH_Fsr,
+ MI_CH_Gbr = MI_CH_Fsr,
+ MI_CH_Gr,
+ MI_CH_Gsr,
+ MI_CH_Abr = MI_CH_Gsr,
+ MI_CH_Ar,
+ MI_CH_Asr,
+ MI_CH_Bbr = MI_CH_Asr,
+ MI_CH_Br,
+
+ // MIDI Chord Keycodes - Major
+
+ MI_CH_C,
+ MI_CH_Cs,
+ MI_CH_Db = MI_CH_Cs,
+ MI_CH_D,
+ MI_CH_Ds,
+ MI_CH_Eb = MI_CH_Ds,
+ MI_CH_E,
+ MI_CH_F,
+ MI_CH_Fs,
+ MI_CH_Gb = MI_CH_Fs,
+ MI_CH_G,
+ MI_CH_Gs,
+ MI_CH_Ab = MI_CH_Gs,
+ MI_CH_A,
+ MI_CH_As,
+ MI_CH_Bb = MI_CH_As,
+ MI_CH_B,
+
+ // MIDI Chord Keycodes Minor
+
+ MI_CH_Cm,
+ MI_CH_Csm,
+ MI_CH_Dbm = MI_CH_Csm,
+ MI_CH_Dm,
+ MI_CH_Dsm,
+ MI_CH_Ebm = MI_CH_Dsm,
+ MI_CH_Em,
+ MI_CH_Fm,
+ MI_CH_Fsm,
+ MI_CH_Gbm = MI_CH_Fsm,
+ MI_CH_Gm,
+ MI_CH_Gsm,
+ MI_CH_Abm = MI_CH_Gsm,
+ MI_CH_Am,
+ MI_CH_Asm,
+ MI_CH_Bbm = MI_CH_Asm,
+ MI_CH_Bm,
+
+ //MIDI Chord Keycodes Dominant Seventh
+
+ MI_CH_CDom7,
+ MI_CH_CsDom7,
+ MI_CH_DbDom7 = MI_CH_CsDom7,
+ MI_CH_DDom7,
+ MI_CH_DsDom7,
+ MI_CH_EbDom7 = MI_CH_DsDom7,
+ MI_CH_EDom7,
+ MI_CH_FDom7,
+ MI_CH_FsDom7,
+ MI_CH_GbDom7 = MI_CH_FsDom7,
+ MI_CH_GDom7,
+ MI_CH_GsDom7,
+ MI_CH_AbDom7 = MI_CH_GsDom7,
+ MI_CH_ADom7,
+ MI_CH_AsDom7,
+ MI_CH_BbDom7 = MI_CH_AsDom7,
+ MI_CH_BDom7,
+
+ // MIDI Chord Keycodes Diminished Seventh
+
+ MI_CH_CDim7,
+ MI_CH_CsDim7,
+ MI_CH_DbDim7 = MI_CH_CsDim7,
+ MI_CH_DDim7,
+ MI_CH_DsDim7,
+ MI_CH_EbDim7 = MI_CH_DsDim7,
+ MI_CH_EDim7,
+ MI_CH_FDim7,
+ MI_CH_FsDim7,
+ MI_CH_GbDim7 = MI_CH_FsDim7,
+ MI_CH_GDim7,
+ MI_CH_GsDim7,
+ MI_CH_AbDim7 = MI_CH_GsDim7,
+ MI_CH_ADim7,
+ MI_CH_AsDim7,
+ MI_CH_BbDim7 = MI_CH_AsDim7,
+ MI_CH_BDim7,
+
+ MY_CHORD_MAX = MI_CH_BDim7,
+
+ VERSION
+};
+
+#define MY_CHORD_COUNT (MY_CHORD_MAX - MY_CHORD_MIN + 1)
+static uint8_t chord_status[MY_CHORD_COUNT];
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* C-system Base */
+ [_C_SYSTEM_BASE] = LAYOUT_giabarinaix2(
+ MI_CH_Dbr, MI_CH_Abr, MI_CH_Ebr, MI_CH_Bbr, MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr,
+ MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Fs,
+ MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm,
+ MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, MI_CH_FDom7, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_FsDom7,
+ MI_CH_DbDim7, MI_CH_AbDim7, MI_CH_EbDim7, MI_CH_BbDim7, MI_CH_FDim7, MI_CH_CDim7, MI_CH_GDim7, MI_CH_DDim7, MI_CH_ADim7, MI_CH_EDim7, MI_CH_BDim7, MI_CH_FsDim7,
+
+ MI_Db_2, MI_E_2, MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4,
+ MI_Eb_2, MI_Fs_2, MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5,
+ MI_F_2, MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5, FN_MUTE
+ ),
+
+ /* QWERTY */
+ [_QWERTY] = LAYOUT_wrapper_giabarinaix2(
+ KC_GESC, _________________NUMBER_L__________________, _________________NUMBER_R__________________, KC_BSPC,
+ KC_TAB, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_DEL,
+ KC_CAPS, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_ENT,
+ KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LANG2, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_LANG1, KC_RALT, KC_RGUI, KC_RCTRL,
+
+ KC_GESC, _________________NUMBER_L__________________, _________________NUMBER_R__________________, KC_BSPC,
+ KC_TAB, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_DEL,
+ KC_CAPS, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_ENT,
+ KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LANG2, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_LANG1, KC_RALT, KC_RGUI, _______
+ ),
+
+ /* Fn */
+ [_FN] = LAYOUT_giabarinaix2(
+ DFCBASE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ DF_QWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ DFCBASE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ DF_QWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_C_SYSTEM_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_QWERTY] = { ENCODER_CCW_CW(_______, _______) },
+ [_FN] = { ENCODER_CCW_CW(_______, _______) },
+};
+#endif
+
+void keyboard_post_init_user(void) {
+ // Set otave to MI_OCT_0
+ midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
+
+ // avoid using 127 since it is used as a special number in some sound sources.
+ midi_config.velocity = MIDI_INITIAL_VELOCITY;
+
+ for (uint8_t i = 0; i < MY_CHORD_COUNT; i++) {
+ chord_status[i] = MIDI_INVALID_NOTE;
+ }
+
+ default_layer_set(1UL << _C_SYSTEM_BASE);
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint16_t root_note = MIDI_INVALID_NOTE; // Starting value for the root note of each chord
+
+ uint8_t chord = keycode - MY_CHORD_MIN;
+
+ switch (keycode) {
+ case VERSION: // Output firmware info.
+ if (record->event.pressed) {
+ SEND_STRING(QMK_KEYBOARD ":" QMK_KEYMAP " @ " QMK_VERSION " | " QMK_BUILDDATE);
+ }
+ break;
+
+ // MIDI Chord Keycodes, on the left side.
+ case MI_CH_Cr ... MI_CH_Br: // Root Notes
+ root_note = keycode - MI_CH_Cr + MI_C_1;
+ my_process_midi4Bass(midi_bass_ch, record, chord_status, chord, root_note, false);
+ break;
+
+ case MI_CH_C ... MI_CH_B: // Major Chords
+ root_note = keycode - MI_CH_C + MI_C_2;
+ // Root, Major Third, and Fifth Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 4, 7);
+ break;
+
+ case MI_CH_Cm ... MI_CH_Bm: // Minor Chord
+ root_note = keycode - MI_CH_Cm + MI_C_2;
+ // Root, Minor Third, and Fifth Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 3, 7);
+ break;
+
+ case MI_CH_CDom7 ... MI_CH_BDom7: // Dominant 7th Chord
+ root_note = keycode - MI_CH_CDom7 + MI_C_2;
+ // Major Third, Major Fifth, and Minor Seventh Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 4, 7, 10);
+ break;
+
+ case MI_CH_CDim7 ... MI_CH_BDim7: // Diminished 7th Chord
+ root_note = keycode - MI_CH_CDim7 + MI_C_2;
+ // Root, Minor Third, and Diminished 5th Note
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 3, 6);
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/giabalanai/keymaps/default_giabarinaix2/readme.md b/keyboards/giabalanai/keymaps/default_giabarinaix2/readme.md
new file mode 100644
index 00000000000..ecdae4723d9
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/default_giabarinaix2/readme.md
@@ -0,0 +1 @@
+# The default keymap for giabarinaix2
diff --git a/keyboards/giabalanai/keymaps/default_giabarinaix2/rules.mk b/keyboards/giabalanai/keymaps/default_giabarinaix2/rules.mk
new file mode 100644
index 00000000000..35422338841
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/default_giabarinaix2/rules.mk
@@ -0,0 +1,3 @@
+ENCODER_ENABLE = no # encoder on mute button
+
+ENCODER_MAP_ENABLE = yes # replacing ENCODERS_CW_KEY method to this on 2022/08/31.
diff --git a/keyboards/giabalanai/keymaps/giabarinaix2led/config.h b/keyboards/giabalanai/keymaps/giabarinaix2led/config.h
new file mode 100644
index 00000000000..684287ba98b
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/giabarinaix2led/config.h
@@ -0,0 +1,26 @@
+#pragma once
+
+#define GIABARINAIX2
+#ifdef GIABARINAIX2
+# undef MATRIX_ROW_PINS_RIGHT
+# undef MATRIX_COL_PINS_RIGHT
+
+# ifdef RGBLIGHT_ENABLE
+# undef RGBLED_NUM
+# define RGBLED_NUM 120
+# undef RGBLIGHT_LED_MAP
+# define RGBLIGHT_LED_MAP { \
+ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, \
+ 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, \
+ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, \
+ 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, \
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, \
+ \
+ 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, \
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, \
+ 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, \
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, \
+ 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48 \
+ }
+# endif
+#endif
diff --git a/keyboards/giabalanai/keymaps/giabarinaix2led/info.json b/keyboards/giabalanai/keymaps/giabarinaix2led/info.json
new file mode 100644
index 00000000000..20a52326dd6
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/giabarinaix2led/info.json
@@ -0,0 +1,146 @@
+{
+ "keyboard_name": "giabarinaix2",
+ "manufacturer": "3araht",
+ "url": "https://github.com/3araht",
+ "maintainer": "3araht",
+ "usb": {
+ "vid": "0xFEED",
+ "pid": "0xF4B2",
+ "device_version": "0.0.1"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "l00", "x": 0, "y": 0},
+ {"label": "l01", "x": 1, "y": 0},
+ {"label": "l02", "x": 2, "y": 0},
+ {"label": "l03", "x": 3, "y": 0},
+ {"label": "l04", "x": 4, "y": 0},
+ {"label": "l05", "x": 5, "y": 0},
+ {"label": "l06", "x": 6, "y": 0},
+ {"label": "l07", "x": 7, "y": 0},
+ {"label": "l08", "x": 8, "y": 0},
+ {"label": "l09", "x": 9, "y": 0},
+ {"label": "l0a", "x": 10, "y": 0},
+ {"label": "l0b", "x": 11, "y": 0},
+
+ {"label": "r00", "x": 14.5, "y": 0},
+ {"label": "r01", "x": 15.5, "y": 0},
+ {"label": "r02", "x": 16.5, "y": 0},
+ {"label": "r03", "x": 17.5, "y": 0},
+ {"label": "r04", "x": 18.5, "y": 0},
+ {"label": "r05", "x": 19.5, "y": 0},
+ {"label": "r06", "x": 20.5, "y": 0},
+ {"label": "r07", "x": 21.5, "y": 0},
+ {"label": "r08", "x": 22.5, "y": 0},
+ {"label": "r09", "x": 23.5, "y": 0},
+ {"label": "r0a", "x": 24.5, "y": 0},
+ {"label": "r0b", "x": 25.5, "y": 0},
+
+ {"label": "l10", "x": 0.5, "y": 1},
+ {"label": "l11", "x": 1.5, "y": 1},
+ {"label": "l12", "x": 2.5, "y": 1},
+ {"label": "l13", "x": 3.5, "y": 1},
+ {"label": "l14", "x": 4.5, "y": 1},
+ {"label": "l15", "x": 5.5, "y": 1},
+ {"label": "l16", "x": 6.5, "y": 1},
+ {"label": "l17", "x": 7.5, "y": 1},
+ {"label": "l18", "x": 8.5, "y": 1},
+ {"label": "l19", "x": 9.5, "y": 1},
+ {"label": "l1a", "x": 10.5, "y": 1},
+ {"label": "l1b", "x": 11.5, "y": 1},
+
+ {"label": "r10", "x": 15, "y": 1},
+ {"label": "r11", "x": 16, "y": 1},
+ {"label": "r12", "x": 17, "y": 1},
+ {"label": "r13", "x": 18, "y": 1},
+ {"label": "r14", "x": 19, "y": 1},
+ {"label": "r15", "x": 20, "y": 1},
+ {"label": "r16", "x": 21, "y": 1},
+ {"label": "r17", "x": 22, "y": 1},
+ {"label": "r18", "x": 23, "y": 1},
+ {"label": "r19", "x": 24, "y": 1},
+ {"label": "r1a", "x": 25, "y": 1},
+ {"label": "r1b", "x": 26, "y": 1},
+
+ {"label": "l20", "x": 1, "y": 2},
+ {"label": "l21", "x": 2, "y": 2},
+ {"label": "l22", "x": 3, "y": 2},
+ {"label": "l23", "x": 4, "y": 2},
+ {"label": "l24", "x": 5, "y": 2},
+ {"label": "l25", "x": 6, "y": 2},
+ {"label": "l26", "x": 7, "y": 2},
+ {"label": "l27", "x": 8, "y": 2},
+ {"label": "l28", "x": 9, "y": 2},
+ {"label": "l29", "x": 10, "y": 2},
+ {"label": "l2a", "x": 11, "y": 2},
+ {"label": "l2b", "x": 12, "y": 2},
+
+ {"label": "r20", "x": 15.5, "y": 2},
+ {"label": "r21", "x": 16.5, "y": 2},
+ {"label": "r22", "x": 17.5, "y": 2},
+ {"label": "r23", "x": 18.5, "y": 2},
+ {"label": "r24", "x": 19.5, "y": 2},
+ {"label": "r25", "x": 20.5, "y": 2},
+ {"label": "r26", "x": 21.5, "y": 2},
+ {"label": "r27", "x": 22.5, "y": 2},
+ {"label": "r28", "x": 23.5, "y": 2},
+ {"label": "r29", "x": 24.5, "y": 2},
+ {"label": "r2a", "x": 25.5, "y": 2},
+ {"label": "r2b", "x": 26.5, "y": 2},
+
+ {"label": "l30", "x": 1.5, "y": 3},
+ {"label": "l31", "x": 2.5, "y": 3},
+ {"label": "l32", "x": 3.5, "y": 3},
+ {"label": "l33", "x": 4.5, "y": 3},
+ {"label": "l34", "x": 5.5, "y": 3},
+ {"label": "l35", "x": 6.5, "y": 3},
+ {"label": "l36", "x": 7.5, "y": 3},
+ {"label": "l37", "x": 8.5, "y": 3},
+ {"label": "l38", "x": 9.5, "y": 3},
+ {"label": "l39", "x": 10.5, "y": 3},
+ {"label": "l3a", "x": 11.5, "y": 3},
+ {"label": "l3b", "x": 12.5, "y": 3},
+
+ {"label": "r30", "x": 16, "y": 3},
+ {"label": "r31", "x": 17, "y": 3},
+ {"label": "r32", "x": 18, "y": 3},
+ {"label": "r33", "x": 19, "y": 3},
+ {"label": "r34", "x": 20, "y": 3},
+ {"label": "r35", "x": 21, "y": 3},
+ {"label": "r36", "x": 22, "y": 3},
+ {"label": "r37", "x": 23, "y": 3},
+ {"label": "r38", "x": 24, "y": 3},
+ {"label": "r39", "x": 25, "y": 3},
+ {"label": "r3a", "x": 26, "y": 3},
+ {"label": "r3b", "x": 27, "y": 3},
+
+ {"label": "l40", "x": 2, "y": 4},
+ {"label": "l41", "x": 3, "y": 4},
+ {"label": "l42", "x": 4, "y": 4},
+ {"label": "l43", "x": 5, "y": 4},
+ {"label": "l44", "x": 6, "y": 4},
+ {"label": "l45", "x": 7, "y": 4},
+ {"label": "l46", "x": 8, "y": 4},
+ {"label": "l47", "x": 9, "y": 4},
+ {"label": "l48", "x": 10, "y": 4},
+ {"label": "l49", "x": 11, "y": 4},
+ {"label": "l4a", "x": 12, "y": 4},
+ {"label": "l4b", "x": 13, "y": 4},
+
+ {"label": "r40", "x": 16.5, "y": 4},
+ {"label": "r41", "x": 17.5, "y": 4},
+ {"label": "r42", "x": 18.5, "y": 4},
+ {"label": "r43", "x": 19.5, "y": 4},
+ {"label": "r44", "x": 20.5, "y": 4},
+ {"label": "r45", "x": 21.5, "y": 4},
+ {"label": "r46", "x": 22.5, "y": 4},
+ {"label": "r47", "x": 23.5, "y": 4},
+ {"label": "r48", "x": 24.5, "y": 4},
+ {"label": "r49", "x": 25.5, "y": 4},
+ {"label": "r4a", "x": 26.5, "y": 4},
+ {"label": "r4b", "x": 27.5, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/giabalanai/keymaps/giabarinaix2led/keymap.c b/keyboards/giabalanai/keymaps/giabarinaix2led/keymap.c
new file mode 100644
index 00000000000..1e773bd2336
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/giabarinaix2led/keymap.c
@@ -0,0 +1,464 @@
+/* Copyright 2020 3araht
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+#include "version.h"
+
+// Alias layout macros that expand groups of keys.
+#define LAYOUT_wrapper_giabarinaix2(...) LAYOUT_giabarinaix2(__VA_ARGS__)
+
+#define DFCBASE DF(_C_SYSTEM_BASE)
+#define DF_QWER DF(_QWERTY)
+// Long press: go to _FN layer, tap: MUTE
+#define FN_MUTE LT(_FN, KC_MUTE)
+
+// Used to set octave to MI_OCT_0
+extern midi_config_t midi_config;
+uint8_t midi_bass_ch = 0, midi_chord_ch = 0; // By default, all use the same channel.
+
+#ifdef RGBLIGHT_ENABLE
+/* used to specify there is no LED on the keylocation. */
+# define NO_LED 255
+#endif // RGBLIGHT_ENABLE
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _C_SYSTEM_BASE, // MIDI C-system
+ _C_SYSTEM_BASS2ROW, // counter bass system
+ _C_SYSTEM_ENTIRELY, // single notes for both left and right keybaords.
+ _CHROMATONE,
+ _QWERTY, // just in case
+ _FN
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+
+ // MIDI Chord Keycodes - Root notes
+ MY_CHORD_MIN = SAFE_RANGE,
+
+ MI_CH_Cr = MY_CHORD_MIN,
+ MI_CH_Csr,
+ MI_CH_Dbr = MI_CH_Csr,
+ MI_CH_Dr,
+ MI_CH_Dsr,
+ MI_CH_Ebr = MI_CH_Dsr,
+ MI_CH_Er,
+ MI_CH_Fr,
+ MI_CH_Fsr,
+ MI_CH_Gbr = MI_CH_Fsr,
+ MI_CH_Gr,
+ MI_CH_Gsr,
+ MI_CH_Abr = MI_CH_Gsr,
+ MI_CH_Ar,
+ MI_CH_Asr,
+ MI_CH_Bbr = MI_CH_Asr,
+ MI_CH_Br,
+
+ // MIDI Chord Keycodes - Major
+
+ MI_CH_C,
+ MI_CH_Cs,
+ MI_CH_Db = MI_CH_Cs,
+ MI_CH_D,
+ MI_CH_Ds,
+ MI_CH_Eb = MI_CH_Ds,
+ MI_CH_E,
+ MI_CH_F,
+ MI_CH_Fs,
+ MI_CH_Gb = MI_CH_Fs,
+ MI_CH_G,
+ MI_CH_Gs,
+ MI_CH_Ab = MI_CH_Gs,
+ MI_CH_A,
+ MI_CH_As,
+ MI_CH_Bb = MI_CH_As,
+ MI_CH_B,
+
+ // MIDI Chord Keycodes Minor
+
+ MI_CH_Cm,
+ MI_CH_Csm,
+ MI_CH_Dbm = MI_CH_Csm,
+ MI_CH_Dm,
+ MI_CH_Dsm,
+ MI_CH_Ebm = MI_CH_Dsm,
+ MI_CH_Em,
+ MI_CH_Fm,
+ MI_CH_Fsm,
+ MI_CH_Gbm = MI_CH_Fsm,
+ MI_CH_Gm,
+ MI_CH_Gsm,
+ MI_CH_Abm = MI_CH_Gsm,
+ MI_CH_Am,
+ MI_CH_Asm,
+ MI_CH_Bbm = MI_CH_Asm,
+ MI_CH_Bm,
+
+ //MIDI Chord Keycodes Dominant Seventh
+
+ MI_CH_CDom7,
+ MI_CH_CsDom7,
+ MI_CH_DbDom7 = MI_CH_CsDom7,
+ MI_CH_DDom7,
+ MI_CH_DsDom7,
+ MI_CH_EbDom7 = MI_CH_DsDom7,
+ MI_CH_EDom7,
+ MI_CH_FDom7,
+ MI_CH_FsDom7,
+ MI_CH_GbDom7 = MI_CH_FsDom7,
+ MI_CH_GDom7,
+ MI_CH_GsDom7,
+ MI_CH_AbDom7 = MI_CH_GsDom7,
+ MI_CH_ADom7,
+ MI_CH_AsDom7,
+ MI_CH_BbDom7 = MI_CH_AsDom7,
+ MI_CH_BDom7,
+
+ // MIDI Chord Keycodes Diminished Seventh
+
+ MI_CH_CDim7,
+ MI_CH_CsDim7,
+ MI_CH_DbDim7 = MI_CH_CsDim7,
+ MI_CH_DDim7,
+ MI_CH_DsDim7,
+ MI_CH_EbDim7 = MI_CH_DsDim7,
+ MI_CH_EDim7,
+ MI_CH_FDim7,
+ MI_CH_FsDim7,
+ MI_CH_GbDim7 = MI_CH_FsDim7,
+ MI_CH_GDim7,
+ MI_CH_GsDim7,
+ MI_CH_AbDim7 = MI_CH_GsDim7,
+ MI_CH_ADim7,
+ MI_CH_AsDim7,
+ MI_CH_BbDim7 = MI_CH_AsDim7,
+ MI_CH_BDim7,
+
+ MY_CHORD_MAX = MI_CH_BDim7,
+
+ VERSION,
+ CSYSTEM, // C-SYSTEM layout
+ CNTBASC, // CouNTer BASs C-system layout
+ CSYSALL, // C-SYStem ALL layout
+ CHRTONE, // CHRomaTONE layout
+ TGLMICH // ToGgLe MIdi CHannel separation
+};
+
+#define MY_CHORD_COUNT (MY_CHORD_MAX - MY_CHORD_MIN + 1)
+static uint8_t chord_status[MY_CHORD_COUNT];
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* C-system Base */
+ [_C_SYSTEM_BASE] = LAYOUT_giabarinaix2(
+ MI_CH_Dbr, MI_CH_Abr, MI_CH_Ebr, MI_CH_Bbr, MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr,
+ MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Fs,
+ MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm,
+ MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, MI_CH_FDom7, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_FsDom7,
+ MI_CH_DbDim7, MI_CH_AbDim7, MI_CH_EbDim7, MI_CH_BbDim7, MI_CH_FDim7, MI_CH_CDim7, MI_CH_GDim7, MI_CH_DDim7, MI_CH_ADim7, MI_CH_EDim7, MI_CH_BDim7, MI_CH_FsDim7,
+
+ MI_Db_2, MI_E_2, MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4,
+ MI_Eb_2, MI_Fs_2, MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5,
+ MI_F_2, MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5, FN_MUTE
+ ),
+
+ /* BASS2row */
+ [_C_SYSTEM_BASS2ROW] = LAYOUT_giabarinaix2(
+ MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr, MI_CH_Csr, MI_CH_Gsr, MI_CH_Dsr, MI_CH_Asr,
+ MI_CH_Dbr, MI_CH_Abr, MI_CH_Ebr, MI_CH_Bbr, MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr,
+ MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Fs,
+ MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm,
+ MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, MI_CH_FDom7, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_FsDom7,
+
+
+ MI_Db_2, MI_E_2, MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4,
+ MI_Eb_2, MI_Fs_2, MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5,
+ MI_F_2, MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5, FN_MUTE
+ ),
+
+ /* C-system entirely */
+ [_C_SYSTEM_ENTIRELY] = LAYOUT_giabarinaix2(
+ XXXXXXX, XXXXXXX, XXXXXXX, MI_Db, MI_E, MI_G, MI_Bb, MI_Db_1, MI_E_1, MI_G_1, MI_Bb_1, MI_Db_2,
+ XXXXXXX, XXXXXXX, MI_C, MI_Eb, MI_Fs, MI_A, MI_C_1, MI_Eb_1, MI_Fs_1, MI_A_1, MI_C_2, MI_Eb_2,
+ XXXXXXX, XXXXXXX, MI_D, MI_F, MI_Ab, MI_B, MI_D_1, MI_F_1, MI_Ab_1, MI_B_1, MI_D_2, MI_F_2,
+ XXXXXXX, MI_Db, MI_E, MI_G, MI_Bb, MI_Db_1, MI_E_1, MI_G_1, MI_Bb_1, MI_Db_2, MI_E_2, MI_G_2,
+ MI_C, MI_Eb, MI_Fs, MI_A, MI_C_1, MI_Eb_1, MI_Fs_1, MI_A_1, MI_C_2, MI_Eb_2, MI_Fs_2, MI_A_2,
+
+ MI_E_2, MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5,
+ MI_Fs_2, MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5,
+ MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5, MI_F_5,
+ MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5, MI_G_5,
+ MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5, MI_Fs_5, FN_MUTE
+ ),
+
+ /* Chromatone */
+ [_CHROMATONE] = LAYOUT_giabarinaix2(
+ XXXXXXX, XXXXXXX, MI_Db, MI_Eb, MI_F, MI_G, MI_A, MI_B, MI_Db_1, MI_Eb_1, MI_F_1, MI_G_1,
+ XXXXXXX, MI_C, MI_D, MI_E, MI_Fs, MI_Ab, MI_Bb, MI_C_1, MI_D_1, MI_E_1, MI_Fs_1, MI_Ab_1,
+ XXXXXXX, MI_Db, MI_Eb, MI_F, MI_G, MI_A, MI_B, MI_Db_1, MI_Eb_1, MI_F_1, MI_G_1, MI_A_1,
+ MI_C, MI_D, MI_E, MI_Fs, MI_Ab, MI_Bb, MI_C_1, MI_D_1, MI_E_1, MI_Fs_1, MI_Ab_1, MI_Bb_1,
+ MI_Db, MI_Eb, MI_F, MI_G, MI_A, MI_B, MI_Db_1, MI_Eb_1, MI_F_1, MI_G_1, MI_A_1, MI_B_1,
+
+ MI_A_1, MI_B_1, MI_Db_2, MI_Eb_2, MI_F_2, MI_G_2, MI_A_2, MI_B_2, MI_Db_3, MI_Eb_3, MI_F_3, MI_G_3,
+ MI_Bb_1, MI_C_2, MI_D_2, MI_E_2, MI_Gb_2, MI_Ab_2, MI_Bb_2, MI_C_3, MI_D_3, MI_E_3, MI_Gb_3, MI_Ab_3,
+ MI_B_1, MI_Db_2, MI_Eb_2, MI_F_2, MI_G_2, MI_A_2, MI_B_2, MI_Db_3, MI_Eb_3, MI_F_3, MI_G_3, MI_A_3,
+ MI_C_2, MI_D_2, MI_E_2, MI_Gb_2, MI_Ab_2, MI_Bb_2, MI_C_3, MI_D_3, MI_E_3, MI_Gb_3, MI_Ab_3, MI_Bb_3,
+ MI_Db_2, MI_Eb_2, MI_F_2, MI_G_2, MI_A_2, MI_B_2, MI_Db_3, MI_Eb_3, MI_F_3, MI_G_3, MI_A_3, FN_MUTE
+ ),
+
+ /* QWERTY */
+ [_QWERTY] = LAYOUT_wrapper_giabarinaix2(
+ KC_GESC, _________________NUMBER_L__________________, _________________NUMBER_R__________________, KC_BSPC,
+ KC_TAB, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_DEL,
+ KC_CAPS, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_ENT,
+ KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LANG2, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_LANG1, KC_RALT, KC_RGUI, KC_RCTRL,
+
+ KC_GESC, _________________NUMBER_L__________________, _________________NUMBER_R__________________, KC_BSPC,
+ KC_TAB, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_DEL,
+ KC_CAPS, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_ENT,
+ KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LANG2, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_LANG1, KC_RALT, KC_RGUI, _______
+ ),
+
+ /* Fn */
+ [_FN] = LAYOUT_giabarinaix2(
+ CSYSTEM, CNTBASC, CSYSALL, CHRTONE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG,
+ DF_QWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TGLMICH,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ CSYSTEM, CNTBASC, CSYSALL, CHRTONE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG,
+ DF_QWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION, TGLMICH,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_C_SYSTEM_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_C_SYSTEM_BASS2ROW] = { ENCODER_CCW_CW(_______, _______) },
+ [_C_SYSTEM_ENTIRELY] = { ENCODER_CCW_CW(_______, _______) },
+ [_CHROMATONE] = { ENCODER_CCW_CW(_______, _______) },
+ [_QWERTY] = { ENCODER_CCW_CW(_______, _______) },
+ [_FN] = { ENCODER_CCW_CW(_______, _______) },
+};
+#endif
+
+#ifdef RGBLIGHT_ENABLE
+
+// Light up fn layer keys
+const rgblight_segment_t PROGMEM my_fn_layer[] = RGBLIGHT_LAYER_SEGMENTS( // left keyboard
+ {0, 4, HSV_ORANGE}, // MIDI layouts
+ {11, 1, HSV_RED}, // RGB_TOG
+ {12, 1, HSV_WHITE}, // DF_QWER
+ {35, 1, HSV_TEAL}, // TGLMICH
+
+ // right keyboard
+ {60, 4, HSV_ORANGE}, // MIDI layouts
+ {71 , 1, HSV_RED}, // RGB_TOG
+ {72, 1, HSV_WHITE}, // DF_QWER
+ {83, 1, HSV_TEAL} // TGLMICH
+);
+
+
+// Now define the array of layers. Later layers take precedence
+const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_fn_layer);
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ // Both layers will light up if both kb layers are active
+ rgblight_set_layer_state(0, layer_state_cmp(state, _FN));
+ return state;
+};
+
+#endif // RGBLIGHT_ENABLE
+void keyboard_post_init_user(void) {
+ // Set otave to MI_OCT_0
+ midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
+
+ // avoid using 127 since it is used as a special number in some sound sources.
+ midi_config.velocity = MIDI_INITIAL_VELOCITY;
+
+ for (uint8_t i = 0; i < MY_CHORD_COUNT; i++) {
+ chord_status[i] = MIDI_INVALID_NOTE;
+ }
+
+#ifdef RGBLIGHT_ENABLE
+
+ rgblight_layers = my_rgb_layers;
+
+ // Reset LED off
+ rgblight_sethsv(HSV_BLACK);
+# if defined(RGBLIGHT_EFFECT_KNIGHT) || defined(RGBLIGHT_EFFECT_TWINKLE)
+ rgblight_sethsv(30, 50, 40);
+# ifdef RGBLIGHT_EFFECT_KNIGHT
+ rgblight_mode(RGBLIGHT_MODE_KNIGHT);
+# elif defined(RGBLIGHT_EFFECT_TWINKLE)
+ rgblight_mode(RGBLIGHT_MODE_TWINKLE+3);
+# endif
+# endif
+#endif // RGBLIGHT_ENABLE
+};
+
+void toggle_MIDI_channel_separation(void) {
+ if (midi_chord_ch > 0) {
+ midi_chord_ch = 0;
+ midi_bass_ch = 0;
+ } else {
+ midi_chord_ch = 1;
+ midi_bass_ch = 2;
+ }
+}
+
+#ifdef RGBLIGHT_ENABLE
+void switch_keylight_color4bass(keyrecord_t *record, uint8_t keylocation){
+ switch (biton32(default_layer_state)) {
+ case _C_SYSTEM_BASE:
+ keylight_manager(record, HSV_GREEN, keylocation);
+ break;
+ case _C_SYSTEM_BASS2ROW:
+ keylight_manager(record, HSV_YELLOW, keylocation);
+ break;
+ }
+}
+void switch_keylight_color4chords(keyrecord_t *record, uint8_t keylocation){
+ switch (biton32(default_layer_state)) {
+ case _C_SYSTEM_BASE:
+ keylight_manager(record, HSV_SPRINGGREEN, keylocation);
+ break;
+ case _C_SYSTEM_BASS2ROW:
+ keylight_manager(record, HSV_GOLDENROD, keylocation);
+ break;
+ }
+}
+#endif // RGBLIGHT_ENABLE
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint16_t root_note = MIDI_INVALID_NOTE; // Starting value for the root note of each chord
+
+ #ifdef RGBLIGHT_ENABLE
+ /* prepare for turning on LEDs when keys are pressed. */
+ uint8_t r = record->event.key.row;
+ uint8_t c = record->event.key.col;
+ uint8_t keylocation = pgm_read_byte(&convert_key_to_led[MATRIX_COLS * r + c]);
+ #endif // RGBLIGHT_ENABLE
+
+ uint8_t chord = keycode - MY_CHORD_MIN;
+
+ switch (keycode) {
+ case VERSION: // Output firmware info.
+ if (record->event.pressed) {
+ SEND_STRING(QMK_KEYBOARD ":" QMK_KEYMAP " @ " QMK_VERSION " | " QMK_BUILDDATE);
+ }
+ break;
+
+ // set default layer and save it to EEPROM when MIDI key layers are selected.
+ case CSYSTEM:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_C_SYSTEM_BASE);
+ }
+ break;
+
+ case CNTBASC:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_C_SYSTEM_BASS2ROW);
+ }
+ break;
+
+ case CSYSALL:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_C_SYSTEM_ENTIRELY);
+ }
+ break;
+
+ case CHRTONE:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_CHROMATONE);
+ }
+ break;
+
+ case TGLMICH:
+ if (record->event.pressed) {
+ toggle_MIDI_channel_separation();
+ };
+ break;
+
+
+ // MIDI Chord Keycodes, on the left side.
+ case MI_CH_Cr ... MI_CH_Br: // Root Notes
+ root_note = keycode - MI_CH_Cr + MI_C_1;
+ my_process_midi4Bass(midi_bass_ch, record, chord_status, chord, root_note, false);
+#ifdef RGBLIGHT_ENABLE
+ switch_keylight_color4bass(record, keylocation);
+#endif
+ break;
+ case MI_CH_C ... MI_CH_B: // Major Chords
+ root_note = keycode - MI_CH_C + MI_C_2;
+ // Root, Major Third, and Fifth Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 4, 7);
+#ifdef RGBLIGHT_ENABLE
+ switch_keylight_color4chords(record, keylocation);
+#endif
+ break;
+ case MI_CH_Cm ... MI_CH_Bm: // Minor Chord
+ root_note = keycode - MI_CH_Cm + MI_C_2;
+ // Root, Minor Third, and Fifth Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 3, 7);
+#ifdef RGBLIGHT_ENABLE
+ switch_keylight_color4chords(record, keylocation);
+#endif
+ break;
+ case MI_CH_CDom7 ... MI_CH_BDom7: // Dominant 7th Chord
+ root_note = keycode - MI_CH_CDom7 + MI_C_2;
+ // Major Third, Major Fifth, and Minor Seventh Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 4, 7, 10);
+#ifdef RGBLIGHT_ENABLE
+ switch_keylight_color4chords(record, keylocation);
+#endif
+ break;
+ case MI_CH_CDim7 ... MI_CH_BDim7: // Diminished 7th Chord
+ root_note = keycode - MI_CH_CDim7 + MI_C_2;
+ // Root, Minor Third, and Diminished 5th Note
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 3, 6);
+#ifdef RGBLIGHT_ENABLE
+ switch_keylight_color4chords(record, keylocation);
+#endif
+ break;
+
+#ifdef RGBLIGHT_ENABLE
+ case KC_A ... KC_RGUI: // for QWERTY
+ case KC_GESC:
+ keylight_manager(record, HSV_GOLDENROD, keylocation);
+ break;
+#endif
+ // Keycodes on the right side.
+#ifdef RGBLIGHT_ENABLE
+ case MIDI_TONE_MIN ... MIDI_TONE_MAX: // notes on the right side.
+ keylight_manager(record, HSV_GOLDENROD, keylocation);
+ break;
+ // case KC_MUTE:
+ case FN_MUTE:
+ keylight_manager(record, HSV_GOLDENROD, keylocation);
+ break;
+#endif
+ }
+ return true;
+}
diff --git a/keyboards/giabalanai/keymaps/giabarinaix2led/readme.md b/keyboards/giabalanai/keymaps/giabarinaix2led/readme.md
new file mode 100644
index 00000000000..89139ec1b3b
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/giabarinaix2led/readme.md
@@ -0,0 +1 @@
+# A keymap for giabarinaix2 with LEDs.
diff --git a/keyboards/giabalanai/keymaps/giabarinaix2led/rules.mk b/keyboards/giabalanai/keymaps/giabarinaix2led/rules.mk
new file mode 100644
index 00000000000..d8dc6a10e76
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/giabarinaix2led/rules.mk
@@ -0,0 +1,3 @@
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+
+ENCODER_MAP_ENABLE = yes # replacing ENCODERS_CW_KEY method to this on 2022/08/31.
diff --git a/keyboards/giabalanai/keymaps/party/keymap.c b/keyboards/giabalanai/keymaps/party/keymap.c
new file mode 100644
index 00000000000..5a4361e5ae5
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/party/keymap.c
@@ -0,0 +1,792 @@
+/* Copyright 2020 3araht
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+#include "print.h"
+#include "version.h"
+
+// Alias layout macros that expand groups of keys.
+#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
+
+#define DF_QWER DF(_QWERTY)
+#define DF_COLE DF(_COLEMAK)
+#define MO_ADJ MO(_ADJUST)
+// Long press: go to _FN layer, tap: MUTE
+#define FN_MUTE LT(_FN, KC_MUTE)
+#define SHIF_UP RSFT_T(KC_UP)
+#define ADJ_EIS LT(_ADJUST,KC_LANG2)
+#define MIS_KAN LT(_MISC,KC_LANG1)
+
+// Used to set octave to MI_OCT_0
+extern midi_config_t midi_config;
+uint8_t midi_bass_ch = 0, midi_chord_ch = 0; // By default, all use the same channel.
+
+// UNISON flags
+static bool melody_dyad_high = false; // true when +1 octave unison dyad is enabled.
+static bool melody_dyad_low = false; // true when -1 octave unison dyad is enabled.
+
+static bool melody_unison_suppress = true; // true: velocity of octave unison note is suppressd to UNISON_VELOCITY_RATIO
+
+// To record the status of Bass Chord (single or dyad, default: dyad.)
+typedef union {
+ uint32_t raw;
+ struct {
+ bool isSingleBass:1;
+ };
+} user_config_t;
+user_config_t user_config;
+
+#define IS_SINGLE_BASS() (user_config.isSingleBass)
+
+#ifdef RGBLIGHT_ENABLE
+/* used to specify there is no LED on the keylocation. */
+# define NO_LED 255
+#endif // RGBLIGHT_ENABLE
+
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _C_SYSTEM_BASE, // MIDI C-system
+ _FAKE_B_SYSTEM, // MIDI fake B-system doesn't have correct assignments on top two rows. The bottom 3 rows are B-system.
+ _C_SYSTEM_BASS2ROW, // counter bass system
+ _C_SYSTEM_ENTIRELY, // single notes for both left and right keybaords.
+ _C_SYSTEM_FREEBASS, // C-system Free Bass
+ _CHROMATONE,
+ _CFLIP_BASS2ROW, // 180 degree flipped layout on right side keyboard
+ _QWERTY,
+ _COLEMAK,
+ _ADJUST, // for Fn keys, etc.
+ _FN // for changing layers, octaves, etc.
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+
+ // MIDI Chord Keycodes - Root notes
+ MY_CHORD_MIN = SAFE_RANGE,
+
+ MI_CH_Cr = MY_CHORD_MIN,
+ MI_CH_Csr,
+ MI_CH_Dbr = MI_CH_Csr,
+ MI_CH_Dr,
+ MI_CH_Dsr,
+ MI_CH_Ebr = MI_CH_Dsr,
+ MI_CH_Er,
+ MI_CH_Fr,
+ MI_CH_Fsr,
+ MI_CH_Gbr = MI_CH_Fsr,
+ MI_CH_Gr,
+ MI_CH_Gsr,
+ MI_CH_Abr = MI_CH_Gsr,
+ MI_CH_Ar,
+ MI_CH_Asr,
+ MI_CH_Bbr = MI_CH_Asr,
+ MI_CH_Br,
+
+ // MIDI Chord Keycodes - Major
+
+ MI_CH_C,
+ MI_CH_Cs,
+ MI_CH_Db = MI_CH_Cs,
+ MI_CH_D,
+ MI_CH_Ds,
+ MI_CH_Eb = MI_CH_Ds,
+ MI_CH_E,
+ MI_CH_F,
+ MI_CH_Fs,
+ MI_CH_Gb = MI_CH_Fs,
+ MI_CH_G,
+ MI_CH_Gs,
+ MI_CH_Ab = MI_CH_Gs,
+ MI_CH_A,
+ MI_CH_As,
+ MI_CH_Bb = MI_CH_As,
+ MI_CH_B,
+
+ // MIDI Chord Keycodes Minor
+
+ MI_CH_Cm,
+ MI_CH_Csm,
+ MI_CH_Dbm = MI_CH_Csm,
+ MI_CH_Dm,
+ MI_CH_Dsm,
+ MI_CH_Ebm = MI_CH_Dsm,
+ MI_CH_Em,
+ MI_CH_Fm,
+ MI_CH_Fsm,
+ MI_CH_Gbm = MI_CH_Fsm,
+ MI_CH_Gm,
+ MI_CH_Gsm,
+ MI_CH_Abm = MI_CH_Gsm,
+ MI_CH_Am,
+ MI_CH_Asm,
+ MI_CH_Bbm = MI_CH_Asm,
+ MI_CH_Bm,
+
+ //MIDI Chord Keycodes Dominant Seventh
+
+ MI_CH_CDom7,
+ MI_CH_CsDom7,
+ MI_CH_DbDom7 = MI_CH_CsDom7,
+ MI_CH_DDom7,
+ MI_CH_DsDom7,
+ MI_CH_EbDom7 = MI_CH_DsDom7,
+ MI_CH_EDom7,
+ MI_CH_FDom7,
+ MI_CH_FsDom7,
+ MI_CH_GbDom7 = MI_CH_FsDom7,
+ MI_CH_GDom7,
+ MI_CH_GsDom7,
+ MI_CH_AbDom7 = MI_CH_GsDom7,
+ MI_CH_ADom7,
+ MI_CH_AsDom7,
+ MI_CH_BbDom7 = MI_CH_AsDom7,
+ MI_CH_BDom7,
+
+ // MIDI Chord Keycodes Diminished Seventh
+
+ MI_CH_CDim7,
+ MI_CH_CsDim7,
+ MI_CH_DbDim7 = MI_CH_CsDim7,
+ MI_CH_DDim7,
+ MI_CH_DsDim7,
+ MI_CH_EbDim7 = MI_CH_DsDim7,
+ MI_CH_EDim7,
+ MI_CH_FDim7,
+ MI_CH_FsDim7,
+ MI_CH_GbDim7 = MI_CH_FsDim7,
+ MI_CH_GDim7,
+ MI_CH_GsDim7,
+ MI_CH_AbDim7 = MI_CH_GsDim7,
+ MI_CH_ADim7,
+ MI_CH_AsDim7,
+ MI_CH_BbDim7 = MI_CH_AsDim7,
+ MI_CH_BDim7,
+
+ MY_CHORD_MAX = MI_CH_BDim7,
+
+ VERSION,
+ CSYSTEM, // C-SYSTEM layout
+ BSYSTEM, // B-SYSTEM layout
+ CNTBASC, // CouNTer BASs C-system layout
+ CSYSALL, // C-SYStem ALL layout
+ CSYSFBS, // C-SYStem Free BaSs
+ CHRTONE, // CHRomaTONE layout
+ CFLIP2B, // C-system FLIPped 2(to) Backwards
+ TGLBASS, // ToGgLe BASS unison
+ TGLMICH, // ToGgLe MIdi CHannel separation
+ MELDYAL, // MELody DYad Low
+ MELODYS, // MELODY Single
+ MELDYAH, // MELody DYad High
+ TGLUVEL // ToGgLe Unison VELocity
+};
+
+#define MY_CHORD_COUNT (MY_CHORD_MAX - MY_CHORD_MIN + 1)
+static uint8_t chord_status[MY_CHORD_COUNT];
+static uint8_t my_tone_status[MIDI_TONE_COUNT];
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* C-system Base */
+ [_C_SYSTEM_BASE] = LAYOUT(
+ MI_CH_Dbr, MI_CH_Abr, MI_CH_Ebr, MI_CH_Bbr, MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr,
+ MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Fs,
+ MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm,
+ MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, MI_CH_FDom7, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_FsDom7,
+ MI_CH_DbDim7, MI_CH_AbDim7, MI_CH_EbDim7, MI_CH_BbDim7, MI_CH_FDim7, MI_CH_CDim7, MI_CH_GDim7, MI_CH_DDim7, MI_CH_ADim7, MI_CH_EDim7, MI_CH_BDim7, MI_CH_FsDim7,
+
+ MI_Fs_2,
+ MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5, MI_F_5, FN_MUTE,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5, MI_G_5,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5, MI_Fs_5
+ ),
+
+ /* fake B-system */
+ [_FAKE_B_SYSTEM] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+
+ MI_Ab_2,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Gb_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Gb_4, MI_A_4, MI_C_5, MI_Eb_5, MI_Gb_5, _______,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5, MI_G_5,
+ MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5, MI_F_5
+ ),
+
+ /* BASS2row */
+ [_C_SYSTEM_BASS2ROW] = LAYOUT(
+ MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr, MI_CH_Csr, MI_CH_Gsr, MI_CH_Dsr, MI_CH_Asr,
+ MI_CH_Dbr, MI_CH_Abr, MI_CH_Ebr, MI_CH_Bbr, MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr,
+ MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Fs,
+ MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm,
+ MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, MI_CH_FDom7, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_FsDom7,
+
+ MI_Fs_2,
+ MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5, MI_F_5, _______,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5, MI_G_5,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5, MI_Fs_5
+ ),
+
+ /* C-system entirely */
+ [_C_SYSTEM_ENTIRELY] = LAYOUT(
+ MI_BENDU, XXXXXXX, XXXXXXX, MI_Db, MI_E, MI_G, MI_Bb, MI_Db_1, MI_E_1, MI_G_1, MI_Bb_1, MI_Db_2,
+ MI_BENDD, XXXXXXX, MI_C, MI_Eb, MI_Fs, MI_A, MI_C_1, MI_Eb_1, MI_Fs_1, MI_A_1, MI_C_2, MI_Eb_2,
+ XXXXXXX, XXXXXXX, MI_D, MI_F, MI_Ab, MI_B, MI_D_1, MI_F_1, MI_Ab_1, MI_B_1, MI_D_2, MI_F_2,
+ XXXXXXX, MI_Db, MI_E, MI_G, MI_Bb, MI_Db_1, MI_E_1, MI_G_1, MI_Bb_1, MI_Db_2, MI_E_2, MI_G_2,
+ MI_C, MI_Eb, MI_Fs, MI_A, MI_C_1, MI_Eb_1, MI_Fs_1, MI_A_1, MI_C_2, MI_Eb_2, MI_Fs_2, MI_A_2,
+
+ MI_Fs_2,
+ MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5, MI_F_5, FN_MUTE,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5, MI_G_5,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5, MI_Fs_5
+ ),
+
+ /* C-system free bass */
+ [_C_SYSTEM_FREEBASS] = LAYOUT(
+ MI_Db_3, MI_Bb_2, MI_G_2, MI_E_2, MI_Db_2, MI_Bb_1, MI_G_1, MI_E_1, MI_Db_1, MI_Bb, MI_G, MI_E,
+ MI_C_3, MI_A_2, MI_Fs_2, MI_Eb_2, MI_C_2, MI_A_1, MI_Fs_1, MI_Eb_1, MI_C_1, MI_A, MI_Fs, MI_Eb,
+ MI_B_2, MI_Ab_2, MI_F_2, MI_D_2, MI_B_1, MI_Ab_1, MI_F_1, MI_D_1, MI_B, MI_Ab, MI_F, MI_D,
+ MI_Bb_2, MI_G_2, MI_E_2, MI_Db_2, MI_Bb_1, MI_G_1, MI_E_1, MI_Db_1, MI_Bb, MI_G, MI_E, MI_Db,
+ MI_A_2, MI_Fs_2, MI_Eb_2, MI_C_2, MI_A_1, MI_Fs_1, MI_Eb_1, MI_C_1, MI_A, MI_Fs, MI_Eb, MI_C,
+
+ MI_Fs_2,
+ MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5, MI_F_5, FN_MUTE,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5, MI_G_5,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5, MI_Fs_5
+ ),
+
+ /* Chromatone */
+ [_CHROMATONE] = LAYOUT(
+ MI_Db, MI_Eb, MI_F, MI_G, MI_A, MI_B, MI_Db_1, MI_Eb_1, MI_F_1, MI_G_1, MI_A_1, MI_B_1,
+ MI_D, MI_E, MI_Fs, MI_Ab, MI_Bb, MI_C_1, MI_D_1, MI_E_1, MI_Fs_1, MI_Ab_1, MI_Bb_1, MI_C_2,
+ MI_Eb, MI_F, MI_G, MI_A, MI_B, MI_Db_1, MI_Eb_1, MI_F_1, MI_G_1, MI_A_1, MI_B_1, MI_Db_2,
+ MI_E, MI_Fs, MI_Ab, MI_Bb, MI_C_1, MI_D_1, MI_E_1, MI_Fs_1, MI_Ab_1, MI_Bb_1, MI_C_2, MI_D_2,
+ MI_F, MI_G, MI_A, MI_B, MI_Db_1, MI_Eb_1, MI_F_1, MI_G_1, MI_A_1, MI_B_1, MI_Db_2, MI_Eb_2,
+
+ MI_C_2,
+ MI_Db_2, MI_Eb_2, MI_F_2, MI_G_2, MI_A_2, MI_B_2, MI_Db_3, MI_Eb_3, MI_F_3, MI_G_3, MI_A_3, MI_B_3, FN_MUTE,
+ MI_C_2, MI_D_2, MI_E_2, MI_Gb_2, MI_Ab_2, MI_Bb_2, MI_C_3, MI_D_3, MI_E_3, MI_Gb_3, MI_Ab_3, MI_Bb_3, MI_C_4,
+ MI_Db_2, MI_Eb_2, MI_F_2, MI_G_2, MI_A_2, MI_B_2, MI_Db_3, MI_Eb_3, MI_F_3, MI_G_3, MI_A_3, MI_B_3
+ ),
+
+ [_CFLIP_BASS2ROW] = LAYOUT(
+ MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr, MI_CH_Csr, MI_CH_Gsr, MI_CH_Dsr, MI_CH_Asr,
+ MI_CH_Dbr, MI_CH_Abr, MI_CH_Ebr, MI_CH_Bbr, MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr,
+ MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Fs,
+ MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm,
+ MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, MI_CH_FDom7, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_FsDom7,
+
+ MI_G_5,
+ MI_F_5, MI_D_5, MI_B_4, MI_Ab_4, MI_F_4, MI_D_4, MI_B_3, MI_Ab_3, MI_F_3, MI_D_3, MI_B_2, MI_Ab_2, FN_MUTE,
+ MI_Fs_5, MI_Eb_5, MI_C_5, MI_A_4, MI_Fs_4, MI_Eb_4, MI_C_4, MI_A_3, MI_Fs_3, MI_Eb_3, MI_C_3, MI_A_2, MI_Fs_2,
+ MI_E_5, MI_Db_5, MI_Bb_4, MI_G_4, MI_E_4, MI_Db_4, MI_Bb_3, MI_G_3, MI_E_3, MI_Db_3, MI_Bb_2, MI_G_2
+ ),
+
+ /* QWERTY */
+ [_QWERTY] = LAYOUT_wrapper(
+ KC_GESC, _________________NUMBER_L__________________, _________________NUMBER_R__________________, KC_BSPC,
+ KC_TAB, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_DEL,
+ KC_CAPS, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_ENT,
+ KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, ADJ_EIS, KC_SPC, KC_SPC, KC_LANG1, KC_APP, MO_ADJ, KC_LEFT, KC_DOWN, KC_RGHT,
+
+ _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ /* COLEMAK */
+ [_COLEMAK] = LAYOUT_wrapper(
+ KC_GESC, _________________NUMBER_L__________________, _________________NUMBER_R__________________, KC_BSPC,
+ KC_TAB, _________________COLEMAK_L1________________, _________________COLEMAK_R1________________, KC_DEL,
+ KC_LCTL, _________________COLEMAK_L2________________, _________________COLEMAK_R2________________, KC_ENT,
+ KC_LSFT, _________________COLEMAK_L3________________, _________________COLEMAK_R3________________, SHIF_UP,
+ KC_CAPS, KC_LGUI, KC_LALT, ADJ_EIS, KC_SPC, KC_SPC, KC_LANG1, KC_APP, MO_ADJ, KC_LEFT, KC_DOWN, KC_RGHT,
+
+ _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+ /* ADJUST */
+ [_ADJUST] = LAYOUT_wrapper(
+ _______, _________________FUNC__L___________________, _________________FUNC__R___________________, _______,
+ _______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_MINS, KC_EQL, _______,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, XXXXXXX, XXXXXXX, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_GRV, _______,
+ _______, KC_BRID, KC_BRIU, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_LBRC, KC_RBRC, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_QUOT, KC_BSLS, _______,
+
+ _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+
+
+ /* Fn */
+ [_FN] = LAYOUT(
+ CSYSTEM, BSYSTEM, CNTBASC, CSYSALL, CHRTONE, CFLIP2B, CSYSFBS, XXXXXXX, XXXXXXX, XXXXXXX, RGB_MOD, RGB_TOG,
+ DF_QWER, TGLBASS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ DF_COLE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TGLMICH,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ XXXXXXX,
+ MI_OCT_N2, MI_OCT_N1, MI_OCT_0, MI_OCT_1, MI_OCT_2, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION, EEP_RST, _______,
+ CSYSTEM, BSYSTEM, CNTBASC, CSYSALL, CHRTONE, CFLIP2B, CSYSFBS, XXXXXXX, XXXXXXX, MI_VELD, MI_VELU, RGB_MOD, RGB_TOG,
+ XXXXXXX, TGLBASS, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, TGLUVEL, MELDYAL, MELODYS, MELDYAH
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_C_SYSTEM_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_FAKE_B_SYSTEM] = { ENCODER_CCW_CW(_______, _______) },
+ [_C_SYSTEM_BASS2ROW] = { ENCODER_CCW_CW(_______, _______) },
+ [_C_SYSTEM_ENTIRELY] = { ENCODER_CCW_CW(_______, _______) },
+ [_C_SYSTEM_FREEBASS] = { ENCODER_CCW_CW(_______, _______) },
+ [_CHROMATONE] = { ENCODER_CCW_CW(_______, _______) },
+ [_CFLIP_BASS2ROW] = { ENCODER_CCW_CW(_______, _______) },
+ [_QWERTY] = { ENCODER_CCW_CW(_______, _______) },
+ [_COLEMAK] = { ENCODER_CCW_CW(_______, _______) },
+ [_ADJUST] = { ENCODER_CCW_CW(_______, _______) },
+ [_FN] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD) },
+};
+#endif
+
+#ifdef RGBLIGHT_ENABLE
+
+// Light up adjust layer keys (left keyboard)
+const rgblight_segment_t PROGMEM my_adjust_layer[] = RGBLIGHT_LAYER_SEGMENTS({1, 10, HSV_ORANGE},
+ {21, 2, HSV_ORANGE},
+ {25, 3, HSV_ORANGE},
+ {30, 5, HSV_ORANGE},
+ {37, 2, HSV_ORANGE},
+ {45, 2, HSV_ORANGE},
+ {57, 2, HSV_ORANGE}
+);
+
+// Light up fn layer keys
+const rgblight_segment_t PROGMEM my_fn_layer[] = RGBLIGHT_LAYER_SEGMENTS( // left keyboard
+ {0, 7, HSV_ORANGE}, // MIDI layouts
+ {11, 1, HSV_RED}, // RGB_TOG
+ {12, 1, HSV_WHITE}, // DF_QWER
+ {13, 1, HSV_CORAL}, // TGLBASS
+ {24, 1, HSV_WHITE}, // DF_COLE
+ {35, 1, HSV_TEAL}, // TGLMICH
+#if 0 // Color Test
+ {36, 1, HSV_WHITE},
+ {37, 1, HSV_RED},
+ {38, 1, HSV_CORAL},
+ {39, 1, HSV_ORANGE},
+ {40, 1, HSV_GOLDENROD},
+ {41, 1, HSV_GOLD},
+ {42, 1, HSV_YELLOW},
+ {43, 1, HSV_CHARTREUSE},
+ {44, 1, HSV_GREEN},
+ {45, 1, HSV_SPRINGGREEN},
+ {46, 1, HSV_TURQUOISE},
+ {47, 1, HSV_TEAL},
+ {48, 1, HSV_CYAN},
+ {49, 1, HSV_AZURE},
+ {50, 1, HSV_BLUE},
+ {51, 1, HSV_PURPLE},
+ {52, 1, HSV_MAGENTA},
+ {53, 1, HSV_PINK},
+#endif
+ // right keyboard
+ {60, 7, HSV_ORANGE}, // MIDI layouts
+ {74, 1, HSV_CORAL}, // TGLBASS
+ {85, 1, HSV_BLUE}, // MIDI Oct
+ {86, 1, HSV_CYAN}, // MIDI Oct
+ {87, 1, HSV_SPRINGGREEN}, // MIDI Oct
+ {88, 1, HSV_GREEN}, // MIDI Oct
+ {89, 1, HSV_CHARTREUSE}, // MIDI Oct
+ {96, 1, HSV_PINK}, // EEP_RST
+ {98, 7, HSV_ORANGE}, // MIDI layouts
+ {107, 1, HSV_YELLOW}, // MI_VELD
+ {108, 1, HSV_GREEN}, // MI_VELU
+ {110, 1, HSV_RED}, // RGB_TOG
+ {112, 1, HSV_CORAL}, // TGLBASS
+ {119, 1, HSV_CORAL}, // TGLUVEL
+ {120, 1, HSV_CYAN}, // MELDYAL
+ {121, 1, HSV_GOLD}, // MELODYS
+ {122, 1, HSV_SPRINGGREEN} // MELDYAH
+);
+
+// Now define the array of layers. Later layers take precedence
+const rgblight_segment_t* const PROGMEM my_rgb_layers[] = RGBLIGHT_LAYERS_LIST(my_fn_layer, my_adjust_layer);
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ // Both layers will light up if both kb layers are active
+ rgblight_set_layer_state(0, layer_state_cmp(state, _FN));
+ rgblight_set_layer_state(1, layer_state_cmp(state, _ADJUST));
+ return state;
+};
+
+#endif // RGBLIGHT_ENABLE
+
+void my_init(void){
+ // Set octave to MI_OCT_0
+ midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
+ // avoid using 127 since it is used as a special number in some sound sources.
+ midi_config.velocity = MIDI_INITIAL_VELOCITY;
+}
+
+void eeconfig_init_user(void) {
+ midi_init();
+ my_init();
+
+ // Used to set octave to MI_OCT_0
+ midi_bass_ch = 0, midi_chord_ch = 0; // By default, all use the same channel.
+
+ // UNISON flags
+ melody_dyad_high = false; // true when +1 octave unison dyad is enabled.
+ melody_dyad_low = false; // true when -1 octave unison dyad is enabled.
+ melody_unison_suppress = true; // true: velocity of octave unison note is suppressd to UNISON_VELOCITY_RATIO
+
+ // Reset Bass setting
+ user_config.raw = 0; // default: dyad
+ eeconfig_update_user(user_config.raw);
+
+ // Reset the midi keyboard layout
+ set_single_persistent_default_layer(_C_SYSTEM_BASS2ROW);
+
+#ifdef RGB_MATRIX_ENABLE
+ rgb_matrix_sethsv(HSV_BLUE);
+ // party mode (for LED soldering test.)
+ rgb_matrix_mode(RGB_MATRIX_RAINBOW_MOVING_CHEVRON);
+#endif
+}
+
+#ifdef RGB_MATRIX_ENABLE
+void rgb_matrix_indicators_user(void) {
+ uint8_t i;
+ // uint32_t mode = rgblight_get_mode();
+
+ if (rgb_matrix_is_enabled()) { // turn the lights on when it is enabled.
+
+ uint8_t layer = biton32(layer_state);
+
+ switch (layer) {
+ case _ADJUST:
+ rgb_matrix_set_color(30, RGB_DARKORANGE);
+ rgb_matrix_set_color(34, RGB_DARKORANGE);
+ // rgb_matrix_set_color(72, RGB_DARKORANGE);
+ break;
+ case _FN:
+ for (i = 0;i < 7;i++) {
+ rgb_matrix_set_color(74 - i, RGB_DARKORANGE); // MIDI layouts
+ // right keyboard
+ rgb_matrix_set_color(i, RGB_DARKORANGE); // MIDI layouts
+ rgb_matrix_set_color(50 - i, RGB_DARKORANGE); // MIDI layouts
+ }
+
+ // rgb_matrix_set_color(pgm_read_byte(&convert_led_location2number[11]), RGB_RED); // RGB_TOG <- too heavy.
+ rgb_matrix_set_color(64, RGB_DARKBLUE); // RGB_MOD
+ rgb_matrix_set_color(63, RGB_DARKRED); // RGB_TOG
+ rgb_matrix_set_color(76, RGB_DARKCORAL); // TGLBASS
+
+ rgb_matrix_set_color(75, RGB_DARKWHITE); // DF_QWER
+ rgb_matrix_set_color(98, RGB_DARKWHITE); // DF_COLE
+ rgb_matrix_set_color(87, RGB_DARKTEAL); // TGLMICH
+
+ rgb_matrix_set_color(23, RGB_DARKCORAL); // TGLBASS
+ rgb_matrix_set_color(26, RGB_DARKBLUE); // MIDI Oct
+ rgb_matrix_set_color(27, RGB_DARKCYAN); // MIDI Oct
+ rgb_matrix_set_color(28, RGB_DARKSPRINGGREEN); // MIDI Oct
+ rgb_matrix_set_color(29, RGB_DARKGREEN); // MIDI Oct
+ rgb_matrix_set_color(30, RGB_DARKCHARTREUSE); // MIDI Oct
+ rgb_matrix_set_color(37, RGB_DARKPINK); // EEP_RST
+ rgb_matrix_set_color(41, RGB_DARKYELLOW); // MI_VELD
+ rgb_matrix_set_color(40, RGB_DARKGREEN); // MI_VELU
+ rgb_matrix_set_color(39, RGB_DARKBLUE); // RGB_MOD
+ rgb_matrix_set_color(38, RGB_DARKRED); // RGB_TOG
+ rgb_matrix_set_color(52, RGB_DARKCORAL); // TGLBASS
+ rgb_matrix_set_color(59, RGB_DARKCORAL); // TGLUVEL
+ rgb_matrix_set_color(60, RGB_DARKCYAN); // MELDYAL
+ rgb_matrix_set_color(61, RGB_DARKGOLD); // MELODYS
+ rgb_matrix_set_color(62, RGB_DARKSPRINGGREEN); // MELDYAH
+ break;
+ }
+ }
+}
+#endif
+
+void keyboard_post_init_user(void) {
+ my_init();
+
+ for (uint8_t i = 0; i < MY_CHORD_COUNT; i++) {
+ chord_status[i] = MIDI_INVALID_NOTE;
+ }
+
+ for (uint8_t i = 0; i < MIDI_TONE_COUNT; i++) {
+ my_tone_status[i] = MIDI_INVALID_NOTE;
+ }
+ // load EEPROM data for isSingleBass
+ user_config.raw = eeconfig_read_user();
+
+#ifdef RGBLIGHT_ENABLE
+
+ rgblight_layers = my_rgb_layers;
+
+ // Reset LED off
+ rgblight_sethsv(HSV_BLACK);
+# if defined(RGBLIGHT_EFFECT_KNIGHT) || defined(RGBLIGHT_EFFECT_TWINKLE)
+ rgblight_sethsv(30, 50, 40);
+# ifdef RGBLIGHT_EFFECT_KNIGHT
+ rgblight_mode(RGBLIGHT_MODE_KNIGHT);
+# elif defined(RGBLIGHT_EFFECT_TWINKLE)
+ rgblight_mode(RGBLIGHT_MODE_TWINKLE+3);
+# endif
+# endif
+#endif // RGBLIGHT_ENABLE
+
+#ifdef RGB_MATRIX_ENABLE
+ rgb_matrix_sethsv(HSV_BLUE);
+ // party mode (for LED soldering test.)
+ rgb_matrix_mode(RGB_MATRIX_RAINBOW_MOVING_CHEVRON);
+#endif
+};
+
+void toggle_isSingleBass(void) {
+#ifdef CONSOLE_ENABLE
+ uprintf("isSingleBass(before) %u\n", user_config.isSingleBass);
+#endif
+ user_config.isSingleBass = !user_config.isSingleBass;
+#ifdef CONSOLE_ENABLE
+ uprintf("isSingleBass(after) %u\n", user_config.isSingleBass);
+#endif
+
+ eeconfig_update_user(user_config.raw);
+}
+
+void toggle_MIDI_channel_separation(void) {
+ if (midi_chord_ch > 0) {
+ midi_chord_ch = 0;
+ midi_bass_ch = 0;
+ } else {
+ midi_chord_ch = 1;
+ midi_bass_ch = 2;
+ }
+}
+
+#ifdef RGBLIGHT_ENABLE
+void keylight_manager(keyrecord_t *record, uint8_t hue, uint8_t sat, uint8_t val, uint8_t keylocation) {
+ if (keylocation == NO_LED) {
+ return; // do nothing.
+# ifdef CONSOLE_ENABLE
+ uprintf("keylight_manager, NO_LED\n");
+# endif
+ }
+
+ if (record->event.pressed) {
+ rgblight_sethsv_at(hue, sat, val, keylocation);
+ } else {
+ rgblight_sethsv_at(HSV_BLACK, keylocation);
+ }
+}
+#endif // RGBLIGHT_ENABLE
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint16_t root_note = MIDI_INVALID_NOTE; // Starting value for the root note of each chord
+
+#ifdef RGBLIGHT_ENABLE
+ /* prepare for turning on LEDs when keys are pressed. */
+ uint8_t r = record->event.key.row;
+ uint8_t c = record->event.key.col;
+ // uint8_t keylocation = convert_key_to_led[MATRIX_COLS * r + c];
+ // uint8_t keylocation2 = convert_key_to_led2[MATRIX_COLS * r + c];
+ uint8_t keylocation = pgm_read_byte(&convert_key_to_led[MATRIX_COLS * r + c]);
+ uint8_t keylocation2 = pgm_read_byte(&convert_key_to_led2[MATRIX_COLS * r + c]);
+#endif // RGBLIGHT_ENABLE
+
+ uint8_t chord = keycode - MY_CHORD_MIN;
+
+ switch (keycode) {
+ case VERSION: // Output firmware info.
+ if (record->event.pressed) {
+ SEND_STRING(QMK_KEYBOARD ":" QMK_KEYMAP " @ " QMK_VERSION " | " QMK_BUILDDATE);
+ }
+ break;
+
+ // set default layer and save it to EEPROM when MIDI key layers are selected.
+ case CSYSTEM:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_C_SYSTEM_BASE);
+ }
+ break;
+
+ case BSYSTEM:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_FAKE_B_SYSTEM);
+ }
+ break;
+
+ case CNTBASC:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_C_SYSTEM_BASS2ROW);
+ }
+ break;
+
+ case CSYSALL:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_C_SYSTEM_ENTIRELY);
+ }
+ break;
+
+ case CHRTONE:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_CHROMATONE);
+ }
+ break;
+
+ case CFLIP2B:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_CFLIP_BASS2ROW);
+ }
+ break;
+
+ case CSYSFBS:
+ if (record->event.pressed) {
+ set_single_persistent_default_layer(_C_SYSTEM_FREEBASS);
+ }
+ break;
+
+ case TGLBASS:
+ if (record->event.pressed) {
+ toggle_isSingleBass();
+ };
+ break;
+
+ case TGLMICH:
+ if (record->event.pressed) {
+ toggle_MIDI_channel_separation();
+ };
+ break;
+
+ case MELDYAL:
+ if (record->event.pressed) {
+ melody_dyad_low = true;
+ melody_dyad_high = false;
+ };
+ break;
+
+ case MELODYS:
+ if (record->event.pressed) {
+ melody_dyad_low = false;
+ melody_dyad_high = false;
+ };
+ break;
+
+ case MELDYAH:
+ if (record->event.pressed) {
+ melody_dyad_low = false;
+ melody_dyad_high = true;
+ };
+ break;
+
+ case TGLUVEL:
+ if (record->event.pressed) {
+ melody_unison_suppress = !melody_unison_suppress;
+ };
+ break;
+
+ // MIDI Chord Keycodes, on the left side.
+ case MI_CH_Cr ... MI_CH_Br: // Root Notes
+ root_note = keycode - MI_CH_Cr + MI_C_1;
+ my_process_midi4Bass(midi_bass_ch, record, chord_status, chord, root_note, IS_SINGLE_BASS());
+#ifdef RGBLIGHT_ENABLE
+ keylight_manager(record, HSV_GOLDENROD, keylocation);
+#endif
+ break;
+
+ case MI_CH_C ... MI_CH_B: // Major Chords
+ root_note = keycode - MI_CH_C + MI_C_2;
+ // Root, Major Third, and Fifth Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 4, 7);
+#ifdef RGBLIGHT_ENABLE
+ keylight_manager(record, HSV_GOLDENROD, keylocation);
+#endif
+ break;
+
+ case MI_CH_Cm ... MI_CH_Bm: // Minor Chord
+ root_note = keycode - MI_CH_Cm + MI_C_2;
+ // Root, Minor Third, and Fifth Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 3, 7);
+#ifdef RGBLIGHT_ENABLE
+ keylight_manager(record, HSV_GOLDENROD, keylocation);
+#endif
+ break;
+
+ case MI_CH_CDom7 ... MI_CH_BDom7: // Dominant 7th Chord
+ root_note = keycode - MI_CH_CDom7 + MI_C_2;
+ // Major Third, Major Fifth, and Minor Seventh Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 4, 7, 10);
+#ifdef RGBLIGHT_ENABLE
+ keylight_manager(record, HSV_GOLDENROD, keylocation);
+#endif
+ break;
+
+ case MI_CH_CDim7 ... MI_CH_BDim7: // Diminished 7th Chord
+ root_note = keycode - MI_CH_CDim7 + MI_C_2;
+ // Root, Minor Third, and Diminished 5th Note
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 3, 6);
+#ifdef RGBLIGHT_ENABLE
+ keylight_manager(record, HSV_GOLDENROD, keylocation);
+#endif
+ break;
+
+#ifdef RGBLIGHT_ENABLE
+ case KC_A ... KC_RGUI: // for QWERTY
+ case KC_GESC:
+ case ADJ_EIS:
+ case MO_ADJ:
+ case SHIF_UP:
+ keylight_manager(record, HSV_GOLDENROD, keylocation);
+ break;
+#endif
+
+ // Keycodes on the right side.
+ case MIDI_TONE_MIN ... MIDI_TONE_MAX: // notes on the right side keyboard.
+ // root_note is played by process_midi().
+ if ( melody_dyad_high == true ) { // play 1 octave higher as well.
+ my_process_midi(0, keycode, record, my_tone_status, 12, melody_unison_suppress);
+ } else if ( melody_dyad_low == true ) { // play 1 octave lower as well.
+ my_process_midi(0, keycode, record, my_tone_status, -12, melody_unison_suppress);
+ }
+#ifdef RGBLIGHT_ENABLE
+ keylight_manager(record, HSV_GOLDENROD, keylocation);
+ keylight_manager(record, HSV_GOLDENROD, keylocation2);
+#endif
+ break;
+
+#ifdef RGBLIGHT_ENABLE
+ // case KC_MUTE:
+ case FN_MUTE:
+ keylight_manager(record, HSV_GOLDENROD, keylocation);
+ break;
+#endif
+ }
+ // If console is enabled, it will print the matrix position and status of each key pressed
+#if defined(CONSOLE_ENABLE) && defined(RGBLIGHT_ENABLE)
+ uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
+ uprintf("r=%d, c=%d, keyloc=%d, keyloc2=%d, matrix_col x r + c = %d\n", r, c, keylocation, keylocation2, MATRIX_COLS * r + c);
+#endif
+ return true;
+}
diff --git a/keyboards/giabalanai/keymaps/party/readme.md b/keyboards/giabalanai/keymaps/party/readme.md
new file mode 100644
index 00000000000..797fed76f83
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/party/readme.md
@@ -0,0 +1,3 @@
+# The fancy LED ver. for giabalanai
+# warning: There is little space left for the firmware. You can't do anything further with this firmware.
+# Power consumption might exceed 5 V * 500 mA = 2.5 W or so.
diff --git a/keyboards/giabalanai/keymaps/party/rgb_matrix_user.inc b/keyboards/giabalanai/keymaps/party/rgb_matrix_user.inc
new file mode 100644
index 00000000000..40ce7148d31
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/party/rgb_matrix_user.inc
@@ -0,0 +1,57 @@
+#ifdef RGB_MATRIX_KEYREACTIVE_ENABLED
+RGB_MATRIX_EFFECT(my_solid_reactive_with_CnoteIndicator)
+RGB_MATRIX_EFFECT(my_party_rocks)
+
+# ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+
+bool my_solid_reactive_with_CnoteIndicator(effect_params_t* params) {
+ RGB_MATRIX_USE_LIMITS(led_min, led_max);
+
+ uint16_t max_tick = 65535 / rgb_matrix_config.speed;
+ for (uint8_t i = led_min; i < led_max; i++) {
+ RGB_MATRIX_TEST_LED_FLAGS();
+ HSV hsv = rgb_matrix_config.hsv;
+ switch (i) {
+ // C note indicator
+ case 15:
+ case 19:
+ case 23:
+ case 52:
+ case 56:
+ case 60:
+ case 80: // left hand side, bass C note when counter bass is chosen.
+ // HSV_GOLDENROD
+ hsv.h = 30;
+ hsv.s = 218;
+ hsv.v = 218;
+ break;
+ }
+ uint16_t tick = max_tick;
+ // Reverse search to find most recent key hit
+ for (int8_t j = g_last_hit_tracker.count - 1; j >= 0; j--) {
+ if (g_last_hit_tracker.x[j] == g_led_config.point[i].x && g_last_hit_tracker.y[j] == g_led_config.point[i].y && g_last_hit_tracker.tick[j] < tick) {
+ tick = g_last_hit_tracker.tick[j];
+ break;
+ }
+ }
+
+ uint16_t offset = scale16by8(tick, rgb_matrix_config.speed);
+ hsv.h += qsub8(130, offset);
+ RGB rgb = rgb_matrix_hsv_to_rgb(hsv);
+ rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
+ }
+ return led_max < DRIVER_LED_TOTAL;
+}
+
+bool my_party_rocks(effect_params_t* params) {
+ RGB_MATRIX_USE_LIMITS(led_min, led_max);
+ HSV hsv = {rand() & 0xFF, rand() & 0xFF, rgb_matrix_config.hsv.v};
+ RGB rgb = rgb_matrix_hsv_to_rgb(hsv);
+ // rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
+ rgb_matrix_set_color_all(rgb.r, rgb.g, rgb.b);
+ return led_max < DRIVER_LED_TOTAL;
+}
+
+
+# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
+#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
diff --git a/keyboards/giabalanai/keymaps/party/rules.mk b/keyboards/giabalanai/keymaps/party/rules.mk
new file mode 100644
index 00000000000..c05207feebe
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/party/rules.mk
@@ -0,0 +1,6 @@
+# RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
+CONSOLE_ENABLE = no # Console for debug
+RGB_MATRIX_ENABLE = yes # Use RGB matrix (Don't enable this when RGBLIGHT_ENABLE is used.)
+RGB_MATRIX_CUSTOM_USER = yes #
+
+ENCODER_MAP_ENABLE = yes # replacing ENCODERS_CW_KEY method to this on 2022/08/31.
diff --git a/keyboards/giabalanai/keymaps/via/config.h b/keyboards/giabalanai/keymaps/via/config.h
new file mode 100644
index 00000000000..a3b77a5b4d0
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/via/config.h
@@ -0,0 +1,3 @@
+#pragma once
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 3
diff --git a/keyboards/giabalanai/keymaps/via/keymap.c b/keyboards/giabalanai/keymaps/via/keymap.c
new file mode 100644
index 00000000000..774260d052e
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/via/keymap.c
@@ -0,0 +1,260 @@
+/* Copyright 2020 3araht
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+#include "version.h"
+
+// Alias layout macros that expand groups of keys.
+#define LAYOUT_wrapper(...) LAYOUT(__VA_ARGS__)
+
+#define DFCBASE DF(_C_SYSTEM_BASE)
+#define DF_QWER DF(_QWERTY)
+// Long press: go to _FN layer, tap: MUTE
+#define FN_MUTE LT(_FN, KC_MUTE)
+
+// Used to set octave to MI_OCT_0
+extern midi_config_t midi_config;
+uint8_t midi_bass_ch = 0, midi_chord_ch = 0; // By default, all use the same channel.
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _C_SYSTEM_BASE, // MIDI C-system
+ _QWERTY, // just in case
+ _FN
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+
+ // MIDI Chord Keycodes - Root notes
+ MY_CHORD_MIN = SAFE_RANGE,
+
+ MI_CH_Cr = MY_CHORD_MIN,
+ MI_CH_Csr,
+ MI_CH_Dbr = MI_CH_Csr,
+ MI_CH_Dr,
+ MI_CH_Dsr,
+ MI_CH_Ebr = MI_CH_Dsr,
+ MI_CH_Er,
+ MI_CH_Fr,
+ MI_CH_Fsr,
+ MI_CH_Gbr = MI_CH_Fsr,
+ MI_CH_Gr,
+ MI_CH_Gsr,
+ MI_CH_Abr = MI_CH_Gsr,
+ MI_CH_Ar,
+ MI_CH_Asr,
+ MI_CH_Bbr = MI_CH_Asr,
+ MI_CH_Br,
+
+ // MIDI Chord Keycodes - Major
+
+ MI_CH_C,
+ MI_CH_Cs,
+ MI_CH_Db = MI_CH_Cs,
+ MI_CH_D,
+ MI_CH_Ds,
+ MI_CH_Eb = MI_CH_Ds,
+ MI_CH_E,
+ MI_CH_F,
+ MI_CH_Fs,
+ MI_CH_Gb = MI_CH_Fs,
+ MI_CH_G,
+ MI_CH_Gs,
+ MI_CH_Ab = MI_CH_Gs,
+ MI_CH_A,
+ MI_CH_As,
+ MI_CH_Bb = MI_CH_As,
+ MI_CH_B,
+
+ // MIDI Chord Keycodes Minor
+
+ MI_CH_Cm,
+ MI_CH_Csm,
+ MI_CH_Dbm = MI_CH_Csm,
+ MI_CH_Dm,
+ MI_CH_Dsm,
+ MI_CH_Ebm = MI_CH_Dsm,
+ MI_CH_Em,
+ MI_CH_Fm,
+ MI_CH_Fsm,
+ MI_CH_Gbm = MI_CH_Fsm,
+ MI_CH_Gm,
+ MI_CH_Gsm,
+ MI_CH_Abm = MI_CH_Gsm,
+ MI_CH_Am,
+ MI_CH_Asm,
+ MI_CH_Bbm = MI_CH_Asm,
+ MI_CH_Bm,
+
+ //MIDI Chord Keycodes Dominant Seventh
+
+ MI_CH_CDom7,
+ MI_CH_CsDom7,
+ MI_CH_DbDom7 = MI_CH_CsDom7,
+ MI_CH_DDom7,
+ MI_CH_DsDom7,
+ MI_CH_EbDom7 = MI_CH_DsDom7,
+ MI_CH_EDom7,
+ MI_CH_FDom7,
+ MI_CH_FsDom7,
+ MI_CH_GbDom7 = MI_CH_FsDom7,
+ MI_CH_GDom7,
+ MI_CH_GsDom7,
+ MI_CH_AbDom7 = MI_CH_GsDom7,
+ MI_CH_ADom7,
+ MI_CH_AsDom7,
+ MI_CH_BbDom7 = MI_CH_AsDom7,
+ MI_CH_BDom7,
+
+ // MIDI Chord Keycodes Diminished Seventh
+
+ MI_CH_CDim7,
+ MI_CH_CsDim7,
+ MI_CH_DbDim7 = MI_CH_CsDim7,
+ MI_CH_DDim7,
+ MI_CH_DsDim7,
+ MI_CH_EbDim7 = MI_CH_DsDim7,
+ MI_CH_EDim7,
+ MI_CH_FDim7,
+ MI_CH_FsDim7,
+ MI_CH_GbDim7 = MI_CH_FsDim7,
+ MI_CH_GDim7,
+ MI_CH_GsDim7,
+ MI_CH_AbDim7 = MI_CH_GsDim7,
+ MI_CH_ADim7,
+ MI_CH_AsDim7,
+ MI_CH_BbDim7 = MI_CH_AsDim7,
+ MI_CH_BDim7,
+
+ MY_CHORD_MAX = MI_CH_BDim7,
+
+ VERSION = USER00
+};
+
+#define MY_CHORD_COUNT (MY_CHORD_MAX - MY_CHORD_MIN + 1)
+static uint8_t chord_status[MY_CHORD_COUNT];
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* C-system Base */
+ [_C_SYSTEM_BASE] = LAYOUT(
+ MI_CH_Dbr, MI_CH_Abr, MI_CH_Ebr, MI_CH_Bbr, MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr,
+ MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Fs,
+ MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm,
+ MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, MI_CH_FDom7, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_FsDom7,
+ MI_CH_DbDim7, MI_CH_AbDim7, MI_CH_EbDim7, MI_CH_BbDim7, MI_CH_FDim7, MI_CH_CDim7, MI_CH_GDim7, MI_CH_DDim7, MI_CH_ADim7, MI_CH_EDim7, MI_CH_BDim7, MI_CH_FsDim7,
+
+ MI_Fs_2,
+ MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5, MI_F_5, FN_MUTE,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5, MI_G_5,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5, MI_Fs_5
+ ),
+
+ /* QWERTY */
+ [_QWERTY] = LAYOUT_wrapper(
+ KC_GESC, _________________NUMBER_L__________________, _________________NUMBER_R__________________, KC_BSPC,
+ KC_TAB, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_DEL,
+ KC_CAPS, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_ENT,
+ KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LANG2, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_LANG1, KC_RALT, KC_RGUI, KC_RCTRL,
+
+ KC_GESC,
+ _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_MINS, KC_BSPC, _______,
+ KC_LCTL, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_QUOT, KC_ENT,
+ KC_LALT, _________________QWERTY_L3_________________, KC_N, KC_M, KC_COMM, KC_DOT, KC_SPC, KC_RSFT
+ ),
+
+ /* Fn */
+ [_FN] = LAYOUT(
+ DFCBASE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ DF_QWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ _______,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION, XXXXXXX, _______,
+ DFCBASE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ DF_QWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_C_SYSTEM_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_QWERTY] = { ENCODER_CCW_CW(_______, _______) },
+ [_FN] = { ENCODER_CCW_CW(_______, _______) },
+};
+#endif
+
+void keyboard_post_init_user(void) {
+ // Set otave to MI_OCT_0
+ midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
+
+ // avoid using 127 since it is used as a special number in some sound sources.
+ midi_config.velocity = MIDI_INITIAL_VELOCITY;
+
+
+ for (uint8_t i = 0; i < MY_CHORD_COUNT; i++) {
+ chord_status[i] = MIDI_INVALID_NOTE;
+ }
+
+ default_layer_set(1UL << _C_SYSTEM_BASE);
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint16_t root_note = MIDI_INVALID_NOTE; // Starting value for the root note of each chord
+
+ uint8_t chord = keycode - MY_CHORD_MIN;
+
+ switch (keycode) {
+ case VERSION: // Output firmware info.
+ if (record->event.pressed) {
+ SEND_STRING(QMK_KEYBOARD ":" QMK_KEYMAP " @ " QMK_VERSION " | " QMK_BUILDDATE);
+ }
+ break;
+
+ // MIDI Chord Keycodes, on the left side.
+ case MI_CH_Cr ... MI_CH_Br: // Root Notes
+ root_note = keycode - MI_CH_Cr + MI_C_1;
+ my_process_midi4Bass(midi_bass_ch, record, chord_status, chord, root_note, false);
+ break;
+
+ case MI_CH_C ... MI_CH_B: // Major Chords
+ root_note = keycode - MI_CH_C + MI_C_2;
+ // Root, Major Third, and Fifth Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 4, 7);
+ break;
+
+ case MI_CH_Cm ... MI_CH_Bm: // Minor Chord
+ root_note = keycode - MI_CH_Cm + MI_C_2;
+ // Root, Minor Third, and Fifth Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 3, 7);
+ break;
+
+ case MI_CH_CDom7 ... MI_CH_BDom7: // Dominant 7th Chord
+ root_note = keycode - MI_CH_CDom7 + MI_C_2;
+ // Major Third, Major Fifth, and Minor Seventh Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 4, 7, 10);
+ break;
+
+ case MI_CH_CDim7 ... MI_CH_BDim7: // Diminished 7th Chord
+ root_note = keycode - MI_CH_CDim7 + MI_C_2;
+ // Root, Minor Third, and Diminished 5th Note
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 3, 6);
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/giabalanai/keymaps/via/readme.md b/keyboards/giabalanai/keymaps/via/readme.md
new file mode 100644
index 00000000000..3c599bfe0e3
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/via/readme.md
@@ -0,0 +1 @@
+# The default VIA keymap for giabalanai
diff --git a/keyboards/giabalanai/keymaps/via/rules.mk b/keyboards/giabalanai/keymaps/via/rules.mk
new file mode 100644
index 00000000000..da4a83087f4
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/via/rules.mk
@@ -0,0 +1,3 @@
+VIA_ENABLE = yes
+
+ENCODER_MAP_ENABLE = yes # replacing ENCODERS_CW_KEY method to this on 2022/08/31.
diff --git a/keyboards/giabalanai/keymaps/via_giabarinaix2/config.h b/keyboards/giabalanai/keymaps/via_giabarinaix2/config.h
new file mode 100644
index 00000000000..01905b8dfec
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/via_giabarinaix2/config.h
@@ -0,0 +1,27 @@
+#pragma once
+
+#define DYNAMIC_KEYMAP_LAYER_COUNT 3
+#define GIABARINAIX2
+#ifdef GIABARINAIX2
+# undef MATRIX_ROW_PINS_RIGHT
+# undef MATRIX_COL_PINS_RIGHT
+
+# ifdef RGBLIGHT_ENABLE
+# undef RGBLED_NUM
+# define RGBLED_NUM 120
+# undef RGBLIGHT_LED_MAP
+# define RGBLIGHT_LED_MAP { \
+ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, \
+ 107, 106, 105, 104, 103, 102, 101, 100, 99, 98, 97, 96, \
+ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, \
+ 83, 82, 81, 80, 79, 78, 77, 76, 75, 74, 73, 72, \
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, \
+ \
+ 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, \
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, \
+ 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, \
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, \
+ 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48 \
+ }
+# endif
+#endif
diff --git a/keyboards/giabalanai/keymaps/via_giabarinaix2/info.json b/keyboards/giabalanai/keymaps/via_giabarinaix2/info.json
new file mode 100644
index 00000000000..20a52326dd6
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/via_giabarinaix2/info.json
@@ -0,0 +1,146 @@
+{
+ "keyboard_name": "giabarinaix2",
+ "manufacturer": "3araht",
+ "url": "https://github.com/3araht",
+ "maintainer": "3araht",
+ "usb": {
+ "vid": "0xFEED",
+ "pid": "0xF4B2",
+ "device_version": "0.0.1"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "l00", "x": 0, "y": 0},
+ {"label": "l01", "x": 1, "y": 0},
+ {"label": "l02", "x": 2, "y": 0},
+ {"label": "l03", "x": 3, "y": 0},
+ {"label": "l04", "x": 4, "y": 0},
+ {"label": "l05", "x": 5, "y": 0},
+ {"label": "l06", "x": 6, "y": 0},
+ {"label": "l07", "x": 7, "y": 0},
+ {"label": "l08", "x": 8, "y": 0},
+ {"label": "l09", "x": 9, "y": 0},
+ {"label": "l0a", "x": 10, "y": 0},
+ {"label": "l0b", "x": 11, "y": 0},
+
+ {"label": "r00", "x": 14.5, "y": 0},
+ {"label": "r01", "x": 15.5, "y": 0},
+ {"label": "r02", "x": 16.5, "y": 0},
+ {"label": "r03", "x": 17.5, "y": 0},
+ {"label": "r04", "x": 18.5, "y": 0},
+ {"label": "r05", "x": 19.5, "y": 0},
+ {"label": "r06", "x": 20.5, "y": 0},
+ {"label": "r07", "x": 21.5, "y": 0},
+ {"label": "r08", "x": 22.5, "y": 0},
+ {"label": "r09", "x": 23.5, "y": 0},
+ {"label": "r0a", "x": 24.5, "y": 0},
+ {"label": "r0b", "x": 25.5, "y": 0},
+
+ {"label": "l10", "x": 0.5, "y": 1},
+ {"label": "l11", "x": 1.5, "y": 1},
+ {"label": "l12", "x": 2.5, "y": 1},
+ {"label": "l13", "x": 3.5, "y": 1},
+ {"label": "l14", "x": 4.5, "y": 1},
+ {"label": "l15", "x": 5.5, "y": 1},
+ {"label": "l16", "x": 6.5, "y": 1},
+ {"label": "l17", "x": 7.5, "y": 1},
+ {"label": "l18", "x": 8.5, "y": 1},
+ {"label": "l19", "x": 9.5, "y": 1},
+ {"label": "l1a", "x": 10.5, "y": 1},
+ {"label": "l1b", "x": 11.5, "y": 1},
+
+ {"label": "r10", "x": 15, "y": 1},
+ {"label": "r11", "x": 16, "y": 1},
+ {"label": "r12", "x": 17, "y": 1},
+ {"label": "r13", "x": 18, "y": 1},
+ {"label": "r14", "x": 19, "y": 1},
+ {"label": "r15", "x": 20, "y": 1},
+ {"label": "r16", "x": 21, "y": 1},
+ {"label": "r17", "x": 22, "y": 1},
+ {"label": "r18", "x": 23, "y": 1},
+ {"label": "r19", "x": 24, "y": 1},
+ {"label": "r1a", "x": 25, "y": 1},
+ {"label": "r1b", "x": 26, "y": 1},
+
+ {"label": "l20", "x": 1, "y": 2},
+ {"label": "l21", "x": 2, "y": 2},
+ {"label": "l22", "x": 3, "y": 2},
+ {"label": "l23", "x": 4, "y": 2},
+ {"label": "l24", "x": 5, "y": 2},
+ {"label": "l25", "x": 6, "y": 2},
+ {"label": "l26", "x": 7, "y": 2},
+ {"label": "l27", "x": 8, "y": 2},
+ {"label": "l28", "x": 9, "y": 2},
+ {"label": "l29", "x": 10, "y": 2},
+ {"label": "l2a", "x": 11, "y": 2},
+ {"label": "l2b", "x": 12, "y": 2},
+
+ {"label": "r20", "x": 15.5, "y": 2},
+ {"label": "r21", "x": 16.5, "y": 2},
+ {"label": "r22", "x": 17.5, "y": 2},
+ {"label": "r23", "x": 18.5, "y": 2},
+ {"label": "r24", "x": 19.5, "y": 2},
+ {"label": "r25", "x": 20.5, "y": 2},
+ {"label": "r26", "x": 21.5, "y": 2},
+ {"label": "r27", "x": 22.5, "y": 2},
+ {"label": "r28", "x": 23.5, "y": 2},
+ {"label": "r29", "x": 24.5, "y": 2},
+ {"label": "r2a", "x": 25.5, "y": 2},
+ {"label": "r2b", "x": 26.5, "y": 2},
+
+ {"label": "l30", "x": 1.5, "y": 3},
+ {"label": "l31", "x": 2.5, "y": 3},
+ {"label": "l32", "x": 3.5, "y": 3},
+ {"label": "l33", "x": 4.5, "y": 3},
+ {"label": "l34", "x": 5.5, "y": 3},
+ {"label": "l35", "x": 6.5, "y": 3},
+ {"label": "l36", "x": 7.5, "y": 3},
+ {"label": "l37", "x": 8.5, "y": 3},
+ {"label": "l38", "x": 9.5, "y": 3},
+ {"label": "l39", "x": 10.5, "y": 3},
+ {"label": "l3a", "x": 11.5, "y": 3},
+ {"label": "l3b", "x": 12.5, "y": 3},
+
+ {"label": "r30", "x": 16, "y": 3},
+ {"label": "r31", "x": 17, "y": 3},
+ {"label": "r32", "x": 18, "y": 3},
+ {"label": "r33", "x": 19, "y": 3},
+ {"label": "r34", "x": 20, "y": 3},
+ {"label": "r35", "x": 21, "y": 3},
+ {"label": "r36", "x": 22, "y": 3},
+ {"label": "r37", "x": 23, "y": 3},
+ {"label": "r38", "x": 24, "y": 3},
+ {"label": "r39", "x": 25, "y": 3},
+ {"label": "r3a", "x": 26, "y": 3},
+ {"label": "r3b", "x": 27, "y": 3},
+
+ {"label": "l40", "x": 2, "y": 4},
+ {"label": "l41", "x": 3, "y": 4},
+ {"label": "l42", "x": 4, "y": 4},
+ {"label": "l43", "x": 5, "y": 4},
+ {"label": "l44", "x": 6, "y": 4},
+ {"label": "l45", "x": 7, "y": 4},
+ {"label": "l46", "x": 8, "y": 4},
+ {"label": "l47", "x": 9, "y": 4},
+ {"label": "l48", "x": 10, "y": 4},
+ {"label": "l49", "x": 11, "y": 4},
+ {"label": "l4a", "x": 12, "y": 4},
+ {"label": "l4b", "x": 13, "y": 4},
+
+ {"label": "r40", "x": 16.5, "y": 4},
+ {"label": "r41", "x": 17.5, "y": 4},
+ {"label": "r42", "x": 18.5, "y": 4},
+ {"label": "r43", "x": 19.5, "y": 4},
+ {"label": "r44", "x": 20.5, "y": 4},
+ {"label": "r45", "x": 21.5, "y": 4},
+ {"label": "r46", "x": 22.5, "y": 4},
+ {"label": "r47", "x": 23.5, "y": 4},
+ {"label": "r48", "x": 24.5, "y": 4},
+ {"label": "r49", "x": 25.5, "y": 4},
+ {"label": "r4a", "x": 26.5, "y": 4},
+ {"label": "r4b", "x": 27.5, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/giabalanai/keymaps/via_giabarinaix2/keymap.c b/keyboards/giabalanai/keymaps/via_giabarinaix2/keymap.c
new file mode 100644
index 00000000000..afe1faff1b0
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/via_giabarinaix2/keymap.c
@@ -0,0 +1,262 @@
+/* Copyright 2020 3araht
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+#include "version.h"
+
+// Alias layout macros that expand groups of keys.
+#define LAYOUT_wrapper_giabarinaix2(...) LAYOUT_giabarinaix2(__VA_ARGS__)
+
+#define DFCBASE DF(_C_SYSTEM_BASE)
+#define DF_QWER DF(_QWERTY)
+// Long press: go to _FN layer, tap: MUTE
+#define FN_MUTE LT(_FN, KC_MUTE)
+
+// Used to set octave to MI_OCT_0
+extern midi_config_t midi_config;
+uint8_t midi_bass_ch = 0, midi_chord_ch = 0; // By default, all use the same channel.
+
+// Defines names for use in layer keycodes and the keymap
+enum layer_names {
+ _C_SYSTEM_BASE, // MIDI C-system
+ _QWERTY, // just in case
+ _FN
+};
+
+// Defines the keycodes used by our macros in process_record_user
+enum custom_keycodes {
+
+ // MIDI Chord Keycodes - Root notes
+ MY_CHORD_MIN = SAFE_RANGE,
+
+ MI_CH_Cr = MY_CHORD_MIN,
+ MI_CH_Csr,
+ MI_CH_Dbr = MI_CH_Csr,
+ MI_CH_Dr,
+ MI_CH_Dsr,
+ MI_CH_Ebr = MI_CH_Dsr,
+ MI_CH_Er,
+ MI_CH_Fr,
+ MI_CH_Fsr,
+ MI_CH_Gbr = MI_CH_Fsr,
+ MI_CH_Gr,
+ MI_CH_Gsr,
+ MI_CH_Abr = MI_CH_Gsr,
+ MI_CH_Ar,
+ MI_CH_Asr,
+ MI_CH_Bbr = MI_CH_Asr,
+ MI_CH_Br,
+
+ // MIDI Chord Keycodes - Major
+
+ MI_CH_C,
+ MI_CH_Cs,
+ MI_CH_Db = MI_CH_Cs,
+ MI_CH_D,
+ MI_CH_Ds,
+ MI_CH_Eb = MI_CH_Ds,
+ MI_CH_E,
+ MI_CH_F,
+ MI_CH_Fs,
+ MI_CH_Gb = MI_CH_Fs,
+ MI_CH_G,
+ MI_CH_Gs,
+ MI_CH_Ab = MI_CH_Gs,
+ MI_CH_A,
+ MI_CH_As,
+ MI_CH_Bb = MI_CH_As,
+ MI_CH_B,
+
+ // MIDI Chord Keycodes Minor
+
+ MI_CH_Cm,
+ MI_CH_Csm,
+ MI_CH_Dbm = MI_CH_Csm,
+ MI_CH_Dm,
+ MI_CH_Dsm,
+ MI_CH_Ebm = MI_CH_Dsm,
+ MI_CH_Em,
+ MI_CH_Fm,
+ MI_CH_Fsm,
+ MI_CH_Gbm = MI_CH_Fsm,
+ MI_CH_Gm,
+ MI_CH_Gsm,
+ MI_CH_Abm = MI_CH_Gsm,
+ MI_CH_Am,
+ MI_CH_Asm,
+ MI_CH_Bbm = MI_CH_Asm,
+ MI_CH_Bm,
+
+ //MIDI Chord Keycodes Dominant Seventh
+
+ MI_CH_CDom7,
+ MI_CH_CsDom7,
+ MI_CH_DbDom7 = MI_CH_CsDom7,
+ MI_CH_DDom7,
+ MI_CH_DsDom7,
+ MI_CH_EbDom7 = MI_CH_DsDom7,
+ MI_CH_EDom7,
+ MI_CH_FDom7,
+ MI_CH_FsDom7,
+ MI_CH_GbDom7 = MI_CH_FsDom7,
+ MI_CH_GDom7,
+ MI_CH_GsDom7,
+ MI_CH_AbDom7 = MI_CH_GsDom7,
+ MI_CH_ADom7,
+ MI_CH_AsDom7,
+ MI_CH_BbDom7 = MI_CH_AsDom7,
+ MI_CH_BDom7,
+
+ // MIDI Chord Keycodes Diminished Seventh
+
+ MI_CH_CDim7,
+ MI_CH_CsDim7,
+ MI_CH_DbDim7 = MI_CH_CsDim7,
+ MI_CH_DDim7,
+ MI_CH_DsDim7,
+ MI_CH_EbDim7 = MI_CH_DsDim7,
+ MI_CH_EDim7,
+ MI_CH_FDim7,
+ MI_CH_FsDim7,
+ MI_CH_GbDim7 = MI_CH_FsDim7,
+ MI_CH_GDim7,
+ MI_CH_GsDim7,
+ MI_CH_AbDim7 = MI_CH_GsDim7,
+ MI_CH_ADim7,
+ MI_CH_AsDim7,
+ MI_CH_BbDim7 = MI_CH_AsDim7,
+ MI_CH_BDim7,
+
+ MY_CHORD_MAX = MI_CH_BDim7,
+
+ VERSION = USER00
+};
+
+#define MY_CHORD_COUNT (MY_CHORD_MAX - MY_CHORD_MIN + 1)
+static uint8_t chord_status[MY_CHORD_COUNT];
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /* C-system Base */
+ [_C_SYSTEM_BASE] = LAYOUT_giabarinaix2(
+ MI_CH_Dbr, MI_CH_Abr, MI_CH_Ebr, MI_CH_Bbr, MI_CH_Fr, MI_CH_Cr, MI_CH_Gr, MI_CH_Dr, MI_CH_Ar, MI_CH_Er, MI_CH_Br, MI_CH_Fsr,
+ MI_CH_Db, MI_CH_Ab, MI_CH_Eb, MI_CH_Bb, MI_CH_F, MI_CH_C, MI_CH_G, MI_CH_D, MI_CH_A, MI_CH_E, MI_CH_B, MI_CH_Fs,
+ MI_CH_Dbm, MI_CH_Abm, MI_CH_Ebm, MI_CH_Bbm, MI_CH_Fm, MI_CH_Cm, MI_CH_Gm, MI_CH_Dm, MI_CH_Am, MI_CH_Em, MI_CH_Bm, MI_CH_Fsm,
+ MI_CH_DbDom7, MI_CH_AbDom7, MI_CH_EbDom7, MI_CH_BbDom7, MI_CH_FDom7, MI_CH_CDom7, MI_CH_GDom7, MI_CH_DDom7, MI_CH_ADom7, MI_CH_EDom7, MI_CH_BDom7, MI_CH_FsDom7,
+ MI_CH_DbDim7, MI_CH_AbDim7, MI_CH_EbDim7, MI_CH_BbDim7, MI_CH_FDim7, MI_CH_CDim7, MI_CH_GDim7, MI_CH_DDim7, MI_CH_ADim7, MI_CH_EDim7, MI_CH_BDim7, MI_CH_FsDim7,
+
+ MI_Db_2, MI_E_2, MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4,
+ MI_Eb_2, MI_Fs_2, MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5,
+ MI_F_2, MI_Ab_2, MI_B_2, MI_D_3, MI_F_3, MI_Ab_3, MI_B_3, MI_D_4, MI_F_4, MI_Ab_4, MI_B_4, MI_D_5,
+ MI_G_2, MI_Bb_2, MI_Db_3, MI_E_3, MI_G_3, MI_Bb_3, MI_Db_4, MI_E_4, MI_G_4, MI_Bb_4, MI_Db_5, MI_E_5,
+ MI_A_2, MI_C_3, MI_Eb_3, MI_Fs_3, MI_A_3, MI_C_4, MI_Eb_4, MI_Fs_4, MI_A_4, MI_C_5, MI_Eb_5, FN_MUTE
+ ),
+
+ /* QWERTY */
+ [_QWERTY] = LAYOUT_wrapper_giabarinaix2(
+ KC_GESC, _________________NUMBER_L__________________, _________________NUMBER_R__________________, KC_BSPC,
+ KC_TAB, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_DEL,
+ KC_CAPS, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_ENT,
+ KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LANG2, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_LANG1, KC_RALT, KC_RGUI, KC_RCTRL,
+
+ KC_GESC, _________________NUMBER_L__________________, _________________NUMBER_R__________________, KC_BSPC,
+ KC_TAB, _________________QWERTY_L1_________________, _________________QWERTY_R1_________________, KC_DEL,
+ KC_CAPS, _________________QWERTY_L2_________________, _________________QWERTY_R2_________________, KC_ENT,
+ KC_LSFT, _________________QWERTY_L3_________________, _________________QWERTY_R3_________________, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_LANG2, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_LANG1, KC_RALT, KC_RGUI, _______
+ ),
+
+ /* Fn */
+ [_FN] = LAYOUT_giabarinaix2(
+ DFCBASE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ DF_QWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ DFCBASE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ DF_QWER, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, VERSION, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, _______
+ )
+};
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_C_SYSTEM_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_QWERTY] = { ENCODER_CCW_CW(_______, _______) },
+ [_FN] = { ENCODER_CCW_CW(_______, _______) },
+};
+#endif
+
+void keyboard_post_init_user(void) {
+ // Set otave to MI_OCT_0
+ midi_config.octave = MI_OCT_0 - MIDI_OCTAVE_MIN;
+
+ // avoid using 127 since it is used as a special number in some sound sources.
+ midi_config.velocity = MIDI_INITIAL_VELOCITY;
+
+ for (uint8_t i = 0; i < MY_CHORD_COUNT; i++) {
+ chord_status[i] = MIDI_INVALID_NOTE;
+ }
+
+ default_layer_set(1UL << _C_SYSTEM_BASE);
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ uint16_t root_note = MIDI_INVALID_NOTE; // Starting value for the root note of each chord
+
+ uint8_t chord = keycode - MY_CHORD_MIN;
+
+ switch (keycode) {
+ case VERSION: // Output firmware info.
+ if (record->event.pressed) {
+ SEND_STRING(QMK_KEYBOARD ":" QMK_KEYMAP " @ " QMK_VERSION " | " QMK_BUILDDATE);
+ }
+ break;
+
+ // MIDI Chord Keycodes, on the left side.
+ case MI_CH_Cr ... MI_CH_Br: // Root Notes
+ root_note = keycode - MI_CH_Cr + MI_C_1;
+ my_process_midi4Bass(midi_bass_ch, record, chord_status, chord, root_note, false);
+ break;
+
+ case MI_CH_C ... MI_CH_B: // Major Chords
+ root_note = keycode - MI_CH_C + MI_C_2;
+ // Root, Major Third, and Fifth Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 4, 7);
+ break;
+
+ case MI_CH_Cm ... MI_CH_Bm: // Minor Chord
+ root_note = keycode - MI_CH_Cm + MI_C_2;
+ // Root, Minor Third, and Fifth Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 3, 7);
+ break;
+
+ case MI_CH_CDom7 ... MI_CH_BDom7: // Dominant 7th Chord
+ root_note = keycode - MI_CH_CDom7 + MI_C_2;
+ // Major Third, Major Fifth, and Minor Seventh Notes
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 4, 7, 10);
+ break;
+
+ case MI_CH_CDim7 ... MI_CH_BDim7: // Diminished 7th Chord
+ root_note = keycode - MI_CH_CDim7 + MI_C_2;
+ // Root, Minor Third, and Diminished 5th Note
+ my_process_midi4TriadChords(midi_chord_ch, record, chord_status, chord, root_note, 0, 3, 6);
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/giabalanai/keymaps/via_giabarinaix2/readme.md b/keyboards/giabalanai/keymaps/via_giabarinaix2/readme.md
new file mode 100644
index 00000000000..04c1613d530
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/via_giabarinaix2/readme.md
@@ -0,0 +1 @@
+# The default keymap for giabarinaix2, VIA version.
diff --git a/keyboards/giabalanai/keymaps/via_giabarinaix2/rules.mk b/keyboards/giabalanai/keymaps/via_giabarinaix2/rules.mk
new file mode 100644
index 00000000000..f4836fd4f20
--- /dev/null
+++ b/keyboards/giabalanai/keymaps/via_giabarinaix2/rules.mk
@@ -0,0 +1,4 @@
+VIA_ENABLE = yes
+ENCODER_ENABLE = no # encoder on mute button
+
+ENCODER_MAP_ENABLE = yes # replacing ENCODERS_CW_KEY method to this on 2022/08/31.
diff --git a/keyboards/giabalanai/readme.md b/keyboards/giabalanai/readme.md
new file mode 100644
index 00000000000..30b1b60cd1b
--- /dev/null
+++ b/keyboards/giabalanai/readme.md
@@ -0,0 +1,24 @@
+# giabalanai
+
+
+
+
+
+
+
+giabalanai keyboard is a simple-design Chromatic Button Accordion-ish MIDI keyboard (60 bass + C-system 62 keys = 38 notes) that doesn't have bellows nor register switches.
+
+* Keyboard Maintainer: [3araht](https://github.com/3araht)
+* Hardware Supported: giabalanai keyboard, a split keyboard mainly work as MIDI keyboard.
+* Hardware Availability: [Yushakobo](https://yushakobo.jp/shop/consign_giabalanai/) or [BOOTH](https://3araht.booth.pm/). Click [here](https://www.tenso.com/en/static/lp_shop_booth) for BOOTH overseas shipping!
+
+
+Make example for this keyboard (after setting up your build environment):
+
+ make giabalanai:default
+
+Flashing example for this keyboard:
+
+ make giabalanai:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/giabalanai/rules.mk b/keyboards/giabalanai/rules.mk
new file mode 100644
index 00000000000..b642aa9aa3a
--- /dev/null
+++ b/keyboards/giabalanai/rules.mk
@@ -0,0 +1,26 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+MIDI_ENABLE = yes # MIDI support
+ENCODER_ENABLE = yes # encoder on mute button
+SPLIT_KEYBOARD = yes # Enables split keyboard support
+# RGB_MATRIX_ENABLE is not suitable for giabalanai keyboard on the right side (there are dulpicate keys).
+RGB_MATRIX_ENABLE = no # Use RGB matrix (Don't enable this when RGBLIGHT_ENABLE is used.)
+RGB_MATRIX_DRIVER = WS2812 # 2021/01/23 added.
+
+LTO_ENABLE = yes
diff --git a/keyboards/gmmk/gmmk2/p96/ansi/keymaps/default/keymap.c b/keyboards/gmmk/gmmk2/p96/ansi/keymaps/default/keymap.c
index ba3e9828f62..f03eda7e37e 100644
--- a/keyboards/gmmk/gmmk2/p96/ansi/keymaps/default/keymap.c
+++ b/keyboards/gmmk/gmmk2/p96/ansi/keymaps/default/keymap.c
@@ -37,7 +37,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Keymap _FL: Function Layer
*/
[_FL] = LAYOUT(
- QK_BOOT, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MRWD, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLU, KC_VOLD, _______, _______, _______, _______, _______, _______,
+ QK_BOOT, KC_MYCM, KC_WHOM, KC_CALC, KC_MSEL, KC_MPRV, KC_MRWD, KC_MPLY, KC_MSTP, KC_MUTE, KC_VOLD, KC_VOLU, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/keymap.c
index 09f8aa147a2..3aa3fd828e7 100644
--- a/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/keymap.c
+++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/cedrikl/keymap.c
@@ -107,16 +107,22 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
// Capslock, Scroll lock and Numlock indicator on Left side lights.
void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
- loop_colorset(LED_REGION_A, (sizeof(LED_REGION_A) / sizeof(LED_REGION_A[0])), hsv_cl_blue);
- loop_colorset(LED_REGION_B, (sizeof(LED_REGION_B) / sizeof(LED_REGION_B[0])), hsv_cl_purple);
- loop_colorset(LED_REGION_L_SIDE, (sizeof(LED_REGION_L_SIDE) / sizeof(LED_REGION_L_SIDE[0])), hsv_cl_purple);
- loop_colorset(LED_REGION_R_SIDE, (sizeof(LED_REGION_R_SIDE) / sizeof(LED_REGION_R_SIDE[0])), hsv_cl_purple);
+ loop_colorset(LED_REGION_A, ARRAY_SIZE(LED_REGION_A),
+ hsv_cl_blue);
+ loop_colorset(LED_REGION_B, ARRAY_SIZE(LED_REGION_B),
+ hsv_cl_purple);
+ loop_colorset(LED_REGION_L_SIDE, ARRAY_SIZE(LED_REGION_L_SIDE),
+ hsv_cl_purple);
+ loop_colorset(LED_REGION_R_SIDE, ARRAY_SIZE(LED_REGION_R_SIDE),
+ hsv_cl_purple);
switch(get_highest_layer(layer_state)){ // special handling per layer
case 1: //layer 1
//rgb_matrix_set_color_all(RGB_AZURE);
- loop_colorset(LED_REGION_NUMPAD, (sizeof(LED_REGION_NUMPAD) / sizeof(LED_REGION_NUMPAD[0])), hsv_cl_numpad);
- loop_colorset(LED_REGION_OTHER, (sizeof(LED_REGION_OTHER) / sizeof(LED_REGION_OTHER[0])), hsv_cl_mods);
+ loop_colorset(LED_REGION_NUMPAD,
+ ARRAY_SIZE(LED_REGION_NUMPAD), hsv_cl_numpad);
+ loop_colorset(LED_REGION_OTHER, ARRAY_SIZE(LED_REGION_OTHER),
+ hsv_cl_mods);
break;
default: //layer 0
//
@@ -148,7 +154,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
rgb_matrix_set_color(LED_L6, bad_rgb.r, bad_rgb.g, bad_rgb.b);
rgb_matrix_set_color(LED_L7, bad_rgb.r, bad_rgb.g, bad_rgb.b);
rgb_matrix_set_color(LED_L8, bad_rgb.r, bad_rgb.g, bad_rgb.b);
- loop_colorset(LED_REGION_CAPS, (sizeof(LED_REGION_CAPS) / sizeof(LED_REGION_CAPS[0])), hsv_cl_bad);
+ loop_colorset(LED_REGION_CAPS, ARRAY_SIZE(LED_REGION_CAPS),
+ hsv_cl_bad);
}
}
#endif
diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/keymap.c
index ab986936491..9b20399e002 100644
--- a/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/keymap.c
+++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/gourdo1/keymap.c
@@ -538,7 +538,7 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) {
} else if (paddle_lives == 0) {
// Game over
- for (uint8_t i = 0; i < sizeof(LED_GAME_OVER) / sizeof(LED_GAME_OVER[0]); i++) {
+ for (uint8_t i = 0; i < ARRAY_SIZE(LED_GAME_OVER); i++) {
rgb_matrix_set_color(LED_GAME_OVER[i], RGB_RED);
}
diff --git a/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/keymap.c b/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/keymap.c
index e59db7b9848..164ff67e22f 100644
--- a/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/keymap.c
+++ b/keyboards/gmmk/pro/rev1/ansi/keymaps/paddlegame/keymap.c
@@ -201,15 +201,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
else { ++rgb_value.r; }
}
- for (uint8_t i=0; i.
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
-/* Ensure we jump to bootloader if the RESET keycode was pressed */
+/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
/* Indicator LEDs */
diff --git a/keyboards/handwired/108key_trackpoint/config.h b/keyboards/handwired/108key_trackpoint/config.h
index 703cd93e648..fccdf6424c0 100644
--- a/keyboards/handwired/108key_trackpoint/config.h
+++ b/keyboards/handwired/108key_trackpoint/config.h
@@ -5,7 +5,7 @@
#define MATRIX_ROWS 8
#define MATRIX_COLS 23
-#ifdef PS2_USE_USART
+#ifdef PS2_DRIVER_USART
#define PS2_CLOCK_PIN D5
#define PS2_DATA_PIN D2
diff --git a/keyboards/handwired/108key_trackpoint/rules.mk b/keyboards/handwired/108key_trackpoint/rules.mk
index ab84b088bcc..24f1d9b652a 100644
--- a/keyboards/handwired/108key_trackpoint/rules.mk
+++ b/keyboards/handwired/108key_trackpoint/rules.mk
@@ -17,4 +17,5 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output
PS2_MOUSE_ENABLE = yes
-PS2_USE_USART = yes
+PS2_ENABLE = yes
+PS2_DRIVER = usart
diff --git a/keyboards/handwired/3dortho14u/rev1/info.json b/keyboards/handwired/3dortho14u/rev1/info.json
index bd9220281c3..2c8e229c02c 100644
--- a/keyboards/handwired/3dortho14u/rev1/info.json
+++ b/keyboards/handwired/3dortho14u/rev1/info.json
@@ -4,6 +4,7 @@
"url": "",
"maintainer": "xia0",
"processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
"debounce": 5,
"diode_direction": "COL2ROW",
"features": {
diff --git a/keyboards/handwired/3dortho14u/rev2/info.json b/keyboards/handwired/3dortho14u/rev2/info.json
index 7f241f35ff3..28986f295e5 100644
--- a/keyboards/handwired/3dortho14u/rev2/info.json
+++ b/keyboards/handwired/3dortho14u/rev2/info.json
@@ -4,6 +4,7 @@
"url": "",
"maintainer": "xia0",
"processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
"debounce": 5,
"diode_direction": "COL2ROW",
"features": {
diff --git a/keyboards/handwired/arrow_pad/keymaps/pad_21/config.h b/keyboards/handwired/arrow_pad/keymaps/pad_21/config.h
index 1f07965555e..0bff14a28d7 100644
--- a/keyboards/handwired/arrow_pad/keymaps/pad_21/config.h
+++ b/keyboards/handwired/arrow_pad/keymaps/pad_21/config.h
@@ -15,137 +15,25 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
+#undef VENDOR_ID
+#undef PRODUCT_ID
+#undef DEVICE_VER
+#undef MANUFACTURER
+#undef PRODUCT
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x4097
#define DEVICE_VER 0x0001
-#define MANUFACTURER Nobody
-#define PRODUCT Arrow Pad 21
+#define MANUFACTURER "Nobody"
+#define PRODUCT "Arrow Pad 21"
-/* key matrix size */
+#undef MATRIX_ROWS
+#undef MATRIX_COLS
#define MATRIX_ROWS 2
#define MATRIX_COLS 11
-/*
- * Keyboard Matrix Assignments
- *
- * Change this to how you wired your keyboard
- * COLS: AVR pins used for columns, left to right
- * ROWS: AVR pins used for rows, top to bottom
- * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
- * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
- *
-*/
+#undef MATRIX_ROW_PINS
+#undef MATRIX_COL_PINS
#define MATRIX_ROW_PINS { D3, D5 }
#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, B6, B5, B4, D7, D4 }
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION ROW2COL
-
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCE 5
-
-/* define if matrix has ghost (lacks anti-ghosting diodes) */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-#define BACKLIGHT_LEVELS 3
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-//#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-//#define LOCKING_RESYNC_ENABLE
-
-/*
- * Force NKRO
- *
- * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
- * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
- * makefile for this to work.)
- *
- * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
- * until the next keyboard reset.
- *
- * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
- * fully operational during normal computer usage.
- *
- * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
- * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
- * bootmagic, NKRO mode will always be enabled until it is toggled again during a
- * power-up.
- *
- */
-#define FORCE_NKRO
-
-/*
- * Magic Key Options
- *
- * Magic keys are hotkey commands that allow control over firmware functions of
- * the keyboard. They are best used in combination with the HID Listen program,
- * found here: https://www.pjrc.com/teensy/hid_listen.html
- *
- * The options below allow the magic key functionality to be changed. This is
- * useful if your keyboard/keypad is missing keys and you want magic key support.
- *
- */
-
-/* control how magic key switches layers */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
-
-/* override magic key keymap */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
-//#define MAGIC_KEY_HELP1 H
-//#define MAGIC_KEY_HELP2 SLASH
-//#define MAGIC_KEY_DEBUG D
-//#define MAGIC_KEY_DEBUG_MATRIX X
-//#define MAGIC_KEY_DEBUG_KBD K
-//#define MAGIC_KEY_DEBUG_MOUSE M
-//#define MAGIC_KEY_VERSION V
-//#define MAGIC_KEY_STATUS S
-//#define MAGIC_KEY_CONSOLE C
-//#define MAGIC_KEY_LAYER0_ALT1 ESC
-//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
-//#define MAGIC_KEY_LAYER0 0
-//#define MAGIC_KEY_LAYER1 1
-//#define MAGIC_KEY_LAYER2 2
-//#define MAGIC_KEY_LAYER3 3
-//#define MAGIC_KEY_LAYER4 4
-//#define MAGIC_KEY_LAYER5 5
-//#define MAGIC_KEY_LAYER6 6
-//#define MAGIC_KEY_LAYER7 7
-//#define MAGIC_KEY_LAYER8 8
-//#define MAGIC_KEY_LAYER9 9
-//#define MAGIC_KEY_BOOTLOADER PAUSE
-//#define MAGIC_KEY_LOCK CAPS
-//#define MAGIC_KEY_EEPROM E
-//#define MAGIC_KEY_NKRO N
-//#define MAGIC_KEY_SLEEP_LED Z
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/handwired/arrow_pad/keymaps/pad_21/rules.mk b/keyboards/handwired/arrow_pad/keymaps/pad_21/rules.mk
index 6fae940a50c..d3e58649162 100644
--- a/keyboards/handwired/arrow_pad/keymaps/pad_21/rules.mk
+++ b/keyboards/handwired/arrow_pad/keymaps/pad_21/rules.mk
@@ -10,5 +10,3 @@ AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-
-CONFIG_H = keymaps/$(KEYMAP)/config.h
\ No newline at end of file
diff --git a/keyboards/handwired/arrow_pad/keymaps/pad_24/config.h b/keyboards/handwired/arrow_pad/keymaps/pad_24/config.h
index 4bc89f5ce74..3f9997b380b 100644
--- a/keyboards/handwired/arrow_pad/keymaps/pad_24/config.h
+++ b/keyboards/handwired/arrow_pad/keymaps/pad_24/config.h
@@ -15,139 +15,15 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
*/
-#ifndef CONFIG_H
-#define CONFIG_H
+#pragma once
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
+#undef VENDOR_ID
+#undef PRODUCT_ID
+#undef DEVICE_VER
+#undef MANUFACTURER
+#undef PRODUCT
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x4096
#define DEVICE_VER 0x0001
-#define MANUFACTURER Nobody
-#define PRODUCT Arrow Pad 24
-
-/* key matrix size */
-#define MATRIX_ROWS 6
-#define MATRIX_COLS 4
-
-/*
- * Keyboard Matrix Assignments
- *
- * Change this to how you wired your keyboard
- * COLS: AVR pins used for columns, left to right
- * ROWS: AVR pins used for rows, top to bottom
- * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
- * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
- *
-*/
-#define MATRIX_ROW_PINS { F0, F1, F4, F5, F6, F7 }
-#define MATRIX_COL_PINS { B0, B1, B2, B3 }
-
-#define BACKLIGHT_PIN B7
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION ROW2COL
-
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCE 5
-
-/* define if matrix has ghost (lacks anti-ghosting diodes) */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-#define BACKLIGHT_LEVELS 3
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-//#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-//#define LOCKING_RESYNC_ENABLE
-
-/*
- * Force NKRO
- *
- * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
- * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
- * makefile for this to work.)
- *
- * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
- * until the next keyboard reset.
- *
- * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
- * fully operational during normal computer usage.
- *
- * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
- * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
- * bootmagic, NKRO mode will always be enabled until it is toggled again during a
- * power-up.
- *
- */
-#define FORCE_NKRO
-
-/*
- * Magic Key Options
- *
- * Magic keys are hotkey commands that allow control over firmware functions of
- * the keyboard. They are best used in combination with the HID Listen program,
- * found here: https://www.pjrc.com/teensy/hid_listen.html
- *
- * The options below allow the magic key functionality to be changed. This is
- * useful if your keyboard/keypad is missing keys and you want magic key support.
- *
- */
-
-/* control how magic key switches layers */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
-
-/* override magic key keymap */
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
-//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
-//#define MAGIC_KEY_HELP1 H
-//#define MAGIC_KEY_HELP2 SLASH
-//#define MAGIC_KEY_DEBUG D
-//#define MAGIC_KEY_DEBUG_MATRIX X
-//#define MAGIC_KEY_DEBUG_KBD K
-//#define MAGIC_KEY_DEBUG_MOUSE M
-//#define MAGIC_KEY_VERSION V
-//#define MAGIC_KEY_STATUS S
-//#define MAGIC_KEY_CONSOLE C
-//#define MAGIC_KEY_LAYER0_ALT1 ESC
-//#define MAGIC_KEY_LAYER0_ALT2 GRAVE
-//#define MAGIC_KEY_LAYER0 0
-//#define MAGIC_KEY_LAYER1 1
-//#define MAGIC_KEY_LAYER2 2
-//#define MAGIC_KEY_LAYER3 3
-//#define MAGIC_KEY_LAYER4 4
-//#define MAGIC_KEY_LAYER5 5
-//#define MAGIC_KEY_LAYER6 6
-//#define MAGIC_KEY_LAYER7 7
-//#define MAGIC_KEY_LAYER8 8
-//#define MAGIC_KEY_LAYER9 9
-//#define MAGIC_KEY_BOOTLOADER PAUSE
-//#define MAGIC_KEY_LOCK CAPS
-//#define MAGIC_KEY_EEPROM E
-//#define MAGIC_KEY_NKRO N
-//#define MAGIC_KEY_SLEEP_LED Z
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-#endif
+#define MANUFACTURER "Nobody"
+#define PRODUCT "Arrow Pad 24"
diff --git a/keyboards/handwired/arrow_pad/keymaps/pad_24/rules.mk b/keyboards/handwired/arrow_pad/keymaps/pad_24/rules.mk
index 1cf01b79e44..d7fdd82dfe2 100644
--- a/keyboards/handwired/arrow_pad/keymaps/pad_24/rules.mk
+++ b/keyboards/handwired/arrow_pad/keymaps/pad_24/rules.mk
@@ -10,5 +10,3 @@ AUDIO_ENABLE = no # Audio output on port C6
UNICODE_ENABLE = no # Unicode
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
-
-CONFIG_H = keymaps/$(KEYMAP)/config.h
\ No newline at end of file
diff --git a/keyboards/handwired/cyberstar/config.h b/keyboards/handwired/cyberstar/config.h
index 755fa5b6c03..bedeb157be7 100644
--- a/keyboards/handwired/cyberstar/config.h
+++ b/keyboards/handwired/cyberstar/config.h
@@ -32,7 +32,7 @@ along with this program. If not, see .
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
-/* Ensure we jump to bootloader if the RESET keycode was pressed */
+/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
/* RGB Light */
diff --git a/keyboards/handwired/dactyl/readme.md b/keyboards/handwired/dactyl/readme.md
index 698ef29e013..e99df7f5a23 100644
--- a/keyboards/handwired/dactyl/readme.md
+++ b/keyboards/handwired/dactyl/readme.md
@@ -21,7 +21,7 @@ To flash the firmware:
- Load the .hex file into it.
- Put the Teensy in firmware-loading mode:
- * If your current layout has a RESET key, press it.
+ * If your current layout has a `QK_BOOT` key, press it.
* If you lack a RESET key, press the reset button on the Teensy board itself.
- Click the button in the Teensy app to download the firmware.
@@ -35,5 +35,5 @@ To flash with ´teensy-loader-cli´:
- If you like, you can do both at once: `make handwired/dactyl::teensy`
- Put the Teensy in firmware-loading mode:
- * If your current layout has a RESET key, press it.
+ * If your current layout has a `QK_BOOT` key, press it.
* If you lack a RESET key, press the reset button on the Teensy board itself.
diff --git a/keyboards/handwired/dactyl_manuform/4x5_5/rules.mk b/keyboards/handwired/dactyl_manuform/4x5_5/rules.mk
index fec29f5419a..3da6aa269a1 100644
--- a/keyboards/handwired/dactyl_manuform/4x5_5/rules.mk
+++ b/keyboards/handwired/dactyl_manuform/4x5_5/rules.mk
@@ -3,7 +3,7 @@
MCU = atmega32u4
# BOOTLOADER for Elite-C
-# BOOTLOADER = atmel-dfu
+BOOTLOADER = atmel-dfu
# BOOTLOADER for Pro Micro
# BOOTLOADER = caterina
diff --git a/keyboards/handwired/dactyl_manuform/dmote/62key/info.json b/keyboards/handwired/dactyl_manuform/dmote/62key/info.json
index 7860fe6c6a0..7f156341314 100644
--- a/keyboards/handwired/dactyl_manuform/dmote/62key/info.json
+++ b/keyboards/handwired/dactyl_manuform/dmote/62key/info.json
@@ -3,6 +3,8 @@
"manufacturer": "tshort",
"url": "",
"maintainer": "veikman",
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
"usb": {
"vid": "0x444D",
"pid": "0x3632",
diff --git a/keyboards/handwired/hillside/46/info.json b/keyboards/handwired/hillside/46/info.json
index 538da4e7c05..93e21aea82f 100644
--- a/keyboards/handwired/hillside/46/info.json
+++ b/keyboards/handwired/hillside/46/info.json
@@ -8,6 +8,7 @@
"tags": ["split", "column stagger", "choc v1", "choc spaced" ],
"processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
"matrix_pins": {
"rows": ["C6", "D7", "E6", "B5"],
diff --git a/keyboards/handwired/hillside/48/info.json b/keyboards/handwired/hillside/48/info.json
index 2325c2d8d32..1b6d5a68283 100644
--- a/keyboards/handwired/hillside/48/info.json
+++ b/keyboards/handwired/hillside/48/info.json
@@ -8,6 +8,7 @@
"tags": ["split", "column stagger", "choc v1", "choc spaced" ],
"processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
"matrix_pins": {
"rows": ["D7", "E6", "B4", "B5"],
diff --git a/keyboards/handwired/hillside/48/keymaps/manna-harbour_miryoku/config.h b/keyboards/handwired/hillside/48/keymaps/manna-harbour_miryoku/config.h
new file mode 100644
index 00000000000..e779de8a99f
--- /dev/null
+++ b/keyboards/handwired/hillside/48/keymaps/manna-harbour_miryoku/config.h
@@ -0,0 +1,38 @@
+// Copyright 2022 Davide Masserut (@mssdvd)
+// Copyright 2019 Manna Harbour
+// https://github.com/manna-harbour/miryoku
+
+// This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see .
+
+#pragma once
+
+#define XXX KC_NO
+
+// clang-format off
+#if defined MIRYOKU_MAPPING_EXTENDED_THUMBS
+#define LAYOUT_miryoku( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, \
+ N30, N31, K32, K33, K34, K35, K36, K37, N38, N39 \
+) \
+LAYOUT( \
+XXX, K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, XXX, \
+XXX, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, XXX, \
+XXX, K20, K21, K22, K23, K24, XXX, XXX, K25, K26, K27, K28, K29, XXX, \
+ XXX, XXX, K32, K33, K34, K35, K36, K37, XXX, XXX \
+)
+#else
+#define LAYOUT_miryoku( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, \
+ N30, N31, K32, K33, K34, K35, K36, K37, N38, N39 \
+) \
+LAYOUT( \
+XXX, K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, XXX, \
+XXX, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, XXX, \
+XXX, K20, K21, K22, K23, K24, XXX, XXX, K25, K26, K27, K28, K29, XXX, \
+ XXX, K32, K33, K34, XXX, XXX, K35, K36, K37, XXX \
+)
+#endif
diff --git a/keyboards/handwired/hillside/48/keymaps/manna-harbour_miryoku/keymap.c b/keyboards/handwired/hillside/48/keymaps/manna-harbour_miryoku/keymap.c
new file mode 100644
index 00000000000..dbab7f98204
--- /dev/null
+++ b/keyboards/handwired/hillside/48/keymaps/manna-harbour_miryoku/keymap.c
@@ -0,0 +1,4 @@
+// Copyright 2019 Manna Harbour
+// https://github.com/manna-harbour/miryoku
+
+// This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see .
diff --git a/keyboards/handwired/hillside/52/info.json b/keyboards/handwired/hillside/52/info.json
index 407d76a548e..9e6103dc532 100644
--- a/keyboards/handwired/hillside/52/info.json
+++ b/keyboards/handwired/hillside/52/info.json
@@ -8,6 +8,7 @@
"tags": ["split", "column stagger", "choc v1", "choc spaced" ],
"processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
"matrix_pins": {
"rows": ["C6", "D7", "E6", "B4", "B5"],
diff --git a/keyboards/handwired/lagrange/keymaps/dpapavas/keymap.c b/keyboards/handwired/lagrange/keymaps/dpapavas/keymap.c
index c2eb4406d14..bc5b025b484 100644
--- a/keyboards/handwired/lagrange/keymaps/dpapavas/keymap.c
+++ b/keyboards/handwired/lagrange/keymaps/dpapavas/keymap.c
@@ -191,8 +191,8 @@ void keyboard_post_init_user(void) {
const pin_t pins[] = {D0, D1, D2};
uint8_t i, j;
- for (i = 0 ; i < sizeof(pins) / sizeof(pins[0]) + 2 ; i += 1) {
- for (j = 0 ; j < sizeof(pins) / sizeof(pins[0]) ; j += 1) {
+ for (i = 0 ; i < ARRAY_SIZE(pins) + 2 ; i += 1) {
+ for (j = 0 ; j < ARRAY_SIZE(pins); j += 1) {
setPinOutput(pins[j]);
writePin(pins[j], (j == i || j == i - 1));
}
diff --git a/keyboards/handwired/myskeeb/oled.c b/keyboards/handwired/myskeeb/oled.c
index 081ca8395a2..3f43590b8e9 100644
--- a/keyboards/handwired/myskeeb/oled.c
+++ b/keyboards/handwired/myskeeb/oled.c
@@ -183,7 +183,7 @@ void add_keylog(uint16_t keycode) {
keylog_str[i] = keylog_str[i - 1];
}
- if (keycode < (sizeof(code_to_name) / sizeof(char))) {
+ if (keycode < ARRAY_SIZE(code_to_name)) {
keylog_str[0] = pgm_read_byte(&code_to_name[keycode]);
}
}
diff --git a/keyboards/handwired/nicekey/keymaps/default/keymap.c b/keyboards/handwired/nicekey/keymaps/default/keymap.c
index d7539a5c175..a4391eaa300 100644
--- a/keyboards/handwired/nicekey/keymaps/default/keymap.c
+++ b/keyboards/handwired/nicekey/keymaps/default/keymap.c
@@ -116,7 +116,7 @@ PGM_P const sentences[] PROGMEM = {
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
if (record->event.pressed) {
- int sentences_size = sizeof(sentences) / sizeof(sentences[0]);
+ int sentences_size = ARRAY_SIZE(sentences);
int i = rand() % sentences_size;
switch (keycode) {
diff --git a/keyboards/handwired/onekey/keymaps/chibios_waiting_test/keymap.c b/keyboards/handwired/onekey/keymaps/chibios_waiting_test/keymap.c
index ecf67d3b3c6..65983c8dd8d 100644
--- a/keyboards/handwired/onekey/keymaps/chibios_waiting_test/keymap.c
+++ b/keyboards/handwired/onekey/keymaps/chibios_waiting_test/keymap.c
@@ -34,11 +34,11 @@ static const uint32_t waiting_values[] = {0, 1, 5, 10, 25, 50, 100, 150, 200, 50
void housekeeping_task_user(void) {
static uint32_t last_bench = 0;
if (timer_elapsed32(last_bench) > 500) {
- for (int i = 0; i < (sizeof(waiting_values) / sizeof(waiting_values[0])); i++) {
+ for (int i = 0; i < ARRAY_SIZE(waiting_values); i++) {
wait_us_polling_with_strobe(waiting_values[i]);
wait_us(10);
}
- for (int i = 0; i < (sizeof(waiting_values) / sizeof(waiting_values[0])); i++) {
+ for (int i = 0; i < ARRAY_SIZE(waiting_values); i++) {
wait_us_yield_with_strobe(waiting_values[i]);
wait_us(10);
}
diff --git a/keyboards/handwired/promethium/config.h b/keyboards/handwired/promethium/config.h
index a447a70abdf..9ebcc0bf538 100644
--- a/keyboards/handwired/promethium/config.h
+++ b/keyboards/handwired/promethium/config.h
@@ -210,13 +210,13 @@ enum led_sequence {
#endif
/* PS/2 mouse */
-#ifdef PS2_USE_BUSYWAIT
+#ifdef PS2_DRIVER_BUSYWAIT
# define PS2_CLOCK_PIN D3
# define PS2_DATA_PIN D2
#endif
/* PS/2 mouse interrupt version */
-#ifdef PS2_USE_INT
+#ifdef PS2_DRIVER_INTERRUPT
/* uses INT1 for clock line(ATMega32U4) */
# define PS2_CLOCK_PIN D3
# define PS2_DATA_PIN D2
@@ -237,7 +237,7 @@ enum led_sequence {
#endif
/* PS/2 mouse USART version */
-#ifdef PS2_USE_USART
+#ifdef PS2_DRIVER_USART
/* XCK for clock line and RXD for data line */
#define PS2_CLOCK_PIN D5
#define PS2_DATA_PIN D2
diff --git a/keyboards/handwired/promethium/keymaps/default/keymap.c b/keyboards/handwired/promethium/keymaps/default/keymap.c
index 77f83361e6f..fcfcf51f24c 100644
--- a/keyboards/handwired/promethium/keymaps/default/keymap.c
+++ b/keyboards/handwired/promethium/keymaps/default/keymap.c
@@ -55,7 +55,7 @@ along with this program. If not, see .
#endif
#include "outputselect.h"
#include "led.h"
-#define COUNT(x) (sizeof (x) / sizeof (*(x)))
+#define COUNT(x) ARRAY_SIZE((x))
#define KC_WWWB KC_WWW_BACK
#define KC_WWWF KC_WWW_FORWARD
diff --git a/keyboards/handwired/promethium/keymaps/default/rules.mk b/keyboards/handwired/promethium/keymaps/default/rules.mk
index 0183f5fa918..598ade50b8d 100644
--- a/keyboards/handwired/promethium/keymaps/default/rules.mk
+++ b/keyboards/handwired/promethium/keymaps/default/rules.mk
@@ -9,4 +9,5 @@ AUDIO_ENABLE = no # Audio output
UNICODEMAP_ENABLE = yes
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
PS2_MOUSE_ENABLE = yes
-PS2_USE_INT = yes
+PS2_ENABLE = yes
+PS2_DRIVER = interrupt
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
index 31ce811e530..4df95111a71 100644
--- a/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
+++ b/keyboards/handwired/promethium/keymaps/priyadi/keymap.c
@@ -57,7 +57,7 @@ along with this program. If not, see .
#include "outputselect.h"
#endif
#include "led.h"
-#define COUNT(x) (sizeof (x) / sizeof (*(x)))
+#define COUNT(x) ARRAY_SIZE((x))
#define KC_WWWB KC_WWW_BACK
#define KC_WWWF KC_WWW_FORWARD
diff --git a/keyboards/handwired/promethium/keymaps/priyadi/rules.mk b/keyboards/handwired/promethium/keymaps/priyadi/rules.mk
index 96db4fcbbcb..9db01c0a68c 100644
--- a/keyboards/handwired/promethium/keymaps/priyadi/rules.mk
+++ b/keyboards/handwired/promethium/keymaps/priyadi/rules.mk
@@ -17,7 +17,8 @@ UNICODE_ENABLE = no # Unicode
UNICODEMAP_ENABLE = yes
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
PS2_MOUSE_ENABLE = yes
-PS2_USE_INT = yes
+PS2_ENABLE = yes
+PS2_DRIVER = interrupt
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
diff --git a/keyboards/handwired/promethium/rules.mk b/keyboards/handwired/promethium/rules.mk
index 383800ee014..3960980dffa 100644
--- a/keyboards/handwired/promethium/rules.mk
+++ b/keyboards/handwired/promethium/rules.mk
@@ -20,7 +20,8 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
AUDIO_ENABLE = no # Audio output
RGBLIGHT_ENABLE = no # Enable WS2812 RGB underlight.
PS2_MOUSE_ENABLE = yes
-PS2_USE_INT = yes
+PS2_ENABLE = yes
+PS2_DRIVER = interrupt
CUSTOM_MATRIX = yes
BLUETOOTH_ENABLE = yes
BLUETOOTH_DRIVER = BluefruitLE
diff --git a/keyboards/handwired/pytest/basic/rules.mk b/keyboards/handwired/pytest/basic/rules.mk
index 6b42774dbff..e69de29bb2d 100644
--- a/keyboards/handwired/pytest/basic/rules.mk
+++ b/keyboards/handwired/pytest/basic/rules.mk
@@ -1 +0,0 @@
-MCU = atmega32u4
diff --git a/keyboards/handwired/pytest/has_community/rules.mk b/keyboards/handwired/pytest/has_community/rules.mk
index 4161649cbca..051634b3a45 100644
--- a/keyboards/handwired/pytest/has_community/rules.mk
+++ b/keyboards/handwired/pytest/has_community/rules.mk
@@ -1,3 +1 @@
-MCU = atmega32u4
-
LAYOUTS = ortho_1x1
diff --git a/keyboards/handwired/pytest/has_template/rules.mk b/keyboards/handwired/pytest/has_template/rules.mk
index 6b42774dbff..e69de29bb2d 100644
--- a/keyboards/handwired/pytest/has_template/rules.mk
+++ b/keyboards/handwired/pytest/has_template/rules.mk
@@ -1 +0,0 @@
-MCU = atmega32u4
diff --git a/keyboards/handwired/pytest/info.json b/keyboards/handwired/pytest/info.json
index 331472762c2..2ba7d34d523 100644
--- a/keyboards/handwired/pytest/info.json
+++ b/keyboards/handwired/pytest/info.json
@@ -6,5 +6,7 @@
"vid": "0xFEED",
"pid": "0x6465",
"device_version": "0.0.1"
- }
+ },
+ "processor": "atmega32u4",
+ "bootloader": "atmel-dfu"
}
diff --git a/keyboards/handwired/pytest/macro/rules.mk b/keyboards/handwired/pytest/macro/rules.mk
index 6b42774dbff..e69de29bb2d 100644
--- a/keyboards/handwired/pytest/macro/rules.mk
+++ b/keyboards/handwired/pytest/macro/rules.mk
@@ -1 +0,0 @@
-MCU = atmega32u4
diff --git a/keyboards/handwired/stef9998/split_5x7/config.h b/keyboards/handwired/stef9998/split_5x7/config.h
new file mode 100644
index 00000000000..d04675e7db6
--- /dev/null
+++ b/keyboards/handwired/stef9998/split_5x7/config.h
@@ -0,0 +1,20 @@
+/*
+Copyright 2022 stef9998
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
\ No newline at end of file
diff --git a/keyboards/handwired/stef9998/split_5x7/info.json b/keyboards/handwired/stef9998/split_5x7/info.json
new file mode 100644
index 00000000000..a1248b2d9e5
--- /dev/null
+++ b/keyboards/handwired/stef9998/split_5x7/info.json
@@ -0,0 +1,97 @@
+{
+ "keyboard_name": "Split_5x7",
+ "url": "",
+ "maintainer": "stef9998",
+ "manufacturer": "Stef9998",
+ "usb": {
+ "vid": "0x57EF",
+ "pid": "0x6063",
+ "device_version": "1.0.0"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label":"Esc", "x":0, "y":0},
+ {"label":"1", "x":1, "y":0},
+ {"label":"2", "x":2, "y":0},
+ {"label":"3", "x":3, "y":0},
+ {"label":"4", "x":4, "y":0},
+ {"label":"5", "x":5, "y":0},
+ {"label":"F1", "x":6, "y":0},
+
+ {"label":"Tab", "x":0, "y":1},
+ {"label":"Q", "x":1, "y":1},
+ {"label":"W", "x":2, "y":1},
+ {"label":"E", "x":3, "y":1},
+ {"label":"R", "x":4, "y":1},
+ {"label":"T", "x":5, "y":1},
+ {"label":"[", "x":6, "y":1},
+
+ {"label":"Caps Lock", "x":0, "y":2},
+ {"label":"A", "x":1, "y":2},
+ {"label":"S", "x":2, "y":2},
+ {"label":"D", "x":3, "y":2},
+ {"label":"F", "x":4, "y":2},
+ {"label":"G", "x":5, "y":2},
+ {"label":"=", "x":6, "y":2},
+
+ {"label":"Shift", "x":0, "y":3},
+ {"label":"Z", "x":1, "y":3},
+ {"label":"X", "x":2, "y":3},
+ {"label":"C", "x":3, "y":3},
+ {"label":"V", "x":4, "y":3},
+ {"label":"B", "x":5, "y":3},
+ {"label":"F3", "x":6, "y":3},
+
+ {"label":"Ctrl", "x":0, "y":4},
+ {"label":"Ctrl", "x":1, "y":4},
+ {"label":"Gui", "x":2, "y":4, "w":1.25},
+ {"label":"Alt", "x":3.25, "y":4, "w":1.25},
+ {"label":"Space", "x":4.5, "y":4, "w":1.5},
+ {"label":"F5", "x":6, "y":4},
+
+
+ {"label":"F2", "x":14, "y":0},
+ {"label":"6", "x":9, "y":0},
+ {"label":"7", "x":10, "y":0},
+ {"label":"8", "x":11, "y":0},
+ {"label":"9", "x":12, "y":0},
+ {"label":"0", "x":13, "y":0},
+ {"label":"Backspace", "x":14, "y":0},
+
+ {"label":"]", "x":8, "y":1},
+ {"label":"Y", "x":9, "y":1},
+ {"label":"U", "x":10, "y":1},
+ {"label":"I", "x":11, "y":1},
+ {"label":"O", "x":12, "y":1},
+ {"label":"P", "x":13, "y":1},
+ {"label":"\\", "x":14, "y":1},
+
+ {"label":"-", "x":8, "y":2},
+ {"label":"H", "x":9, "y":2},
+ {"label":"J", "x":10, "y":2},
+ {"label":"K", "x":11, "y":2},
+ {"label":"L", "x":12, "y":2},
+ {"label":";", "x":13, "y":2},
+ {"label":"Enter", "x":14, "y":2},
+
+ {"label":"F4", "x":8, "y":3},
+ {"label":"N", "x":9, "y":3},
+ {"label":"M", "x":10, "y":3},
+ {"label":",", "x":11, "y":3},
+ {"label":".", "x":12, "y":3},
+ {"label":"/", "x":13, "y":3},
+ {"label":"Shift", "x":14, "y":3},
+
+ {"label":"F5", "x":8, "y":4},
+ {"label":"Space", "x":9, "y":4, "w":1.5},
+ {"label":"AltGr", "x":10.5, "y":4, "w":1.25},
+ {"label":"Fn", "x":11.75, "y":4, "w":1.25},
+ {"label":"Ctrl", "x":13, "y":4},
+ {"label":"Ctrl", "x":13, "y":4}
+
+
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/stef9998/split_5x7/keymaps/default/config.h b/keyboards/handwired/stef9998/split_5x7/keymaps/default/config.h
new file mode 100644
index 00000000000..2a19e475021
--- /dev/null
+++ b/keyboards/handwired/stef9998/split_5x7/keymaps/default/config.h
@@ -0,0 +1,28 @@
+/*
+Copyright 2022 stef9998
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+// #define USE_SERIAL
+#define USE_I2C
+
+/* Select hand configuration */
+// #define MASTER_LEFT
+// #define MASTER_RIGHT
+#define EE_HANDS
+
diff --git a/keyboards/handwired/stef9998/split_5x7/keymaps/default/keymap.c b/keyboards/handwired/stef9998/split_5x7/keymaps/default/keymap.c
new file mode 100644
index 00000000000..ce130d6e799
--- /dev/null
+++ b/keyboards/handwired/stef9998/split_5x7/keymaps/default/keymap.c
@@ -0,0 +1,96 @@
+/*
+Copyright 2022 stef9998
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// You can also skip layer-names entirely and just use numbers.
+enum custom_layer {
+ _QWERTY,
+ _FN,
+ _SYM, //symbols & numbers
+ _CFG, //config
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ FN,
+ SYM,
+ CONFIG,
+};
+
+// Shortcut to make keymap more readable
+#define KC_FN MO(_FN)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTY] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐
+ QK_GESC ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_NO , KC_NO ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_BSPC ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC , KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_BSLS ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_CAPS ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_EQL , KC_MINS ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,KC_ENT ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSPO ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,SH_OS , KC_NO ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSPC ,
+// ├────────┼────────┼────────┴─┬──────┴───┬────┴────────┼────────┤ ├────────┼────────┴────┬───┴──────┬─┴────────┼────────┼────────┤
+ KC_LCTL ,KC_LCPO ,KC_LGUI ,KC_LALT ,KC_SPC ,MO(_SYM), MO(_SYM),KC_SPC ,KC_RALT ,MO(_FN) ,KC_RCPC ,KC_RCTL
+// └────────┴────────┴──────────┴──────────┴─────────────┴────────┘ └────────┴─────────────┴──────────┴──────────┴────────┴────────┘
+),
+
+[_FN] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,KC_DEL ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_PIPE ,_______ , _______ ,KC_PGUP ,KC_HOME ,KC_UP ,KC_END ,KC_PSCR ,XXXXXXX ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_HASH ,KC_DLR ,KC_LBRC ,KC_RBRC ,KC_GRV ,_______ , _______ ,KC_PGDN ,KC_LEFT ,KC_DOWN ,KC_RIGHT,_______ ,KC_QUOT ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_PERC ,KC_CIRC ,KC_LPRN ,KC_RPRN ,KC_TILD ,_______ , _______ ,KC_MSEL ,KC_MPLY ,KC_MPRV ,KC_MNXT ,KC_MPLY ,_______ ,
+// ├────────┼────────┼────────┴─┬──────┴───┬────┴────────┼────────┤ ├────────┼────────┴────┬───┴──────┬─┴────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______
+// └────────┴────────┴──────────┴──────────┴─────────────┴────────┘ └────────┴─────────────┴──────────┴──────────┴────────┴────────┘
+),
+
+[_SYM] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_GRV ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F11 , KC_F12 ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_DEL ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_EXLM ,KC_AT ,KC_HASH ,KC_DLR ,KC_PERC ,_______ , _______ ,KC_CIRC ,KC_AMPR ,KC_ASTR ,KC_LPRN ,KC_RPRN ,XXXXXXX ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,_______ , _______ ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_MINS ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_MSEL ,KC_MPLY ,XXXXXXX , KC_MPRV, KC_MNXT,_______ , _______ ,KC_MSEL ,KC_MPLY , KC_MPRV, KC_MNXT,KC_MPLY ,_______ ,
+// ├────────┼────────┼────────┴─┬──────┴───┬────┴────────┼────────┤ ├────────┼────────┴────┬───┴──────┬─┴────────┼────────┼────────┤
+ QK_BOOT ,_______ ,_______ ,_______ ,_______ ,TG(_CFG), TG(_CFG),_______ ,_______ ,_______ ,_______ ,QK_BOOT
+// └────────┴────────┴──────────┴──────────┴─────────────┴────────┘ └────────┴─────────────┴──────────┴──────────┴────────┴────────┘
+),
+
+[_CFG] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐
+ TG(_CFG),_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+// ├────────┼────────┼────────┴─┬──────┴───┬────┴────────┼────────┤ ├────────┼────────┴────┬───┴──────┬─┴────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______
+// └────────┴────────┴──────────┴──────────┴─────────────┴────────┘ └────────┴─────────────┴──────────┴──────────┴────────┴────────┘
+),
+};
diff --git a/keyboards/handwired/stef9998/split_5x7/keymaps/default/readme.md b/keyboards/handwired/stef9998/split_5x7/keymaps/default/readme.md
new file mode 100644
index 00000000000..9d3e057bc65
--- /dev/null
+++ b/keyboards/handwired/stef9998/split_5x7/keymaps/default/readme.md
@@ -0,0 +1,7 @@
+
+
+# Default Layout
+
+This is the default layout.
+For the most part it's a straightforward and easy to follow layout.
+The only thing to note is the apostrophe key which is on the second layer under return.
\ No newline at end of file
diff --git a/keyboards/handwired/stef9998/split_5x7/keymaps/stef9998/config.h b/keyboards/handwired/stef9998/split_5x7/keymaps/stef9998/config.h
new file mode 100644
index 00000000000..3b7ee90f925
--- /dev/null
+++ b/keyboards/handwired/stef9998/split_5x7/keymaps/stef9998/config.h
@@ -0,0 +1,34 @@
+/*
+Copyright 2022 stef9998
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+/* Use I2C or Serial, not both */
+//#define USE_SERIAL
+#define USE_I2C
+
+/* Select hand configuration */
+// #define MASTER_LEFT
+// #define MASTER_RIGHT
+#define EE_HANDS
+
+#define LCPO_KEYS KC_LCTL,KC_TRNS,KC_LBRC
+#define RCPC_KEYS KC_RCTL,KC_TRNS,KC_RBRC
+
+#define TAPPING_TERM_PER_KEY
+#define IGNORE_MOD_TAP_INTERRUPT
+#define IGNORE_MOD_TAP_INTERRUPT_PER_KEY
\ No newline at end of file
diff --git a/keyboards/handwired/stef9998/split_5x7/keymaps/stef9998/keymap.c b/keyboards/handwired/stef9998/split_5x7/keymaps/stef9998/keymap.c
new file mode 100644
index 00000000000..0be1e4cbb37
--- /dev/null
+++ b/keyboards/handwired/stef9998/split_5x7/keymaps/stef9998/keymap.c
@@ -0,0 +1,188 @@
+/*
+Copyright 2022 stef9998
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include QMK_KEYBOARD_H
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+enum custom_layer {
+ _QWERTY,
+ _HOMEMOD,
+ _FN,
+ _SYM, //symbols & numbers
+ _SPARE,
+ _CFG, //config
+};
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ HOMEMOD,
+ FN,
+ SYM,
+ SPARE,
+ CONFIG,
+};
+
+// Shortcut to make keymap more readable
+#define KC_FN MO(_FN)
+
+bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case KC_LSPO:
+ // Do not force the mod-tap key press to be handled as a modifier
+ // if any other key was pressed while the mod-tap key is held down.
+ return false;
+// case MT(MOD_LSFT,KC_9):
+// return false;
+ case KC_RSPC:
+ return false;
+ default:
+ // Force the mod-tap key press to be handled as a modifier if any
+ // other key was pressed while the mod-tap key is held down.
+ return true;
+ }
+}
+
+//layer_state_t layer_state_set_user(layer_state_t state) {
+// return update_tri_layer_state(state, _ESS, _SYM, _SYM_ESS);
+//}
+
+//Modified from default, cause I want CapsLock to still be there even when I swap hands
+const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+{ {0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}, {6, 5}},
+{ {0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}, {6, 6}},
+{ {0, 2}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}, {6, 7}}, // caps won't be switched, because of extend
+{ {0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 8}, {5, 8}, {6, 8}},
+{ {0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 9}, {5, 9}, {6, 9}},
+
+{ {0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}, {6, 0}},
+{ {0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}, {6, 1}},
+{ {0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}, {6, 2}},
+{ {0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}, {6, 3}},
+{ {0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}, {6, 4}},
+};
+
+uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case SH_T(KC_SPC):
+ return TAPPING_TERM + 300;
+ default:
+ return TAPPING_TERM;
+ }
+}
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+[_QWERTY] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐
+ QK_GESC ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,KC_NO , KC_NO ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_BSPC ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_TAB ,KC_Q ,KC_W ,KC_E ,KC_R ,KC_T ,KC_LBRC , KC_RBRC ,KC_Y ,KC_U ,KC_I ,KC_O ,KC_P ,KC_BSLS ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_CAPS ,KC_A ,KC_S ,KC_D ,KC_F ,KC_G ,KC_EQL , KC_MINS ,KC_H ,KC_J ,KC_K ,KC_L ,KC_SCLN ,KC_ENT ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSPO ,KC_Z ,KC_X ,KC_C ,KC_V ,KC_B ,SH_OS , KC_NO ,KC_N ,KC_M ,KC_COMM ,KC_DOT ,KC_SLSH ,KC_RSPC ,
+// ├────────┼────────┼────────┴─┬──────┴───┬────┴────────┼────────┤ ├────────┼────────┴────┬───┴──────┬─┴────────┼────────┼────────┤
+ KC_LCTL ,KC_LCPO ,KC_LGUI ,KC_LALT ,SH_T(KC_SPC) ,MO(_SYM), MO(_SYM),KC_SPC ,KC_RALT ,MO(_FN) ,KC_RCPC ,KC_RCTL
+// └────────┴────────┴──────────┴──────────┴─────────────┴────────┘ └────────┴─────────────┴──────────┴──────────┴────────┴────────┘
+),
+
+[_HOMEMOD] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+_______ ,_______ ,RALT_T(KC_S),LCTL_T(KC_D),LSFT_T(KC_F),LT(_SYM,KC_G),_______ , _______ ,LT(_SYM,KC_H),RSFT_T(KC_J),RCTL_T(KC_K),LALT_T(KC_L),_______ ,_______ ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ KC_LSFT ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,KC_RSFT ,
+// ├────────┼────────┼────────┴─┬──────┴───┬────┴────────┼────────┤ ├────────┼────────┴────┬───┴──────┬─┴────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______
+// └────────┴────────┴──────────┴──────────┴─────────────┴────────┘ └────────┴─────────────┴──────────┴──────────┴────────┴────────┘
+),
+
+[_FN] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,KC_DEL ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_EXLM ,KC_AT ,KC_LCBR ,KC_RCBR ,KC_PIPE ,_______ , _______ ,KC_PGUP ,KC_HOME ,KC_UP ,KC_END ,KC_PSCR ,XXXXXXX ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_HASH ,KC_DLR ,KC_LBRC ,KC_RBRC ,KC_GRV ,_______ , _______ ,KC_PGDN ,KC_LEFT ,KC_DOWN ,KC_RIGHT,_______ ,_______ ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_PERC ,KC_CIRC ,KC_LPRN ,KC_RPRN ,KC_TILD ,_______ , _______ ,KC_MSEL ,KC_MPLY ,KC_MPRV ,KC_MNXT ,KC_MPLY ,_______ ,
+// ├────────┼────────┼────────┴─┬──────┴───┬────┴────────┼────────┤ ├────────┼────────┴────┬───┴──────┬─┴────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______
+// └────────┴────────┴──────────┴──────────┴─────────────┴────────┘ └────────┴─────────────┴──────────┴──────────┴────────┴────────┘
+),
+
+[_SYM] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐
+ KC_GRV ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,KC_F11 , KC_F12 ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,KC_DEL ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_EXLM ,KC_AT ,KC_HASH ,KC_DLR ,KC_PERC ,_______ , _______ ,KC_CIRC ,KC_AMPR ,KC_ASTR ,KC_LPRN ,KC_RPRN ,XXXXXXX ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ CAPSWRD ,KC_1 ,KC_2 ,KC_3 ,KC_4 ,KC_5 ,_______ , _______ ,KC_6 ,KC_7 ,KC_8 ,KC_9 ,KC_0 ,KC_QUOT ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,KC_MSEL ,KC_MPLY ,XXXXXXX ,KC_EQL ,KC_PLUS ,_______ , _______ ,KC_UNDS ,KC_MINS , KC_MPRV, KC_MNXT,KC_MPLY ,_______ ,
+// ├────────┼────────┼────────┴─┬──────┴───┬────┴────────┼────────┤ ├────────┼────────┴────┬───┴──────┬─┴────────┼────────┼────────┤
+ QK_BOOT ,_______ ,_______ ,_______ ,_______ ,TG(_CFG), TG(_CFG),_______ ,_______ ,_______ ,_______ ,QK_BOOT
+// └────────┴────────┴──────────┴──────────┴─────────────┴────────┘ └────────┴─────────────┴──────────┴──────────┴────────┴────────┘
+),
+
+[_CFG] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐
+ TG(_CFG),_______ ,TG(_HOMEMOD),_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,KC_1 , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+// ├────────┼────────┼────────┴─┬──────┴───┬────┴────────┼────────┤ ├────────┼────────┴────┬───┴──────┬─┴────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______
+// └────────┴────────┴──────────┴──────────┴─────────────┴────────┘ └────────┴─────────────┴──────────┴──────────┴────────┴────────┘
+),
+
+[_SPARE] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐
+ XXXXXXX ,KC_F1 ,KC_F2 ,KC_F3 ,KC_F4 ,KC_F5 ,XXXXXXX , XXXXXXX ,KC_F6 ,KC_F7 ,KC_F8 ,KC_F9 ,KC_F10 ,XXXXXXX ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,QK_BOOT ,RGB_M_P ,RGB_TOG ,RGB_MOD ,RGB_HUD ,RGB_HUI , RGB_SAD ,RGB_SAI ,RGB_VAD ,RGB_VAI ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,_______ , _______ ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,
+// ├────────┼────────┼────────┴─┬──────┴───┬────┴────────┼────────┤ ├────────┼────────┴────┬───┴──────┬─┴────────┼────────┼────────┤
+ XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX , XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX ,XXXXXXX
+// └────────┴────────┴──────────┴──────────┴─────────────┴────────┘ └────────┴─────────────┴──────────┴──────────┴────────┴────────┘
+)
+};
+
+/*
+[_] = LAYOUT(
+// ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┬────────┐
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+// ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______ ,_______ ,
+// ├────────┼────────┼────────┴─┬──────┴───┬────┴────────┼────────┤ ├────────┼────────┴────┬───┴──────┬─┴────────┼────────┼────────┤
+ _______ ,_______ ,_______ ,_______ ,_______ ,_______ , _______ ,_______ ,_______ ,_______ ,_______ ,_______
+// └────────┴────────┴──────────┴──────────┴─────────────┴────────┘ └────────┴─────────────┴──────────┴──────────┴────────┴────────┘
+),
+ */
\ No newline at end of file
diff --git a/keyboards/handwired/stef9998/split_5x7/keymaps/stef9998/readme.md b/keyboards/handwired/stef9998/split_5x7/keymaps/stef9998/readme.md
new file mode 100644
index 00000000000..329ba39a4a5
--- /dev/null
+++ b/keyboards/handwired/stef9998/split_5x7/keymaps/stef9998/readme.md
@@ -0,0 +1,4 @@
+
+
+# The keymap I currently use
+Pretty much a default qwerty on a 60%-ish with some function-layers
diff --git a/keyboards/handwired/stef9998/split_5x7/keymaps/stef9998/rules.mk b/keyboards/handwired/stef9998/split_5x7/keymaps/stef9998/rules.mk
new file mode 100644
index 00000000000..f18f03c2c74
--- /dev/null
+++ b/keyboards/handwired/stef9998/split_5x7/keymaps/stef9998/rules.mk
@@ -0,0 +1,2 @@
+CAPS_WORD_ENABLE = yes
+SWAP_HANDS_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/handwired/stef9998/split_5x7/readme.md b/keyboards/handwired/stef9998/split_5x7/readme.md
new file mode 100644
index 00000000000..bf6c9ef7191
--- /dev/null
+++ b/keyboards/handwired/stef9998/split_5x7/readme.md
@@ -0,0 +1,26 @@
+# Split_5x7
+
+
+
+A handwired Split keyboard with the unusual layout of 5x7 on either side.
+
+3d print files will be made available soon.
+
+* Keyboard Maintainer: [Stefan](https://github.com/stef9998)
+* Hardware Supported: Pro Micro
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/stef9998/split_5x7/rev1:default
+
+Flashing example for left side:
+
+ make handwired/stef9998/split_5x7/rev1:default:avrdude-split-left
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+How to enter the bootloader:
+* **Keycode in layout**: Press the key mapped to `QK_BOOT`.\
+In the default keymap it's accessible by pressing either of the buttons bringing you to layer `_SYM` and then pressing one of the outer Ctrl's.
\ No newline at end of file
diff --git a/keyboards/handwired/stef9998/split_5x7/rev1/config.h b/keyboards/handwired/stef9998/split_5x7/rev1/config.h
new file mode 100644
index 00000000000..6308b1cf193
--- /dev/null
+++ b/keyboards/handwired/stef9998/split_5x7/rev1/config.h
@@ -0,0 +1,58 @@
+/*
+Copyright 2022 stef9998
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* key matrix size */
+// Rows are doubled-up
+#define MATRIX_ROWS 10
+#define MATRIX_COLS 7
+
+// wiring of each half
+#define MATRIX_ROW_PINS { C6, D7, E6, B4, B5 }
+#define MATRIX_COL_PINS { B2, B6, B1, B3, F7, F5, F6 }
+
+#define MATRIX_ROW_PINS_RIGHT { B5, B4, E6, D7, C6 }
+#define MATRIX_COL_PINS_RIGHT { F5, F6, F7, B1, B3, B2, B6 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* serial.c configuration for split keyboard */
+#define SOFT_SERIAL_PIN D0
+
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+// #define NO_DEBUG
+
+/* disable print */
+// #define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
diff --git a/keyboards/handwired/stef9998/split_5x7/rev1/rev1.c b/keyboards/handwired/stef9998/split_5x7/rev1/rev1.c
new file mode 100644
index 00000000000..cf8e7d9fa38
--- /dev/null
+++ b/keyboards/handwired/stef9998/split_5x7/rev1/rev1.c
@@ -0,0 +1,17 @@
+/*
+Copyright 2022 stef9998
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#include "split_5x7.h"
diff --git a/keyboards/handwired/stef9998/split_5x7/rev1/rev1.h b/keyboards/handwired/stef9998/split_5x7/rev1/rev1.h
new file mode 100644
index 00000000000..9ffed667272
--- /dev/null
+++ b/keyboards/handwired/stef9998/split_5x7/rev1/rev1.h
@@ -0,0 +1,40 @@
+/*
+Copyright 2022 stef9998
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+#pragma once
+
+#include "split_5x7.h"
+
+
+#define LAYOUT( \
+ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k10, k11, k12, k13, \
+ k14, k15, k16, k17, k18, k19, k20, k21, k22, k23, k24, k25, k26, k27, \
+ k28, k29, k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k40, k41, \
+ k42, k43, k44, k45, k46, k47, k48, k49, k50, k51, k52, k53, k54, k55, \
+ k56, k57, k58, k59, k61, k62, k63, k64, k66, k67, k68, k69 \
+) \
+{ \
+ { k00, k01, k02, k03, k04 , k05, k06 }, \
+ { k14, k15, k16, k17, k18 , k19, k20 }, \
+ { k28, k29, k30, k31, k32 , k33, k34 }, \
+ { k42, k43, k44, k45, k46 , k47, k48 }, \
+ { k56, k57, k58, k59, KC_NO, k61, k62 }, \
+ { k13, k12, k11, k10, k09 , k08, k07 }, \
+ { k27, k26, k25, k24, k23 , k22, k21 }, \
+ { k41, k40, k39, k38, k37 , k36, k35 }, \
+ { k55, k54, k53, k52, k51 , k50, k49 }, \
+ { k69, k68, k67, k66, KC_NO, k64, k63 } \
+}
diff --git a/keyboards/handwired/stef9998/split_5x7/rev1/rules.mk b/keyboards/handwired/stef9998/split_5x7/rev1/rules.mk
new file mode 100644
index 00000000000..3cd6d040b85
--- /dev/null
+++ b/keyboards/handwired/stef9998/split_5x7/rev1/rules.mk
@@ -0,0 +1,4 @@
+# Disable unsupported hardware
+AUDIO_SUPPORTED = no
+BACKLIGHT_SUPPORTED = no
+RGBLIGHT_SUPPORTED = no
\ No newline at end of file
diff --git a/keyboards/handwired/stef9998/split_5x7/rules.mk b/keyboards/handwired/stef9998/split_5x7/rules.mk
new file mode 100644
index 00000000000..01f4b93976e
--- /dev/null
+++ b/keyboards/handwired/stef9998/split_5x7/rules.mk
@@ -0,0 +1,22 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = caterina
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+
+SPLIT_KEYBOARD = yes
+
+DEFAULT_FOLDER = handwired/stef9998/split_5x7/rev1
\ No newline at end of file
diff --git a/keyboards/handwired/stef9998/split_5x7/split_5x7.c b/keyboards/handwired/stef9998/split_5x7/split_5x7.c
new file mode 100644
index 00000000000..5e19d471757
--- /dev/null
+++ b/keyboards/handwired/stef9998/split_5x7/split_5x7.c
@@ -0,0 +1,33 @@
+/* Copyright 2017 REPLACE_WITH_YOUR_NAME
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include "split_5x7.h"
+
+#ifdef SWAP_HANDS_ENABLE
+__attribute__ ((weak))
+const keypos_t PROGMEM hand_swap_config[MATRIX_ROWS][MATRIX_COLS] = {
+{{0, 5}, {1, 5}, {2, 5}, {3, 5}, {4, 5}, {5, 5}, {6, 5}},
+{{0, 6}, {1, 6}, {2, 6}, {3, 6}, {4, 6}, {5, 6}, {6, 6}},
+{{0, 7}, {1, 7}, {2, 7}, {3, 7}, {4, 7}, {5, 7}, {6, 7}},
+{{0, 8}, {1, 8}, {2, 8}, {3, 8}, {4, 8}, {5, 8}, {6, 8}},
+{{0, 9}, {1, 9}, {2, 9}, {3, 9}, {4, 9}, {5, 9}, {6, 9}},
+
+{{0, 0}, {1, 0}, {2, 0}, {3, 0}, {4, 0}, {5, 0}, {6, 0}},
+{{0, 1}, {1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}, {6, 1}},
+{{0, 2}, {1, 2}, {2, 2}, {3, 2}, {4, 2}, {5, 2}, {6, 2}},
+{{0, 3}, {1, 3}, {2, 3}, {3, 3}, {4, 3}, {5, 3}, {6, 3}},
+{{0, 4}, {1, 4}, {2, 4}, {3, 4}, {4, 4}, {5, 4}, {6, 4}},
+};
+#endif
\ No newline at end of file
diff --git a/keyboards/mechwild/bde/bde.h b/keyboards/handwired/stef9998/split_5x7/split_5x7.h
similarity index 61%
rename from keyboards/mechwild/bde/bde.h
rename to keyboards/handwired/stef9998/split_5x7/split_5x7.h
index 3d16bdb8db8..55ed1cc98fe 100644
--- a/keyboards/mechwild/bde/bde.h
+++ b/keyboards/handwired/stef9998/split_5x7/split_5x7.h
@@ -1,26 +1,23 @@
-/* Copyright 2022 Kyle McCreery
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
+/* Copyright 2017 REPLACE_WITH_YOUR_NAME
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
*/
+
#pragma once
-#include "quantum.h"
-
-#ifdef KEYBOARD_mechwild_bde_rev2
- #include "rev2.h"
-#elif KEYBOARD_mechwild_bde_lefty
- #include "lefty.h"
-#elif KEYBOARD_mechwild_bde_righty
- #include "righty.h"
+#if defined(KEYBOARD_handwired_stef9998_split_5x7_rev1)
+# include "rev1.h"
#endif
+
+#include "quantum.h"
diff --git a/keyboards/handwired/symmetric70_proto/matrix_debug/matrix.c b/keyboards/handwired/symmetric70_proto/matrix_debug/matrix.c
index ba0018a70f8..7e15761a98b 100644
--- a/keyboards/handwired/symmetric70_proto/matrix_debug/matrix.c
+++ b/keyboards/handwired/symmetric70_proto/matrix_debug/matrix.c
@@ -159,7 +159,7 @@ static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row)
do {
MATRIX_DEBUG_DELAY_START();
is_pressed = false;
- for (uint8_t i = 0; i < sizeof(delay_ports) / sizeof(pin_t); i++) {
+ for (uint8_t i = 0; i < ARRAY_SIZE(delay_ports); i++) {
# ifdef MATRIX_IO_DELAY_MULSEL
writePin(MATRIX_MUL_SELECT, delay_sel[i]);
waitInputPinDelay();
diff --git a/keyboards/handwired/trackpoint/config.h b/keyboards/handwired/trackpoint/config.h
index a4b468faefc..ed6b4f2180a 100644
--- a/keyboards/handwired/trackpoint/config.h
+++ b/keyboards/handwired/trackpoint/config.h
@@ -5,7 +5,7 @@
#define MATRIX_ROWS 1
#define MATRIX_COLS 3
-#ifdef PS2_USE_USART
+#ifdef PS2_DRIVER_USART
#define PS2_CLOCK_PIN D5
#define PS2_DATA_PIN D2
diff --git a/keyboards/handwired/trackpoint/rules.mk b/keyboards/handwired/trackpoint/rules.mk
index f471f00dfc8..1a452149c96 100644
--- a/keyboards/handwired/trackpoint/rules.mk
+++ b/keyboards/handwired/trackpoint/rules.mk
@@ -17,4 +17,5 @@ BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
AUDIO_ENABLE = no # Audio output
PS2_MOUSE_ENABLE = yes
-PS2_USE_USART = yes
+PS2_ENABLE = yes
+PS2_DRIVER = usart
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f411/config.h b/keyboards/handwired/tractyl_manuform/5x6_right/f411/config.h
index 791317b9e98..f7e9cfb7d6e 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/f411/config.h
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/f411/config.h
@@ -75,7 +75,7 @@ along with this program. If not, see .
#define I2C1_SCL_PAL_MODE 4
#define I2C1_SDA_PAL_MODE 4
#define I2C1_CLOCK_SPEED 400000
-#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2
+#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_16_9
/* encoder config */
#define ENCODERS_PAD_A \
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f411/f411.c b/keyboards/handwired/tractyl_manuform/5x6_right/f411/f411.c
index 990b8358433..09f1b570084 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/f411/f411.c
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/f411/f411.c
@@ -24,7 +24,7 @@ void matrix_scan_sub_kb(void) {
}
}
-void bootmagic_lite(void) {
+__attribute__((weak)) void bootmagic_lite(void) {
// We need multiple scans because debouncing can't be turned off.
matrix_scan();
#if defined(DEBOUNCE) && DEBOUNCE > 0
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/config.h b/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/config.h
index daaad5f5e35..f159a69174e 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/config.h
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/keymaps/drashna/config.h
@@ -28,3 +28,9 @@
#define CHARYBDIS_SNIPING_DPI_CONFIG_STEP 200
#define ENCODER_DEFAULT_POS 0x3
+
+
+#define BOOTMAGIC_LITE_EEPROM_ROW 1
+#define BOOTMAGIC_LITE_EEPROM_COLUMN 0
+#define BOOTMAGIC_LITE_EEPROM_ROW_RIGHT 7
+#define BOOTMAGIC_LITE_EEPROM_COLUMN_RIGHT 5
diff --git a/keyboards/handwired/wakizashi40/info.json b/keyboards/handwired/wakizashi40/info.json
index b97d61171b0..12a17643a85 100644
--- a/keyboards/handwired/wakizashi40/info.json
+++ b/keyboards/handwired/wakizashi40/info.json
@@ -4,6 +4,7 @@
"maintainer": "xia0",
"debounce": 5,
"processor": "atmega32u4",
+ "bootloader": "atmel-dfu",
"diode_direction": "COL2ROW",
"features": {
"audio": false,
diff --git a/keyboards/hhkb/ansi/keymaps/cinaeco/config.h b/keyboards/hhkb/ansi/keymaps/cinaeco/config.h
index 1c714deca40..ed660722c21 100644
--- a/keyboards/hhkb/ansi/keymaps/cinaeco/config.h
+++ b/keyboards/hhkb/ansi/keymaps/cinaeco/config.h
@@ -1,18 +1,10 @@
-#ifndef CONFIG_CINAECO_H
-#define CONFIG_CINAECO_H
-
-#include "../../config.h"
+#pragma once
#undef MANUFACTURER
#undef PRODUCT
-#define MANUFACTURER QMK
-#define PRODUCT HHKB QMK cinaeco
+#define MANUFACTURER "QMK"
+#define PRODUCT "HHKB QMK cinaeco"
// Increase "Tap" detection window. Avoid missing 'q' or 'z' when typing slowly.
#undef TAPPING_TERM
#define TAPPING_TERM 230
-
-// Uncomment to enable NKRO by default. May cause issues with KVM switches.
-//#define FORCE_NKRO
-
-#endif
diff --git a/keyboards/hhkb/ansi/keymaps/mjt/config.h b/keyboards/hhkb/ansi/keymaps/mjt/config.h
index b98ec523113..41d1557c6f1 100644
--- a/keyboards/hhkb/ansi/keymaps/mjt/config.h
+++ b/keyboards/hhkb/ansi/keymaps/mjt/config.h
@@ -1,71 +1,3 @@
-/*
-Copyright 2012 Jun Wako
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0xCAFE
-#define DEVICE_VER 0x0104
-#define MANUFACTURER q.m.k
-#define PRODUCT HHKB mod
-
-/* key matrix size */
-#ifdef HHKB_JP
-# define MATRIX_ROWS 16
-#else
-# define MATRIX_ROWS 8
-#endif
-#define MATRIX_COLS 8
-
-#define TAPPING_TERM 200
-
-/* number of backlight levels */
-#define BACKLIGHT_LEVELS 3
+#pragma once
#define USB_MAX_POWER_CONSUMPTION 50
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE 5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-//#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-//#define LOCKING_RESYNC_ENABLE
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
-*/
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/hhkb/ansi/keymaps/shela/config.h b/keyboards/hhkb/ansi/keymaps/shela/config.h
index 25794900c3b..db66659165b 100644
--- a/keyboards/hhkb/ansi/keymaps/shela/config.h
+++ b/keyboards/hhkb/ansi/keymaps/shela/config.h
@@ -16,8 +16,6 @@
#pragma once
-#include "../../config.h"
-
/* USB Device descriptor parameter */
#undef VENDOR_ID
#define VENDOR_ID 0x0853
@@ -26,9 +24,9 @@
#undef DEVICE_VER
#define DEVICE_VER 0x0102
#undef MANUFACTURER
-#define MANUFACTURER Topre Corporation
+#define MANUFACTURER "Topre Corporation"
#undef PRODUCT
-#define PRODUCT HHKB Professional
+#define PRODUCT "HHKB Professional"
#undef TAPPING_TERM
#define TAPPING_TERM 210
diff --git a/keyboards/hhkb/rn42/rn42.c b/keyboards/hhkb/rn42/rn42.c
index 06665425ced..b35b3193520 100644
--- a/keyboards/hhkb/rn42/rn42.c
+++ b/keyboards/hhkb/rn42/rn42.c
@@ -12,15 +12,13 @@
static uint8_t keyboard_leds(void);
static void send_keyboard(report_keyboard_t *report);
static void send_mouse(report_mouse_t *report);
-static void send_system(uint16_t data);
-static void send_consumer(uint16_t data);
+static void send_extra(uint8_t report_id, uint16_t data);
host_driver_t rn42_driver = {
keyboard_leds,
send_keyboard,
send_mouse,
- send_system,
- send_consumer
+ send_extra
};
@@ -198,12 +196,6 @@ static void send_mouse(report_mouse_t *report)
serial_send(report->v);
}
-static void send_system(uint16_t data)
-{
- // Table 5-6 of RN-BT-DATA-UB
- // 81,82,83 scan codes can be used?
-}
-
static uint16_t usage2bits(uint16_t usage)
{
@@ -228,14 +220,17 @@ static uint16_t usage2bits(uint16_t usage)
return 0;
}
-static void send_consumer(uint16_t data)
+
+static void send_extra(uint8_t report_id, uint16_t data)
{
- uint16_t bits = usage2bits(data);
- serial_send(0xFD); // Raw report mode
- serial_send(3); // length
- serial_send(3); // descriptor type
- serial_send(bits&0xFF);
- serial_send((bits>>8)&0xFF);
+ if (report_id == REPORT_ID_CONSUMER) {
+ uint16_t bits = usage2bits(data);
+ serial_send(0xFD); // Raw report mode
+ serial_send(3); // length
+ serial_send(3); // descriptor type
+ serial_send(bits&0xFF);
+ serial_send((bits>>8)&0xFF);
+ }
}
@@ -243,19 +238,16 @@ static void send_consumer(uint16_t data)
static uint8_t config_keyboard_leds(void);
static void config_send_keyboard(report_keyboard_t *report);
static void config_send_mouse(report_mouse_t *report);
-static void config_send_system(uint16_t data);
-static void config_send_consumer(uint16_t data);
+static void config_send_extra(uint8_t report_id, uint16_t data);
host_driver_t rn42_config_driver = {
config_keyboard_leds,
config_send_keyboard,
config_send_mouse,
- config_send_system,
- config_send_consumer
+ config_send_extra
};
static uint8_t config_keyboard_leds(void) { return leds; }
static void config_send_keyboard(report_keyboard_t *report) {}
static void config_send_mouse(report_mouse_t *report) {}
-static void config_send_system(uint16_t data) {}
-static void config_send_consumer(uint16_t data) {}
+static void config_send_extra(uint8_t report_id, uint16_t data) {}
diff --git a/keyboards/horrortroll/handwired_k552/keymaps/default/keymap_stuff.h b/keyboards/horrortroll/handwired_k552/keymaps/default/keymap_stuff.h
index a97b46e5e46..8c4f9d0d4b5 100644
--- a/keyboards/horrortroll/handwired_k552/keymaps/default/keymap_stuff.h
+++ b/keyboards/horrortroll/handwired_k552/keymaps/default/keymap_stuff.h
@@ -110,7 +110,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
{{205, 250, 255}, {140, 215, 125}, false },
};
- uint8_t gp_length = sizeof(gradient_presets)/sizeof(gradient_presets[0]);
+ uint8_t gp_length = ARRAY_SIZE(gradient_presets);
switch (keycode) {
case G1_HUI:
diff --git a/keyboards/horrortroll/handwired_k552/keymaps/via/keymap_stuff.h b/keyboards/horrortroll/handwired_k552/keymaps/via/keymap_stuff.h
index a97b46e5e46..8c4f9d0d4b5 100644
--- a/keyboards/horrortroll/handwired_k552/keymaps/via/keymap_stuff.h
+++ b/keyboards/horrortroll/handwired_k552/keymaps/via/keymap_stuff.h
@@ -110,7 +110,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
{{205, 250, 255}, {140, 215, 125}, false },
};
- uint8_t gp_length = sizeof(gradient_presets)/sizeof(gradient_presets[0]);
+ uint8_t gp_length = ARRAY_SIZE(gradient_presets);
switch (keycode) {
case G1_HUI:
diff --git a/keyboards/horrortroll/handwired_k552/lib/wave.c b/keyboards/horrortroll/handwired_k552/lib/wave.c
index 79b4e0ced7f..700f73aee5d 100644
--- a/keyboards/horrortroll/handwired_k552/lib/wave.c
+++ b/keyboards/horrortroll/handwired_k552/lib/wave.c
@@ -68,7 +68,7 @@ void add_keylog(uint16_t keycode) {
keycode = 0;
}
- if (keycode < (sizeof(code_to_name) / sizeof(char))) {
+ if (keycode < ARRAY_SIZE(code_to_name)) {
char log_char = pgm_read_byte(&code_to_name[keycode]);
for (uint8_t j = 0; j < OLED_FONT_WIDTH; j++) {
diff --git a/keyboards/idobao/id80/v1/readme.md b/keyboards/idobao/id80/v1/readme.md
index 9be4dffeaef..c9c446e1b7f 100644
--- a/keyboards/idobao/id80/v1/readme.md
+++ b/keyboards/idobao/id80/v1/readme.md
@@ -24,4 +24,4 @@ Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the Escape key and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB
-* **Keycode in layout**: Press the key mapped to `RESET` if it is available
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/idobao/id80/v2/readme.md b/keyboards/idobao/id80/v2/readme.md
index 11d98569132..333de28523a 100644
--- a/keyboards/idobao/id80/v2/readme.md
+++ b/keyboards/idobao/id80/v2/readme.md
@@ -38,4 +38,4 @@ Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the Escape key and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB
-* **Keycode in layout**: Press the key mapped to `RESET` if it is available *(default is [Fn]+[Esc])*
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available *(default is [Fn]+[Esc])*
diff --git a/keyboards/ingrained/config.h b/keyboards/ingrained/config.h
new file mode 100644
index 00000000000..7741dde0f71
--- /dev/null
+++ b/keyboards/ingrained/config.h
@@ -0,0 +1,51 @@
+// Copyright 2021 s8erdude (@jpuerto96)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "config_common.h"
+
+/* key matrix size */
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 12
+
+#define MATRIX_ROWS_PER_SIDE (MATRIX_ROWS / 2)
+#define MATRIX_COLS_PER_SIDE (MATRIX_COLS / 2)
+
+#define UNUSED_MCU 13
+#define UNUSED_MCP 6
+
+
+// wiring
+#define MATRIX_ROW_PINS_MCU \
+ { B0, B1, B2, B3 }
+#define MATRIX_COL_PINS_MCU \
+ { F7, F6, F5, F4, F1, F0 }
+#define UNUSED_PINS_MCU \
+ { B4, B5, B6, B7, C6, C7, D2, D3, D4, D5, D6, D7, E6}
+#define MATRIX_ROW_PINS_MCP \
+ { B0, B1, B2, B3 }
+#define MATRIX_COL_PINS_MCP \
+ { A0, A1, A2, A3, A4, A5 }
+#define UNUSED_PINS_MCP \
+ { B4, B5, B6, B7, A6, A7 }
+
+/*
+ * Keyboard Matrix Assignments
+ *
+ * Change this to how you wired your keyboard
+ * COLS: AVR pins used for columns, left to right
+ * ROWS: AVR pins used for rows, top to bottom
+ * DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
+ * ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
+ *
+ */
+
+/* COL2ROW, ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
diff --git a/keyboards/ingrained/info.json b/keyboards/ingrained/info.json
new file mode 100644
index 00000000000..1db1c930f65
--- /dev/null
+++ b/keyboards/ingrained/info.json
@@ -0,0 +1,276 @@
+{
+ "keyboard_name": "ingrained",
+ "manufacturer": "s8erdude"
+ "url": "https://github.com/jpuerto96",
+ "maintainer": "jpuerto96 (s8erdude)",
+ "usb": {
+ "vid": "0xB33F",
+ "pid": "0x58E4",
+ "device_version": "0.0.1"
+ },
+ "layouts": {
+ "LAYOUT_split_3x6_3": {
+ "layout": [
+ {
+ "label": "Esc",
+ "x": 0,
+ "y": 0.3
+ },
+ {
+ "label": "Q",
+ "x": 1,
+ "y": 0.3
+ },
+ {
+ "label": "W",
+ "x": 2,
+ "y": 0.1
+ },
+ {
+ "label": "E",
+ "x": 3,
+ "y": 0
+ },
+ {
+ "label": "R",
+ "x": 4,
+ "y": 0.1
+ },
+ {
+ "label": "T",
+ "x": 5,
+ "y": 0.2
+ },
+ {
+ "label": "Y",
+ "x": 9,
+ "y": 0.2
+ },
+ {
+ "label": "U",
+ "x": 10,
+ "y": 0.1
+ },
+ {
+ "label": "I",
+ "x": 11,
+ "y": 0
+ },
+ {
+ "label": "O",
+ "x": 12,
+ "y": 0.1
+ },
+ {
+ "label": "P",
+ "x": 13,
+ "y": 0.3
+ },
+ {
+ "label": "Back Space",
+ "x": 14,
+ "y": 0.3
+ },
+ {
+ "label": "Tab",
+ "x": 0,
+ "y": 1.3
+ },
+ {
+ "label": "A",
+ "x": 1,
+ "y": 1.3
+ },
+ {
+ "label": "S",
+ "x": 2,
+ "y": 1.1
+ },
+ {
+ "label": "D",
+ "x": 3,
+ "y": 1
+ },
+ {
+ "label": "F",
+ "x": 4,
+ "y": 1.1
+ },
+ {
+ "label": "G",
+ "x": 5,
+ "y": 1.2
+ },
+ {
+ "label": "H",
+ "x": 9,
+ "y": 1.2
+ },
+ {
+ "label": "J",
+ "x": 10,
+ "y": 1.1
+ },
+ {
+ "label": "K",
+ "x": 11,
+ "y": 1
+ },
+ {
+ "label": "L",
+ "x": 12,
+ "y": 1.1
+ },
+ {
+ "label": ";",
+ "x": 13,
+ "y": 1.3
+ },
+ {
+ "label": "'",
+ "x": 14,
+ "y": 1.3
+ },
+ {
+ "label": "Shift",
+ "x": 0,
+ "y": 2.3
+ },
+ {
+ "label": "Z",
+ "x": 1,
+ "y": 2.3
+ },
+ {
+ "label": "X",
+ "x": 2,
+ "y": 2.1
+ },
+ {
+ "label": "C",
+ "x": 3,
+ "y": 2
+ },
+ {
+ "label": "V",
+ "x": 4,
+ "y": 2.1
+ },
+ {
+ "label": "B",
+ "x": 5,
+ "y": 2.2
+ },
+ {
+ "label": "N",
+ "x": 9,
+ "y": 2.2
+ },
+ {
+ "label": "M",
+ "x": 10,
+ "y": 2.1
+ },
+ {
+ "label": ",",
+ "x": 11,
+ "y": 2
+ },
+ {
+ "label": ".",
+ "x": 12,
+ "y": 2.1
+ },
+ {
+ "label": "/",
+ "x": 13,
+ "y": 2.3
+ },
+ {
+ "label": "Shift",
+ "x": 14,
+ "y": 2.3
+ },
+ {
+ "label": "GUI",
+ "x": 4,
+ "y": 3.7
+ },
+ {
+ "label": "Lower",
+ "x": 5,
+ "y": 3.7
+ },
+ {
+ "label": "Space",
+ "x": 6,
+ "y": 3.2,
+ "h": 1.5
+ },
+ {
+ "label": "Enter",
+ "x": 8,
+ "y": 3.2,
+ "h": 1.5
+ },
+ {
+ "label": "Raise",
+ "x": 9,
+ "y": 3.7
+ },
+ {
+ "label": "Alt",
+ "x": 10,
+ "y": 3.7
+ }
+ ]
+ },
+ "LAYOUT_split_3x5_3": {
+ "layout": [
+ {"label":"Q", "x":0, "y":0.3},
+ {"label":"W", "x":1, "y":0.1},
+ {"label":"E", "x":2, "y":0},
+ {"label":"R", "x":3, "y":0.1},
+ {"label":"T", "x":4, "y":0.2},
+
+ {"label":"Y", "x":8, "y":0.2},
+ {"label":"U", "x":9, "y":0.1},
+ {"label":"I", "x":10, "y":0},
+ {"label":"O", "x":11, "y":0.1},
+ {"label":"P", "x":12, "y":0.3},
+
+ {"label":"A", "x":0, "y":1.3},
+ {"label":"S", "x":1, "y":1.1},
+ {"label":"D", "x":2, "y":1},
+ {"label":"F", "x":3, "y":1.1},
+ {"label":"G", "x":4, "y":1.2},
+
+ {"label":"H", "x":8, "y":1.2},
+ {"label":"J", "x":9, "y":1.1},
+ {"label":"K", "x":10, "y":1},
+ {"label":"L", "x":11, "y":1.1},
+ {"label":";", "x":12, "y":1.3},
+
+ {"label":"Z", "x":0, "y":2.3},
+ {"label":"X", "x":1, "y":2.1},
+ {"label":"C", "x":2, "y":2},
+ {"label":"V", "x":3, "y":2.1},
+ {"label":"B", "x":4, "y":2.2},
+
+ {"label":"N", "x":8, "y":2.2},
+ {"label":"M", "x":9, "y":2.1},
+ {"label":",", "x":10, "y":2},
+ {"label":".", "x":11, "y":2.1},
+ {"label":"/", "x":12, "y":2.3},
+
+ {"label":"GUI", "x":3, "y":3.7},
+ {"label":"Lower", "x":4, "y":3.7},
+ {"label":"Space", "x":5, "y":3.2, "h":1.5},
+
+ {"label":"Enter", "x":7, "y":3.2, "h":1.5},
+ {"label":"Raise", "x":8, "y":3.7},
+ {"label":"Alt", "x":9, "y":3.7}
+ ]
+ }
+ }
+}
diff --git a/keyboards/ingrained/ingrained.c b/keyboards/ingrained/ingrained.c
new file mode 100644
index 00000000000..80aa82f840f
--- /dev/null
+++ b/keyboards/ingrained/ingrained.c
@@ -0,0 +1,4 @@
+// Copyright 2021 s8erdude (@jpuerto96)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "ingrained.h"
diff --git a/keyboards/ingrained/ingrained.h b/keyboards/ingrained/ingrained.h
new file mode 100644
index 00000000000..d2e30559516
--- /dev/null
+++ b/keyboards/ingrained/ingrained.h
@@ -0,0 +1,47 @@
+// Copyright 2021 s8erdude (@jpuerto96)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "quantum.h"
+
+/* This is a shortcut to help you visually see your layout.
+ *
+ * The first section contains all of the arguments representing the physical
+ * layout of the board and position of the keys.
+ *
+ * The second converts the arguments into a two-dimensional array which
+ * represents the switch matrix.
+ */
+#define XXX KC_NO
+
+#define LAYOUT_split_3x6_3( \
+ k00, k01, k02, k03, k04, k05, k011, k010, k09, k08, k07, k06,\
+ k10, k11, k12, k13, k14, k15, k111, k110, k19, k18, k17, k16,\
+ k20, k21, k22, k23, k24, k25, k211, k210, k29, k28, k27, k26,\
+ k33, k34, k35, k311, k310, k39\
+) { \
+ { k00, k01, k02, k03, k04, k05 },\
+ { k10, k11, k12, k13, k14, k15 },\
+ { k20, k21, k22, k23, k24, k25 },\
+ { XXX, XXX, XXX, k33, k34, k35 },\
+ { k06, k07, k08, k09, k010, k011 },\
+ { k16, k17, k18, k19, k110, k111 },\
+ { k26, k27, k28, k29, k210, k211 },\
+ { XXX, XXX, XXX, k39, k310, k311 }\
+}
+#define LAYOUT_split_3x5_3( \
+ k01, k02, k03, k04, k05, k011, k010, k09, k08, k07,\
+ k11, k12, k13, k14, k15, k111, k110, k19, k18, k17,\
+ k21, k22, k23, k24, k25, k211, k210, k29, k28, k27,\
+ k33, k34, k35, k311, k310, k39\
+) { \
+ { XXX, k01, k02, k03, k04, k05 },\
+ { XXX, k11, k12, k13, k14, k15 },\
+ { XXX, k21, k22, k23, k24, k25 },\
+ { XXX, XXX, XXX, k33, k34, k35 },\
+ { XXX, k07, k08, k09, k010, k011 },\
+ { XXX, k17, k18, k19, k110, k111 },\
+ { XXX, k27, k28, k29, k210, k211 },\
+ { XXX, XXX, XXX, k39, k310, k311 }\
+}
diff --git a/keyboards/ingrained/keymaps/3x5/keymap.c b/keyboards/ingrained/keymaps/3x5/keymap.c
new file mode 100644
index 00000000000..ed34809b426
--- /dev/null
+++ b/keyboards/ingrained/keymaps/3x5/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2021 s8erdude (@jpuerto96)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+enum layer_names {
+ _BASE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_split_3x5_3(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
+ KC_LGUI, KC_SPC, KC_TAB, KC_BSPC, KC_ENT, KC_RALT
+ )
+};
diff --git a/keyboards/ingrained/keymaps/3x5/readme.md b/keyboards/ingrained/keymaps/3x5/readme.md
new file mode 100644
index 00000000000..c2a997fcbf4
--- /dev/null
+++ b/keyboards/ingrained/keymaps/3x5/readme.md
@@ -0,0 +1 @@
+# The 3x5 keymap for ingrained
diff --git a/keyboards/ingrained/keymaps/default/keymap.c b/keyboards/ingrained/keymaps/default/keymap.c
new file mode 100644
index 00000000000..b09702e9ee0
--- /dev/null
+++ b/keyboards/ingrained/keymaps/default/keymap.c
@@ -0,0 +1,23 @@
+// Copyright 2021 s8erdude (@jpuerto96)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+
+// Each layer gets a name for readability, which is then used in the keymap matrix below.
+// The underscores don't mean anything - you can have a layer called STUFF or any other name.
+// Layer names don't all need to be of the same length, obviously, and you can also skip them
+// entirely and just use numbers.
+
+enum layer_names {
+ _BASE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_BASE] = LAYOUT_split_3x6_3(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LGUI, KC_SPC, KC_TAB, KC_BSPC, KC_ENT, KC_RALT
+ ),
+};
diff --git a/keyboards/ingrained/keymaps/default/readme.md b/keyboards/ingrained/keymaps/default/readme.md
new file mode 100644
index 00000000000..804feead667
--- /dev/null
+++ b/keyboards/ingrained/keymaps/default/readme.md
@@ -0,0 +1 @@
+# The default keymap for ingrained
diff --git a/keyboards/ingrained/matrix.c b/keyboards/ingrained/matrix.c
new file mode 100644
index 00000000000..0dfb150b6c7
--- /dev/null
+++ b/keyboards/ingrained/matrix.c
@@ -0,0 +1,253 @@
+/*
+Copyright 2013 Oleg Kostyuk
+ 2020 Pierre Chevalier
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+/*
+ * This code was heavily inspired by the ergodox_ez keymap, and modernized
+ * to take advantage of the quantum.h microcontroller agnostics gpio control
+ * abstractions and use the macros defined in config.h for the wiring as opposed
+ * to repeating that information all over the place.
+ */
+
+#include QMK_KEYBOARD_H
+#include "i2c_master.h"
+
+extern i2c_status_t mcp23017_status;
+#define I2C_TIMEOUT 1000
+
+// For a better understanding of the i2c protocol, this is a good read:
+// https://www.robot-electronics.co.uk/i2c-tutorial
+
+// I2C address:
+// See the datasheet, section 3.3.1 on addressing I2C devices and figure 3-6 for an
+// illustration
+// http://ww1.microchip.com/downloads/en/devicedoc/20001952c.pdf
+// All address pins of the mcp23017 are connected to the ground on the ferris
+// | 0 | 1 | 0 | 0 | A2 | A1 | A0 |
+// | 0 | 1 | 0 | 0 | 0 | 0 | 0 |
+#define I2C_ADDR 0b0100000
+#define I2C_ADDR_WRITE ((I2C_ADDR << 1) | I2C_WRITE)
+#define I2C_ADDR_READ ((I2C_ADDR << 1) | I2C_READ)
+
+// Register addresses
+// See https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library/blob/master/Adafruit_MCP23017.h
+#define IODIRA 0x00 // i/o direction register
+#define IODIRB 0x01
+#define GPPUA 0x0C // GPIO pull-up resistor register
+#define GPPUB 0x0D
+#define GPIOA 0x12 // general purpose i/o port register (write modifies OLAT)
+#define GPIOB 0x13
+#define OLATA 0x14 // output latch register
+#define OLATB 0x15
+
+bool i2c_initialized = 0;
+i2c_status_t mcp23017_status = I2C_ADDR;
+
+uint8_t init_mcp23017(void) {
+ print("starting init");
+ mcp23017_status = I2C_ADDR;
+
+ // I2C subsystem
+ if (i2c_initialized == 0) {
+ i2c_init(); // on pins D(1,0)
+ i2c_initialized = true;
+ wait_ms(I2C_TIMEOUT);
+ }
+
+ // set pin direction
+ // - unused : input : 1
+ // - input : input : 1
+ // - driving : output : 0
+ // This means: we will read all the bits on GPIOA
+ // This means: we will write to the pins 0-4 on GPIOB (in select_rows)
+ uint8_t buf[] = {IODIRA, 0b11111111, 0b11110000};
+ mcp23017_status = i2c_transmit(I2C_ADDR_WRITE, buf, sizeof(buf), I2C_TIMEOUT);
+ if (!mcp23017_status) {
+ // set pull-up
+ // - unused : on : 1
+ // - input : on : 1
+ // - driving : off : 0
+ // This means: we will read all the bits on GPIOA
+ // This means: we will write to the pins 0-4 on GPIOB (in select_rows)
+ uint8_t pullup_buf[] = {GPPUA, 0b11111111, 0b11110000};
+ mcp23017_status = i2c_transmit(I2C_ADDR_WRITE, pullup_buf, sizeof(pullup_buf), I2C_TIMEOUT);
+ }
+ return mcp23017_status;
+}
+
+/* matrix state(1:on, 0:off) */
+static matrix_row_t matrix[MATRIX_ROWS]; // debounced values
+
+static matrix_row_t read_cols(uint8_t row);
+static void init_cols(void);
+static void unselect_rows(void);
+static void select_row(uint8_t row);
+
+static uint8_t mcp23017_reset_loop;
+
+void matrix_init_custom(void) {
+ // initialize row and col
+
+ mcp23017_status = init_mcp23017();
+
+ unselect_rows();
+ init_cols();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ }
+}
+
+void matrix_power_up(void) {
+ mcp23017_status = init_mcp23017();
+
+ unselect_rows();
+ init_cols();
+
+ // initialize matrix state: all keys off
+ for (uint8_t i = 0; i < MATRIX_ROWS; i++) {
+ matrix[i] = 0;
+ }
+}
+
+// Reads and stores a row, returning
+// whether a change occurred.
+static inline bool store_matrix_row(matrix_row_t current_matrix[], uint8_t index) {
+ matrix_row_t temp = read_cols(index);
+ if (current_matrix[index] != temp) {
+ current_matrix[index] = temp;
+ return true;
+ }
+ return false;
+}
+
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ if (mcp23017_status) { // if there was an error
+ if (++mcp23017_reset_loop == 0) {
+ // if (++mcp23017_reset_loop >= 1300) {
+ // since mcp23017_reset_loop is 8 bit - we'll try to reset once in 255 matrix scans
+ // this will be approx bit more frequent than once per second
+ dprint("trying to reset mcp23017\n");
+ mcp23017_status = init_mcp23017();
+ if (mcp23017_status) {
+ dprint("right side not responding\n");
+ } else {
+ dprint("right side attached\n");
+ }
+ }
+ }
+
+ bool changed = false;
+ for (uint8_t i = 0; i < MATRIX_ROWS_PER_SIDE; i++) {
+ // select rows from left and right hands
+ uint8_t left_index = i;
+ uint8_t right_index = i + MATRIX_ROWS_PER_SIDE;
+ select_row(left_index);
+ select_row(right_index);
+
+ // we don't need a 30us delay anymore, because selecting a
+ // left-hand row requires more than 30us for i2c.
+
+ changed |= store_matrix_row(current_matrix, left_index);
+ changed |= store_matrix_row(current_matrix, right_index);
+
+ unselect_rows();
+ }
+
+ return changed;
+}
+
+static void init_cols(void) {
+ // init on mcp23017
+ // not needed, already done as part of init_mcp23017()
+
+ // init on mcu
+ pin_t matrix_col_pins_mcu[MATRIX_COLS_PER_SIDE] = MATRIX_COL_PINS_MCU;
+ for (int pin_index = 0; pin_index < MATRIX_COLS_PER_SIDE; pin_index++) {
+ pin_t pin = matrix_col_pins_mcu[pin_index];
+ setPinInput(pin);
+ writePinHigh(pin);
+ }
+}
+
+static matrix_row_t read_cols(uint8_t row) {
+ if (row < MATRIX_ROWS_PER_SIDE) {
+ pin_t matrix_col_pins_mcu[MATRIX_COLS_PER_SIDE] = MATRIX_COL_PINS_MCU;
+ matrix_row_t current_row_value = 0;
+ // For each col...
+ for (uint8_t col_index = 0; col_index < MATRIX_COLS_PER_SIDE; col_index++) {
+ // Select the col pin to read (active low)
+ uint8_t pin_state = readPin(matrix_col_pins_mcu[col_index]);
+
+ // Populate the matrix row with the state of the col pin
+ current_row_value |= pin_state ? 0 : (MATRIX_ROW_SHIFTER << col_index);
+ }
+ return current_row_value;
+ } else {
+ if (mcp23017_status) { // if there was an error
+ return 0;
+ } else {
+ uint8_t buf[] = {GPIOA};
+ mcp23017_status = i2c_transmit(I2C_ADDR_WRITE, buf, sizeof(buf), I2C_TIMEOUT);
+ // We read all the pins on GPIOA.
+ // The initial state was all ones and any depressed key at a given column for the currently selected row will have its bit flipped to zero.
+ // The return value is a row as represented in the generic matrix code were the rightmost bits represent the lower columns and zeroes represent non-depressed keys while ones represent depressed keys.
+ // Since the pins connected to eact columns are sequential, and counting from zero up (col 5 -> GPIOA0, col 6 -> GPIOA1 and so on), the only transformation needed is a bitwise not to swap all zeroes and ones.
+ uint8_t data[] = {0};
+ if (!mcp23017_status) {
+ mcp23017_status = i2c_receive(I2C_ADDR_READ, data, sizeof(data), I2C_TIMEOUT);
+ data[0] = ~(data[0]);
+ }
+ return data[0];
+ }
+ }
+}
+
+static void unselect_rows(void) {
+ // no need to unselect on mcp23017, because the select step sets all
+ // the other row bits high, and it's not changing to a different
+ // direction
+
+ // unselect rows on microcontroller
+ pin_t matrix_row_pins_mcu[MATRIX_ROWS_PER_SIDE] = MATRIX_ROW_PINS_MCU;
+ for (int pin_index = 0; pin_index < MATRIX_ROWS_PER_SIDE; pin_index++) {
+ pin_t pin = matrix_row_pins_mcu[pin_index];
+ setPinInput(pin);
+ writePinLow(pin);
+ }
+}
+
+static void select_row(uint8_t row) {
+ if (row < MATRIX_ROWS_PER_SIDE) {
+ // select on atmega32u4
+ pin_t matrix_row_pins_mcu[MATRIX_ROWS_PER_SIDE] = MATRIX_ROW_PINS_MCU;
+ pin_t pin = matrix_row_pins_mcu[row];
+ setPinOutput(pin);
+ writePinLow(pin);
+ } else {
+ // select on mcp23017
+ if (mcp23017_status) { // if there was an error
+ // do nothing
+ } else {
+ // Select the desired row by writing a byte for the entire GPIOB bus where only the bit representing the row we want to select is a zero (write instruction) and every other bit is a one.
+ // Note that the row - MATRIX_ROWS_PER_SIDE reflects the fact that being on the right hand, the columns are numbered from MATRIX_ROWS_PER_SIDE to MATRIX_ROWS, but the pins we want to write to are indexed from zero up on the GPIOB bus.
+ uint8_t buf[] = {GPIOB, 0xFF & ~(1 << (row - MATRIX_ROWS_PER_SIDE))};
+ mcp23017_status = i2c_transmit(I2C_ADDR_WRITE, buf, sizeof(buf), I2C_TIMEOUT);
+ }
+ }
+}
diff --git a/keyboards/ingrained/readme.md b/keyboards/ingrained/readme.md
new file mode 100644
index 00000000000..3e616e52bbf
--- /dev/null
+++ b/keyboards/ingrained/readme.md
@@ -0,0 +1,19 @@
+# ingrained
+
+This PCB is an integrated, USB-C to USB-C, Corne replacement.
+
+* Keyboard Maintainer: [s8erdude](https://github.com/jpuerto96)
+* Hardware Supported: Ingrained PCB
+* Hardware Availability: [Open Source PCB](https://github.com/jpuerto96/crkbd)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ingrained:default
+
+Flashing example for this keyboard:
+
+ make ingrained:default:flash
+
+To reset the board, you will want to short the pad labeled RESET on the main half (near the USB-C interconnect).
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/ingrained/rules.mk b/keyboards/ingrained/rules.mk
new file mode 100644
index 00000000000..03e074deda2
--- /dev/null
+++ b/keyboards/ingrained/rules.mk
@@ -0,0 +1,27 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+UNICODE_ENABLE = yes
+CUSTOM_MATRIX = lite
+NO_USB_STARTUP_CHECK = yes
+LTO_ENABLE = yes
+
+SRC += matrix.c
+QUANTUM_LIB_SRC += i2c_master.c
+
+LAYOUTS = split_3x5_3 split_3x6_3
diff --git a/keyboards/jacky_studio/piggy60/config.h b/keyboards/jacky_studio/piggy60/config.h
deleted file mode 100644
index ab0e4531a15..00000000000
--- a/keyboards/jacky_studio/piggy60/config.h
+++ /dev/null
@@ -1,6 +0,0 @@
-// Copyright 2022 The QMK Community (@qmk)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#define LED_PIN_ON_STATE 0
diff --git a/keyboards/jacky_studio/piggy60/hotswap/info.json b/keyboards/jacky_studio/piggy60/hotswap/info.json
index e3fa1b8b84e..8b109207006 100644
--- a/keyboards/jacky_studio/piggy60/hotswap/info.json
+++ b/keyboards/jacky_studio/piggy60/hotswap/info.json
@@ -1,3 +1,4 @@
{
- "diode_direction": "ROW2COL"
+ "diode_direction": "ROW2COL",
+ "community_layouts": ["60_hhkb", "60_tsangan_hhkb"]
}
diff --git a/keyboards/jacky_studio/piggy60/info.json b/keyboards/jacky_studio/piggy60/info.json
index 46b274b2111..2805209f47d 100644
--- a/keyboards/jacky_studio/piggy60/info.json
+++ b/keyboards/jacky_studio/piggy60/info.json
@@ -29,7 +29,8 @@
"pid": "0x1001"
},
"indicators": {
- "caps_lock": "F4"
+ "caps_lock": "F4",
+ "on_state": 0
},
"rgblight": {
"led_count": 14,
@@ -115,202 +116,6 @@
{ "label": "Ctrl", "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
]
},
- "LAYOUT_60_ansi": {
- "layout": [
- { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
- { "label": "1!", "matrix": [0, 1], "x": 1, "y": 0 },
- { "label": "2@", "matrix": [0, 2], "x": 2, "y": 0 },
- { "label": "3#", "matrix": [0, 3], "x": 3, "y": 0 },
- { "label": "4$", "matrix": [0, 4], "x": 4, "y": 0 },
- { "label": "5%", "matrix": [0, 5], "x": 5, "y": 0 },
- { "label": "6^", "matrix": [0, 6], "x": 6, "y": 0 },
- { "label": "7&", "matrix": [0, 7], "x": 7, "y": 0 },
- { "label": "8*", "matrix": [0, 8], "x": 8, "y": 0 },
- { "label": "9(", "matrix": [0, 9], "x": 9, "y": 0 },
- { "label": "0)", "matrix": [0, 10], "x": 10, "y": 0 },
- { "label": "-_", "matrix": [0, 11], "x": 11, "y": 0 },
- { "label": "=+", "matrix": [0, 12], "x": 12, "y": 0 },
- { "label": "Backspace", "matrix": [0, 14], "w": 2, "x": 13, "y": 0 },
- { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
- { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
- { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
- { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
- { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
- { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
- { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
- { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
- { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
- { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
- { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
- { "label": "[{", "matrix": [1, 11], "x": 11.5, "y": 1 },
- { "label": "]}", "matrix": [1, 12], "x": 12.5, "y": 1 },
- { "label": "\\|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
- { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
- { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
- { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
- { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
- { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
- { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
- { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
- { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
- { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
- { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
- { "label": ";:", "matrix": [2, 10], "x": 10.75, "y": 2 },
- { "label": "'\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
- { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
- { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
- { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
- { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
- { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
- { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
- { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
- { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
- { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
- { "label": ",<", "matrix": [3, 9], "x": 9.25, "y": 3 },
- { "label": ".>", "matrix": [3, 10], "x": 10.25, "y": 3 },
- { "label": "/?", "matrix": [3, 11], "x": 11.25, "y": 3 },
- { "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
- { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
- { "label": "GUI", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
- { "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
- { "label": "Space", "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
- { "label": "Menu", "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4 },
- { "label": "Alt", "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4 },
- { "label": "GUI", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
- { "label": "Ctrl", "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
- ]
- },
- "LAYOUT_60_ansi_split_bs_rshift": {
- "layout": [
- { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
- { "label": "1!", "matrix": [0, 1], "x": 1, "y": 0 },
- { "label": "2@", "matrix": [0, 2], "x": 2, "y": 0 },
- { "label": "3#", "matrix": [0, 3], "x": 3, "y": 0 },
- { "label": "4$", "matrix": [0, 4], "x": 4, "y": 0 },
- { "label": "5%", "matrix": [0, 5], "x": 5, "y": 0 },
- { "label": "6^", "matrix": [0, 6], "x": 6, "y": 0 },
- { "label": "7&", "matrix": [0, 7], "x": 7, "y": 0 },
- { "label": "8*", "matrix": [0, 8], "x": 8, "y": 0 },
- { "label": "9(", "matrix": [0, 9], "x": 9, "y": 0 },
- { "label": "0)", "matrix": [0, 10], "x": 10, "y": 0 },
- { "label": "-_", "matrix": [0, 11], "x": 11, "y": 0 },
- { "label": "=+", "matrix": [0, 12], "x": 12, "y": 0 },
- { "label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0 },
- { "label": "Del", "matrix": [0, 14], "x": 14, "y": 0 },
- { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
- { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
- { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
- { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
- { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
- { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
- { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
- { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
- { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
- { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
- { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
- { "label": "[{", "matrix": [1, 11], "x": 11.5, "y": 1 },
- { "label": "]}", "matrix": [1, 12], "x": 12.5, "y": 1 },
- { "label": "\\|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
- { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
- { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
- { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
- { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
- { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
- { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
- { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
- { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
- { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
- { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
- { "label": ";:", "matrix": [2, 10], "x": 10.75, "y": 2 },
- { "label": "'\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
- { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
- { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
- { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
- { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
- { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
- { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
- { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
- { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
- { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
- { "label": ",<", "matrix": [3, 9], "x": 9.25, "y": 3 },
- { "label": ".>", "matrix": [3, 10], "x": 10.25, "y": 3 },
- { "label": "/?", "matrix": [3, 11], "x": 11.25, "y": 3 },
- { "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 },
- { "label": "Fn", "matrix": [3, 14], "x": 14, "y": 3 },
- { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
- { "label": "GUI", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
- { "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
- { "label": "Space", "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
- { "label": "Menu", "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4 },
- { "label": "Alt", "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4 },
- { "label": "GUI", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
- { "label": "Ctrl", "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
- ]
- },
- "LAYOUT_60_ansi_tsangan": {
- "layout": [
- { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
- { "label": "1!", "matrix": [0, 1], "x": 1, "y": 0 },
- { "label": "2@", "matrix": [0, 2], "x": 2, "y": 0 },
- { "label": "3#", "matrix": [0, 3], "x": 3, "y": 0 },
- { "label": "4$", "matrix": [0, 4], "x": 4, "y": 0 },
- { "label": "5%", "matrix": [0, 5], "x": 5, "y": 0 },
- { "label": "6^", "matrix": [0, 6], "x": 6, "y": 0 },
- { "label": "7&", "matrix": [0, 7], "x": 7, "y": 0 },
- { "label": "8*", "matrix": [0, 8], "x": 8, "y": 0 },
- { "label": "9(", "matrix": [0, 9], "x": 9, "y": 0 },
- { "label": "0)", "matrix": [0, 10], "x": 10, "y": 0 },
- { "label": "-_", "matrix": [0, 11], "x": 11, "y": 0 },
- { "label": "=+", "matrix": [0, 12], "x": 12, "y": 0 },
- { "label": "Backspace", "matrix": [0, 14], "w": 2, "x": 13, "y": 0 },
- { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
- { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
- { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
- { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
- { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
- { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
- { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
- { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
- { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
- { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
- { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
- { "label": "[{", "matrix": [1, 11], "x": 11.5, "y": 1 },
- { "label": "]}", "matrix": [1, 12], "x": 12.5, "y": 1 },
- { "label": "\\|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
- { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
- { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
- { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
- { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
- { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
- { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
- { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
- { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
- { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
- { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
- { "label": ";:", "matrix": [2, 10], "x": 10.75, "y": 2 },
- { "label": "'\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
- { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
- { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
- { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
- { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
- { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
- { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
- { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
- { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
- { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
- { "label": ",<", "matrix": [3, 9], "x": 9.25, "y": 3 },
- { "label": ".>", "matrix": [3, 10], "x": 10.25, "y": 3 },
- { "label": "/?", "matrix": [3, 11], "x": 11.25, "y": 3 },
- { "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
- { "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
- { "label": "GUI", "matrix": [4, 1], "x": 1.5, "y": 4 },
- { "label": "Alt", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
- { "label": "Space", "matrix": [4, 7], "w": 7, "x": 4, "y": 4 },
- { "label": "Alt", "matrix": [4, 10], "w": 1.5, "x": 11, "y": 4 },
- { "label": "GUI", "matrix": [4, 12], "x": 12.5, "y": 4 },
- { "label": "Ctrl", "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
- ]
- },
"LAYOUT_60_hhkb": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
@@ -375,272 +180,6 @@
{ "label": "Alt", "matrix": [4, 12], "x": 12.5, "y": 4 }
]
},
- "LAYOUT_60_iso": {
- "layout": [
- { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
- { "label": "1!", "matrix": [0, 1], "x": 1, "y": 0 },
- { "label": "2@", "matrix": [0, 2], "x": 2, "y": 0 },
- { "label": "3#", "matrix": [0, 3], "x": 3, "y": 0 },
- { "label": "4$", "matrix": [0, 4], "x": 4, "y": 0 },
- { "label": "5%", "matrix": [0, 5], "x": 5, "y": 0 },
- { "label": "6^", "matrix": [0, 6], "x": 6, "y": 0 },
- { "label": "7&", "matrix": [0, 7], "x": 7, "y": 0 },
- { "label": "8*", "matrix": [0, 8], "x": 8, "y": 0 },
- { "label": "9(", "matrix": [0, 9], "x": 9, "y": 0 },
- { "label": "0)", "matrix": [0, 10], "x": 10, "y": 0 },
- { "label": "-_", "matrix": [0, 11], "x": 11, "y": 0 },
- { "label": "=+", "matrix": [0, 12], "x": 12, "y": 0 },
- { "label": "Backspace", "matrix": [0, 14], "w": 2, "x": 13, "y": 0 },
- { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
- { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
- { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
- { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
- { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
- { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
- { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
- { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
- { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
- { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
- { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
- { "label": "[{", "matrix": [1, 11], "x": 11.5, "y": 1 },
- { "label": "]}", "matrix": [1, 12], "x": 12.5, "y": 1 },
- { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
- { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
- { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
- { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
- { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
- { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
- { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
- { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
- { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
- { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
- { "label": ";:", "matrix": [2, 10], "x": 10.75, "y": 2 },
- { "label": "'\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
- { "label": "#~", "matrix": [2, 12], "x": 12.75, "y": 2 },
- { "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 },
- { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
- { "label": "\\|", "matrix": [3, 1], "x": 1.25, "y": 3 },
- { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
- { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
- { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
- { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
- { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
- { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
- { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
- { "label": ",<", "matrix": [3, 9], "x": 9.25, "y": 3 },
- { "label": ".>", "matrix": [3, 10], "x": 10.25, "y": 3 },
- { "label": "/?", "matrix": [3, 11], "x": 11.25, "y": 3 },
- { "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
- { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
- { "label": "GUI", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
- { "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
- { "label": "Space", "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
- { "label": "Menu", "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4 },
- { "label": "Alt", "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4 },
- { "label": "GUI", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
- { "label": "Ctrl", "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
- ]
- },
- "LAYOUT_60_iso_split_bs_rshift": {
- "layout": [
- { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
- { "label": "1!", "matrix": [0, 1], "x": 1, "y": 0 },
- { "label": "2@", "matrix": [0, 2], "x": 2, "y": 0 },
- { "label": "3#", "matrix": [0, 3], "x": 3, "y": 0 },
- { "label": "4$", "matrix": [0, 4], "x": 4, "y": 0 },
- { "label": "5%", "matrix": [0, 5], "x": 5, "y": 0 },
- { "label": "6^", "matrix": [0, 6], "x": 6, "y": 0 },
- { "label": "7&", "matrix": [0, 7], "x": 7, "y": 0 },
- { "label": "8*", "matrix": [0, 8], "x": 8, "y": 0 },
- { "label": "9(", "matrix": [0, 9], "x": 9, "y": 0 },
- { "label": "0)", "matrix": [0, 10], "x": 10, "y": 0 },
- { "label": "-_", "matrix": [0, 11], "x": 11, "y": 0 },
- { "label": "=+", "matrix": [0, 12], "x": 12, "y": 0 },
- { "label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0 },
- { "label": "Del", "matrix": [0, 14], "x": 14, "y": 0 },
- { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
- { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
- { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
- { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
- { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
- { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
- { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
- { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
- { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
- { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
- { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
- { "label": "[{", "matrix": [1, 11], "x": 11.5, "y": 1 },
- { "label": "]}", "matrix": [1, 12], "x": 12.5, "y": 1 },
- { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
- { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
- { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
- { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
- { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
- { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
- { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
- { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
- { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
- { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
- { "label": ";:", "matrix": [2, 10], "x": 10.75, "y": 2 },
- { "label": "'\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
- { "label": "#~", "matrix": [2, 12], "x": 12.75, "y": 2 },
- { "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 },
- { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
- { "label": "\\|", "matrix": [3, 1], "x": 1.25, "y": 3 },
- { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
- { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
- { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
- { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
- { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
- { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
- { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
- { "label": ",<", "matrix": [3, 9], "x": 9.25, "y": 3 },
- { "label": ".>", "matrix": [3, 10], "x": 10.25, "y": 3 },
- { "label": "/?", "matrix": [3, 11], "x": 11.25, "y": 3 },
- { "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 },
- { "label": "Fn", "matrix": [3, 14], "x": 14, "y": 3 },
- { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
- { "label": "GUI", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
- { "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
- { "label": "Space", "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
- { "label": "Menu", "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4 },
- { "label": "Alt", "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4 },
- { "label": "GUI", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
- { "label": "Ctrl", "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
- ]
- },
- "LAYOUT_60_iso_tsangan": {
- "layout": [
- { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
- { "label": "1!", "matrix": [0, 1], "x": 1, "y": 0 },
- { "label": "2@", "matrix": [0, 2], "x": 2, "y": 0 },
- { "label": "3#", "matrix": [0, 3], "x": 3, "y": 0 },
- { "label": "4$", "matrix": [0, 4], "x": 4, "y": 0 },
- { "label": "5%", "matrix": [0, 5], "x": 5, "y": 0 },
- { "label": "6^", "matrix": [0, 6], "x": 6, "y": 0 },
- { "label": "7&", "matrix": [0, 7], "x": 7, "y": 0 },
- { "label": "8*", "matrix": [0, 8], "x": 8, "y": 0 },
- { "label": "9(", "matrix": [0, 9], "x": 9, "y": 0 },
- { "label": "0)", "matrix": [0, 10], "x": 10, "y": 0 },
- { "label": "-_", "matrix": [0, 11], "x": 11, "y": 0 },
- { "label": "=+", "matrix": [0, 12], "x": 12, "y": 0 },
- { "label": "Backspace", "matrix": [0, 14], "w": 2, "x": 13, "y": 0 },
- { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
- { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
- { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
- { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
- { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
- { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
- { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
- { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
- { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
- { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
- { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
- { "label": "[{", "matrix": [1, 11], "x": 11.5, "y": 1 },
- { "label": "]}", "matrix": [1, 12], "x": 12.5, "y": 1 },
- { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
- { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
- { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
- { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
- { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
- { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
- { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
- { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
- { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
- { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
- { "label": ";:", "matrix": [2, 10], "x": 10.75, "y": 2 },
- { "label": "'\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
- { "label": "#~", "matrix": [2, 12], "x": 12.75, "y": 2 },
- { "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 },
- { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
- { "label": "\\|", "matrix": [3, 1], "x": 1.25, "y": 3 },
- { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
- { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
- { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
- { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
- { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
- { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
- { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
- { "label": ",<", "matrix": [3, 9], "x": 9.25, "y": 3 },
- { "label": ".>", "matrix": [3, 10], "x": 10.25, "y": 3 },
- { "label": "/?", "matrix": [3, 11], "x": 11.25, "y": 3 },
- { "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
- { "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
- { "label": "GUI", "matrix": [4, 1], "x": 1.5, "y": 4 },
- { "label": "Alt", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
- { "label": "Space", "matrix": [4, 7], "w": 7, "x": 4, "y": 4 },
- { "label": "Alt", "matrix": [4, 10], "w": 1.5, "x": 11, "y": 4 },
- { "label": "GUI", "matrix": [4, 12], "x": 12.5, "y": 4 },
- { "label": "Ctrl", "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
- ]
- },
- "LAYOUT_60_iso_tsangan_hhkb": {
- "layout": [
- { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
- { "label": "1!", "matrix": [0, 1], "x": 1, "y": 0 },
- { "label": "2@", "matrix": [0, 2], "x": 2, "y": 0 },
- { "label": "3#", "matrix": [0, 3], "x": 3, "y": 0 },
- { "label": "4$", "matrix": [0, 4], "x": 4, "y": 0 },
- { "label": "5%", "matrix": [0, 5], "x": 5, "y": 0 },
- { "label": "6^", "matrix": [0, 6], "x": 6, "y": 0 },
- { "label": "7&", "matrix": [0, 7], "x": 7, "y": 0 },
- { "label": "8*", "matrix": [0, 8], "x": 8, "y": 0 },
- { "label": "9(", "matrix": [0, 9], "x": 9, "y": 0 },
- { "label": "0)", "matrix": [0, 10], "x": 10, "y": 0 },
- { "label": "-_", "matrix": [0, 11], "x": 11, "y": 0 },
- { "label": "=+", "matrix": [0, 12], "x": 12, "y": 0 },
- { "label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0 },
- { "label": "Del", "matrix": [0, 14], "x": 14, "y": 0 },
- { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
- { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
- { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
- { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
- { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
- { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
- { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
- { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
- { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
- { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
- { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
- { "label": "[{", "matrix": [1, 11], "x": 11.5, "y": 1 },
- { "label": "]}", "matrix": [1, 12], "x": 12.5, "y": 1 },
- { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
- { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
- { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
- { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
- { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
- { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
- { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
- { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
- { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
- { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
- { "label": ";:", "matrix": [2, 10], "x": 10.75, "y": 2 },
- { "label": "'\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
- { "label": "#~", "matrix": [2, 12], "x": 12.75, "y": 2 },
- { "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 },
- { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
- { "label": "\\|", "matrix": [3, 1], "x": 1.25, "y": 3 },
- { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
- { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
- { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
- { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
- { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
- { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
- { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
- { "label": ",<", "matrix": [3, 9], "x": 9.25, "y": 3 },
- { "label": ".>", "matrix": [3, 10], "x": 10.25, "y": 3 },
- { "label": "/?", "matrix": [3, 11], "x": 11.25, "y": 3 },
- { "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 },
- { "label": "Fn", "matrix": [3, 14], "x": 14, "y": 3 },
- { "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
- { "label": "GUI", "matrix": [4, 1], "x": 1.5, "y": 4 },
- { "label": "Alt", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
- { "label": "Space", "matrix": [4, 7], "w": 7, "x": 4, "y": 4 },
- { "label": "Alt", "matrix": [4, 10], "w": 1.5, "x": 11, "y": 4 },
- { "label": "GUI", "matrix": [4, 12], "x": 12.5, "y": 4 },
- { "label": "Ctrl", "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
- ]
- },
"LAYOUT_60_tsangan_hhkb": {
"layout": [
{ "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
diff --git a/keyboards/jacky_studio/piggy60/keymaps/via/keymap.json b/keyboards/jacky_studio/piggy60/keymaps/via/keymap.json
index 8f14e6d0c0b..b166c6771ff 100644
--- a/keyboards/jacky_studio/piggy60/keymaps/via/keymap.json
+++ b/keyboards/jacky_studio/piggy60/keymaps/via/keymap.json
@@ -9,21 +9,21 @@
"LT(1,KC_CAPS)", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT", "KC_NUHS", "KC_ENT",
"KC_LSFT", "KC_NUBS", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT", "LT(1,KC_MUTE)",
"KC_LCTL", "KC_LGUI", "KC_LALT", "KC_SPC", "LT(1,KC_APP)", "KC_RALT", "KC_RGUI", "KC_RCTL"
- ]
+ ],
[
"KC_GRV", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_F12", "KC_PSCR", "KC_DEL",
"KC_TRNS", "KC_TRNS", "KC_UP", "KC_TRNS", "KC_PGUP", "KC_HOME", "KC_TRNS", "KC_VOLU", "KC_BRIU", "KC_TRNS", "KC_WH_U", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_LEFT", "KC_DOWN", "KC_RGHT", "KC_PGDN", "KC_END", "KC_TRNS", "KC_VOLD", "KC_BRID", "KC_TRNS", "KC_WH_D", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"RGB_TOG", "KC_TRNS", "RGB_MOD", "RGB_HUI", "RGB_SAI", "RGB_VAI", "RGB_SPI", "KC_TRNS", "KC_MUTE", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"
- ]
+ ],
[
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS"
- ]
+ ],
[
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
"KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
diff --git a/keyboards/jacky_studio/piggy60/rules.mk b/keyboards/jacky_studio/piggy60/rules.mk
index eebe701e8e5..530e6598df2 100644
--- a/keyboards/jacky_studio/piggy60/rules.mk
+++ b/keyboards/jacky_studio/piggy60/rules.mk
@@ -1,2 +1 @@
DEFAULT_FOLDER = jacky_studio/piggy60/solder
-LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_ansi_tsangan 60_hhkb 60_iso 60_iso_split_bs_rshift 60_iso_tsangan 60_tsangan_hhkb
diff --git a/keyboards/jacky_studio/piggy60/solder/info.json b/keyboards/jacky_studio/piggy60/solder/info.json
index beded82262e..6a4cacb0fcd 100644
--- a/keyboards/jacky_studio/piggy60/solder/info.json
+++ b/keyboards/jacky_studio/piggy60/solder/info.json
@@ -1,3 +1,477 @@
{
- "diode_direction": "COL2ROW"
+ "diode_direction": "COL2ROW",
+ "community_layouts": [
+ "60_ansi",
+ "60_ansi_split_bs_rshift",
+ "60_ansi_tsangan",
+ "60_hhkb",
+ "60_iso",
+ "60_iso_split_bs_rshift",
+ "60_iso_tsangan",
+ "60_tsangan_hhkb"
+ ],
+ "layouts": {
+ "LAYOUT_60_ansi": {
+ "layout": [
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "1!", "matrix": [0, 1], "x": 1, "y": 0 },
+ { "label": "2@", "matrix": [0, 2], "x": 2, "y": 0 },
+ { "label": "3#", "matrix": [0, 3], "x": 3, "y": 0 },
+ { "label": "4$", "matrix": [0, 4], "x": 4, "y": 0 },
+ { "label": "5%", "matrix": [0, 5], "x": 5, "y": 0 },
+ { "label": "6^", "matrix": [0, 6], "x": 6, "y": 0 },
+ { "label": "7&", "matrix": [0, 7], "x": 7, "y": 0 },
+ { "label": "8*", "matrix": [0, 8], "x": 8, "y": 0 },
+ { "label": "9(", "matrix": [0, 9], "x": 9, "y": 0 },
+ { "label": "0)", "matrix": [0, 10], "x": 10, "y": 0 },
+ { "label": "-_", "matrix": [0, 11], "x": 11, "y": 0 },
+ { "label": "=+", "matrix": [0, 12], "x": 12, "y": 0 },
+ { "label": "Backspace", "matrix": [0, 14], "w": 2, "x": 13, "y": 0 },
+ { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "label": "[{", "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "label": "]}", "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "label": "\\|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
+ { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "label": ";:", "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "label": "'\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "label": ",<", "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "label": ".>", "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "label": "/?", "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
+ { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "label": "GUI", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "label": "Space", "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
+ { "label": "Menu", "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4 },
+ { "label": "Alt", "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4 },
+ { "label": "GUI", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "label": "Ctrl", "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "layout": [
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "1!", "matrix": [0, 1], "x": 1, "y": 0 },
+ { "label": "2@", "matrix": [0, 2], "x": 2, "y": 0 },
+ { "label": "3#", "matrix": [0, 3], "x": 3, "y": 0 },
+ { "label": "4$", "matrix": [0, 4], "x": 4, "y": 0 },
+ { "label": "5%", "matrix": [0, 5], "x": 5, "y": 0 },
+ { "label": "6^", "matrix": [0, 6], "x": 6, "y": 0 },
+ { "label": "7&", "matrix": [0, 7], "x": 7, "y": 0 },
+ { "label": "8*", "matrix": [0, 8], "x": 8, "y": 0 },
+ { "label": "9(", "matrix": [0, 9], "x": 9, "y": 0 },
+ { "label": "0)", "matrix": [0, 10], "x": 10, "y": 0 },
+ { "label": "-_", "matrix": [0, 11], "x": 11, "y": 0 },
+ { "label": "=+", "matrix": [0, 12], "x": 12, "y": 0 },
+ { "label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0 },
+ { "label": "Del", "matrix": [0, 14], "x": 14, "y": 0 },
+ { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "label": "[{", "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "label": "]}", "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "label": "\\|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
+ { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "label": ";:", "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "label": "'\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "label": ",<", "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "label": ".>", "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "label": "/?", "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 },
+ { "label": "Fn", "matrix": [3, 14], "x": 14, "y": 3 },
+ { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "label": "GUI", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "label": "Space", "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
+ { "label": "Menu", "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4 },
+ { "label": "Alt", "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4 },
+ { "label": "GUI", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "label": "Ctrl", "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan": {
+ "layout": [
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "1!", "matrix": [0, 1], "x": 1, "y": 0 },
+ { "label": "2@", "matrix": [0, 2], "x": 2, "y": 0 },
+ { "label": "3#", "matrix": [0, 3], "x": 3, "y": 0 },
+ { "label": "4$", "matrix": [0, 4], "x": 4, "y": 0 },
+ { "label": "5%", "matrix": [0, 5], "x": 5, "y": 0 },
+ { "label": "6^", "matrix": [0, 6], "x": 6, "y": 0 },
+ { "label": "7&", "matrix": [0, 7], "x": 7, "y": 0 },
+ { "label": "8*", "matrix": [0, 8], "x": 8, "y": 0 },
+ { "label": "9(", "matrix": [0, 9], "x": 9, "y": 0 },
+ { "label": "0)", "matrix": [0, 10], "x": 10, "y": 0 },
+ { "label": "-_", "matrix": [0, 11], "x": 11, "y": 0 },
+ { "label": "=+", "matrix": [0, 12], "x": 12, "y": 0 },
+ { "label": "Backspace", "matrix": [0, 14], "w": 2, "x": 13, "y": 0 },
+ { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "label": "[{", "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "label": "]}", "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "label": "\\|", "matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1 },
+ { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "label": ";:", "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "label": "'\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "label": "Enter", "matrix": [2, 13], "w": 2.25, "x": 12.75, "y": 2 },
+ { "label": "Shift", "matrix": [3, 0], "w": 2.25, "x": 0, "y": 3 },
+ { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "label": ",<", "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "label": ".>", "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "label": "/?", "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
+ { "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "label": "GUI", "matrix": [4, 1], "x": 1.5, "y": 4 },
+ { "label": "Alt", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "label": "Space", "matrix": [4, 7], "w": 7, "x": 4, "y": 4 },
+ { "label": "Alt", "matrix": [4, 10], "w": 1.5, "x": 11, "y": 4 },
+ { "label": "GUI", "matrix": [4, 12], "x": 12.5, "y": 4 },
+ { "label": "Ctrl", "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_iso": {
+ "layout": [
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "1!", "matrix": [0, 1], "x": 1, "y": 0 },
+ { "label": "2@", "matrix": [0, 2], "x": 2, "y": 0 },
+ { "label": "3#", "matrix": [0, 3], "x": 3, "y": 0 },
+ { "label": "4$", "matrix": [0, 4], "x": 4, "y": 0 },
+ { "label": "5%", "matrix": [0, 5], "x": 5, "y": 0 },
+ { "label": "6^", "matrix": [0, 6], "x": 6, "y": 0 },
+ { "label": "7&", "matrix": [0, 7], "x": 7, "y": 0 },
+ { "label": "8*", "matrix": [0, 8], "x": 8, "y": 0 },
+ { "label": "9(", "matrix": [0, 9], "x": 9, "y": 0 },
+ { "label": "0)", "matrix": [0, 10], "x": 10, "y": 0 },
+ { "label": "-_", "matrix": [0, 11], "x": 11, "y": 0 },
+ { "label": "=+", "matrix": [0, 12], "x": 12, "y": 0 },
+ { "label": "Backspace", "matrix": [0, 14], "w": 2, "x": 13, "y": 0 },
+ { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "label": "[{", "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "label": "]}", "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "label": ";:", "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "label": "'\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "label": "#~", "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 },
+ { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "label": "\\|", "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "label": ",<", "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "label": ".>", "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "label": "/?", "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
+ { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "label": "GUI", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "label": "Space", "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
+ { "label": "Menu", "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4 },
+ { "label": "Alt", "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4 },
+ { "label": "GUI", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "label": "Ctrl", "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_iso_split_bs_rshift": {
+ "layout": [
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "1!", "matrix": [0, 1], "x": 1, "y": 0 },
+ { "label": "2@", "matrix": [0, 2], "x": 2, "y": 0 },
+ { "label": "3#", "matrix": [0, 3], "x": 3, "y": 0 },
+ { "label": "4$", "matrix": [0, 4], "x": 4, "y": 0 },
+ { "label": "5%", "matrix": [0, 5], "x": 5, "y": 0 },
+ { "label": "6^", "matrix": [0, 6], "x": 6, "y": 0 },
+ { "label": "7&", "matrix": [0, 7], "x": 7, "y": 0 },
+ { "label": "8*", "matrix": [0, 8], "x": 8, "y": 0 },
+ { "label": "9(", "matrix": [0, 9], "x": 9, "y": 0 },
+ { "label": "0)", "matrix": [0, 10], "x": 10, "y": 0 },
+ { "label": "-_", "matrix": [0, 11], "x": 11, "y": 0 },
+ { "label": "=+", "matrix": [0, 12], "x": 12, "y": 0 },
+ { "label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0 },
+ { "label": "Del", "matrix": [0, 14], "x": 14, "y": 0 },
+ { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "label": "[{", "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "label": "]}", "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "label": ";:", "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "label": "'\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "label": "#~", "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 },
+ { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "label": "\\|", "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "label": ",<", "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "label": ".>", "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "label": "/?", "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 },
+ { "label": "Fn", "matrix": [3, 14], "x": 14, "y": 3 },
+ { "label": "Ctrl", "matrix": [4, 0], "w": 1.25, "x": 0, "y": 4 },
+ { "label": "GUI", "matrix": [4, 1], "w": 1.25, "x": 1.25, "y": 4 },
+ { "label": "Alt", "matrix": [4, 2], "w": 1.25, "x": 2.5, "y": 4 },
+ { "label": "Space", "matrix": [4, 7], "w": 6.25, "x": 3.75, "y": 4 },
+ { "label": "Menu", "matrix": [4, 9], "w": 1.25, "x": 10, "y": 4 },
+ { "label": "Alt", "matrix": [4, 10], "w": 1.25, "x": 11.25, "y": 4 },
+ { "label": "GUI", "matrix": [4, 12], "w": 1.25, "x": 12.5, "y": 4 },
+ { "label": "Ctrl", "matrix": [4, 13], "w": 1.25, "x": 13.75, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_iso_tsangan": {
+ "layout": [
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "1!", "matrix": [0, 1], "x": 1, "y": 0 },
+ { "label": "2@", "matrix": [0, 2], "x": 2, "y": 0 },
+ { "label": "3#", "matrix": [0, 3], "x": 3, "y": 0 },
+ { "label": "4$", "matrix": [0, 4], "x": 4, "y": 0 },
+ { "label": "5%", "matrix": [0, 5], "x": 5, "y": 0 },
+ { "label": "6^", "matrix": [0, 6], "x": 6, "y": 0 },
+ { "label": "7&", "matrix": [0, 7], "x": 7, "y": 0 },
+ { "label": "8*", "matrix": [0, 8], "x": 8, "y": 0 },
+ { "label": "9(", "matrix": [0, 9], "x": 9, "y": 0 },
+ { "label": "0)", "matrix": [0, 10], "x": 10, "y": 0 },
+ { "label": "-_", "matrix": [0, 11], "x": 11, "y": 0 },
+ { "label": "=+", "matrix": [0, 12], "x": 12, "y": 0 },
+ { "label": "Backspace", "matrix": [0, 14], "w": 2, "x": 13, "y": 0 },
+ { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "label": "[{", "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "label": "]}", "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "label": ";:", "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "label": "'\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "label": "#~", "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 },
+ { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "label": "\\|", "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "label": ",<", "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "label": ".>", "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "label": "/?", "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "label": "Shift", "matrix": [3, 13], "w": 2.75, "x": 12.25, "y": 3 },
+ { "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "label": "GUI", "matrix": [4, 1], "x": 1.5, "y": 4 },
+ { "label": "Alt", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "label": "Space", "matrix": [4, 7], "w": 7, "x": 4, "y": 4 },
+ { "label": "Alt", "matrix": [4, 10], "w": 1.5, "x": 11, "y": 4 },
+ { "label": "GUI", "matrix": [4, 12], "x": 12.5, "y": 4 },
+ { "label": "Ctrl", "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
+ ]
+ },
+ "LAYOUT_60_iso_tsangan_hhkb": {
+ "layout": [
+ { "label": "Esc", "matrix": [0, 0], "x": 0, "y": 0 },
+ { "label": "1!", "matrix": [0, 1], "x": 1, "y": 0 },
+ { "label": "2@", "matrix": [0, 2], "x": 2, "y": 0 },
+ { "label": "3#", "matrix": [0, 3], "x": 3, "y": 0 },
+ { "label": "4$", "matrix": [0, 4], "x": 4, "y": 0 },
+ { "label": "5%", "matrix": [0, 5], "x": 5, "y": 0 },
+ { "label": "6^", "matrix": [0, 6], "x": 6, "y": 0 },
+ { "label": "7&", "matrix": [0, 7], "x": 7, "y": 0 },
+ { "label": "8*", "matrix": [0, 8], "x": 8, "y": 0 },
+ { "label": "9(", "matrix": [0, 9], "x": 9, "y": 0 },
+ { "label": "0)", "matrix": [0, 10], "x": 10, "y": 0 },
+ { "label": "-_", "matrix": [0, 11], "x": 11, "y": 0 },
+ { "label": "=+", "matrix": [0, 12], "x": 12, "y": 0 },
+ { "label": "Backspace", "matrix": [0, 13], "x": 13, "y": 0 },
+ { "label": "Del", "matrix": [0, 14], "x": 14, "y": 0 },
+ { "label": "Tab", "matrix": [1, 0], "w": 1.5, "x": 0, "y": 1 },
+ { "label": "Q", "matrix": [1, 1], "x": 1.5, "y": 1 },
+ { "label": "W", "matrix": [1, 2], "x": 2.5, "y": 1 },
+ { "label": "E", "matrix": [1, 3], "x": 3.5, "y": 1 },
+ { "label": "R", "matrix": [1, 4], "x": 4.5, "y": 1 },
+ { "label": "T", "matrix": [1, 5], "x": 5.5, "y": 1 },
+ { "label": "Y", "matrix": [1, 6], "x": 6.5, "y": 1 },
+ { "label": "U", "matrix": [1, 7], "x": 7.5, "y": 1 },
+ { "label": "I", "matrix": [1, 8], "x": 8.5, "y": 1 },
+ { "label": "O", "matrix": [1, 9], "x": 9.5, "y": 1 },
+ { "label": "P", "matrix": [1, 10], "x": 10.5, "y": 1 },
+ { "label": "[{", "matrix": [1, 11], "x": 11.5, "y": 1 },
+ { "label": "]}", "matrix": [1, 12], "x": 12.5, "y": 1 },
+ { "label": "Caps Lock", "matrix": [2, 0], "w": 1.75, "x": 0, "y": 2 },
+ { "label": "A", "matrix": [2, 1], "x": 1.75, "y": 2 },
+ { "label": "S", "matrix": [2, 2], "x": 2.75, "y": 2 },
+ { "label": "D", "matrix": [2, 3], "x": 3.75, "y": 2 },
+ { "label": "F", "matrix": [2, 4], "x": 4.75, "y": 2 },
+ { "label": "G", "matrix": [2, 5], "x": 5.75, "y": 2 },
+ { "label": "H", "matrix": [2, 6], "x": 6.75, "y": 2 },
+ { "label": "J", "matrix": [2, 7], "x": 7.75, "y": 2 },
+ { "label": "K", "matrix": [2, 8], "x": 8.75, "y": 2 },
+ { "label": "L", "matrix": [2, 9], "x": 9.75, "y": 2 },
+ { "label": ";:", "matrix": [2, 10], "x": 10.75, "y": 2 },
+ { "label": "'\"", "matrix": [2, 11], "x": 11.75, "y": 2 },
+ { "label": "#~", "matrix": [2, 12], "x": 12.75, "y": 2 },
+ { "label": "Enter", "matrix": [2, 13], "w": 1.25, "h": 2, "x": 13.75, "y": 1 },
+ { "label": "Shift", "matrix": [3, 0], "w": 1.25, "x": 0, "y": 3 },
+ { "label": "\\|", "matrix": [3, 1], "x": 1.25, "y": 3 },
+ { "label": "Z", "matrix": [3, 2], "x": 2.25, "y": 3 },
+ { "label": "X", "matrix": [3, 3], "x": 3.25, "y": 3 },
+ { "label": "C", "matrix": [3, 4], "x": 4.25, "y": 3 },
+ { "label": "V", "matrix": [3, 5], "x": 5.25, "y": 3 },
+ { "label": "B", "matrix": [3, 6], "x": 6.25, "y": 3 },
+ { "label": "N", "matrix": [3, 7], "x": 7.25, "y": 3 },
+ { "label": "M", "matrix": [3, 8], "x": 8.25, "y": 3 },
+ { "label": ",<", "matrix": [3, 9], "x": 9.25, "y": 3 },
+ { "label": ".>", "matrix": [3, 10], "x": 10.25, "y": 3 },
+ { "label": "/?", "matrix": [3, 11], "x": 11.25, "y": 3 },
+ { "label": "Shift", "matrix": [3, 13], "w": 1.75, "x": 12.25, "y": 3 },
+ { "label": "Fn", "matrix": [3, 14], "x": 14, "y": 3 },
+ { "label": "Ctrl", "matrix": [4, 0], "w": 1.5, "x": 0, "y": 4 },
+ { "label": "GUI", "matrix": [4, 1], "x": 1.5, "y": 4 },
+ { "label": "Alt", "matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4 },
+ { "label": "Space", "matrix": [4, 7], "w": 7, "x": 4, "y": 4 },
+ { "label": "Alt", "matrix": [4, 10], "w": 1.5, "x": 11, "y": 4 },
+ { "label": "GUI", "matrix": [4, 12], "x": 12.5, "y": 4 },
+ { "label": "Ctrl", "matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4 }
+ ]
+ }
+ }
}
diff --git a/keyboards/jacky_studio/s7_elephant/readme.md b/keyboards/jacky_studio/s7_elephant/readme.md
index 1cfeefb2098..7e441ac8ea1 100644
--- a/keyboards/jacky_studio/s7_elephant/readme.md
+++ b/keyboards/jacky_studio/s7_elephant/readme.md
@@ -15,6 +15,6 @@ Make example for this keyboard (after setting up your build environment):
make jacky_studio/s7_elephant/rev1:default # 2018 run
make jacky_studio/s7_elephant/rev2:default # 2019 run
-To enter the bootloader, either short the pins on the PCB or the RESET button on the FN layer.
+To enter the bootloader, either short the pins on the PCB or the `QK_BOOT` key on the FN layer.
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/jacky_studio/s7_elephant/rev1/readme.md b/keyboards/jacky_studio/s7_elephant/rev1/readme.md
index 702be4c3a78..8308f60f627 100644
--- a/keyboards/jacky_studio/s7_elephant/rev1/readme.md
+++ b/keyboards/jacky_studio/s7_elephant/rev1/readme.md
@@ -12,6 +12,6 @@ Make example for this keyboard (after setting up your build environment):
make s7_elephant/rev1:default
-To enter the bootloader, either short the pins on the PCB or the RESET button on the FN layer.
+To enter the bootloader, either short the pins on the PCB or the `QK_BOOT` key on the FN layer.
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/gentleman65/keymaps/briianpowell/keymap.c b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/keymap.c
similarity index 100%
rename from keyboards/gentleman65/keymaps/briianpowell/keymap.c
rename to keyboards/jkeys_design/gentleman65/keymaps/briianpowell/keymap.c
diff --git a/keyboards/gentleman65/keymaps/briianpowell/readme.md b/keyboards/jkeys_design/gentleman65/keymaps/briianpowell/readme.md
similarity index 100%
rename from keyboards/gentleman65/keymaps/briianpowell/readme.md
rename to keyboards/jkeys_design/gentleman65/keymaps/briianpowell/readme.md
diff --git a/keyboards/kapcave/paladin64/config.h b/keyboards/kapcave/paladin64/config.h
index 4ab6863c4f5..7d913d8f157 100755
--- a/keyboards/kapcave/paladin64/config.h
+++ b/keyboards/kapcave/paladin64/config.h
@@ -26,7 +26,7 @@ along with this program. If not, see .
#define BOOTMAGIC_LITE_COLUMN 6
/* Only required if you add in a trackpoint hardware to the pcb */
-#ifdef PS2_USE_USART
+#ifdef PS2_DRIVER_USART
#define PS2_CLOCK_PIN D5
#define PS2_DATA_PIN D2
@@ -63,7 +63,7 @@ along with this program. If not, see .
#define PS2_USART_RX_VECT USART1_RX_vect
#endif
-#ifdef PS2_USE_INT
+#ifdef PS2_DRIVER_INTERRUPT
#define PS2_CLOCK_PIN D2
#define PS2_DATA_PIN D5
diff --git a/keyboards/karlb/kbic65/info.json b/keyboards/karlb/kbic65/info.json
index d572a92fc25..2d9d7ab037f 100644
--- a/keyboards/karlb/kbic65/info.json
+++ b/keyboards/karlb/kbic65/info.json
@@ -1,5 +1,6 @@
{
"keyboard_name": "KBIC65",
+ "manufacturer": "b-karl",
"url": "https://karlb.eu/kbic65/",
"maintainer": "b-karl",
"diode_direction": "ROW2COL",
diff --git a/keyboards/kbdfans/kbd67/hotswap/keymaps/madhatter/config.h b/keyboards/kbdfans/kbd67/hotswap/keymaps/madhatter/config.h
index bf28016ea4e..798dd7b2977 100644
--- a/keyboards/kbdfans/kbd67/hotswap/keymaps/madhatter/config.h
+++ b/keyboards/kbdfans/kbd67/hotswap/keymaps/madhatter/config.h
@@ -17,4 +17,4 @@
#pragma once
#undef PRODUCT
-#define PRODUCT MadHatter\x27s Hotswap Kbd67 rev1
+#define PRODUCT "MadHatter's Hotswap Kbd67 rev1"
diff --git a/keyboards/kbdfans/kbd67/rev2/keymaps/droxx/config.h b/keyboards/kbdfans/kbd67/rev2/keymaps/droxx/config.h
index 911051c31a2..f6aa35176a6 100644
--- a/keyboards/kbdfans/kbd67/rev2/keymaps/droxx/config.h
+++ b/keyboards/kbdfans/kbd67/rev2/keymaps/droxx/config.h
@@ -23,8 +23,8 @@ along with this program. If not, see .
#undef PRODUCT
#define VENDOR_ID 0xAF88
-#define MANUFACTURER Droxx-FurFuzz
-#define PRODUCT Carbon v2 4rk
+#define MANUFACTURER "Droxx-FurFuzz"
+#define PRODUCT "Carbon v2 4rk"
/* force N key rollover even on startup regardless of EEPROM setting */
#define FORCE_NKRO
diff --git a/keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/config.h b/keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/config.h
index e387c84b2fd..234a44ae705 100644
--- a/keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/config.h
+++ b/keyboards/kbdfans/kbd67/rev2/keymaps/tucznak/config.h
@@ -3,8 +3,8 @@
#undef MANUFACTURER
#undef PRODUCT
-#define MANUFACTURER Potato Inc.
-#define PRODUCT Qt3.14
+#define MANUFACTURER "Potato Inc."
+#define PRODUCT "Qt3.14"
/* send tap key if no layer key was used even after tap delay */
#define TAPPING_TERM 50
diff --git a/keyboards/kbdfans/kbd75/keymaps/noroadsleft/config.h b/keyboards/kbdfans/kbd75/keymaps/noroadsleft/config.h
index 73bb22aea42..0b287460813 100644
--- a/keyboards/kbdfans/kbd75/keymaps/noroadsleft/config.h
+++ b/keyboards/kbdfans/kbd75/keymaps/noroadsleft/config.h
@@ -16,11 +16,6 @@
#pragma once
-#undef MANUFACTURER
-#undef PRODUCT
-#define MANUFACTURER KBDfans
-#define PRODUCT KBD75 rev1
-
#define BACKLIGHT_BREATHING
#define ANSI_NUBS_ROW 4
diff --git a/keyboards/kbdfans/kbd75/keymaps/tucznak/config.h b/keyboards/kbdfans/kbd75/keymaps/tucznak/config.h
index a5578b235fa..dd050764443 100644
--- a/keyboards/kbdfans/kbd75/keymaps/tucznak/config.h
+++ b/keyboards/kbdfans/kbd75/keymaps/tucznak/config.h
@@ -3,8 +3,8 @@
#undef MANUFACTURER
#undef PRODUCT
-#define MANUFACTURER Potato Inc.
-#define PRODUCT Qt3.14
+#define MANUFACTURER "Potato Inc."
+#define PRODUCT "Qt3.14"
/* send tap key if no layer key was used even after tap delay */
#define TAPPING_TERM 250
diff --git a/keyboards/kbdfans/niu_mini/keymaps/tucznak/config.h b/keyboards/kbdfans/niu_mini/keymaps/tucznak/config.h
index 429955b3a08..cfcda1bf7db 100644
--- a/keyboards/kbdfans/niu_mini/keymaps/tucznak/config.h
+++ b/keyboards/kbdfans/niu_mini/keymaps/tucznak/config.h
@@ -3,8 +3,8 @@
#undef MANUFACTURER
#undef PRODUCT
-#define MANUFACTURER Potato Inc.
-#define PRODUCT Qt3.14
+#define MANUFACTURER "Potato Inc."
+#define PRODUCT "Qt3.14"
/* turn off RGB when computer sleeps */
#ifdef RGB_DI_PIN
diff --git a/keyboards/keebio/bamfk4/info.json b/keyboards/keebio/bamfk4/info.json
index 1d04f4348bd..0704d0e1d21 100644
--- a/keyboards/keebio/bamfk4/info.json
+++ b/keyboards/keebio/bamfk4/info.json
@@ -1,5 +1,6 @@
{
"keyboard_name": "BAMFK-4",
+ "manufacturer": "Keebio",
"url": "https://keeb.io",
"maintainer": "nooges",
"usb": {
diff --git a/keyboards/keebio/iris/keymaps/drashna/config.h b/keyboards/keebio/iris/keymaps/drashna/config.h
index cf67aa69841..0569f30744d 100644
--- a/keyboards/keebio/iris/keymaps/drashna/config.h
+++ b/keyboards/keebio/iris/keymaps/drashna/config.h
@@ -51,11 +51,11 @@
#undef PRODUCT
#if defined(KEYBOARD_keebio_iris_rev2)
-# define PRODUCT Drashna Hacked Iris Rev 2
+# define PRODUCT "Drashna Hacked Iris Rev 2"
#elif defined(KEYBOARD_keebio_iris_rev3)
-# define PRODUCT Drashna Hacked Iris Rev 3
+# define PRODUCT "Drashna Hacked Iris Rev 3"
#elif defined(KEYBOARD_keebio_iris_rev4)
-# define PRODUCT Drashna Hacked Iris Rev 4
+# define PRODUCT "Drashna Hacked Iris Rev 4"
#endif
#define SHFT_LED1 6
diff --git a/keyboards/keebio/iris/keymaps/pvinis/config.h b/keyboards/keebio/iris/keymaps/pvinis/config.h
index c2870eba0b9..19925d3a914 100644
--- a/keyboards/keebio/iris/keymaps/pvinis/config.h
+++ b/keyboards/keebio/iris/keymaps/pvinis/config.h
@@ -2,7 +2,7 @@
#ifdef PRODUCT
# undef PRODUCT
-# define PRODUCT Iris Keyboard - pvinis
+# define PRODUCT "Iris Keyboard - pvinis"
#endif
// Use I2C or Serial, not both.
diff --git a/keyboards/keebio/iris/keymaps/two_knob/config.h b/keyboards/keebio/iris/keymaps/two_knob/config.h
new file mode 100644
index 00000000000..37ffb20a2fb
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/two_knob/config.h
@@ -0,0 +1,62 @@
+// Copyright 2022 Ryan Neff (@JellyTitan)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define EE_HANDS
+
+/* Turn off RGB light when host is asleep. (Doesn't seem to work for mac)? */
+#define RGBLIGHT_SLEEP
+#define RGBLIGHT_LAYERS
+/* Decrease decay of heatmap rgb effect */
+#define RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS 50
+/* If you're setting colors per key, this is required. */
+#define SPLIT_LAYER_STATE_ENABLE
+
+/* If you type too fast, it confuses the Mod key combos. This resolves it: */
+#define IGNORE_MOD_TAP_INTERRUPT
+
+/* Set tapdance speed */
+#define TAPPING_TERM 210
+
+/* Allows for the setting of constant mouse speed levels. */
+/* Delay between pressing a movement key and cursor movement */
+#define MOUSEKEY_DELAY 10
+/* Time between cursor movements in milliseconds */
+#define MOUSEKEY_INTERVAL 16
+/* Step size */
+#define MOUSEKEY_MOVE_DELTA 8
+/* Maximum cursor speed at which acceleration stops */
+#define MOUSEKEY_MAX_SPEED 2
+/* Time until maximum cursor speed is reached */
+#define MOUSEKEY_TIME_TO_MAX 40
+/* Maximum number of scroll steps per scroll action */
+#define MOUSEKEY_WHEEL_MAX_SPEED 42
+/* Time until maximum scroll speed is reached */
+#define MOUSEKEY_WHEEL_TIME_TO_MAX 15
+
+// Tweak how the mouse cursor moves. https://docs.qmk.fm/#/feature_mouse_keys
+// Accelerated mode (default).
+// MOUSEKEY_DELAY 10 Delady between pressing a movement key and cursor movement
+// MOUSEKEY_INTERVAL 20 Time between cursor movements in milliseconds
+// MOUSEKEY_MOVE_DELTA 8 Step size
+// MOUSEKEY_MAX_SPEED 10 Maximum cursor speed at which acceleration stops
+// MOUSEKEY_TIME_TO_MAX 30 Time until maximum cursor speed is reached
+// MOUSEKEY_WHEEL_DELAY 10 Delay between pressing a wheel key and wheel movement
+// MOUSEKEY_WHEEL_INTERVAL 80 Time between wheel movements
+// MOUSEKEY_WHEEL_MAX_SPEED 8 Maximum number of scroll steps per scroll action
+// MOUSEKEY_WHEEL_TIME_TO_MAX 40 Time until maximum scroll speed is reached
+
+// Kinetic mode, alternate to the default mode.
+// MK_KINETIC_SPEED undefined Enable kinetic mode
+// MOUSEKEY_DELAY 5 Delay between pressing a movement key and cursor movement
+// MOUSEKEY_INTERVAL 10 Time between cursor movements in milliseconds
+// MOUSEKEY_MOVE_DELTA 5 Step size for accelerating from initial to base speed
+// MOUSEKEY_INITIAL_SPEED 100 Initial speed of the cursor in pixel per second
+// MOUSEKEY_BASE_SPEED 1000 Maximum cursor speed at which acceleration stops
+// MOUSEKEY_DECELERATED_SPEED 400 Decelerated cursor speed
+// MOUSEKEY_ACCELERATED_SPEED 3000 Accelerated cursor speed
+// MOUSEKEY_WHEEL_INITIAL_MOVEMENTS 16 Initial number of movements of the mouse wheel
+// MOUSEKEY_WHEEL_BASE_MOVEMENTS 32 Maximum number of movements at which acceleration stops
+// MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS 48 Accelerated wheel movements
+// MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS 8 Decelerated wheel movements
diff --git a/keyboards/keebio/iris/keymaps/two_knob/keymap.c b/keyboards/keebio/iris/keymaps/two_knob/keymap.c
new file mode 100644
index 00000000000..aeeb2df905f
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/two_knob/keymap.c
@@ -0,0 +1,261 @@
+// Copyright 2022 Ryan Neff (@JellyTitan)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum custom_layers {
+ _QWERTY,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+/* Defines macros for use with the configurators "Any" key. (These are non-standard macros). */
+/* Move active application right half. */
+#define KC_CSGRA LCTL(LSFT(LGUI(KC_RGHT)))
+/* Move active application to left half. */
+#define KC_CSGLA LCTL(LSFT(LGUI(KC_LEFT)))
+/* Maximize active application. */
+#define KC_MAXIM LCTL(LSFT(LGUI(KC_UP)))
+/* Minimize active application. */
+#define KC_MINIM LCTL(LSFT(LGUI(KC_DOWN)))
+
+/* Rotary encoder variables used to hold down Command (GUI) key while cycling through open programs. */
+bool is_cmd_tab_active = false;
+uint16_t cmd_tab_timer = 0;
+
+enum custom_keycodes {
+ QWERTY = SAFE_RANGE,
+ LOWER,
+ RAISE,
+ ADJUST,
+ CMD_TAB_CW,
+ CMD_TAB_CCW,
+};
+
+/**
+ * Tap Dance declarations
+ */
+enum tapdances {
+ _TD_FIVE_ENTER,
+};
+
+/* Tapdance */
+#define TD_FIVE_ENTER TD(_TD_FIVE_ENTER)
+
+/**
+ * Tap Dance definitions
+ *
+ * NOTE - if your not using tapdance, comment out:
+ * TAP_DANCE_ENABLE = yes in rules.mk
+ * define TAPPING_TERM 175 in config.h
+ * else you'll get a compile error.
+ *
+ * To use this in the configurator, enter the name 'TD_FIVE_ENTER' in the "Any" key.
+ */
+qk_tap_dance_action_t tap_dance_actions[] = {
+ /* Tap once for 5, twice for Enter. */
+ [_TD_FIVE_ENTER] = ACTION_TAP_DANCE_DOUBLE(KC_5, KC_ENT),
+};
+
+/**
+ * Keymap. Generated via configurator.
+ *
+ * You can download/upload the two_know.json to the configurator:
+ * https://config.qmk.fm/#/keebio/iris/rev6a/LAYOUT
+ *
+ * If you make changes and download the json, you can run qmk json2c two_knob.json to get converted text.
+ * You can copy and paste it here.
+ * You will have to reneame the array keys from ints to the custom keycode names.
+ *
+ * The rotary encoders are programmed manually below because the configurator does not support them yet.
+ */
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(KC_EQL, KC_1, KC_2, KC_3, KC_4, TD_FIVE_ENTER, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS, LT(1, KC_DEL), LT(2, KC_A), LCTL_T(KC_S), KC_D, LGUI_T(KC_F), KC_G, KC_H, RGUI_T(KC_J), KC_K, RCTL_T(KC_L), LT(2, KC_SCLN), LT(1, KC_QUOT), KC_LSPO, LALT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_MINIM, KC_MAXIM, KC_N, KC_M, KC_COMM, KC_DOT, RALT_T(KC_SLSH), KC_RSPC, QK_GESC, KC_SPC, KC_BSPC, KC_TAB, KC_ENT, KC_DEL),
+ [_LOWER] = LAYOUT(KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_TRNS, KC_EXLM, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, DT_PRNT, KC_7, KC_8, KC_9, KC_ASTR, KC_F12, KC_TRNS, KC_HASH, KC_DLR, KC_LPRN, KC_RPRN, KC_GRV, DT_UP, KC_4, KC_5, KC_6, KC_PPLS, KC_TRNS, KC_TRNS, KC_HASH, KC_DLR, KC_LBRC, KC_RBRC, KC_TILD, KC_TRNS, KC_TRNS, DT_DOWN, KC_1, KC_2, KC_3, KC_PSLS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_P0),
+ [_RAISE] = LAYOUT(RGB_TOG, KC_ACL0, KC_ACL1, KC_ACL2, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_MOD, RGB_RMOD, RGB_HUI, RGB_HUD, KC_TRNS, KC_TRNS, KC_TRNS, KC_MS_U, KC_TRNS, KC_TRNS, KC_TRNS, KC_BTN1, KC_UP, KC_BTN2, RGB_SAI, RGB_SAD, KC_TRNS, KC_TRNS, KC_MS_L, KC_MS_D, KC_MS_R, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RGB_SPI, RGB_SPD, KC_TRNS, KC_TRNS, KC_CSGLA, KC_CSGRA, KC_TRNS, KC_TRNS),
+ [_ADJUST] = LAYOUT(
+ //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
+ _______, _______, _______, _______, _______, _______
+ // └────────┴────────┴────────┘ └────────┴────────┴────────┘
+ )
+};
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case LOWER:
+ if (record->event.pressed) {
+ layer_on(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_LOWER);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ break;
+ case RAISE:
+ if (record->event.pressed) {
+ layer_on(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ } else {
+ layer_off(_RAISE);
+ update_tri_layer(_LOWER, _RAISE, _ADJUST);
+ }
+ return false;
+ case CMD_TAB_CW:
+ if (record->event.pressed) {
+ if (!is_cmd_tab_active) {
+ is_cmd_tab_active = true;
+ register_code(KC_LGUI);
+ }
+ cmd_tab_timer = timer_read();
+ register_code(KC_TAB);
+ } else {
+ unregister_code(KC_TAB);
+ }
+ break;
+ case CMD_TAB_CCW:
+ if (record->event.pressed) {
+ if (!is_cmd_tab_active) {
+ is_cmd_tab_active = true;
+ register_code(KC_LGUI);
+ }
+ cmd_tab_timer = timer_read();
+ tap_code16(S(KC_TAB));
+ } else {
+ unregister_code(KC_TAB);
+ }
+ break;
+ }
+ return true;
+}
+
+/**
+ * Define lighting layers.
+ *
+ * Iris rev6a uses WS2812 RGB Matrix lighting.
+ * The RGB Matrix lighting option has already been enabled in ../../rev6a/config.h
+ * You'll need to add #define SPLIT_LAYER_STATE_ENABLE to config.h if you
+ * will be customizing the LED's per key.
+ *
+ * Here's how to customize the colors per layer and per key:
+ * https://github.com/qmk/qmk_firmware/blob/master/docs/feature_rgb_matrix.md#direct-operation-iddirect-operation
+ *
+ * If you start getting real weird with it, your likely to exceed the firmware limit of 28672.
+ * You may need to selectively disable some effects:
+ * https://github.com/qmk/qmk_firmware/blob/master/docs/feature_rgb_matrix.md#rgb-matrix-effects-idrgb-matrix-effects
+ *
+ * There are 68 Leds. Printed on the board itself, the led numbers are 1-68.
+ * For color addressing, use 0-67 as the index number.
+ * rgb_matrix_set_color(index, r, g, b)
+ *
+ * Here's an LED number guide:
+ * FRONT
+ * Left Hand Right Hand
+ * |00|01|02|03|04|05| |39|38|37|36|35|34|
+ * |11|10|09|08|07|06| |40|41|42|43|44|45|
+ * |12|13|14|15|16|17| |51|50|49|48|47|46|
+ * |23|22|21|20|19|18|27| |61|52|53|54|55|56|57|
+ * |24|25|26| |60|59|58|
+ * REVERSE
+ * Right Hand Left Hand
+ * |65|--|--|66|--|67| |33|--|32|--|--|31|
+ * |--|--|--|--|--|--| |--|--|--|--|--|--|
+ * |--|--|--|--|--|--| |--|--|--|--|--|--|
+ * |64|--|--|63|--|--|--| |--|--|--|29|--|--|30|
+ * |--|62|--| |--|28|--|
+ */
+// void rgb_matrix_indicators_user(void) {
+// if (IS_LAYER_ON(1)) {
+// /* Upperleft most key red: */
+// rgb_matrix_set_color(0,255,0,0);
+// /* Upperright most front key blue: */
+// rgb_matrix_set_color(0,0,255,0);
+// /* Bottom right on lefthand Green: */
+// rgb_matrix_set_color(0, RGB_GREEN);
+// }
+// else if (IS_LAYER_ON(2)) {
+// /* RGB +/- controls. */
+// rgb_matrix_set_color(35, RGB_RED);
+// rgb_matrix_set_color(34, RGB_BLUE);
+// rgb_matrix_set_color(37, RGB_RED);
+// rgb_matrix_set_color(36, RGB_BLUE);
+// rgb_matrix_set_color(44, RGB_RED);
+// rgb_matrix_set_color(45, RGB_BLUE);
+// rgb_matrix_set_color(47, RGB_RED);
+// rgb_matrix_set_color(46, RGB_BLUE);
+// rgb_matrix_set_color(56, RGB_RED);
+// rgb_matrix_set_color(57, RGB_BLUE);
+// /* RGB Toggle. */
+// rgb_matrix_set_color(00, RGB_PURPLE);
+// /* Move screen left/right. */
+// rgb_matrix_set_color(26, RGB_YELLOW);
+// rgb_matrix_set_color(60, RGB_YELLOW);
+// /* Arrow keys. */
+// rgb_matrix_set_color(50, RGB_PURPLE);
+// rgb_matrix_set_color(49, RGB_PURPLE);
+// rgb_matrix_set_color(48, RGB_PURPLE);
+// rgb_matrix_set_color(42, RGB_PURPLE);
+// /* Mouse movement arrows. */
+// rgb_matrix_set_color(14, RGB_ORANGE);
+// rgb_matrix_set_color(15, RGB_ORANGE);
+// rgb_matrix_set_color(16, RGB_ORANGE);
+// rgb_matrix_set_color(8, RGB_ORANGE);
+// /* Mouse buttons. */
+// rgb_matrix_set_color(41, RGB_ORANGE);
+// rgb_matrix_set_color(43, RGB_ORANGE);
+// /* Mouse acceleration. */
+// rgb_matrix_set_color(01, 200, 165, 0);
+// rgb_matrix_set_color(02, 255, 200, 0);
+// rgb_matrix_set_color(03, 255, 235, 0);
+// }
+// }
+
+/**
+ * Rotary Encoder.
+ *
+ * This can't be programmed through configurator. You must do it here.
+ *
+ * This uses the amazing "Encoder map" feature which replicates the normal keyswitch layer handling functionality, but with encoders.
+ * https://docs.qmk.fm/#/feature_encoders?id=encoder-map
+ *
+ * Uses a variant of the Super-alt-tab macro to switch between open applications on a mac. (Command-tab)
+ * https://docs.qmk.fm/#/feature_macros?id=super-alt%e2%86%aftab
+ */
+#if defined(ENCODER_MAP_ENABLE)
+ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ /* Left Hand */ /* Right Hand */
+ /* Switch between tabs. (Control + Tab). */ /* Switch between open apps on Mac. (Command + Tab + timer logic) */
+ [_QWERTY] = { ENCODER_CCW_CW(S(C(KC_TAB)), C(KC_TAB)), ENCODER_CCW_CW(CMD_TAB_CCW, CMD_TAB_CW) },
+ /* Scrolls left & right. (Shift + Mouse Wheel Up). */ /* Scrolls up and down. (Page Down & Page Up - mouse wheel scroll incraments are too small) */
+ [_LOWER] = { ENCODER_CCW_CW(S(KC_MS_WH_UP), S(KC_MS_WH_DOWN)), ENCODER_CCW_CW(KC_PGDN, KC_PGUP) },
+ /* Selects adjacent words. (Command + Shift + Right Arrow). */ /* Jumps to end/start of line. Hold shift to select. (Gui + arrow). */
+ [_RAISE] = { ENCODER_CCW_CW(C(S(KC_LEFT)), C(S(KC_RGHT))), ENCODER_CCW_CW(G(KC_LEFT), G(KC_RGHT)) },
+ /* Scroll through RGB Modes */ /* Right & left arrow */
+ [_ADJUST] = { ENCODER_CCW_CW(RGB_RMOD, RGB_MOD), ENCODER_CCW_CW(KC_LEFT, KC_RGHT) },
+ };
+#endif
+
+
+/**
+ * Helper function for rotary encoder.
+ *
+ * If the timer has elapsed, the Command/Gui tab will be released.
+ * You can adjust the milliseconds to speed up the CMD key release.
+ */
+void matrix_scan_user(void) {
+ if (is_cmd_tab_active) {
+ if (timer_elapsed(cmd_tab_timer) > 900) {
+ unregister_code(KC_LGUI);
+ is_cmd_tab_active = false;
+ }
+ }
+}
diff --git a/keyboards/keebio/iris/keymaps/two_knob/readme.md b/keyboards/keebio/iris/keymaps/two_knob/readme.md
new file mode 100644
index 00000000000..728650fcb90
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/two_knob/readme.md
@@ -0,0 +1,15 @@
+# Two Knob Keymap for Iris Rev6a
+
+
+This keymap is derived from Ergodox layouts and is adapted for the [Iris6a](https://docs.keeb.io/iris-rev6-build-guide). It is notable for it's semi-complex programming examples that include the use of rotary encoders.
+
+Plenty of useful examples:
+* Advanced knob programming! (Three-layer usage + clicks)
+* Advanced RGB! (Per-key lighting)
+* Macros! (Fancy key combos tied to the rotary encoders)
+* Tap Dance! (Double tap your '5' key for 'Enter')
+* Dynamic Tapping term! (Dial in the double tap speed)
+
+The qwerty key layout is my adaptation of the ergodox defaults. If this is your first split keyboard, you probably want a different key layout.
+
+I stopped using the fancy RGB programming pretty quickly. It was a complex to get working initially, so I'm leaving the examples here for others. (As a touch typist - not terribly helpful, but it looks nice). YMMV.
diff --git a/keyboards/keebio/iris/keymaps/two_knob/rules.mk b/keyboards/keebio/iris/keymaps/two_knob/rules.mk
new file mode 100644
index 00000000000..dd49f77547d
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/two_knob/rules.mk
@@ -0,0 +1,15 @@
+# Copyright 2022 Ryan Neff (@JellyTitan)
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+# Turn on mouse:
+MOUSEKEY_ENABLE = yes
+# Turn on tap dance:
+TAP_DANCE_ENABLE = yes
+# Dynamic Tapping Term:
+DYNAMIC_TAPPING_TERM_ENABLE = yes
+# Replicates the normal keyswitch layer handling functionality, but with encoders:
+ENCODER_MAP_ENABLE = yes
+# Console for debug:
+# This is enabled by the parent iris rev6a config - turning it off saves us some space.
+# You can find the other iris default options here: keyboards/keebio/iris/rev6a/rules.mk
+CONSOLE_ENABLE = no
diff --git a/keyboards/keebio/iris/keymaps/two_knob/two_knob.json b/keyboards/keebio/iris/keymaps/two_knob/two_knob.json
new file mode 100644
index 00000000000..62fb9318734
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/two_knob/two_knob.json
@@ -0,0 +1,185 @@
+{
+ "version": 1,
+ "notes": "Based on legacy Ergodox layouts.",
+ "documentation": "\"This file is a QMK Configurator export. You can import this at . It can also be used directly with QMK's source code.\n\nTo setup your QMK environment check out the tutorial: \n\nYou can convert this file to a keymap.c using this command: `qmk json2c {keymap}`\n\nYou can compile this keymap using this command: `qmk compile {keymap}`\"\n",
+ "keyboard": "keebio/iris/rev6a",
+ "keymap": "two_knob",
+ "layout": "LAYOUT",
+ "layers": [
+ [
+ "KC_EQL",
+ "KC_1",
+ "KC_2",
+ "KC_3",
+ "KC_4",
+ "ANY(TD_FIVE_ENTER)",
+ "KC_6",
+ "KC_7",
+ "KC_8",
+ "KC_9",
+ "KC_0",
+ "KC_MINS",
+ "KC_TAB",
+ "KC_Q",
+ "KC_W",
+ "KC_E",
+ "KC_R",
+ "KC_T",
+ "KC_Y",
+ "KC_U",
+ "KC_I",
+ "KC_O",
+ "KC_P",
+ "KC_BSLS",
+ "LT(1,KC_DEL)",
+ "LT(2,KC_A)",
+ "LCTL_T(KC_S)",
+ "KC_D",
+ "LGUI_T(KC_F)",
+ "KC_G",
+ "KC_H",
+ "RGUI_T(KC_J)",
+ "KC_K",
+ "RCTL_T(KC_L)",
+ "LT(2,KC_SCLN)",
+ "LT(1,KC_QUOT)",
+ "KC_LSPO",
+ "LALT_T(KC_Z)",
+ "KC_X",
+ "KC_C",
+ "KC_V",
+ "KC_B",
+ "ANY(KC_MINIM)",
+ "ANY(KC_MAXIM)",
+ "KC_N",
+ "KC_M",
+ "KC_COMM",
+ "KC_DOT",
+ "RALT_T(KC_SLSH)",
+ "KC_RSPC",
+ "QK_GESC",
+ "KC_SPC",
+ "KC_BSPC",
+ "KC_TAB",
+ "KC_ENT",
+ "KC_DEL"
+ ],
+ [
+ "KC_TRNS",
+ "KC_F1",
+ "KC_F2",
+ "KC_F3",
+ "KC_F4",
+ "KC_F5",
+ "KC_F6",
+ "KC_F7",
+ "KC_F8",
+ "KC_F9",
+ "KC_F10",
+ "KC_F11",
+ "KC_TRNS",
+ "KC_EXLM",
+ "KC_AT",
+ "KC_LCBR",
+ "KC_RCBR",
+ "KC_PIPE",
+ "ANY(DT_PRNT)",
+ "KC_7",
+ "KC_8",
+ "KC_9",
+ "KC_ASTR",
+ "KC_F12",
+ "KC_TRNS",
+ "KC_HASH",
+ "KC_DLR",
+ "KC_LPRN",
+ "KC_RPRN",
+ "KC_GRV",
+ "ANY(DT_UP)",
+ "KC_4",
+ "KC_5",
+ "KC_6",
+ "KC_PPLS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_HASH",
+ "KC_DLR",
+ "KC_LBRC",
+ "KC_RBRC",
+ "KC_TILD",
+ "KC_TRNS",
+ "KC_TRNS",
+ "ANY(DT_DOWN)",
+ "KC_1",
+ "KC_2",
+ "KC_3",
+ "KC_PSLS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_P0"
+ ],
+ [
+ "RGB_TOG",
+ "KC_ACL0",
+ "KC_ACL1",
+ "KC_ACL2",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "RGB_MOD",
+ "RGB_RMOD",
+ "RGB_HUI",
+ "RGB_HUD",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_MS_U",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_BTN1",
+ "KC_UP",
+ "KC_BTN2",
+ "RGB_SAI",
+ "RGB_SAD",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_MS_L",
+ "KC_MS_D",
+ "KC_MS_R",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_LEFT",
+ "KC_DOWN",
+ "KC_RGHT",
+ "RGB_VAI",
+ "RGB_VAD",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "KC_TRNS",
+ "RGB_SPI",
+ "RGB_SPD",
+ "KC_TRNS",
+ "KC_TRNS",
+ "ANY(KC_CSGLA)",
+ "ANY(KC_CSGRA)",
+ "KC_TRNS",
+ "KC_TRNS"
+ ]
+ ],
+ "author": "https://github.com/JellyTitan"
+}
diff --git a/keyboards/keebio/iris/keymaps/xyverz/config.h b/keyboards/keebio/iris/keymaps/xyverz/config.h
index d3fc22ca769..fab85918447 100644
--- a/keyboards/keebio/iris/keymaps/xyverz/config.h
+++ b/keyboards/keebio/iris/keymaps/xyverz/config.h
@@ -1,33 +1,13 @@
-/*
-Copyright 2017 Danny Nguyen
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-*/
-
-#ifndef CONFIG_USER_H
-#define CONFIG_USER_H
-
-#include "config_common.h"
+#pragma once
#define USE_SERIAL
#define EE_HANDS
#undef PRODUCT
-#define PRODUCT Iris Keyboard
+#define PRODUCT "Iris Keyboard"
#undef MANUFACTURER
-#define MANUFACTURER Ian Sterling
+#define MANUFACTURER "Ian Sterling"
#undef RGBLED_NUM
#define RGBLIGHT_ANIMATIONS
@@ -35,5 +15,3 @@ along with this program. If not, see .
#define RGBLIGHT_HUE_STEP 8
#define RGBLIGHT_SAT_STEP 8
#define RGBLIGHT_VAL_STEP 8
-
-#endif
diff --git a/keyboards/keebio/viterbi/keymaps/drashna/config.h b/keyboards/keebio/viterbi/keymaps/drashna/config.h
index 2decb3b3e93..cd640ec8d5c 100644
--- a/keyboards/keebio/viterbi/keymaps/drashna/config.h
+++ b/keyboards/keebio/viterbi/keymaps/drashna/config.h
@@ -31,7 +31,7 @@
#endif // RGBLIGHT_ENABLE
#undef PRODUCT
-#define PRODUCT Drashnas Viterbi Macro Pad
+#define PRODUCT "Drashnas Viterbi Macro Pad"
#ifdef AUDIO_ENABLE
# define AUDIO_PIN C6
diff --git a/keyboards/kegen/gboy/config.h b/keyboards/kegen/gboy/config.h
new file mode 100644
index 00000000000..77f9ef3b218
--- /dev/null
+++ b/keyboards/kegen/gboy/config.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2022 Matt Chan
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include "config_common.h"
+
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 16
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { F1, F4, F5, F6, F7 }
+#define MATRIX_COL_PINS { E2, E6, C6, C7, D7, B6, B5, B4, B3, B2, B1, B0, D4, D6, D5, F0 }
+#define UNUSED_PINS
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+/* number of backlight levels */
+#define BACKLIGHT_PIN B7
+#ifdef BACKLIGHT_PIN
+#define BACKLIGHT_LEVELS 15
+#endif
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+#define RGB_DI_PIN D1
+#ifdef RGB_DI_PIN
+#define RGBLIGHT_EFFECT_BREATHING
+#define RGBLIGHT_EFFECT_RAINBOW_MOOD
+#define RGBLIGHT_EFFECT_RAINBOW_SWIRL
+#define RGBLIGHT_EFFECT_SNAKE
+#define RGBLIGHT_EFFECT_KNIGHT
+#define RGBLIGHT_EFFECT_CHRISTMAS
+#define RGBLIGHT_EFFECT_STATIC_GRADIENT
+#define RGBLIGHT_EFFECT_RGB_TEST
+#define RGBLIGHT_EFFECT_ALTERNATING
+#define RGBLIGHT_EFFECT_TWINKLE
+#define RGBLED_NUM 14
+#define RGBLIGHT_HUE_STEP 8
+#define RGBLIGHT_SAT_STEP 8
+#define RGBLIGHT_VAL_STEP 8
+#endif
diff --git a/keyboards/kegen/gboy/gboy.c b/keyboards/kegen/gboy/gboy.c
new file mode 100644
index 00000000000..cd6869748df
--- /dev/null
+++ b/keyboards/kegen/gboy/gboy.c
@@ -0,0 +1,18 @@
+/*
+ * Copyright (C) 2022 Matt Chan
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "gboy.h"
diff --git a/keyboards/kegen/gboy/gboy.h b/keyboards/kegen/gboy/gboy.h
new file mode 100644
index 00000000000..5a51343e958
--- /dev/null
+++ b/keyboards/kegen/gboy/gboy.h
@@ -0,0 +1,68 @@
+/*
+ * Copyright (C) 2022 Matt Chan
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include "quantum.h"
+
+/*
+ * This diagram is based off the QK65 layout but without the blocker.
+ *
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───────┐
+ * │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │1D │0D │0E │ │0D │ 2u Backspace
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┼───┤ └─┬─────┤
+ * │10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │2C │1E │ │ │
+ * 2.25u ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤ ┌──┴┐2D │ ISO Enter
+ * LShift │20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2D │2E │ │2C │ │
+ * ┌────────┐ ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤ ┌─┴───┴────┤
+ * │30 │ │30 │3C │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │3E │ │3B │ 2.75u Shift
+ * └────────┘ ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┴┬──┴──┬───┼───┼───┤ └──────────┘
+ * │40 │41 │42 │46 │47 │49 │4C │4D │4E │
+ * └────┴────┴────┴────────────────────────┴─────┴─────┴───┴───┴───┘
+ * 1.25u, 1.25u, 1.25u, 6.25u, 1.5u, 1.5u
+ *
+ * ┌────┬────┬────┬────────────────────────┬───┬───┬───┐
+ * │40 │41 │42 │46 │47 │48 │49 │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┘
+ * 1.25u, 1.25u, 1.25u, 6.25u, 1u, 1u, 1u
+ *
+ * ┌─────┬─────┬───────────────────────────┬───┬───┬───┐
+ * │40 │42 │46 │47 │48 │49 │
+ * └─────┴─────┴───────────────────────────┴───┴───┴───┘
+ * 1.5u, 1.5u, 7u, 1u, 1u, 1u
+ *
+ * ┌─────┬─────┬───────────────────────────┬─────┬─────┐
+ * │40 │42 │46 │47 │49 │
+ * └─────┴─────┴───────────────────────────┴─────┴─────┘
+ * 1.5u, 1.5u, 7u, 1.5u, 1.5u
+ */
+
+
+
+#define LAYOUT_all( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K115, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, K215, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, K315, \
+ K400, K401, K402, K406, K409, K410, K411, K412, K413, K414 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, K015 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, KC_NO, K115 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, K213, KC_NO, K215 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, K313, KC_NO, K315 }, \
+ { K400, K401, K402, KC_NO, KC_NO, KC_NO, K406, KC_NO, KC_NO, K409, K410, K411, K412, K413, K414, KC_NO } \
+}
diff --git a/keyboards/kegen/gboy/info.json b/keyboards/kegen/gboy/info.json
new file mode 100644
index 00000000000..ad274c19576
--- /dev/null
+++ b/keyboards/kegen/gboy/info.json
@@ -0,0 +1,91 @@
+{
+ "keyboard_name": "G-Boy",
+ "manufacturer": "Kegen",
+ "url": "",
+ "maintainer": "@mattchan",
+ "usb": {
+ "vid": "0x4B65",
+ "pid": "0x6762",
+ "device_version": "0.0.1"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6, "y":0},
+ {"x":7, "y":0},
+ {"x":8, "y":0},
+ {"x":9, "y":0},
+ {"x":10, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0},
+ {"x":14, "y":0},
+ {"x":15, "y":0},
+
+ {"x":0, "y":1, "w":1.5},
+ {"x":1.5, "y":1},
+ {"x":2.5, "y":1},
+ {"x":3.5, "y":1},
+ {"x":4.5, "y":1},
+ {"x":5.5, "y":1},
+ {"x":6.5, "y":1},
+ {"x":7.5, "y":1},
+ {"x":8.5, "y":1},
+ {"x":9.5, "y":1},
+ {"x":10.5, "y":1},
+ {"x":11.5, "y":1},
+ {"x":12.5, "y":1},
+ {"x":13.5, "y":1, "w":1.5},
+ {"x":15, "y":1},
+
+ {"x":0, "y":2, "w":1.75},
+ {"x":1.75, "y":2},
+ {"x":2.75, "y":2},
+ {"x":3.75, "y":2},
+ {"x":4.75, "y":2},
+ {"x":5.75, "y":2},
+ {"x":6.75, "y":2},
+ {"x":7.75, "y":2},
+ {"x":8.75, "y":2},
+ {"x":9.75, "y":2},
+ {"x":10.75, "y":2},
+ {"x":11.75, "y":2},
+ {"x":12.75, "y":2},
+ {"x":13.75, "y":2, "w":1.25},
+ {"x":15, "y":2},
+
+ {"x":0, "y":3, "w":1.25},
+ {"x":1.25, "y":3},
+ {"x":2.25, "y":3},
+ {"x":3.25, "y":3},
+ {"x":4.25, "y":3},
+ {"x":5.25, "y":3},
+ {"x":6.25, "y":3},
+ {"x":7.25, "y":3},
+ {"x":8.25, "y":3},
+ {"x":9.25, "y":3},
+ {"x":10.25, "y":3},
+ {"x":11.25, "y":3},
+ {"x":12.25, "y":3, "w":1.75},
+ {"x":14, "y":3},
+ {"x":15, "y":3},
+
+ {"x":0, "y":4, "w":1.25},
+ {"x":1.25, "y":4, "w":1.25},
+ {"x":2.5, "y":4, "w":1.25},
+ {"x":3.75, "y":4, "w":6.25},
+ {"x":10, "y":4},
+ {"x":11, "y":4},
+ {"x":12, "y":4},
+ {"x":13, "y":4},
+ {"x":14, "y":4},
+ {"x":15, "y":4}]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/kegen/gboy/keymaps/default/keymap.c b/keyboards/kegen/gboy/keymaps/default/keymap.c
new file mode 100644
index 00000000000..f4b5d3c0901
--- /dev/null
+++ b/keyboards/kegen/gboy/keymaps/default/keymap.c
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2022 Matt Chan
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_SLSH, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, QK_BOOT,
+ RGB_TOG, RGB_RMOD, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_SPD, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT
+ ),
+
+ [2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [3] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+
+};
diff --git a/keyboards/kegen/gboy/keymaps/via/keymap.c b/keyboards/kegen/gboy/keymaps/via/keymap.c
new file mode 100644
index 00000000000..f4b5d3c0901
--- /dev/null
+++ b/keyboards/kegen/gboy/keymaps/via/keymap.c
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2022 Matt Chan
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_BSLS, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_SLSH, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL, QK_BOOT,
+ RGB_TOG, RGB_RMOD, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_SPD, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MPRV, KC_VOLD, KC_MNXT
+ ),
+
+ [2] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+
+ [3] = LAYOUT_all(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+
+};
diff --git a/keyboards/kegen/gboy/keymaps/via/rules.mk b/keyboards/kegen/gboy/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/kegen/gboy/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/kegen/gboy/readme.md b/keyboards/kegen/gboy/readme.md
new file mode 100644
index 00000000000..25ca760ff49
--- /dev/null
+++ b/keyboards/kegen/gboy/readme.md
@@ -0,0 +1,28 @@
+# G-Boy
+
+
+
+65% board that resembles a handheld gaming console
+
+* Keyboard Maintainer: [Matt Chan](https://github.com/mattchan)
+* Hardware Supported: Kegen G-Boy
+* Hardware Availability: Unfortunately, there is no site for this, and the Kegen Discord is ghost town.
+
+Make example for this keyboard (after setting up your build environment):
+
+ make kegen/gboy:default
+
+Flashing example for this keyboard:
+
+ make kegen/gboy:default:flash
+
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/kegen/gboy/rules.mk b/keyboards/kegen/gboy/rules.mk
new file mode 100644
index 00000000000..8723047c1eb
--- /dev/null
+++ b/keyboards/kegen/gboy/rules.mk
@@ -0,0 +1,18 @@
+# MCU name
+MCU = atmega32u4
+
+# Bootloader selection
+BOOTLOADER = atmel-dfu
+
+# Build Options
+# comment out to disable the options.
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Enable N-Key Rollover
+BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
+AUDIO_ENABLE = no # Audio output
+RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
diff --git a/keyboards/keyhive/ut472/keymaps/tucznak/config.h b/keyboards/keyhive/ut472/keymaps/tucznak/config.h
index b3d402337ae..bc3587f5424 100644
--- a/keyboards/keyhive/ut472/keymaps/tucznak/config.h
+++ b/keyboards/keyhive/ut472/keymaps/tucznak/config.h
@@ -3,8 +3,8 @@
#undef MANUFACTURER
#undef PRODUCT
-#define MANUFACTURER Potato Inc.
-#define PRODUCT Qt3.14
+#define MANUFACTURER "Potato Inc."
+#define PRODUCT "Qt3.14"
/* turn off RGB when computer sleeps */
#ifdef RGBLIGHT_ENABLE
diff --git a/keyboards/lazydesigners/bolt/readme.md b/keyboards/lazydesigners/bolt/readme.md
index d89bca097e8..4d759ea7064 100644
--- a/keyboards/lazydesigners/bolt/readme.md
+++ b/keyboards/lazydesigners/bolt/readme.md
@@ -16,6 +16,6 @@ Flashing example for this keyboard:
make lazydesigners/bolt:default:flash
-**Reset Key:** To enter the bootloader, either push the RESET button on the PCB or the RESET button on the FN layer.
+**Reset Key:** To enter the bootloader, either push the RESET button on the PCB or the `QK_BOOT` key on the FN layer.
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/lazydesigners/cassette8/readme.md b/keyboards/lazydesigners/cassette8/readme.md
index 7211bf5e97e..b973c45037d 100755
--- a/keyboards/lazydesigners/cassette8/readme.md
+++ b/keyboards/lazydesigners/cassette8/readme.md
@@ -16,6 +16,6 @@ Flashing example for this keyboard:
make lazydesigners/cassette8:default:flash
-**Reset Key:** To enter the bootloader, either push the RESET button on the PCB or the RESET button on the FN layer.
+**Reset Key:** To enter the bootloader, either push the RESET button on the PCB or the `QK_BOOT` key on the FN layer.
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/lazydesigners/dimple/readme.md b/keyboards/lazydesigners/dimple/readme.md
index 2e15cec2b90..b6e59272d67 100644
--- a/keyboards/lazydesigners/dimple/readme.md
+++ b/keyboards/lazydesigners/dimple/readme.md
@@ -21,6 +21,6 @@ Make example for this keyboard (after setting up your build environment):
make lazydesigners/dimple/staggered/rev2:default
make lazydesigners/dimple/ortho:default
-To enter the bootloader, either short the pins on the PCB or the RESET button on the FN layer.
+To enter the bootloader, either short the pins on the PCB or the `QK_BOOT` key on the FN layer.
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/lazydesigners/dimpleplus/readme.md b/keyboards/lazydesigners/dimpleplus/readme.md
index fc5881cdc1c..78db4924277 100644
--- a/keyboards/lazydesigners/dimpleplus/readme.md
+++ b/keyboards/lazydesigners/dimpleplus/readme.md
@@ -14,6 +14,6 @@ Flashing example for this keyboard:
make lazydesigners/dimpleplus:default:flash
-**Reset Key:** To enter the bootloader, either push the RESET button on the PCB or the RESET button on the FN layer.
+**Reset Key:** To enter the bootloader, either push the RESET button on the PCB or the `QK_BOOT` key on the FN layer.
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/lazydesigners/the40/readme.md b/keyboards/lazydesigners/the40/readme.md
index e6189675617..2b0a1636281 100644
--- a/keyboards/lazydesigners/the40/readme.md
+++ b/keyboards/lazydesigners/the40/readme.md
@@ -21,6 +21,6 @@ Flashing example for this keyboard:
make lazydesigners/the40:default:flash
-**Reset Key:** To enter the bootloader, either push the RESET button on the PCB or the RESET button on the FN layer.
+**Reset Key:** To enter the bootloader, either push the RESET button on the PCB or the `QK_BOOT` key on the FN layer.
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/lazydesigners/the50/readme.md b/keyboards/lazydesigners/the50/readme.md
index d90dc59de6d..5b9e7c7bf77 100644
--- a/keyboards/lazydesigners/the50/readme.md
+++ b/keyboards/lazydesigners/the50/readme.md
@@ -12,6 +12,6 @@ Make example for this keyboard (after setting up your build environment):
make lazydesigners/the50:default:dfu
-To enter the bootloader, either short the pins on the PCB or the RESET button on the FN layer.
+To enter the bootloader, either short the pins on the PCB or the `QK_BOOT` key on the FN layer.
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/lazydesigners/the60/rev2/readme.md b/keyboards/lazydesigners/the60/rev2/readme.md
index 2c01cee1d8a..12f51a06af5 100755
--- a/keyboards/lazydesigners/the60/rev2/readme.md
+++ b/keyboards/lazydesigners/the60/rev2/readme.md
@@ -16,6 +16,6 @@
make lazydesigners/the60/rev2:default:flash
- **Reset Key:** To enter the bootloader, either push the RESET button on the PCB or the RESET button on the FN layer.
+ **Reset Key:** To enter the bootloader, either push the RESET button on the PCB or the `QK_BOOT` key on the FN layer.
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
\ No newline at end of file
diff --git a/keyboards/lfkeyboards/lfk65_hs/lfk65_hs.c b/keyboards/lfkeyboards/lfk65_hs/lfk65_hs.c
index 86573ce17f5..7326e812ec5 100644
--- a/keyboards/lfkeyboards/lfk65_hs/lfk65_hs.c
+++ b/keyboards/lfkeyboards/lfk65_hs/lfk65_hs.c
@@ -6,7 +6,7 @@
bool process_record_kb(uint16_t keycode, keyrecord_t* record)
{
- if (keycode == RESET) {
+ if (keycode == QK_BOOT) {
reset_keyboard_kb();
} else {
}
diff --git a/keyboards/lfkeyboards/lfk65_hs/rules.mk b/keyboards/lfkeyboards/lfk65_hs/rules.mk
index bfae80e0c70..618c502e061 100644
--- a/keyboards/lfkeyboards/lfk65_hs/rules.mk
+++ b/keyboards/lfkeyboards/lfk65_hs/rules.mk
@@ -1,8 +1,5 @@
MCU = atmega32u4
-OPT_DEFS += -DBOOTLOADER_SIZE=4096
-FLASH_SIZE_KB = 32
-BOOT_SECTION_SIZE_KB = 4
-BOOT_LOADER = BootloaderHID
+BOOTLOADER = atmel-dfu
# Extra source files for IS3731 lighting
SRC = TWIlib.c issi.c lighting.c
diff --git a/keyboards/lfkeyboards/lfk78/lfk78.c b/keyboards/lfkeyboards/lfk78/lfk78.c
index 96fe96f03f7..54a2b45840b 100644
--- a/keyboards/lfkeyboards/lfk78/lfk78.c
+++ b/keyboards/lfkeyboards/lfk78/lfk78.c
@@ -127,7 +127,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
clicking_notes(click_hz, click_time);
}
- if (keycode == RESET) {
+ if (keycode == QK_BOOT) {
reset_keyboard_kb();
}
diff --git a/keyboards/lfkeyboards/lfk87/lfk87.c b/keyboards/lfkeyboards/lfk87/lfk87.c
index 17eeeeffe80..553c66da6d1 100644
--- a/keyboards/lfkeyboards/lfk87/lfk87.c
+++ b/keyboards/lfkeyboards/lfk87/lfk87.c
@@ -109,7 +109,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record)
if (click_toggle && record->event.pressed){
click(click_hz, click_time);
}
- if (keycode == RESET) {
+ if (keycode == QK_BOOT) {
reset_keyboard_kb();
} else {
}
diff --git a/keyboards/lfkeyboards/lfkpad/keymaps/pascalpfeil/keymap.c b/keyboards/lfkeyboards/lfkpad/keymaps/pascalpfeil/keymap.c
index 667e8859e2d..38eb656892b 100644
--- a/keyboards/lfkeyboards/lfkpad/keymaps/pascalpfeil/keymap.c
+++ b/keyboards/lfkeyboards/lfkpad/keymaps/pascalpfeil/keymap.c
@@ -58,7 +58,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
const uint8_t number_leds[] = {8, 9, 10, 11, 12, 13, 15, 16, 17};
-const uint8_t number_leds_size = sizeof(number_leds) / sizeof(uint8_t);
+const uint8_t number_leds_size = ARRAY_SIZE(number_leds);
bool led_update_user(led_t led_state) {
for (uint8_t i = 0; i < number_leds_size; i++)
diff --git a/keyboards/lfkeyboards/mini1800/mini1800.c b/keyboards/lfkeyboards/mini1800/mini1800.c
index 8819d3465aa..ac6b0533b45 100644
--- a/keyboards/lfkeyboards/mini1800/mini1800.c
+++ b/keyboards/lfkeyboards/mini1800/mini1800.c
@@ -115,7 +115,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record)
if (click_toggle && record->event.pressed){
click(click_hz, click_time);
}
- if (keycode == RESET) {
+ if (keycode == QK_BOOT) {
reset_keyboard_kb();
} else {
}
diff --git a/keyboards/lfkeyboards/smk65/revb/revb.c b/keyboards/lfkeyboards/smk65/revb/revb.c
index 9b34eff1c33..9e78107eca8 100644
--- a/keyboards/lfkeyboards/smk65/revb/revb.c
+++ b/keyboards/lfkeyboards/smk65/revb/revb.c
@@ -74,7 +74,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record)
if (click_toggle && record->event.pressed){
click(click_hz, click_time);
}
- if (keycode == RESET) {
+ if (keycode == QK_BOOT) {
reset_keyboard_kb();
} else {
}
diff --git a/keyboards/loki65/config.h b/keyboards/loki65/config.h
index aea771f6232..0f4e2c8629a 100644
--- a/keyboards/loki65/config.h
+++ b/keyboards/loki65/config.h
@@ -32,7 +32,7 @@ along with this program. If not, see .
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
-/* Ensure we jump to bootloader if the RESET keycode was pressed */
+/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
/* Indicator LEDs */
diff --git a/keyboards/massdrop/alt/config.h b/keyboards/massdrop/alt/config.h
index 2a3b5b33117..364e8325b16 100644
--- a/keyboards/massdrop/alt/config.h
+++ b/keyboards/massdrop/alt/config.h
@@ -20,8 +20,6 @@ along with this program. If not, see .
#include "config_common.h"
/* USB Device descriptor parameter */
-#define MANUFACTURER "Massdrop Inc."
-#define PRODUCT "ALT Keyboard"
#define SERIAL_NUM "Unavailable"
/* key matrix size */
diff --git a/keyboards/massdrop/alt/info.json b/keyboards/massdrop/alt/info.json
index 909ca8904ac..6e87648d95f 100644
--- a/keyboards/massdrop/alt/info.json
+++ b/keyboards/massdrop/alt/info.json
@@ -1,5 +1,6 @@
{
- "keyboard_name": "ALT",
+ "keyboard_name": "ALT Keyboard",
+ "manufacturer": "Massdrop Inc.",
"url": "https://www.massdrop.com/buy/massdrop-alt-mechanical-keyboard",
"maintainer": "Massdrop",
"usb": {
diff --git a/keyboards/massdrop/ctrl/config.h b/keyboards/massdrop/ctrl/config.h
index 8b8625e700f..77967e17d3c 100644
--- a/keyboards/massdrop/ctrl/config.h
+++ b/keyboards/massdrop/ctrl/config.h
@@ -20,8 +20,6 @@ along with this program. If not, see .
#include "config_common.h"
/* USB Device descriptor parameter */
-#define MANUFACTURER "Massdrop Inc."
-#define PRODUCT "CTRL Keyboard"
#define SERIAL_NUM "Unavailable"
/* key matrix size */
diff --git a/keyboards/massdrop/ctrl/info.json b/keyboards/massdrop/ctrl/info.json
index 7d0810c6301..34c60ca088a 100644
--- a/keyboards/massdrop/ctrl/info.json
+++ b/keyboards/massdrop/ctrl/info.json
@@ -1,5 +1,6 @@
{
- "keyboard_name": "CTRL",
+ "keyboard_name": "CTRL Keyboard",
+ "manufacturer": "Massdrop Inc.",
"url": "https://www.massdrop.com/buy/massdrop-ctrl-mechanical-keyboard",
"maintainer": "Massdrop",
"usb": {
diff --git a/keyboards/massdrop/ctrl/keymaps/responsive_pattern/keymap.c b/keyboards/massdrop/ctrl/keymaps/responsive_pattern/keymap.c
index ddcf30b68dd..eee2eaf628a 100644
--- a/keyboards/massdrop/ctrl/keymaps/responsive_pattern/keymap.c
+++ b/keyboards/massdrop/ctrl/keymaps/responsive_pattern/keymap.c
@@ -129,8 +129,7 @@ static uint8_t COLOR_PATTERNS[][COLOR_PATTERN_RGB_COUNT][3] = {
{ 66, 66, 66}, { 45, 45, 45}, { 23, 23, 23},
},
};
-static const uint8_t COLOR_PATTERNS_COUNT = (
- sizeof(COLOR_PATTERNS) / sizeof(COLOR_PATTERNS[0]));
+static const uint8_t COLOR_PATTERNS_COUNT = ARRAY_SIZE(COLOR_PATTERNS);
/**
* trimed down version of `ISSI3733_LED_MAP`:
diff --git a/keyboards/massdrop/thekey/keymaps/default-bepo/keymap.c b/keyboards/massdrop/thekey/keymaps/default-bepo/keymap.c
new file mode 100644
index 00000000000..b9d419a0865
--- /dev/null
+++ b/keyboards/massdrop/thekey/keymaps/default-bepo/keymap.c
@@ -0,0 +1,24 @@
+/* Copyright 2022 Benjamin Collet
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+#include "keymap_bepo.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(KC_LCTL, BP_C, BP_V),
+
+};
diff --git a/keyboards/massdrop/thekey/keymaps/url-copy-paste-bepo/keymap.c b/keyboards/massdrop/thekey/keymaps/url-copy-paste-bepo/keymap.c
new file mode 100644
index 00000000000..feafa02ac2c
--- /dev/null
+++ b/keyboards/massdrop/thekey/keymaps/url-copy-paste-bepo/keymap.c
@@ -0,0 +1,41 @@
+/* Copyright 2022 Benjamin Collet
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+#include "sendstring_bepo.h"
+
+enum custom_keycodes {
+ TK_URL = SAFE_RANGE,
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(TK_URL, C(BP_C), C(BP_V)),
+};
+
+
+bool process_record_user(uint16_t keycode, keyrecord_t *record) {
+ switch (keycode) {
+ case TK_URL:
+ if (record->event.pressed) {
+ // when keycode TK_URL is pressed
+ SEND_STRING("https://stackoverflow.com/");
+ }
+ break;
+ default:
+ break;
+ }
+ return true;
+}
diff --git a/keyboards/mechlovin/zed65/readme.md b/keyboards/mechlovin/zed65/readme.md
index 3dc4b4cf676..7da1e7c3658 100644
--- a/keyboards/mechlovin/zed65/readme.md
+++ b/keyboards/mechlovin/zed65/readme.md
@@ -22,4 +22,4 @@ Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
-* **Keycode in layout**: Press the key mapped to `RESET` if it is available
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/mechlovin/zed65/retro66/readme.md b/keyboards/mechlovin/zed65/retro66/readme.md
index 5533020662a..af568441d78 100644
--- a/keyboards/mechlovin/zed65/retro66/readme.md
+++ b/keyboards/mechlovin/zed65/retro66/readme.md
@@ -24,4 +24,4 @@ Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
-* **Keycode in layout**: Press the key mapped to `RESET` if it is available
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/mechlovin/zed65/wearhaus66/readme.md b/keyboards/mechlovin/zed65/wearhaus66/readme.md
index a1ede033dd5..c3f46ae76db 100644
--- a/keyboards/mechlovin/zed65/wearhaus66/readme.md
+++ b/keyboards/mechlovin/zed65/wearhaus66/readme.md
@@ -24,4 +24,4 @@ Enter the bootloader in 3 ways:
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (Escape) and plug in the keyboard
* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
-* **Keycode in layout**: Press the key mapped to `RESET` if it is available
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/mechwild/bde/config.h b/keyboards/mechwild/bde/config.h
index 5130918c083..ad54af1aa8c 100644
--- a/keyboards/mechwild/bde/config.h
+++ b/keyboards/mechwild/bde/config.h
@@ -17,4 +17,10 @@ along with this program. If not, see .
#pragma once
-#include "config_common.h"
\ No newline at end of file
+#include "config_common.h"
+
+/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
+#define LOCKING_SUPPORT_ENABLE
+
+/* Locking resynchronize hack */
+#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/mechwild/bde/info.json b/keyboards/mechwild/bde/info.json
index 682038c681c..0177b4c949a 100644
--- a/keyboards/mechwild/bde/info.json
+++ b/keyboards/mechwild/bde/info.json
@@ -5,13 +5,27 @@
"usb": {
"vid": "0x6D77"
},
- "layouts": {
- "LAYOUT": {
- "layout": [
- {"label":"Q", "x":0, "y":0}, {"label":"W", "x":1, "y":0}, {"label":"E", "x":2, "y":0}, {"label":"R", "x":3, "y":0}, {"label":"T", "x":4, "y":0}, {"label":"Y", "x":5, "y":0}, {"label":"U", "x":6, "y":0}, {"label":"I", "x":7, "y":0}, {"label":"O", "x":8, "y":0}, {"label":"P", "x":9, "y":0}, {"label":"7", "x":10, "y":0}, {"label":"8", "x":11, "y":0}, {"label":"9", "x":12, "y":0}, {"label":"Mute", "x":13, "y":0},
- {"label":"A", "x":0, "y":1}, {"label":"S", "x":1, "y":1}, {"label":"D", "x":2, "y":1}, {"label":"F", "x":3, "y":1}, {"label":"G", "x":4, "y":1}, {"label":"H", "x":5, "y":1}, {"label":"J", "x":6, "y":1}, {"label":"K", "x":7, "y":1}, {"label":"L", "x":8, "y":1}, {"label":"ESC", "x":9, "y":1}, {"label":"4", "x":10, "y":1}, {"label":"5", "x":11, "y":1}, {"label":"6", "x":12, "y":1}, {"label":"0", "x":13, "y":1},
- {"label":"Z", "x":0, "y":2}, {"label":"X", "x":1, "y":2}, {"label":"C", "x":2, "y":2}, {"label":"V", "x":3, "y":2}, {"label":"BS", "x":4, "y":2}, {"label":"", "x":5, "y":2}, {"label":"B", "x":6, "y":2}, {"label":"N", "x":7, "y":2}, {"label":"M", "x":8, "y":2}, {"label":"ENT", "x":9, "y":2}, {"label":"1", "x":10, "y":2}, {"label":"2", "x":11, "y":2}, {"label":"3", "x":12, "y":2}, {"label":"EQL", "x":13, "y":2}
- ]
- }
+ "debounce": 5,
+ "build": {
+ "lto": true
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "debug": false,
+ "extrakey": true,
+ "mousekey": true,
+ "rgblight": true,
+ "nkro": true
+ },
+ "development_board": "promicro",
+ "rgblight": {
+ "sleep": true,
+ "max_brightness": 255
+ },
+ "tapping": {
+ "tap_keycode_delay": 10,
+ "tap_capslock_delay": 10
}
}
diff --git a/keyboards/mechwild/bde/keymaps/via/rules.mk b/keyboards/mechwild/bde/keymaps/via/rules.mk
deleted file mode 100644
index 07681b4f2cc..00000000000
--- a/keyboards/mechwild/bde/keymaps/via/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-RGBLIGHT_ENABLE = yes
-VIA_ENABLE = yes
-LTO_ENABLE = no
diff --git a/keyboards/mechwild/bde/lefty/config.h b/keyboards/mechwild/bde/lefty/config.h
deleted file mode 100644
index 702a6d81b49..00000000000
--- a/keyboards/mechwild/bde/lefty/config.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Copyright 2020 Kyle McCreery
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-
-#pragma once
-
-#include "config_common.h"
-
-/* key matrix size */
-#define MATRIX_ROWS 3
-#define MATRIX_COLS 14
-
-/* key matrix pins */
-#define MATRIX_ROW_PINS { D1, D7, D3}
-#define MATRIX_COL_PINS { F7, B1, B6, B2, B3, F6, F5, F4, D0, D4, C6, E6, B5, B4}
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION ROW2COL
-
-/* If RGBLIGHT_ENABLE is set to yes in the rules, ensure the RGBLED_NUM is accurate for how many you have attached. */
-#define RGB_DI_PIN D2
-#define RGBLED_NUM 16
-#define RGBLIGHT_ANIMATIONS
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE 5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
diff --git a/keyboards/mechwild/bde/lefty/info.json b/keyboards/mechwild/bde/lefty/info.json
index 293df183879..5aa4ac1e80a 100644
--- a/keyboards/mechwild/bde/lefty/info.json
+++ b/keyboards/mechwild/bde/lefty/info.json
@@ -3,5 +3,75 @@
"usb": {
"pid": "0x1701",
"device_version": "2.0.3"
+ },
+ "matrix_pins": {
+ "rows": ["D1", "D7", "D3"],
+ "cols": ["F7", "B1", "B6", "B2", "B3", "F6", "F5", "F4", "D0", "D4", "C6", "E6", "B5", "B4"]
+ },
+ "diode_direction": "ROW2COL",
+ "rgblight": {
+ "led_count": 16,
+ "pin": "D2",
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "label":"7", "x":0, "y":0 },
+ { "matrix": [0, 1], "label":"8", "x":1, "y":0 },
+ { "matrix": [0, 2], "label":"9", "x":2, "y":0 },
+ { "matrix": [0, 3], "label":"0", "x":3, "y":0 },
+ { "matrix": [0, 4], "label":"Q", "x":4, "y":0 },
+ { "matrix": [0, 5], "label":"W", "x":5, "y":0 },
+ { "matrix": [0, 6], "label":"E", "x":6, "y":0 },
+ { "matrix": [0, 7], "label":"R", "x":7, "y":0 },
+ { "matrix": [0, 8], "label":"T", "x":8, "y":0 },
+ { "matrix": [0, 9], "label":"Y", "x":9, "y":0 },
+ { "matrix": [0, 10], "label":"U", "x":10, "y":0 },
+ { "matrix": [0, 11], "label":"I", "x":11, "y":0 },
+ { "matrix": [0, 12], "label":"O", "x":12, "y":0 },
+ { "matrix": [0, 13], "label":"P", "x":13, "y":0 },
+
+ { "matrix": [1, 0], "label":"4", "x":0, "y":1 },
+ { "matrix": [1, 1], "label":"5", "x":1, "y":1 },
+ { "matrix": [1, 2], "label":"6", "x":2, "y":1 },
+ { "matrix": [1, 3], "label":"Enter", "x":3, "y":1, "h":2 },
+ { "matrix": [1, 4], "label":"A", "x":4, "y":1 },
+ { "matrix": [1, 5], "label":"S", "x":5, "y":1 },
+ { "matrix": [1, 6], "label":"D", "x":6, "y":1 },
+ { "matrix": [1, 7], "label":"F", "x":7, "y":1 },
+ { "matrix": [1, 8], "label":"G", "x":8, "y":1 },
+ { "matrix": [1, 9], "label":"H", "x":9, "y":1 },
+ { "matrix": [1, 10], "label":"J", "x":10, "y":1 },
+ { "matrix": [1, 11], "label":"K", "x":11, "y":1 },
+ { "matrix": [1, 12], "label":"L", "x":12, "y":1 },
+ { "matrix": [1, 13], "label":"Esc", "x":13, "y":1 },
+
+ { "matrix": [2, 0], "label":"1", "x":0, "y":2 },
+ { "matrix": [2, 1], "label":"2", "x":1, "y":2 },
+ { "matrix": [2, 2], "label":"3", "x":2, "y":2 },
+ { "matrix": [2, 4], "label":"Z", "x":4, "y":2 },
+ { "matrix": [2, 5], "label":"X", "x":5, "y":2 },
+ { "matrix": [2, 6], "label":"C", "x":6, "y":2 },
+ { "matrix": [2, 7], "label":"V", "x":7, "y":2 },
+ { "matrix": [2, 8], "label":"Back", "x":8, "y":2 },
+ { "matrix": [2, 9], "label":"Space", "x":9, "y":2 },
+ { "matrix": [2, 10], "label":"B", "x":10, "y":2 },
+ { "matrix": [2, 11], "label":"N", "x":11, "y":2 },
+ { "matrix": [2, 12], "label":"M", "x":12, "y":2 },
+ { "matrix": [2, 13], "label":"Shift", "x":13, "y":2 }
+ ]
+ }
}
}
diff --git a/keyboards/mechwild/bde/keymaps/righty_via/config.h b/keyboards/mechwild/bde/lefty/keymaps/default/config.h
similarity index 98%
rename from keyboards/mechwild/bde/keymaps/righty_via/config.h
rename to keyboards/mechwild/bde/lefty/keymaps/default/config.h
index 80e8e2e015b..5c2d15a0067 100644
--- a/keyboards/mechwild/bde/keymaps/righty_via/config.h
+++ b/keyboards/mechwild/bde/lefty/keymaps/default/config.h
@@ -14,7 +14,7 @@
* along with this program. If not, see .
*/
-
+#pragma once
/* Making it so you need to hold the modifier and other key for the time together, helps not accidentally hit activate the hold functions of bottom row*/
#define IGNORE_MOD_TAP_INTERRUPT
diff --git a/keyboards/mechwild/bde/keymaps/lefty_default/keymap.c b/keyboards/mechwild/bde/lefty/keymaps/default/keymap.c
similarity index 82%
rename from keyboards/mechwild/bde/keymaps/lefty_default/keymap.c
rename to keyboards/mechwild/bde/lefty/keymaps/default/keymap.c
index 3f7b092bc72..804c29824cf 100644
--- a/keyboards/mechwild/bde/keymaps/lefty_default/keymap.c
+++ b/keyboards/mechwild/bde/lefty/keymaps/default/keymap.c
@@ -1,17 +1,17 @@
-/* Copyright 2020 Kyle McCreery
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
+/* Copyright 2020 Kyle McCreery
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
*/
@@ -25,21 +25,21 @@
#define ALT_N ALGR_T(KC_N)
#define CTL_M RCTL_T(KC_M)
#define SFT_ENT RSFT_T(KC_ENT)
-#define WIN_C LGUI_T(KC_C)
+#define WIN_C LGUI_T(KC_C)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_7, KC_8, KC_9, KC_0, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
KC_4, KC_5, KC_6, SFT_ENT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ESC,
- KC_1, KC_2, KC_3, CTL_Z, ALT_X, WIN_C, KC_V, FN2_BSPC, FN1_SPC, FN3_B, ALT_N, CTL_M, SFT_ENT
+ KC_1, KC_2, KC_3, CTL_Z, ALT_X, WIN_C, KC_V, FN2_BSPC, FN1_SPC, FN3_B, ALT_N, CTL_M, SFT_ENT
),
[1] = LAYOUT(
KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, QK_BOOT, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
KC_F4, KC_F5, KC_F6, KC_TAB, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, KC_SLSH, KC_SCLN, KC_QUOT,
- KC_F1, KC_F2, KC_F3, _______, _______, KC_LGUI, _______, KC_DEL, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ KC_F1, KC_F2, KC_F3, _______, _______, KC_LGUI, _______, KC_DEL, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
-
+
[2] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LABK, KC_RABK, KC_QUES, KC_COLN, KC_DQUO,
diff --git a/keyboards/mechwild/bde/lefty/keymaps/default/rules.mk b/keyboards/mechwild/bde/lefty/keymaps/default/rules.mk
new file mode 100644
index 00000000000..a4c9ac387ab
--- /dev/null
+++ b/keyboards/mechwild/bde/lefty/keymaps/default/rules.mk
@@ -0,0 +1,9 @@
+# If you are using a custom Pro Micro-compatible dev board (Elite-C, Sea-Micro, etc)
+# you may need to uncomment and modify this BOOTLOADER setting to use the correct
+# bootloader. (e.g. Elite-Cs use "atmel-dfu", not "caterina".)
+#
+# See the QMK docs for more information:
+# https://docs.qmk.fm/#/flashing
+# https://docs.qmk.fm/#/driver_installation_zadig?id=list-of-known-bootloaders
+
+# BOOTLOADER = caterina
diff --git a/keyboards/mechwild/bde/keymaps/lefty_fancy/config.h b/keyboards/mechwild/bde/lefty/keymaps/fancy/config.h
similarity index 100%
rename from keyboards/mechwild/bde/keymaps/lefty_fancy/config.h
rename to keyboards/mechwild/bde/lefty/keymaps/fancy/config.h
diff --git a/keyboards/mechwild/bde/keymaps/lefty_fancy/keymap.c b/keyboards/mechwild/bde/lefty/keymaps/fancy/keymap.c
similarity index 88%
rename from keyboards/mechwild/bde/keymaps/lefty_fancy/keymap.c
rename to keyboards/mechwild/bde/lefty/keymaps/fancy/keymap.c
index 61c59932cf2..3240dbdfb20 100644
--- a/keyboards/mechwild/bde/keymaps/lefty_fancy/keymap.c
+++ b/keyboards/mechwild/bde/lefty/keymaps/fancy/keymap.c
@@ -1,17 +1,17 @@
-/* Copyright 2020 Kyle McCreery
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
+/* Copyright 2020 Kyle McCreery
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
*/
@@ -26,7 +26,7 @@
#define ALT_N ALGR_T(KC_N)
#define CTL_M RCTL_T(KC_M)
#define SFT_ENT RSFT_T(KC_ENT)
-#define WIN_C LGUI_T(KC_C)
+#define WIN_C LGUI_T(KC_C)
typedef struct {
bool is_press_action;
@@ -55,15 +55,15 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_7, KC_8, KC_9, KC_0, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
KC_4, KC_5, KC_6, TD(left_enter), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ESC,
- KC_1, KC_2, KC_3, CTL_Z, ALT_X, WIN_C, KC_V, FN2_BSPC, FN1_SPC, FN3_B, ALT_N, CTL_M, SFT_ENT
+ KC_1, KC_2, KC_3, CTL_Z, ALT_X, WIN_C, KC_V, FN2_BSPC, FN1_SPC, FN3_B, ALT_N, CTL_M, SFT_ENT
),
[1] = LAYOUT(
KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, QK_BOOT, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
KC_F4, KC_F5, KC_F6, KC_TAB, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, KC_SLSH, KC_SCLN, KC_QUOT,
- KC_F1, KC_F2, KC_F3, _______, _______, KC_LGUI, _______, KC_DEL, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ KC_F1, KC_F2, KC_F3, _______, _______, KC_LGUI, _______, KC_DEL, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
-
+
[2] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LABK, KC_RABK, KC_QUES, KC_COLN, KC_DQUO,
@@ -75,7 +75,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
RGB_M_SN, RGB_M_K, RGB_M_X, RGB_TOG, RGB_HUD, RGB_SAD, RGB_VAD, RGB_RMOD, _______, _______, _______, _______, _______, _______,
RGB_M_B, RGB_M_R, RGB_M_SW, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
-
+
};
@@ -84,9 +84,9 @@ uint8_t cur_dance(qk_tap_dance_state_t *state) {
if (state->interrupted || !state->pressed) return SINGLE_TAP;
// Key has not been interrupted, but the key is still held. Means you want to send a 'HOLD'.
else return SINGLE_HOLD;
- } else return DOUBLE_TAP;
+ } else return DOUBLE_TAP;
//} else if (state->count >= 2) {
- // return DOUBLE_TAP;
+ // return DOUBLE_TAP;
//}else return 8; // Magic number. At some point this method will expand to work for more presses
}
@@ -101,7 +101,7 @@ void left_enter_finished(qk_tap_dance_state_t *state, void *user_data) {
//case SINGLE_TAP: register_code(KC_ENT); break;
case SINGLE_HOLD: register_code(KC_LSFT); break;
case DOUBLE_TAP: register_code(KC_ENT); break;
- }
+ }
}
void left_enter_reset(qk_tap_dance_state_t *state, void *user_data) {
diff --git a/keyboards/mechwild/bde/keymaps/lefty_fancy/rules.mk b/keyboards/mechwild/bde/lefty/keymaps/fancy/rules.mk
similarity index 100%
rename from keyboards/mechwild/bde/keymaps/lefty_fancy/rules.mk
rename to keyboards/mechwild/bde/lefty/keymaps/fancy/rules.mk
diff --git a/keyboards/mechwild/bde/keymaps/lefty_via/config.h b/keyboards/mechwild/bde/lefty/keymaps/via/config.h
similarity index 100%
rename from keyboards/mechwild/bde/keymaps/lefty_via/config.h
rename to keyboards/mechwild/bde/lefty/keymaps/via/config.h
diff --git a/keyboards/mechwild/bde/keymaps/lefty_via/keymap.c b/keyboards/mechwild/bde/lefty/keymaps/via/keymap.c
similarity index 82%
rename from keyboards/mechwild/bde/keymaps/lefty_via/keymap.c
rename to keyboards/mechwild/bde/lefty/keymaps/via/keymap.c
index cf1f8451d00..722062935a4 100644
--- a/keyboards/mechwild/bde/keymaps/lefty_via/keymap.c
+++ b/keyboards/mechwild/bde/lefty/keymaps/via/keymap.c
@@ -1,17 +1,17 @@
-/* Copyright 2020 Kyle McCreery
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
+/* Copyright 2020 Kyle McCreery
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
*/
@@ -25,22 +25,22 @@
#define ALT_N ALGR_T(KC_N)
#define CTL_M RCTL_T(KC_M)
#define SFT_ENT RSFT_T(KC_ENT)
-#define WIN_C LGUI_T(KC_C)
+#define WIN_C LGUI_T(KC_C)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_7, KC_8, KC_9, KC_0, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
KC_4, KC_5, KC_6, SFT_ENT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ESC,
- KC_1, KC_2, KC_3, CTL_Z, ALT_X, WIN_C, KC_V, FN2_BSPC, FN1_SPC, FN3_B, ALT_N, CTL_M, SFT_ENT
+ KC_1, KC_2, KC_3, CTL_Z, ALT_X, WIN_C, KC_V, FN2_BSPC, FN1_SPC, FN3_B, ALT_N, CTL_M, SFT_ENT
),
[1] = LAYOUT(
KC_F7, KC_F8, KC_F9, KC_F10, _______, _______, _______, QK_BOOT, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
KC_F4, KC_F5, KC_F6, KC_TAB, _______, _______, _______, _______, _______, KC_COMM, KC_DOT, KC_SLSH, KC_SCLN, KC_QUOT,
- KC_F1, KC_F2, KC_F3, _______, _______, KC_LGUI, _______, KC_DEL, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ KC_F1, KC_F2, KC_F3, _______, _______, KC_LGUI, _______, KC_DEL, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
),
-
+
[2] = LAYOUT(
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
_______, _______, _______, _______, _______, _______, _______, _______, _______, KC_LABK, KC_RABK, KC_QUES, KC_COLN, KC_DQUO,
diff --git a/keyboards/mechwild/bde/keymaps/lefty_via/rules.mk b/keyboards/mechwild/bde/lefty/keymaps/via/rules.mk
similarity index 100%
rename from keyboards/mechwild/bde/keymaps/lefty_via/rules.mk
rename to keyboards/mechwild/bde/lefty/keymaps/via/rules.mk
diff --git a/keyboards/mechwild/bde/lefty/lefty.h b/keyboards/mechwild/bde/lefty/lefty.h
deleted file mode 100644
index 37b8771db67..00000000000
--- a/keyboards/mechwild/bde/lefty/lefty.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Copyright 2020 Kyle McCreery
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-
-#pragma once
-
-#include "quantum.h"
-
-#define LAYOUT( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D , \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D , \
- K20, K21, K22, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D \
-) { \
- {K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D}, \
- {K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D}, \
- {K20, K21, K22, KC_NO, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D} \
-}
diff --git a/keyboards/mechwild/bde/lefty/rules.mk b/keyboards/mechwild/bde/lefty/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/mechwild/bde/lefty/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/mechwild/bde/readme.md b/keyboards/mechwild/bde/readme.md
index 5481b471600..623903b4e73 100644
--- a/keyboards/mechwild/bde/readme.md
+++ b/keyboards/mechwild/bde/readme.md
@@ -12,4 +12,22 @@ Make example for this keyboard (after setting up your build environment):
make mechwild/bde:default
+Flashing example for this keyboard:
+
+ make mechwild/bde:default:flash
+
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the top left key and plug in the keyboard. This will also clear EEPROM, so it is a good first step if the keyboard is misbehaving.
+* **Physical reset**: Press the 6x6mm button on the underside of the keyboard. On Rev1, it is above the Pro Micro; on Rev2, it is below the OLED.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT`. In the pre-supplied keymaps it is on the second layer, replacing the R key.
+
+As a Pro Micro-compatible board, the BDE defines `caterina` as its bootloader by default. Many popular Pro Micro alternatives like the Elite-C, Bit-C, Sea-Micro, Puchi-C etc should be flashed with a different bootloader such as `atmel-dfu`.
+
+**If the incorrect bootloader is specified, bootmagic reset and the `QK_BOOT` keycode will not work**.
+
+To avoid this problem, set the correct bootloader in your custom keymap's `rules.mk` file before compiling, or flash using an appropriate target (e.g. `make mechwild/bde:default:dfu`). See [flashing instructions and bootloader information](https://docs.qmk.fm/#/flashing) for more details.
diff --git a/keyboards/mechwild/bde/rev2/config.h b/keyboards/mechwild/bde/rev2/config.h
index 7ea5536055f..3d045762ca7 100644
--- a/keyboards/mechwild/bde/rev2/config.h
+++ b/keyboards/mechwild/bde/rev2/config.h
@@ -17,46 +17,11 @@ along with this program. If not, see .
#pragma once
-#include "config_common.h"
-
-/* Key matrix size */
-#define MATRIX_ROWS 6
-#define MATRIX_COLS 7
-
-/* Key matrix pins */
-#define MATRIX_ROW_PINS { C6, D7, B4, D4, E6, B2 }
-#define MATRIX_COL_PINS { B3, B1, F7, F6, F5, F4, B5 }
-
/* Encoder pins */
-#define ENCODERS_PAD_A { D3 }
-#define ENCODERS_PAD_B { D2 }
+#define ENCODERS_PAD_A { D2 }
+#define ENCODERS_PAD_B { D3 }
/* Encoder resolution */
#define ENCODER_RESOLUTION 4
-#define TAP_CODE_DELAY 10
-
-/* COL2ROW, ROW2COL */
-#define DIODE_DIRECTION COL2ROW
#define OLED_FONT_H "keyboards/mechwild/bde/lib/rev2.c"
-
-#define RGB_DI_PIN B6
-#ifdef RGB_DI_PIN
-# define RGBLED_NUM 8
-# define RGBLIGHT_HUE_STEP 8
-# define RGBLIGHT_SAT_STEP 8
-# define RGBLIGHT_VAL_STEP 8
-# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
-# define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
-/*== Chosen enabled animations ==*/
-# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
-#endif
-
-/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
-#define DEBOUNCE 5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/mechwild/bde/rev2/info.json b/keyboards/mechwild/bde/rev2/info.json
index 9c9aa3e2c2f..29ddb0e0176 100644
--- a/keyboards/mechwild/bde/rev2/info.json
+++ b/keyboards/mechwild/bde/rev2/info.json
@@ -3,5 +3,70 @@
"usb": {
"pid": "0x170A",
"device_version": "1.0.1"
+ },
+ "matrix_pins": {
+ "rows":[ "C6", "D7", "B4", "D4", "E6", "B2" ],
+ "cols": ["B3", "B1", "F7", "F6", "F5", "F4", "B5" ]
+ },
+ "diode_direction": "COL2ROW",
+ "rgblight": {
+ "led_count": 8,
+ "pin": "B6",
+ "animations": {
+ "rainbow_swirl": true
+ },
+ "hue_steps": 8,
+ "saturation_steps": 8,
+ "brightness_steps": 8
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "label":"Q", "x":0, "y":0},
+ { "matrix": [0, 1], "label":"W", "x":1, "y":0},
+ { "matrix": [0, 2], "label":"E", "x":2, "y":0},
+ { "matrix": [0, 3], "label":"R", "x":3, "y":0},
+ { "matrix": [0, 4], "label":"T", "x":4, "y":0},
+ { "matrix": [0, 5], "label":"Y", "x":5, "y":0},
+ { "matrix": [0, 6], "label":"U", "x":6, "y":0},
+ { "matrix": [3, 6], "label":"I", "x":7, "y":0},
+ { "matrix": [3, 5], "label":"O", "x":8, "y":0},
+ { "matrix": [3, 4], "label":"P", "x":9, "y":0},
+ { "matrix": [3, 3], "label":"7", "x":10, "y":0},
+ { "matrix": [3, 2], "label":"8", "x":11, "y":0},
+ { "matrix": [3, 1], "label":"9", "x":12, "y":0},
+ { "matrix": [3, 0], "label":"Mute", "x":13, "y":0},
+
+ { "matrix": [1, 0], "label":"A", "x":0, "y":1},
+ { "matrix": [1, 1], "label":"S", "x":1, "y":1},
+ { "matrix": [1, 2], "label":"D", "x":2, "y":1},
+ { "matrix": [1, 3], "label":"F", "x":3, "y":1},
+ { "matrix": [1, 4], "label":"G", "x":4, "y":1},
+ { "matrix": [1, 5], "label":"H", "x":5, "y":1},
+ { "matrix": [1, 6], "label":"J", "x":6, "y":1},
+ { "matrix": [4, 6], "label":"K", "x":7, "y":1},
+ { "matrix": [4, 5], "label":"L", "x":8, "y":1},
+ { "matrix": [4, 4], "label":"Esc", "x":9, "y":1},
+ { "matrix": [4, 3], "label":"4", "x":10, "y":1},
+ { "matrix": [4, 2], "label":"5", "x":11, "y":1},
+ { "matrix": [4, 1], "label":"6", "x":12, "y":1},
+ { "matrix": [4, 0], "label":"0", "x":13, "y":1},
+
+ { "matrix": [2, 0], "label":"Z", "x":0, "y":2},
+ { "matrix": [2, 1], "label":"X", "x":1, "y":2},
+ { "matrix": [2, 2], "label":"C", "x":2, "y":2},
+ { "matrix": [2, 3], "label":"V", "x":3, "y":2},
+ { "matrix": [2, 4], "label":"Back", "x":4, "y":2},
+ { "matrix": [2, 5], "label":"Space", "x":5, "y":2},
+ { "matrix": [2, 6], "label":"B", "x":6, "y":2},
+ { "matrix": [5, 6], "label":"N", "x":7, "y":2},
+ { "matrix": [5, 5], "label":"M", "x":8, "y":2},
+ { "matrix": [5, 4], "label":"Enter", "x":9, "y":2},
+ { "matrix": [5, 3], "label":"1", "x":10, "y":2},
+ { "matrix": [5, 2], "label":"2", "x":11, "y":2},
+ { "matrix": [5, 1], "label":"3", "x":12, "y":2},
+ { "matrix": [5, 0], "label":"EQL", "x":13, "y":2}
+ ]
+ }
}
}
diff --git a/keyboards/mechwild/bde/keymaps/default/keymap.c b/keyboards/mechwild/bde/rev2/keymaps/default/keymap.c
similarity index 74%
rename from keyboards/mechwild/bde/keymaps/default/keymap.c
rename to keyboards/mechwild/bde/rev2/keymaps/default/keymap.c
index 8222af75763..375dc25ae26 100644
--- a/keyboards/mechwild/bde/keymaps/default/keymap.c
+++ b/keyboards/mechwild/bde/rev2/keymaps/default/keymap.c
@@ -1,17 +1,17 @@
-/* Copyright 2022 Kyle McCreery
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
+/* Copyright 2022 Kyle McCreery
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
*/
@@ -25,7 +25,7 @@
#define ALT_N ALGR_T(KC_N)
#define CTL_M RCTL_T(KC_M)
#define SFT_ENT RSFT_T(KC_ENT)
-#define WIN_C LGUI_T(KC_C)
+#define WIN_C LGUI_T(KC_C)
enum layer_names {
_BASE,
@@ -36,24 +36,34 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT(
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_P7, KC_P8, KC_P9, KC_MUTE,
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_P7, KC_P8, KC_P9, KC_MUTE,
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ESC, KC_P4, KC_P5, KC_P6, KC_P0,
CTL_Z, ALT_X, WIN_C, KC_V, FN1_BSPC, FN2_SPC, FN3_B, ALT_N, CTL_M, SFT_ENT, KC_P1, KC_P2, KC_P3, KC_MINS
- ),
- [_FN1] = LAYOUT(
- _______, _______, _______, QK_BOOT, _______, _______, KC_PSCR, KC_LBRC, KC_RBRC, KC_BSLS, KC_7, KC_8, KC_9, KC_NLCK,
- _______, _______, _______, _______, _______, _______, _______, KC_GRV, KC_SCLN, KC_QUOT, KC_4, KC_5, KC_6, KC_0,
+ ),
+ [_FN1] = LAYOUT(
+ _______, _______, _______, QK_BOOT, _______, _______, KC_PSCR, KC_LBRC, KC_RBRC, KC_BSLS, KC_7, KC_8, KC_9, KC_NLCK,
+ _______, _______, _______, _______, _______, _______, _______, KC_GRV, KC_SCLN, KC_QUOT, KC_4, KC_5, KC_6, KC_0,
_______, _______, _______, _______, _______, KC_TAB, KC_LGUI, KC_COMM, KC_DOT, KC_SLSH, KC_1, KC_2, KC_3, KC_EQL
),
[_FN2] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR, KC_PIPE, KC_AMPR, KC_ASTR, KC_LPRN, KC_CLCK,
- _______, _______, _______, _______, _______, _______, _______, KC_TILD, KC_COLN, KC_DQUO, KC_DLR, KC_PERC, KC_CIRC, KC_RPRN,
+ _______, _______, _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR, KC_PIPE, KC_AMPR, KC_ASTR, KC_LPRN, KC_CLCK,
+ _______, _______, _______, _______, _______, _______, _______, KC_TILD, KC_COLN, KC_DQUO, KC_DLR, KC_PERC, KC_CIRC, KC_RPRN,
_______, _______, _______, _______, KC_DEL, _______, _______, KC_LABK, KC_RABK, KC_QUES, KC_EXLM, KC_AT, KC_HASH, KC_PLUS
- ),
- [_FN3] = LAYOUT(
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ ),
+ [_FN3] = LAYOUT(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
)
};
+
+// If you are not using an encoder, remember to set ENCODER_ENABLE and ENCODER_MAP_ENABLE to no in rules.mk.
+#ifdef ENCODER_MAP_ENABLE
+ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_FN1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ [_FN2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ [_FN3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ };
+#endif
diff --git a/keyboards/mechwild/bde/rev2/keymaps/default/rules.mk b/keyboards/mechwild/bde/rev2/keymaps/default/rules.mk
new file mode 100644
index 00000000000..d976f24919a
--- /dev/null
+++ b/keyboards/mechwild/bde/rev2/keymaps/default/rules.mk
@@ -0,0 +1,13 @@
+# If you are using a custom Pro Micro-compatible dev board (Elite-C, Sea-Micro, etc)
+# you may need to uncomment and modify this BOOTLOADER setting to use the correct
+# bootloader. (e.g. Elite-Cs use "atmel-dfu", not "caterina".)
+#
+# See the QMK docs for more information:
+# https://docs.qmk.fm/#/flashing
+# https://docs.qmk.fm/#/driver_installation_zadig?id=list-of-known-bootloaders
+
+# BOOTLOADER = caterina
+
+# If you are not using an encoder, set these options to no.
+ENCODER_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/mechwild/bde/keymaps/via/config.h b/keyboards/mechwild/bde/rev2/keymaps/via/config.h
similarity index 100%
rename from keyboards/mechwild/bde/keymaps/via/config.h
rename to keyboards/mechwild/bde/rev2/keymaps/via/config.h
diff --git a/keyboards/mechwild/bde/keymaps/via/keymap.c b/keyboards/mechwild/bde/rev2/keymaps/via/keymap.c
similarity index 76%
rename from keyboards/mechwild/bde/keymaps/via/keymap.c
rename to keyboards/mechwild/bde/rev2/keymaps/via/keymap.c
index e28c1b6db87..8ce001cff8e 100644
--- a/keyboards/mechwild/bde/keymaps/via/keymap.c
+++ b/keyboards/mechwild/bde/rev2/keymaps/via/keymap.c
@@ -1,17 +1,17 @@
-/* Copyright 2022 Kyle McCreery
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
+/* Copyright 2022 Kyle McCreery
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
*/
@@ -25,7 +25,7 @@
#define ALT_N ALGR_T(KC_N)
#define CTL_M RCTL_T(KC_M)
#define SFT_ENT RSFT_T(KC_ENT)
-#define WIN_C LGUI_T(KC_C)
+#define WIN_C LGUI_T(KC_C)
enum layer_names {
_BASE,
@@ -36,24 +36,33 @@ enum layer_names {
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_BASE] = LAYOUT(
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_P7, KC_P8, KC_P9, KC_MUTE,
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_P7, KC_P8, KC_P9, KC_MUTE,
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ESC, KC_P4, KC_P5, KC_P6, KC_P0,
CTL_Z, ALT_X, WIN_C, KC_V, FN1_BSPC, FN2_SPC, FN3_B, ALT_N, CTL_M, SFT_ENT, KC_P1, KC_P2, KC_P3, KC_MINS
- ),
- [_FN1] = LAYOUT(
- _______, _______, _______, QK_BOOT, _______, _______, KC_PSCR, KC_LBRC, KC_RBRC, KC_BSLS, KC_7, KC_8, KC_9, KC_NLCK,
- _______, _______, _______, _______, _______, _______, _______, KC_GRV, KC_SCLN, KC_QUOT, KC_4, KC_5, KC_6, KC_0,
+ ),
+ [_FN1] = LAYOUT(
+ _______, _______, _______, QK_BOOT, _______, _______, KC_PSCR, KC_LBRC, KC_RBRC, KC_BSLS, KC_7, KC_8, KC_9, KC_NLCK,
+ _______, _______, _______, _______, _______, _______, _______, KC_GRV, KC_SCLN, KC_QUOT, KC_4, KC_5, KC_6, KC_0,
_______, _______, _______, _______, _______, KC_TAB, KC_LGUI, KC_COMM, KC_DOT, KC_SLSH, KC_1, KC_2, KC_3, KC_EQL
),
[_FN2] = LAYOUT(
- _______, _______, _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR, KC_PIPE, KC_AMPR, KC_ASTR, KC_LPRN, KC_CLCK,
- _______, _______, _______, _______, _______, _______, _______, KC_TILD, KC_COLN, KC_DQUO, KC_DLR, KC_PERC, KC_CIRC, KC_RPRN,
+ _______, _______, _______, _______, _______, _______, _______, KC_LCBR, KC_RCBR, KC_PIPE, KC_AMPR, KC_ASTR, KC_LPRN, KC_CLCK,
+ _______, _______, _______, _______, _______, _______, _______, KC_TILD, KC_COLN, KC_DQUO, KC_DLR, KC_PERC, KC_CIRC, KC_RPRN,
_______, _______, _______, _______, KC_DEL, _______, _______, KC_LABK, KC_RABK, KC_QUES, KC_EXLM, KC_AT, KC_HASH, KC_PLUS
- ),
- [_FN3] = LAYOUT(
- KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RGB_TOG,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD,
+ ),
+ [_FN3] = LAYOUT(
+ KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, RGB_TOG,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUI, RGB_SAI, RGB_VAI, RGB_MOD,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, RGB_HUD, RGB_SAD, RGB_VAD, RGB_RMOD
)
};
+
+#ifdef ENCODER_MAP_ENABLE
+ const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
+ [_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [_FN1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ [_FN2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ [_FN3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ };
+#endif
diff --git a/keyboards/mechwild/bde/rev2/keymaps/via/rules.mk b/keyboards/mechwild/bde/rev2/keymaps/via/rules.mk
new file mode 100644
index 00000000000..9ff50262fbb
--- /dev/null
+++ b/keyboards/mechwild/bde/rev2/keymaps/via/rules.mk
@@ -0,0 +1,3 @@
+VIA_ENABLE = yes
+ENCODER_ENABLE = yes
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/mechwild/bde/rev2/rev2.c b/keyboards/mechwild/bde/rev2/rev2.c
index 88c06988d9f..3dae312e2bf 100644
--- a/keyboards/mechwild/bde/rev2/rev2.c
+++ b/keyboards/mechwild/bde/rev2/rev2.c
@@ -1,21 +1,20 @@
-/* Copyright 2022 Kyle McCreery
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
+/* Copyright 2022 Kyle McCreery
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
*/
-
-#include "bde.h"
+#include "rev2.h"
#ifdef ENCODER_ENABLE
bool encoder_update_kb(uint8_t index, bool clockwise) {
@@ -34,30 +33,25 @@ bool encoder_update_kb(uint8_t index, bool clockwise) {
#endif
#ifdef OLED_ENABLE
- oled_rotation_t oled_init_user(oled_rotation_t rotation) {
- return OLED_ROTATION_270; // flips the display 270 degrees
- }
+static const char PROGMEM mw_logo[] = {
+ 0x8A, 0x8B, 0x8C, 0x8D, '\r',
+ 0xAA, 0xAB, 0xAC, 0xAD, 0xAE,
+ 0xCA, 0xCB, 0xCC, 0xCD, '\r',
+ 0x20, 0x8E, 0x8F, 0x90, 0x00};
- static void render_logo(void) { // Render MechWild "MW" Logo
- static const char PROGMEM logo_1[] = {0x8A, 0x8B, 0x8C, 0x8D, 0x00};
- static const char PROGMEM logo_2[] = {0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0x00};
- static const char PROGMEM logo_3[] = {0xCA, 0xCB, 0xCC, 0xCD, 0x00};
- static const char PROGMEM logo_4[] = {0x20, 0x8E, 0x8F, 0x90, 0x00};
- oled_set_cursor(0,0);
- oled_write_P(logo_1, false);
- oled_set_cursor(0,1);
- oled_write_P(logo_2, false);
- oled_set_cursor(0,2);
- oled_write_P(logo_3, false);
- oled_set_cursor(0,3);
- oled_write_P(logo_4, false);
- }
+oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
+ return OLED_ROTATION_270; // flips the display 270 degrees
+}
- bool oled_task_user(void) {
- render_logo();
- oled_set_cursor(0,6);
+bool oled_task_kb(void) {
+ if (!oled_task_user()) {
+ return false;
+ }
- oled_write_ln_P(PSTR("Layer"), false);
+ oled_write_P(mw_logo, false); // Render MechWild "MW" Logo
+ oled_set_cursor(0,6);
+
+ oled_write_ln_P(PSTR("Layer"), false);
switch (get_highest_layer(layer_state)) {
case 0:
@@ -75,14 +69,13 @@ bool encoder_update_kb(uint8_t index, bool clockwise) {
default:
oled_write_ln_P(PSTR("Undef"), false);
}
- oled_write_ln_P(PSTR(""), false);
+ oled_write_ln_P(PSTR(""), false);
// Host Keyboard LED Status
led_t led_state = host_keyboard_led_state();
oled_write_ln_P(led_state.num_lock ? PSTR("NUM ") : PSTR(" "), false);
oled_write_ln_P(led_state.caps_lock ? PSTR("CAP ") : PSTR(" "), false);
oled_write_ln_P(led_state.scroll_lock ? PSTR("SCR ") : PSTR(" "), false);
-
- return false;
-
- }
+
+ return true;
+}
#endif
diff --git a/keyboards/mechwild/bde/rev2/rev2.h b/keyboards/mechwild/bde/rev2/rev2.h
index 8c8191710a7..bb37c7ef698 100644
--- a/keyboards/mechwild/bde/rev2/rev2.h
+++ b/keyboards/mechwild/bde/rev2/rev2.h
@@ -16,16 +16,3 @@
#pragma once
#include "quantum.h"
-
-#define LAYOUT( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D,\
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D,\
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D \
-) { \
- { K00, K01, K02, K03, K04, K05, K06 }, \
- { K10, K11, K12, K13, K14, K15, K16 }, \
- { K20, K21, K22, K23, K24, K25, K26 }, \
- { K0D, K0C, K0B, K0A, K09, K08, K07 }, \
- { K1D, K1C, K1B, K1A, K19, K18, K17 }, \
- { K2D, K2C, K2B, K2A, K29, K28, K27 } \
-}
diff --git a/keyboards/mechwild/bde/righty/info.json b/keyboards/mechwild/bde/righty/info.json
index 93161bfcecf..af23e6e293c 100644
--- a/keyboards/mechwild/bde/righty/info.json
+++ b/keyboards/mechwild/bde/righty/info.json
@@ -3,5 +3,75 @@
"usb": {
"pid": "0x1702",
"device_version": "2.0.3"
+ },
+ "matrix_pins": {
+ "rows": ["D1", "D7", "D3"],
+ "cols": [ "B4", "B5", "E6", "C6", "D4", "D0", "F4", "F5", "F6", "B3", "B2", "B6", "B1", "F7"]
+ },
+ "diode_direction": "ROW2COL",
+ "rgblight": {
+ "led_count": 16,
+ "pin": "D2",
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ }
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "matrix": [0, 0], "label":"Q", "x":0, "y":0 },
+ { "matrix": [0, 1], "label":"W", "x":1, "y":0 },
+ { "matrix": [0, 2], "label":"E", "x":2, "y":0 },
+ { "matrix": [0, 3], "label":"R", "x":3, "y":0 },
+ { "matrix": [0, 4], "label":"T", "x":4, "y":0 },
+ { "matrix": [0, 5], "label":"Y", "x":5, "y":0 },
+ { "matrix": [0, 6], "label":"U", "x":6, "y":0 },
+ { "matrix": [0, 7], "label":"I", "x":7, "y":0 },
+ { "matrix": [0, 8], "label":"O", "x":8, "y":0 },
+ { "matrix": [0, 9], "label":"P", "x":9, "y":0 },
+ { "matrix": [0, 10], "label":"0", "x":10, "y":0 },
+ { "matrix": [0, 11], "label":"7", "x":11, "y":0 },
+ { "matrix": [0, 12], "label":"8", "x":12, "y":0 },
+ { "matrix": [0, 13], "label":"9", "x":13, "y":0 },
+
+ { "matrix": [1, 0], "label":"A", "x":0, "y":1 },
+ { "matrix": [1, 1], "label":"S", "x":1, "y":1 },
+ { "matrix": [1, 2], "label":"D", "x":2, "y":1 },
+ { "matrix": [1, 3], "label":"F", "x":3, "y":1 },
+ { "matrix": [1, 4], "label":"G", "x":4, "y":1 },
+ { "matrix": [1, 5], "label":"H", "x":5, "y":1 },
+ { "matrix": [1, 6], "label":"J", "x":6, "y":1 },
+ { "matrix": [1, 7], "label":"K", "x":7, "y":1 },
+ { "matrix": [1, 8], "label":"L", "x":8, "y":1 },
+ { "matrix": [1, 9], "label":"Esc", "x":9, "y":1 },
+ { "matrix": [1, 10], "label":"Enter", "x":10, "y":1 , "h":2 },
+ { "matrix": [1, 11], "label":"4", "x":11, "y":1 },
+ { "matrix": [1, 12], "label":"5", "x":12, "y":1 },
+ { "matrix": [1, 13], "label":"6", "x":13, "y":1 },
+
+ { "matrix": [2, 0], "label":"Z", "x":0, "y":2 },
+ { "matrix": [2, 1], "label":"X", "x":1, "y":2 },
+ { "matrix": [2, 2], "label":"C", "x":2, "y":2 },
+ { "matrix": [2, 3], "label":"V", "x":3, "y":2 },
+ { "matrix": [2, 4], "label":"Back", "x":4, "y":2 },
+ { "matrix": [2, 5], "label":"Space", "x":5, "y":2 },
+ { "matrix": [2, 6], "label":"B", "x":6, "y":2 },
+ { "matrix": [2, 7], "label":"N", "x":7, "y":2 },
+ { "matrix": [2, 8], "label":"M", "x":8, "y":2 },
+ { "matrix": [2, 9], "label":"Esc", "x":9, "y":2 },
+ { "matrix": [2, 11], "label":"1", "x":11, "y":2 },
+ { "matrix": [2, 12], "label":"2", "x":12, "y":2 },
+ { "matrix": [2, 13], "label":"3", "x":13, "y":2 }
+ ]
+ }
}
}
diff --git a/keyboards/mechwild/bde/keymaps/lefty_default/config.h b/keyboards/mechwild/bde/righty/keymaps/default/config.h
similarity index 98%
rename from keyboards/mechwild/bde/keymaps/lefty_default/config.h
rename to keyboards/mechwild/bde/righty/keymaps/default/config.h
index 80e8e2e015b..5c2d15a0067 100644
--- a/keyboards/mechwild/bde/keymaps/lefty_default/config.h
+++ b/keyboards/mechwild/bde/righty/keymaps/default/config.h
@@ -14,7 +14,7 @@
* along with this program. If not, see .
*/
-
+#pragma once
/* Making it so you need to hold the modifier and other key for the time together, helps not accidentally hit activate the hold functions of bottom row*/
#define IGNORE_MOD_TAP_INTERRUPT
diff --git a/keyboards/mechwild/bde/keymaps/righty_default/keymap.c b/keyboards/mechwild/bde/righty/keymaps/default/keymap.c
similarity index 84%
rename from keyboards/mechwild/bde/keymaps/righty_default/keymap.c
rename to keyboards/mechwild/bde/righty/keymaps/default/keymap.c
index c832b836174..dea0054d951 100644
--- a/keyboards/mechwild/bde/keymaps/righty_default/keymap.c
+++ b/keyboards/mechwild/bde/righty/keymaps/default/keymap.c
@@ -1,17 +1,17 @@
-/* Copyright 2020 Kyle McCreery
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
+/* Copyright 2020 Kyle McCreery
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
*/
@@ -24,22 +24,22 @@
#define ALT_X ALT_T(KC_X)
#define ALT_N ALGR_T(KC_N)
#define CTL_M RCTL_T(KC_M)
-#define WIN_C LGUI_T(KC_C)
+#define WIN_C LGUI_T(KC_C)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
- KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_0, KC_7, KC_8, KC_9,
- KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ESC, KC_ENT, KC_4, KC_5, KC_6,
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_0, KC_7, KC_8, KC_9,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_ESC, KC_ENT, KC_4, KC_5, KC_6,
CTL_Z, ALT_X, WIN_C, KC_V, FN2_BSPC, FN1_SPC, FN3_B, ALT_N, CTL_M, KC_RSFT, KC_1, KC_2, KC_3
),
[1] = LAYOUT(
_______, _______, _______, QK_BOOT, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_F10, KC_F7, KC_F8, KC_F9,
_______, _______, _______, _______, _______, KC_COMM, KC_DOT, KC_SLSH, KC_SCLN, KC_QUOT, KC_TAB, KC_F4, KC_F5, KC_F6,
- _______, _______, KC_LGUI, _______, KC_DEL, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_F1, KC_F2, KC_F3
+ _______, _______, KC_LGUI, _______, KC_DEL, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_F1, KC_F2, KC_F3
),
-
+
[2] = LAYOUT(
_______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, _______, _______, _______, _______,
_______, _______, _______, _______, _______, KC_LABK, KC_RABK, KC_QUES, KC_COLN, KC_DQUO, _______, _______, _______, _______,
diff --git a/keyboards/mechwild/bde/righty/keymaps/default/rules.mk b/keyboards/mechwild/bde/righty/keymaps/default/rules.mk
new file mode 100644
index 00000000000..a4c9ac387ab
--- /dev/null
+++ b/keyboards/mechwild/bde/righty/keymaps/default/rules.mk
@@ -0,0 +1,9 @@
+# If you are using a custom Pro Micro-compatible dev board (Elite-C, Sea-Micro, etc)
+# you may need to uncomment and modify this BOOTLOADER setting to use the correct
+# bootloader. (e.g. Elite-Cs use "atmel-dfu", not "caterina".)
+#
+# See the QMK docs for more information:
+# https://docs.qmk.fm/#/flashing
+# https://docs.qmk.fm/#/driver_installation_zadig?id=list-of-known-bootloaders
+
+# BOOTLOADER = caterina
diff --git a/keyboards/mechwild/bde/keymaps/righty_default/config.h b/keyboards/mechwild/bde/righty/keymaps/via/config.h
similarity index 98%
rename from keyboards/mechwild/bde/keymaps/righty_default/config.h
rename to keyboards/mechwild/bde/righty/keymaps/via/config.h
index 80e8e2e015b..5c2d15a0067 100644
--- a/keyboards/mechwild/bde/keymaps/righty_default/config.h
+++ b/keyboards/mechwild/bde/righty/keymaps/via/config.h
@@ -14,7 +14,7 @@
* along with this program. If not, see .
*/
-
+#pragma once
/* Making it so you need to hold the modifier and other key for the time together, helps not accidentally hit activate the hold functions of bottom row*/
#define IGNORE_MOD_TAP_INTERRUPT
diff --git a/keyboards/mechwild/bde/keymaps/righty_via/keymap.c b/keyboards/mechwild/bde/righty/keymaps/via/keymap.c
similarity index 96%
rename from keyboards/mechwild/bde/keymaps/righty_via/keymap.c
rename to keyboards/mechwild/bde/righty/keymaps/via/keymap.c
index c832b836174..b8238b152f0 100644
--- a/keyboards/mechwild/bde/keymaps/righty_via/keymap.c
+++ b/keyboards/mechwild/bde/righty/keymaps/via/keymap.c
@@ -24,7 +24,7 @@
#define ALT_X ALT_T(KC_X)
#define ALT_N ALGR_T(KC_N)
#define CTL_M RCTL_T(KC_M)
-#define WIN_C LGUI_T(KC_C)
+#define WIN_C LGUI_T(KC_C)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
@@ -37,9 +37,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[1] = LAYOUT(
_______, _______, _______, QK_BOOT, _______, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS, KC_F10, KC_F7, KC_F8, KC_F9,
_______, _______, _______, _______, _______, KC_COMM, KC_DOT, KC_SLSH, KC_SCLN, KC_QUOT, KC_TAB, KC_F4, KC_F5, KC_F6,
- _______, _______, KC_LGUI, _______, KC_DEL, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_F1, KC_F2, KC_F3
+ _______, _______, KC_LGUI, _______, KC_DEL, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_F1, KC_F2, KC_F3
),
-
+
[2] = LAYOUT(
_______, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE, _______, _______, _______, _______,
_______, _______, _______, _______, _______, KC_LABK, KC_RABK, KC_QUES, KC_COLN, KC_DQUO, _______, _______, _______, _______,
diff --git a/keyboards/mechwild/bde/keymaps/righty_via/rules.mk b/keyboards/mechwild/bde/righty/keymaps/via/rules.mk
similarity index 100%
rename from keyboards/mechwild/bde/keymaps/righty_via/rules.mk
rename to keyboards/mechwild/bde/righty/keymaps/via/rules.mk
diff --git a/keyboards/mechwild/bde/righty/righty.h b/keyboards/mechwild/bde/righty/righty.h
deleted file mode 100644
index f1f29554a15..00000000000
--- a/keyboards/mechwild/bde/righty/righty.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Copyright 2020 Kyle McCreery
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-
-#pragma once
-
-#include "quantum.h"
-
-#define LAYOUT( \
- K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D , \
- K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D , \
- K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2B, K2C, K2D \
-) { \
- {K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D}, \
- {K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D}, \
- {K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, KC_NO, K2B, K2C, K2D} \
-}
diff --git a/keyboards/mechwild/bde/righty/rules.mk b/keyboards/mechwild/bde/righty/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/mechwild/bde/righty/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/mechwild/bde/rules.mk b/keyboards/mechwild/bde/rules.mk
index 2ae725a20b3..138a2919162 100644
--- a/keyboards/mechwild/bde/rules.mk
+++ b/keyboards/mechwild/bde/rules.mk
@@ -1,20 +1 @@
-# MCU name
-MCU = atmega32u4
-
-# Bootloader selection
-BOOTLOADER = caterina
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
DEFAULT_FOLDER = mechwild/bde/rev2
diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff/keymap.c b/keyboards/mechwild/mercutio/keymaps/fearless_spiff/keymap.c
index 50b1b6471c7..9dbd4d3f19f 100644
--- a/keyboards/mechwild/mercutio/keymaps/fearless_spiff/keymap.c
+++ b/keyboards/mechwild/mercutio/keymaps/fearless_spiff/keymap.c
@@ -83,7 +83,7 @@ static const encoder_key PROGMEM encoder_keys[] = {
{"Play", "", "", KC_MEDIA_PLAY_PAUSE}
};
-#define NUMBER_OF_ENCODER_KEYS sizeof(encoder_keys)/sizeof(encoder_keys[0])
+#define NUMBER_OF_ENCODER_KEYS ARRAY_SIZE(encoder_keys)
static uint8_t selected_encoder_key_id = 0;
static encoder_key selected_encoder_key;
diff --git a/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/keymap.c b/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/keymap.c
index 267d3add14d..9b28c686728 100644
--- a/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/keymap.c
+++ b/keyboards/mechwild/mercutio/keymaps/fearless_spiff_en/keymap.c
@@ -82,7 +82,7 @@ static const encoder_key PROGMEM encoder_keys[] = {
{"Play", "", "", KC_MEDIA_PLAY_PAUSE}
};
-#define NUMBER_OF_ENCODER_KEYS sizeof(encoder_keys)/sizeof(encoder_keys[0])
+#define NUMBER_OF_ENCODER_KEYS ARRAY_SIZE(encoder_keys)
static uint8_t selected_encoder_key_id = 0;
static encoder_key selected_encoder_key;
diff --git a/keyboards/mechwild/mercutio/keymaps/jonavin/keymap.c b/keyboards/mechwild/mercutio/keymaps/jonavin/keymap.c
index 5c22abee3fb..a8f1d488d4f 100755
--- a/keyboards/mechwild/mercutio/keymaps/jonavin/keymap.c
+++ b/keyboards/mechwild/mercutio/keymaps/jonavin/keymap.c
@@ -71,7 +71,7 @@ static const keycodedescType PROGMEM keyselection[] = {
{"FLASH", QK_BOOT}, // firmware flash mode
};
-#define MAX_KEYSELECTION sizeof(keyselection)/sizeof(keyselection[0])
+#define MAX_KEYSELECTION ARRAY_SIZE(keyselection)
static uint8_t selectedkey_idx = 0;
static keycodedescType selectedkey_rec;
diff --git a/keyboards/mechwild/murphpad/keymaps/jonavin/keymap.c b/keyboards/mechwild/murphpad/keymaps/jonavin/keymap.c
index b0288c5d7a5..58db97d093b 100644
--- a/keyboards/mechwild/murphpad/keymaps/jonavin/keymap.c
+++ b/keyboards/mechwild/murphpad/keymaps/jonavin/keymap.c
@@ -178,7 +178,7 @@ static const keycodedescType PROGMEM keyselection[] = {
{"QK_BOOT", QK_BOOT}, // firmware flash mode
};
-#define MAX_KEYSELECTION sizeof(keyselection)/sizeof(keyselection[0])
+#define MAX_KEYSELECTION ARRAY_SIZE(keyselection)
static uint8_t selectedkey_idx = 0;
static keycodedescType selectedkey_rec;
diff --git a/keyboards/mechwild/puckbuddy/puckbuddy.c b/keyboards/mechwild/puckbuddy/puckbuddy.c
index b82d06f5651..495cb7e825d 100644
--- a/keyboards/mechwild/puckbuddy/puckbuddy.c
+++ b/keyboards/mechwild/puckbuddy/puckbuddy.c
@@ -16,7 +16,7 @@
keyboard_config_t keyboard_config;
uint16_t dpi_array[] = GLIDEPOINT_DPI_OPTIONS;
-#define DPI_OPTION_SIZE (sizeof(dpi_array) / sizeof(uint16_t))
+#define DPI_OPTION_SIZE ARRAY_SIZE(dpi_array)
void board_init(void) {
// B9 is configured as I2C1_SDA in the board file; that function must be
diff --git a/keyboards/mitosis/keymaps/datagrok/keymap.c b/keyboards/mitosis/keymaps/datagrok/keymap.c
index 7c77eb882f6..848af3de008 100644
--- a/keyboards/mitosis/keymaps/datagrok/keymap.c
+++ b/keyboards/mitosis/keymaps/datagrok/keymap.c
@@ -97,7 +97,7 @@ const bool defaultlayers[] = {
[_xN] = false,
[_xF] = false,
};
-const size_t defaultlayers_n = sizeof(defaultlayers) / sizeof(defaultlayers[0]);
+const size_t defaultlayers_n = ARRAY_SIZE(defaultlayers);
// New keycode KC_LAYO rotates between available default layers (for e.g.,
// selecting a base layout). Shift+KC_LAYO makes the current one persistent.
diff --git a/keyboards/mnk1800s/config.h b/keyboards/mnk1800s/config.h
index 49cae28b579..e0f17b50a0a 100755
--- a/keyboards/mnk1800s/config.h
+++ b/keyboards/mnk1800s/config.h
@@ -32,7 +32,7 @@ along with this program. If not, see .
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
-/* Ensure we jump to bootloader if the RESET keycode was pressed */
+/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
/* define if matrix has ghost (lacks anti-ghosting diodes) */
diff --git a/keyboards/mnk50/config.h b/keyboards/mnk50/config.h
index 5458dc44a8c..ef36c3422ee 100755
--- a/keyboards/mnk50/config.h
+++ b/keyboards/mnk50/config.h
@@ -32,7 +32,7 @@ along with this program. If not, see .
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
-/* Ensure we jump to bootloader if the RESET keycode was pressed */
+/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
/* define if matrix has ghost (lacks anti-ghosting diodes) */
diff --git a/keyboards/mnk75/config.h b/keyboards/mnk75/config.h
index 1e64e8074e2..67d5f857c53 100755
--- a/keyboards/mnk75/config.h
+++ b/keyboards/mnk75/config.h
@@ -32,7 +32,7 @@ along with this program. If not, see .
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
-/* Ensure we jump to bootloader if the RESET keycode was pressed */
+/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
/* define if matrix has ghost (lacks anti-ghosting diodes) */
diff --git a/keyboards/moonlander/keymaps/jjerrell/config.h b/keyboards/moonlander/keymaps/jjerrell/config.h
index 1fd17fbbe33..aa4bf3885e2 100644
--- a/keyboards/moonlander/keymaps/jjerrell/config.h
+++ b/keyboards/moonlander/keymaps/jjerrell/config.h
@@ -22,6 +22,6 @@
#define ORYX_CONFIGURATOR
#undef PRODUCT
-#define PRODUCT Moonlander Mark I - Modified by <@jjerrell>
+#define PRODUCT "Moonlander Mark I - Modified by <@jjerrell>"
#define IGNORE_MOD_TAP_INTERRUPT
diff --git a/keyboards/moonlander/matrix.c b/keyboards/moonlander/matrix.c
index b6bac9515e3..36017fcd122 100644
--- a/keyboards/moonlander/matrix.c
+++ b/keyboards/moonlander/matrix.c
@@ -227,3 +227,7 @@ void matrix_power_up(void) {
}
}
+
+bool is_transport_connected(void) {
+ return mcp23018_initd;
+}
\ No newline at end of file
diff --git a/keyboards/moonlander/moonlander.c b/keyboards/moonlander/moonlander.c
index e2e163f116a..927c88925ee 100644
--- a/keyboards/moonlander/moonlander.c
+++ b/keyboards/moonlander/moonlander.c
@@ -320,7 +320,7 @@ bool music_mask_kb(uint16_t keycode) {
case QK_LAYER_TAP_TOGGLE ... QK_LAYER_MOD_MAX:
case QK_MOD_TAP ... QK_MOD_TAP_MAX:
case AU_ON ... MUV_DE:
- case RESET:
+ case QK_BOOT:
case EEP_RST:
return false;
default:
diff --git a/keyboards/moonlander/moonlander.h b/keyboards/moonlander/moonlander.h
index 8598260211a..90ce84b3e34 100644
--- a/keyboards/moonlander/moonlander.h
+++ b/keyboards/moonlander/moonlander.h
@@ -82,3 +82,5 @@ typedef union {
} keyboard_config_t;
extern keyboard_config_t keyboard_config;
+
+bool is_transport_connected(void);
\ No newline at end of file
diff --git a/keyboards/moonlander/readme.md b/keyboards/moonlander/readme.md
index bf80f05569f..733780abde2 100644
--- a/keyboards/moonlander/readme.md
+++ b/keyboards/moonlander/readme.md
@@ -41,4 +41,18 @@ If you're using the Smart LED (layer indication) feature from the Oryx Configura
This changes the `RGB_TOG` keycode so that it will toggle the lights on and off, in a way that will allow the Smart LEDs to continue to work, even with the rest of the LEDs turned off.
-Additionally, a new keycode has been added to toggle the Smart LEDs. Use `TOGGLE_LAYER_COLOR`, if you aren't already.
+Additionally, a new keycode has been added to toggle the Smart LEDs. Use `TOGGLE_LAYER_COLOR`, if you aren't already.
+
+### Detecting split / Gaming mode
+
+To make it extra gaming friendly, you can configure what happens when you disconnect the right half. This is especially useful when using gaming unfriendly layers or layouts (e.g. home row mods, dvorak, colemak).
+
+Example for enabling a specific layer while right side is disconnected:
+
+```
+void housekeeping_task_user(void) {
+ if (!is_transport_connected()) {
+ // set layer
+ }
+}
+```
\ No newline at end of file
diff --git a/keyboards/mwstudio/mw65_rgb/keymaps/horrortroll/keymap_stuff.h b/keyboards/mwstudio/mw65_rgb/keymaps/horrortroll/keymap_stuff.h
index c8b80153630..eea031698a0 100644
--- a/keyboards/mwstudio/mw65_rgb/keymaps/horrortroll/keymap_stuff.h
+++ b/keyboards/mwstudio/mw65_rgb/keymaps/horrortroll/keymap_stuff.h
@@ -116,7 +116,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
{{205, 250, 255}, {140, 215, 125}, false },
};
- uint8_t gp_length = sizeof(gradient_presets)/sizeof(gradient_presets[0]);
+ uint8_t gp_length = ARRAY_SIZE(gradient_presets);
switch (keycode) {
case G1_HUI:
diff --git a/keyboards/mxss/keymaps/default/keymap.c b/keyboards/mxss/keymaps/default/keymap.c
index 519547f15ab..3b7150f7fab 100644
--- a/keyboards/mxss/keymaps/default/keymap.c
+++ b/keyboards/mxss/keymaps/default/keymap.c
@@ -27,7 +27,7 @@ hs_set layer_colors[4] = {
[2] = {.hue = 36, .sat = 255}, // Color for Layer 2
[3] = {.hue = 185, .sat = 255}, // Color for Layer 3
};
-size_t lc_size = sizeof(layer_colors) / sizeof(uint16_t);
+size_t lc_size = ARRAY_SIZE(layer_colors);
// Use NEW_SAFE_RANGE to define new custom keycodes in order to not overwrite the ones used for front LED control
enum custom_keycodes {
diff --git a/keyboards/mxss/mxss_frontled.c b/keyboards/mxss/mxss_frontled.c
index 8bb93d5fd8e..2ab9a27beab 100644
--- a/keyboards/mxss/mxss_frontled.c
+++ b/keyboards/mxss/mxss_frontled.c
@@ -36,7 +36,7 @@ __attribute__ ((weak))
hs_set caps_color;
__attribute__ ((weak))
-size_t lc_size = sizeof(layer_colors) / sizeof(hs_set);
+size_t lc_size = ARRAY_SIZE(layer_colors);
void fled_init(void) {
// This checks both an EEPROM reset (from bootmagic lite, keycodes)
diff --git a/keyboards/mxss/templates/keymap.c b/keyboards/mxss/templates/keymap.c
index a18cff77f0c..48cab22852f 100644
--- a/keyboards/mxss/templates/keymap.c
+++ b/keyboards/mxss/templates/keymap.c
@@ -27,7 +27,7 @@ hs_set layer_colors[4] = {
[2] = {.hue = 36, .sat = 255}, // Color for Layer 2
[3] = {.hue = 185, .sat = 255}, // Color for Layer 3
};
-size_t lc_size = sizeof(layer_colors) / sizeof(uint16_t);
+size_t lc_size = ARRAY_SIZE(layer_colors);
// Use NEW_SAFE_RANGE to define new custom keycodes in order to not overwrite the ones used for front LED control
enum custom_keycodes {
diff --git a/keyboards/nacly/splitreus62/keymaps/scheiklp/config.h b/keyboards/nacly/splitreus62/keymaps/scheiklp/config.h
index 04af418d8fc..da8287df649 100644
--- a/keyboards/nacly/splitreus62/keymaps/scheiklp/config.h
+++ b/keyboards/nacly/splitreus62/keymaps/scheiklp/config.h
@@ -18,37 +18,6 @@ along with this program. If not, see .
#pragma once
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xBEEF
-#define PRODUCT_ID 0xFED0
-#define DEVICE_VER 0x0001
-#define MANUFACTURER NaCly
-#define PRODUCT Splitreus62
-
-/* key matrix size */
-// Rows are doubled-up
-#define MATRIX_ROWS 12
-#define MATRIX_COLS 6
-
-// wiring of each half
-#define MATRIX_ROW_PINS { D3, D2, D1, D4, C6, D7 }
-#define MATRIX_COL_PINS { E6, B4, B5, B6, B2, B3 }
-
-#define DIODE_DIRECTION ROW2COL
-
-#define SPLIT_HAND_PIN F4
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE 5
-
-/* serial.c configuration for split keyboard */
-#define SOFT_SERIAL_PIN D0
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
#define AUTO_SHIFT_TIMEOUT 100
#define NO_AUTO_SHIFT_SPECIAL
#define NO_AUTO_SHIFT_NUMERIC
diff --git a/keyboards/nasu/config.h b/keyboards/nasu/config.h
index ec0a22a9a6a..01fe94ceb1b 100644
--- a/keyboards/nasu/config.h
+++ b/keyboards/nasu/config.h
@@ -32,7 +32,7 @@ along with this program. If not, see .
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
-/* Ensure we jump to bootloader if the RESET keycode was pressed */
+/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
/* Indicator LEDs */
diff --git a/keyboards/novelkeys/nk65b/config.h b/keyboards/novelkeys/nk65b/config.h
new file mode 100755
index 00000000000..45603267a10
--- /dev/null
+++ b/keyboards/novelkeys/nk65b/config.h
@@ -0,0 +1,135 @@
+/*
+Copyright 2022 Yiancar
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+#define MATRIX_ROW_PINS { A0, A1, A2, B11, B6 }
+#define MATRIX_COL_PINS { A3, A4, A5, A6, A7, B0, B1, B2, B10, B12, B13, B14, B15, A8, A9 }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* Indicator LEDs */
+#define LED_CAPS_LOCK_PIN A14
+#define LED_PIN_ON_STATE 0
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+// #define MATRIX_HAS_GHOST
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+// #define FORCE_NKRO
+
+/* Bootmagic Lite key configuration */
+#define BOOTMAGIC_LITE_ROW 0
+#define BOOTMAGIC_LITE_COLUMN 0
+
+/* RGB options */
+
+#define RGB_DI_PIN B4
+#define WS2812_PWM_DRIVER PWMD3
+#define WS2812_PWM_CHANNEL 1
+#define WS2812_PWM_PAL_MODE 1
+#define WS2812_DMA_STREAM STM32_DMA1_STREAM3
+#define WS2812_DMA_CHANNEL 3
+
+#define RGBLED_NUM 68
+#define DRIVER_LED_TOTAL 68
+#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 130
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+#define ENABLE_RGB_MATRIX_ALPHAS_MODS
+#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_BREATHING
+#define ENABLE_RGB_MATRIX_BAND_SAT
+#define ENABLE_RGB_MATRIX_BAND_VAL
+#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+#define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#define ENABLE_RGB_MATRIX_CYCLE_ALL
+#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+#define ENABLE_RGB_MATRIX_DUAL_BEACON
+#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+#define ENABLE_RGB_MATRIX_RAINDROPS
+#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+#define ENABLE_RGB_MATRIX_HUE_BREATHING
+#define ENABLE_RGB_MATRIX_HUE_PENDULUM
+#define ENABLE_RGB_MATRIX_HUE_WAVE
+#define ENABLE_RGB_MATRIX_PIXEL_RAIN
+#define ENABLE_RGB_MATRIX_PIXEL_FLOW
+#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
+#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#define ENABLE_RGB_MATRIX_SPLASH
+#define ENABLE_RGB_MATRIX_MULTISPLASH
+#define ENABLE_RGB_MATRIX_SOLID_SPLASH
+#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
diff --git a/keyboards/novelkeys/nk65b/halconf.h b/keyboards/novelkeys/nk65b/halconf.h
new file mode 100644
index 00000000000..ce14bc0c416
--- /dev/null
+++ b/keyboards/novelkeys/nk65b/halconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2022 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/novelkeys/nk65b/info.json b/keyboards/novelkeys/nk65b/info.json
new file mode 100755
index 00000000000..8868b78531a
--- /dev/null
+++ b/keyboards/novelkeys/nk65b/info.json
@@ -0,0 +1,17 @@
+{
+ "keyboard_name": "NK65B",
+ "manufacturer": "Yiancar-Designs",
+ "url": "www.yiancar-designs.com",
+ "url": "",
+ "maintainer": "Yiancar",
+ "usb": {
+ "vid": "0x8968",
+ "pid": "0x4E4F",
+ "device_version": "0.0.1"
+ },
+ "layouts": {
+ "LAYOUT_65_ansi": {
+ "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"label":"Home", "x":15, "y":0}, {"label":"Tab", "x":0, "y":1, "w":1.5}, {"label":"Q", "x":1.5, "y":1}, {"label":"W", "x":2.5, "y":1}, {"label":"E", "x":3.5, "y":1}, {"label":"R", "x":4.5, "y":1}, {"label":"T", "x":5.5, "y":1}, {"label":"Y", "x":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Page Up", "x":15, "y":1}, {"label":"Caps Lock", "x":0, "y":2, "w":1.75}, {"label":"A", "x":1.75, "y":2}, {"label":"S", "x":2.75, "y":2}, {"label":"D", "x":3.75, "y":2}, {"label":"F", "x":4.75, "y":2}, {"label":"G", "x":5.75, "y":2}, {"label":"H", "x":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.75, "y":2, "w":2.25}, {"label":"Page Down", "x":15, "y":2}, {"label":"Shift", "x":0, "y":3, "w":2.25}, {"label":"Z", "x":2.25, "y":3}, {"label":"X", "x":3.25, "y":3}, {"label":"C", "x":4.25, "y":3}, {"label":"V", "x":5.25, "y":3}, {"label":"B", "x":6.25, "y":3}, {"label":"N", "x":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"\u2191", "x":14, "y":3}, {"label":"End", "x":15, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4}, {"label":"Fn", "x":11, "y":4}, {"label":"Ctrl", "x":12, "y":4}, {"label":"\u2190", "x":13, "y":4}, {"label":"\u2193", "x":14, "y":4}, {"label":"\u2192", "x":15, "y":4}]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/novelkeys/nk65b/keymaps/default/keymap.c b/keyboards/novelkeys/nk65b/keymaps/default/keymap.c
new file mode 100755
index 00000000000..420db9503c1
--- /dev/null
+++ b/keyboards/novelkeys/nk65b/keymaps/default/keymap.c
@@ -0,0 +1,32 @@
+/* Copyright 2022 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_65_ansi( /* Base */
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[1] = LAYOUT_65_ansi( /* FN */
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, RGB_SPD, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
diff --git a/keyboards/novelkeys/nk65b/keymaps/default/readme.md b/keyboards/novelkeys/nk65b/keymaps/default/readme.md
new file mode 100755
index 00000000000..7cf0885d6ea
--- /dev/null
+++ b/keyboards/novelkeys/nk65b/keymaps/default/readme.md
@@ -0,0 +1,7 @@
+# The default keymap for NK65. VIA support disabled.
+
+
+
+
+
+Default layer is normal ANSI 65%
diff --git a/keyboards/novelkeys/nk65b/keymaps/via/keymap.c b/keyboards/novelkeys/nk65b/keymaps/via/keymap.c
new file mode 100755
index 00000000000..39776b421f9
--- /dev/null
+++ b/keyboards/novelkeys/nk65b/keymaps/via/keymap.c
@@ -0,0 +1,46 @@
+/* Copyright 2022 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_65_ansi( /* Base */
+ KC_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_PGUP,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_END,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[1] = LAYOUT_65_ansi( /* FN */
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, RESET, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, RGB_SPD, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+[2] = LAYOUT_65_ansi( /* Empty for dynamic keymaps */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+[3] = LAYOUT_65_ansi( /* Empty for dynamic keymaps */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
diff --git a/keyboards/novelkeys/nk65b/keymaps/via/readme.md b/keyboards/novelkeys/nk65b/keymaps/via/readme.md
new file mode 100755
index 00000000000..14fe08420fc
--- /dev/null
+++ b/keyboards/novelkeys/nk65b/keymaps/via/readme.md
@@ -0,0 +1,7 @@
+# The default keymap for NK65. VIA support enabled.
+
+
+
+
+
+Default layer is normal ANSI 65%
diff --git a/keyboards/novelkeys/nk65b/keymaps/via/rules.mk b/keyboards/novelkeys/nk65b/keymaps/via/rules.mk
new file mode 100755
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/novelkeys/nk65b/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/novelkeys/nk65b/mcuconf.h b/keyboards/novelkeys/nk65b/mcuconf.h
new file mode 100644
index 00000000000..7cf6a48904d
--- /dev/null
+++ b/keyboards/novelkeys/nk65b/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2022 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_TIM3
+#define STM32_PWM_USE_TIM3 TRUE
diff --git a/keyboards/novelkeys/nk65b/nk65b.c b/keyboards/novelkeys/nk65b/nk65b.c
new file mode 100755
index 00000000000..f4ed25c2d16
--- /dev/null
+++ b/keyboards/novelkeys/nk65b/nk65b.c
@@ -0,0 +1,54 @@
+/* Copyright 2022 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "nk65b.h"
+
+void led_init_ports(void) {
+ // Set our LED pins as open drain outputs
+ palSetLineMode(LED_CAPS_LOCK_PIN, PAL_MODE_OUTPUT_OPENDRAIN);
+ palSetLineMode(A15, PAL_MODE_OUTPUT_OPENDRAIN);
+ palSetLineMode(B3, PAL_MODE_OUTPUT_OPENDRAIN);
+}
+
+layer_state_t layer_state_set_kb(layer_state_t state) {
+ writePin(A15, !layer_state_cmp(state, 1));
+ writePin(B3, !layer_state_cmp(state, 2));
+ return layer_state_set_user(state);
+}
+
+#ifdef RGB_MATRIX_ENABLE
+// clang-format off
+led_config_t g_led_config = { {
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 },
+ { 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, NO_LED, 15 },
+ { 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 16, 43 },
+ { 57, NO_LED, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44 },
+ { 58, 59, 60, NO_LED, NO_LED, NO_LED, 61, NO_LED, NO_LED, 61, 62, 63, 64, 65, 66 }
+}, {
+ { 0,0 }, { 15,0 }, { 30,0 }, { 45,0 }, { 60,0 }, { 75,0 }, { 90,0 }, {105,0 }, {120,0 }, {135,0 }, {150,0 }, {165,0 }, {180,0 }, {203,0 },
+ {225,0 }, {225,16 }, {206,16 }, {188,16 }, {173,16 }, {158,16 }, {143,16 }, {128,16 }, {113,16 }, { 98,16 }, { 83,16 }, { 68,16 }, { 53,16 }, { 38,16 },
+ { 23,16 }, { 4,16 }, { 6,32 }, { 26,32 }, { 41,32 }, { 56,32 }, { 71,32 }, { 86,32 }, {101,32 }, {116,32 }, {131,32 }, {146,32 }, {161,32 }, {176,32 },
+ {201,32 }, {225,32 }, {225,48 }, {210,48 }, {189,48 }, {169,48 }, {154,48 }, {139,48 }, {124,48 }, {109,48 }, { 94,48 }, { 79,48 }, { 64,48 }, { 49,48 },
+ { 34,48 }, { 9,48 }, { 2,64 }, { 21,64 }, { 39,64 }, { 96,64 }, {150,64 }, {165,64 }, {180,64 }, {195,64 }, {210,64 }, {225,64 }
+}, {
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
+ 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 1, 1, 4, 1, 1, 1, 1, 1, 1
+} };
+// clang-format on
+#endif
diff --git a/keyboards/novelkeys/nk65b/nk65b.h b/keyboards/novelkeys/nk65b/nk65b.h
new file mode 100755
index 00000000000..9fd75c26ab9
--- /dev/null
+++ b/keyboards/novelkeys/nk65b/nk65b.h
@@ -0,0 +1,36 @@
+/* Copyright 2022 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#define XXX KC_NO
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+
+#define LAYOUT_65_ansi( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K2C, K1E, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
+ K30, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E, \
+ K40, K41, K42, K46, K49, K4A, K4B, K4C, K4D, K4E \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, XXX, K1E }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, K2E }, \
+ { K30, XXX, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, K3E }, \
+ { K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, K49, K4A, K4B, K4C, K4D, K4E } \
+}
diff --git a/keyboards/novelkeys/nk65b/readme.md b/keyboards/novelkeys/nk65b/readme.md
new file mode 100755
index 00000000000..d7cefc93c89
--- /dev/null
+++ b/keyboards/novelkeys/nk65b/readme.md
@@ -0,0 +1,34 @@
+# NK65B
+
+This is a standard fixed layout 65% PCB. It supports VIA and full per-key RGB. This is revision B.
+
+
+
+Keyboard Maintainer: [Yiancar](http://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+Hardware Supported: A 65% keyboard with STM32F072CB or APM compatible
+Hardware Availability: https://novelkeys.xyz/
+
+## Instructions
+
+### Build
+
+Make example for this keyboard (after setting up your build environment):
+
+ make novelkeys/nk65b:via
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+### Reset
+
+- Unplug
+- Hold Escape
+- Plug In
+- Unplug
+- Release Escape
+
+### Flash
+
+- Unplug
+- Hold Escape
+- Plug In
+- Flash using QMK Toolbox or dfu-util (`make nk65b::flash`)
diff --git a/keyboards/novelkeys/nk65b/rules.mk b/keyboards/novelkeys/nk65b/rules.mk
new file mode 100755
index 00000000000..230cc1ec147
--- /dev/null
+++ b/keyboards/novelkeys/nk65b/rules.mk
@@ -0,0 +1,29 @@
+# MCU name
+MCU = STM32F072
+
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -v FFFF -p FFFF
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+RGB_MATRIX_ENABLE = yes # Enable Per-key RGB
+RGB_MATRIX_DRIVER = WS2812 # Per-key RGB Drive
+WS2812_DRIVER = pwm # Per-key RGB MCU Driver
diff --git a/keyboards/novelkeys/nk87b/config.h b/keyboards/novelkeys/nk87b/config.h
new file mode 100644
index 00000000000..32bbb5e69e9
--- /dev/null
+++ b/keyboards/novelkeys/nk87b/config.h
@@ -0,0 +1,135 @@
+/*
+Copyright 2022 Yiancar
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#pragma once
+
+#include "config_common.h"
+
+/* key matrix size */
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 17
+
+#define MATRIX_ROW_PINS { B11, B10, B2, B1, A9, A5 }
+#define MATRIX_COL_PINS { B12, B13, B14, B15, A8, A10, A14, A15, B3, B4, B5, B6, B7, B8, B9, A0, A1 }
+
+/* COL2ROW, ROW2COL*/
+#define DIODE_DIRECTION COL2ROW
+
+/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
+#define DEBOUNCE 5
+
+/* Indicator LEDs */
+#define LED_CAPS_LOCK_PIN A2
+#define LED_PIN_ON_STATE 0
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+// #define MATRIX_HAS_GHOST
+
+/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
+ * This is userful for the Windows task manager shortcut (ctrl+shift+esc).
+ */
+// #define GRAVE_ESC_CTRL_OVERRIDE
+
+/*
+ * Force NKRO
+ *
+ * Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
+ * state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
+ * makefile for this to work.)
+ *
+ * If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
+ * until the next keyboard reset.
+ *
+ * NKRO may prevent your keystrokes from being detected in the BIOS, but it is
+ * fully operational during normal computer usage.
+ *
+ * For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
+ * or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
+ * bootmagic, NKRO mode will always be enabled until it is toggled again during a
+ * power-up.
+ *
+ */
+// #define FORCE_NKRO
+
+/* Bootmagic Lite key configuration */
+#define BOOTMAGIC_LITE_ROW 0
+#define BOOTMAGIC_LITE_COLUMN 0
+
+/* RGB options */
+
+#define RGB_DI_PIN B0
+#define WS2812_PWM_DRIVER PWMD3
+#define WS2812_PWM_CHANNEL 3
+#define WS2812_PWM_PAL_MODE 1
+#define WS2812_DMA_STREAM STM32_DMA1_STREAM3
+#define WS2812_DMA_CHANNEL 3
+
+#define RGBLED_NUM 87
+#define DRIVER_LED_TOTAL 87
+#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 114
+#define RGB_DISABLE_WHEN_USB_SUSPENDED
+#define RGB_MATRIX_KEYPRESSES
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+#define ENABLE_RGB_MATRIX_ALPHAS_MODS
+#define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_BREATHING
+#define ENABLE_RGB_MATRIX_BAND_SAT
+#define ENABLE_RGB_MATRIX_BAND_VAL
+#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+#define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#define ENABLE_RGB_MATRIX_CYCLE_ALL
+#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+#define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+#define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+#define ENABLE_RGB_MATRIX_DUAL_BEACON
+#define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+#define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+#define ENABLE_RGB_MATRIX_RAINDROPS
+#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+#define ENABLE_RGB_MATRIX_HUE_BREATHING
+#define ENABLE_RGB_MATRIX_HUE_PENDULUM
+#define ENABLE_RGB_MATRIX_HUE_WAVE
+#define ENABLE_RGB_MATRIX_PIXEL_RAIN
+#define ENABLE_RGB_MATRIX_PIXEL_FLOW
+#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
+#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#define ENABLE_RGB_MATRIX_SPLASH
+#define ENABLE_RGB_MATRIX_MULTISPLASH
+#define ENABLE_RGB_MATRIX_SOLID_SPLASH
+#define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
diff --git a/keyboards/novelkeys/nk87b/halconf.h b/keyboards/novelkeys/nk87b/halconf.h
new file mode 100644
index 00000000000..ce14bc0c416
--- /dev/null
+++ b/keyboards/novelkeys/nk87b/halconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2022 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/novelkeys/nk87b/info.json b/keyboards/novelkeys/nk87b/info.json
new file mode 100755
index 00000000000..01518c9b2f2
--- /dev/null
+++ b/keyboards/novelkeys/nk87b/info.json
@@ -0,0 +1,16 @@
+{
+ "keyboard_name": "NK87B",
+ "manufacturer": "Yiancar-Designs",
+ "url": "www.yiancar-designs.com",
+ "maintainer": "Yiancar",
+ "usb": {
+ "vid": "0x8968",
+ "pid": "0x4E50",
+ "device_version": "0.0.1"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [{"label":"0,0", "x":0, "y":0}, {"label":"0,1", "x":1.25, "y":0}, {"label":"0,2", "x":2.25, "y":0}, {"label":"0,3", "x":3.25, "y":0}, {"label":"0,4", "x":4.25, "y":0}, {"label":"0,5", "x":5.5, "y":0}, {"label":"0,6", "x":6.5, "y":0}, {"label":"0,7", "x":7.5, "y":0}, {"label":"0,8", "x":8.5, "y":0}, {"label":"0,9", "x":9.75, "y":0}, {"label":"0,10", "x":10.75, "y":0}, {"label":"0,12", "x":11.75, "y":0}, {"label":"0,12", "x":12.75, "y":0}, {"label":"0,13", "x":14, "y":0}, {"label":"0,14", "x":15.25, "y":0}, {"label":"0,15", "x":16.25, "y":0}, {"label":"0,16", "x":17.25, "y":0}, {"label":"1,0", "x":0, "y":1.25}, {"label":"1,1", "x":1, "y":1.25}, {"label":"1,2", "x":2, "y":1.25}, {"label":"1,3", "x":3, "y":1.25}, {"label":"1,4", "x":4, "y":1.25}, {"label":"1,5", "x":5, "y":1.25}, {"label":"1,6", "x":6, "y":1.25}, {"label":"1,7", "x":7, "y":1.25}, {"label":"1,8", "x":8, "y":1.25}, {"label":"1,9", "x":9, "y":1.25}, {"label":"1,10", "x":10, "y":1.25}, {"label":"1,11", "x":11, "y":1.25}, {"label":"1,12", "x":12, "y":1.25}, {"label":"1,13", "x":13, "y":1.25, "w":2}, {"label":"1,14", "x":15.25, "y":1.25}, {"label":"1,15", "x":16.25, "y":1.25}, {"label":"1,16", "x":17.25, "y":1.25}, {"label":"2,0", "x":0, "y":2.25, "w":1.5}, {"label":"2,1", "x":1.5, "y":2.25}, {"label":"2,2", "x":2.5, "y":2.25}, {"label":"2,3", "x":3.5, "y":2.25}, {"label":"2,4", "x":4.5, "y":2.25}, {"label":"2,5", "x":5.5, "y":2.25}, {"label":"2,6", "x":6.5, "y":2.25}, {"label":"2,7", "x":7.5, "y":2.25}, {"label":"2,8", "x":8.5, "y":2.25}, {"label":"2,9", "x":9.5, "y":2.25}, {"label":"2,10", "x":10.5, "y":2.25}, {"label":"2,11", "x":11.5, "y":2.25}, {"label":"2,12", "x":12.5, "y":2.25}, {"label":"3,12", "x":13.5, "y":2.25, "w":1.5}, {"label":"2,14", "x":15.25, "y":2.25}, {"label":"2,15", "x":16.25, "y":2.25}, {"label":"2,16", "x":17.25, "y":2.25}, {"label":"3,0", "x":0, "y":3.25, "w":1.75}, {"label":"3,1", "x":1.75, "y":3.25}, {"label":"3,2", "x":2.75, "y":3.25}, {"label":"3,3", "x":3.75, "y":3.25}, {"label":"3,4", "x":4.75, "y":3.25}, {"label":"3,5", "x":5.75, "y":3.25}, {"label":"3,6", "x":6.75, "y":3.25}, {"label":"3,7", "x":7.75, "y":3.25}, {"label":"3,8", "x":8.75, "y":3.25}, {"label":"3,9", "x":9.75, "y":3.25}, {"label":"3,10", "x":10.75, "y":3.25}, {"label":"3,11", "x":11.75, "y":3.25}, {"label":"3,13", "x":12.75, "y":3.25, "w":2.25}, {"label":"4,0", "x":0, "y":4.25, "w":2.25}, {"label":"4,2", "x":2.25, "y":4.25}, {"label":"4,3", "x":3.25, "y":4.25}, {"label":"4,4", "x":4.25, "y":4.25}, {"label":"4,5", "x":5.25, "y":4.25}, {"label":"4,6", "x":6.25, "y":4.25}, {"label":"4,7", "x":7.25, "y":4.25}, {"label":"4,8", "x":8.25, "y":4.25}, {"label":"4,9", "x":9.25, "y":4.25}, {"label":"4,10", "x":10.25, "y":4.25}, {"label":"4,11", "x":11.25, "y":4.25}, {"label":"4,12", "x":12.25, "y":4.25, "w":2.75}, {"label":"4,15", "x":16.25, "y":4.25}, {"label":"5,0", "x":0, "y":5.25, "w":1.5}, {"label":"5,1", "x":1.5, "y":5.25}, {"label":"5,2", "x":2.5, "y":5.25, "w":1.5}, {"label":"5,6", "x":4, "y":5.25, "w":7}, {"label":"5,11", "x":11, "y":5.25, "w":1.5}, {"label":"5,12", "x":12.5, "y":5.25}, {"label":"5,13", "x":13.5, "y":5.25, "w":1.5}, {"label":"5,14", "x":15.25, "y":5.25}, {"label":"5,15", "x":16.25, "y":5.25}, {"label":"5,16", "x":17.25, "y":5.25}]
+ }
+ }
+}
diff --git a/keyboards/novelkeys/nk87b/keymaps/default/keymap.c b/keyboards/novelkeys/nk87b/keymaps/default/keymap.c
new file mode 100644
index 00000000000..37c7feb4fd0
--- /dev/null
+++ b/keyboards/novelkeys/nk87b/keymaps/default/keymap.c
@@ -0,0 +1,34 @@
+/* Copyright 2022 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all( /* Base */
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SLCK, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[1] = LAYOUT_all( /* FN */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, RGB_SPD, RGB_SPI, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
diff --git a/keyboards/novelkeys/nk87b/keymaps/default/readme.md b/keyboards/novelkeys/nk87b/keymaps/default/readme.md
new file mode 100644
index 00000000000..c0ca4361842
--- /dev/null
+++ b/keyboards/novelkeys/nk87b/keymaps/default/readme.md
@@ -0,0 +1,7 @@
+# The default keymap for NK87
+
+
+Fn Layer:
+
+
+Default layer is normal ANSI TKL
diff --git a/keyboards/novelkeys/nk87b/keymaps/via/keymap.c b/keyboards/novelkeys/nk87b/keymaps/via/keymap.c
new file mode 100644
index 00000000000..d4f4a0fa9db
--- /dev/null
+++ b/keyboards/novelkeys/nk87b/keymaps/via/keymap.c
@@ -0,0 +1,50 @@
+/* Copyright 2022 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_all( /* Base */
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SLCK, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT),
+
+[1] = LAYOUT_all( /* FN */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_VOLU, KC_VOLD, KC_MUTE,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, RGB_SPD, RGB_SPI, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+[2] = LAYOUT_all( /* Empty for dynamic keymaps */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+
+[3] = LAYOUT_all( /* Empty for dynamic keymaps */
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+};
diff --git a/keyboards/novelkeys/nk87b/keymaps/via/readme.md b/keyboards/novelkeys/nk87b/keymaps/via/readme.md
new file mode 100644
index 00000000000..22f342c3769
--- /dev/null
+++ b/keyboards/novelkeys/nk87b/keymaps/via/readme.md
@@ -0,0 +1,7 @@
+# The default VIA keymap for NK87. VIA support enabled.
+
+
+Fn Layer:
+
+
+Default layer is normal ANSI TKL
diff --git a/keyboards/novelkeys/nk87b/keymaps/via/rules.mk b/keyboards/novelkeys/nk87b/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/novelkeys/nk87b/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/novelkeys/nk87b/mcuconf.h b/keyboards/novelkeys/nk87b/mcuconf.h
new file mode 100644
index 00000000000..7cf6a48904d
--- /dev/null
+++ b/keyboards/novelkeys/nk87b/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2022 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_TIM3
+#define STM32_PWM_USE_TIM3 TRUE
diff --git a/keyboards/novelkeys/nk87b/nk87b.c b/keyboards/novelkeys/nk87b/nk87b.c
new file mode 100644
index 00000000000..639eba68171
--- /dev/null
+++ b/keyboards/novelkeys/nk87b/nk87b.c
@@ -0,0 +1,58 @@
+/* Copyright 2022 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "nk87b.h"
+#include
+
+void led_init_ports(void) {
+ // Set our LED pins as open drain outputs
+ palSetLineMode(LED_CAPS_LOCK_PIN, PAL_MODE_OUTPUT_OPENDRAIN);
+ palSetLineMode(A3, PAL_MODE_OUTPUT_OPENDRAIN);
+ palSetLineMode(A4, PAL_MODE_OUTPUT_OPENDRAIN);
+}
+
+layer_state_t layer_state_set_kb(layer_state_t state) {
+ writePin(A3, !layer_state_cmp(state, 1));
+ writePin(A4, !layer_state_cmp(state, 2));
+ return layer_state_set_user(state);
+}
+
+#ifdef RGB_MATRIX_ENABLE
+// clang-format off
+led_config_t g_led_config = { {
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 },
+ { 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17 },
+ { 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, NO_LED, 48, 49, 50 },
+ { 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 47, 51, NO_LED, NO_LED, NO_LED },
+ { 64, NO_LED, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, NO_LED, NO_LED, 76, NO_LED },
+ { 86, 85, 84, NO_LED, NO_LED, NO_LED, 83, NO_LED, NO_LED, NO_LED, NO_LED, 82, 81, 80, 79, 78, 77 },
+}, {
+ { 0,0 }, { 16,0 }, { 29,0 }, { 42,0 }, { 55,0 }, { 71,0 }, { 84,0 }, { 97,0 }, {110,0 }, {127,0 }, {140,0 }, {153,0 }, {166,0 }, {182,0 }, {198,0 }, {211,0 }, {224,0 },
+ {224,15 }, {211,15 }, {198,15 }, {175,15 }, {156,15 }, {143,15 }, {130,15 }, {117,15 }, {104,15 }, { 91,15 }, { 78,15 }, { 65,15 }, { 52,15 }, { 39,15 }, { 26,15 }, { 13,15 }, { 0,15 },
+ { 3,27 }, { 19,27 }, { 32,27 }, { 45,27 }, { 58,27 }, { 71,27 }, { 84,27 }, { 97,27 }, {110,27 }, {123,27 }, {136,27 }, {149,27 }, {162,27 }, {179,27 }, {198,27 }, {211,27 }, {224,27 },
+ {174,40 }, {153,40 }, {140,40 }, {127,40 }, {114,40 }, {101,40 }, { 88,40 }, { 75,40 }, { 62,40 }, { 49,40 }, { 36,40 }, { 23,40 }, { 5,40 }, { 8,52 }, { 29,52 }, { 42,52 }, { 55,52 },
+ { 68,52 }, { 81,52 }, { 94,52 }, {107,52 }, {120,52 }, {133,52 }, {146,52 }, {170,52 }, {211,52 }, {224,64 }, {211,64 }, {198,64 }, {179,64 }, {162,64 }, {146,64 }, { 91,64 }, { 36,64 },
+ { 19,64 }, { 3,64 }
+}, {
+ 1, 4, 4, 4, 4, 1, 1, 1, 1, 4, 4, 4, 4, 1, 1, 1, 1,
+ 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1,
+ 1, 1, 1, 1, 1, 1, 4, 1, 1, 1
+} };
+// clang-format on
+#endif
diff --git a/keyboards/novelkeys/nk87b/nk87b.h b/keyboards/novelkeys/nk87b/nk87b.h
new file mode 100644
index 00000000000..5e48d36baf9
--- /dev/null
+++ b/keyboards/novelkeys/nk87b/nk87b.h
@@ -0,0 +1,38 @@
+/* Copyright 2022 Yiancar
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#define XXX KC_NO
+
+#include "quantum.h"
+
+// This a shortcut to help you visually see your layout.
+
+#define LAYOUT_all( \
+ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G, \
+ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G, \
+ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K3C, K2E, K2F, K2G, \
+ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3D, \
+ K40, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, K4F, \
+ K50, K51, K52, K56, K5B, K5C, K5D, K5E, K5F, K5G \
+) { \
+ { K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, K0F, K0G }, \
+ { K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, K1F, K1G }, \
+ { K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, XXX, K2E, K2F, K2G }, \
+ { K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, XXX, XXX, XXX }, \
+ { K40, XXX, K42, K43, K44, K45, K46, K47, K48, K49, K4A, K4B, K4C, XXX, XXX, K4F, XXX }, \
+ { K50, K51, K52, XXX, XXX, XXX, K56, XXX, XXX, XXX, XXX, K5B, K5C, K5D, K5E, K5F, K5G } \
+}
diff --git a/keyboards/novelkeys/nk87b/readme.md b/keyboards/novelkeys/nk87b/readme.md
new file mode 100644
index 00000000000..d993fb6ef44
--- /dev/null
+++ b/keyboards/novelkeys/nk87b/readme.md
@@ -0,0 +1,34 @@
+# NK87B
+
+
+
+This is a standard fixed layout TKL PCB. It supports VIA and full per-key RGB. This is revision B.
+
+* Keyboard Maintainer: [Yiancar](https://yiancar-designs.com/) and on [GitHub](https://github.com/yiancar)
+* Hardware Supported: A TKL keyboard with STM32F072CB or APM compatible
+* Hardware Availability: https://novelkeys.xyz/
+
+## Instructions
+
+### Build
+
+Make example for this keyboard (after setting up your build environment):
+
+ make novelkeys/nk87b:default
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+### Reset
+
+- Unplug
+- Hold Escape
+- Plug In
+- Unplug
+- Release Escape
+
+### Flash
+
+- Unplug
+- Hold Escape
+- Plug In
+- Flash using QMK Toolbox or dfu-util (`make nk87b::dfu-util`)
diff --git a/keyboards/novelkeys/nk87b/rules.mk b/keyboards/novelkeys/nk87b/rules.mk
new file mode 100644
index 00000000000..230cc1ec147
--- /dev/null
+++ b/keyboards/novelkeys/nk87b/rules.mk
@@ -0,0 +1,29 @@
+# MCU name
+MCU = STM32F072
+
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -v FFFF -p FFFF
+
+# Do not put the microcontroller into power saving mode
+# when we get USB suspend event. We want it to keep updating
+# backlight effects.
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+RGB_MATRIX_ENABLE = yes # Enable Per-key RGB
+RGB_MATRIX_DRIVER = WS2812 # Per-key RGB Drive
+WS2812_DRIVER = pwm # Per-key RGB MCU Driver
diff --git a/keyboards/nullbitsco/tidbit/tidbit.c b/keyboards/nullbitsco/tidbit/tidbit.c
index 6e7ef460e5d..ac297778417 100644
--- a/keyboards/nullbitsco/tidbit/tidbit.c
+++ b/keyboards/nullbitsco/tidbit/tidbit.c
@@ -127,7 +127,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
}
switch (keycode) {
- case RESET:
+ case QK_BOOT:
if (record->event.pressed) {
set_bitc_LED(LED_DIM);
rgblight_disable_noeeprom();
diff --git a/keyboards/orthodox/keymaps/drashna/config.h b/keyboards/orthodox/keymaps/drashna/config.h
index e3a89bce6aa..caa69821a04 100644
--- a/keyboards/orthodox/keymaps/drashna/config.h
+++ b/keyboards/orthodox/keymaps/drashna/config.h
@@ -58,9 +58,9 @@ along with this program. If not, see .
#undef PRODUCT
#ifdef KEYBOARD_orthodox_rev1
-# define PRODUCT Drashna Hacked Orthodox Rev .1
+# define PRODUCT "Drashna Hacked Orthodox Rev .1"
#elif KEYBOARD_orthodox_rev3
-# define PRODUCT Drashna Hacked Orthodox Rev .3
+# define PRODUCT "Drashna Hacked Orthodox Rev .3"
#endif
#define QMK_ESC_OUTPUT D7 // usually COL
diff --git a/keyboards/pierce/keymaps/durken1/config.h b/keyboards/pierce/keymaps/durken1/config.h
index bc0bb1c4b8b..7c9970c5a98 100644
--- a/keyboards/pierce/keymaps/durken1/config.h
+++ b/keyboards/pierce/keymaps/durken1/config.h
@@ -31,7 +31,7 @@
#define COMBO_COUNT 3
#define COMBO_TERM 35
-#ifdef PS2_USE_USART
+#ifdef PS2_DRIVER_USART
#define PS2_CLOCK_PIN D5
#define PS2_DATA_PIN D2
diff --git a/keyboards/pierce/post_rules.mk b/keyboards/pierce/post_rules.mk
index e0360a33919..9cc6739d78d 100644
--- a/keyboards/pierce/post_rules.mk
+++ b/keyboards/pierce/post_rules.mk
@@ -1,6 +1,7 @@
ifeq ($(strip $(TRACKPOINT)), yes)
PS2_MOUSE_ENABLE = yes
- PS2_USE_USART = yes
+ PS2_ENABLE = yes
+ PS2_DRIVER = usart
OPT_DEFS += -DUSART
endif
diff --git a/keyboards/planck/ez/ez.c b/keyboards/planck/ez/ez.c
index 2dcf2f63b38..25dfe9adfb6 100644
--- a/keyboards/planck/ez/ez.c
+++ b/keyboards/planck/ez/ez.c
@@ -322,7 +322,7 @@ bool music_mask_kb(uint16_t keycode) {
case QK_LAYER_TAP_TOGGLE ... QK_LAYER_MOD_MAX:
case QK_MOD_TAP ... QK_MOD_TAP_MAX:
case AU_ON ... MUV_DE:
- case RESET:
+ case QK_BOOT:
case EEP_RST:
return false;
default:
diff --git a/keyboards/planck/keymaps/handwired_binaryplease/config.h b/keyboards/planck/keymaps/handwired_binaryplease/config.h
index abf9f5771f8..065bc2d6881 100644
--- a/keyboards/planck/keymaps/handwired_binaryplease/config.h
+++ b/keyboards/planck/keymaps/handwired_binaryplease/config.h
@@ -1,9 +1,9 @@
#pragma once
#undef MANUFACTURER
-#define MANUFACTURER binaryplease
+#define MANUFACTURER "binaryplease"
#undef PRODUCT
-#define PRODUCT Teensy_Planck
+#define PRODUCT "Teensy_Planck"
#undef MATRIX_ROW_PINS
#define MATRIX_ROW_PINS { D3, D2, D1, D0 }
diff --git a/keyboards/ploopyco/mouse/keymaps/drashna/keymap.c b/keyboards/ploopyco/mouse/keymaps/drashna/keymap.c
index ee0f653deee..056a1f79032 100644
--- a/keyboards/ploopyco/mouse/keymaps/drashna/keymap.c
+++ b/keyboards/ploopyco/mouse/keymaps/drashna/keymap.c
@@ -19,20 +19,23 @@
// safe range starts at `PLOOPY_SAFE_RANGE` instead.
+// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- [0] = LAYOUT(/* Base */
+ [0] = LAYOUT(
C(KC_C), KC_BTN1, KC_BTN3, KC_BTN2, MO(1), KC_BTN4, KC_BTN5, DPI_CONFIG),
- [1] = LAYOUT(/* Base */
+ [1] = LAYOUT(
RGB_HUI, RGB_MOD, RGB_TOG, RGB_RMOD, MO(1), KC_VOLU, KC_VOLD, QK_BOOT)
-
};
+// clang-format on
+#ifdef RGBLIGHT_ENABLE
void eeconkfig_init_user(void) {
rgblight_enable();
-#ifdef RGBLIGHT_EFFECT_TWINKLE
- rgblight_mode(RGBLIGHT_MODE_TWINKLE+5);
-#else
- rgblight_mode(RGBLIGHT_MODE_BREATHING+5);
-#endif
+# ifdef RGBLIGHT_EFFECT_TWINKLE
+ rgblight_mode(RGBLIGHT_MODE_TWINKLE + 5);
+# else
+ rgblight_mode(RGBLIGHT_MODE_BREATHING + 5);
+# endif
rgblight_sethsv(HSV_MAGENTA);
}
+#endif
diff --git a/keyboards/ploopyco/mouse/keymaps/drashna/rules.mk b/keyboards/ploopyco/mouse/keymaps/drashna/rules.mk
index 655dbfdfa02..bd3927a4b1a 100644
--- a/keyboards/ploopyco/mouse/keymaps/drashna/rules.mk
+++ b/keyboards/ploopyco/mouse/keymaps/drashna/rules.mk
@@ -1,5 +1,6 @@
USER_NAME := not_drashna
+BOOTLOADER = qmk-hid
RGBLIGHT_ENABLE = yes
CONSOLE_ENABLE = no
-LTO_ENABLE = yes
+LTO_ENABLE = yes
diff --git a/keyboards/ploopyco/mouse/mouse.c b/keyboards/ploopyco/mouse/mouse.c
index 19bc17738ea..abcaa276d94 100644
--- a/keyboards/ploopyco/mouse/mouse.c
+++ b/keyboards/ploopyco/mouse/mouse.c
@@ -49,7 +49,7 @@
keyboard_config_t keyboard_config;
uint16_t dpi_array[] = PLOOPY_DPI_OPTIONS;
-#define DPI_OPTION_SIZE (sizeof(dpi_array) / sizeof(uint16_t))
+#define DPI_OPTION_SIZE ARRAY_SIZE(dpi_array)
// TODO: Implement libinput profiles
// https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html
@@ -202,7 +202,7 @@ void keyboard_pre_init_kb(void) {
#ifdef UNUSABLE_PINS
const pin_t unused_pins[] = UNUSABLE_PINS;
- for (uint8_t i = 0; i < (sizeof(unused_pins) / sizeof(pin_t)); i++) {
+ for (uint8_t i = 0; i < ARRAY_SIZE(unused_pins); i++) {
setPinOutput(unused_pins[i]);
writePinLow(unused_pins[i]);
}
diff --git a/keyboards/ploopyco/trackball/trackball.c b/keyboards/ploopyco/trackball/trackball.c
index 786b40f9e84..c96bf15cbaf 100644
--- a/keyboards/ploopyco/trackball/trackball.c
+++ b/keyboards/ploopyco/trackball/trackball.c
@@ -49,7 +49,7 @@
keyboard_config_t keyboard_config;
uint16_t dpi_array[] = PLOOPY_DPI_OPTIONS;
-#define DPI_OPTION_SIZE (sizeof(dpi_array) / sizeof(uint16_t))
+#define DPI_OPTION_SIZE ARRAY_SIZE(dpi_array)
// TODO: Implement libinput profiles
// https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html
@@ -207,7 +207,7 @@ void keyboard_pre_init_kb(void) {
#ifdef UNUSABLE_PINS
const pin_t unused_pins[] = UNUSABLE_PINS;
- for (uint8_t i = 0; i < (sizeof(unused_pins) / sizeof(pin_t)); i++) {
+ for (uint8_t i = 0; i < ARRAY_SIZE(unused_pins); i++) {
setPinOutput(unused_pins[i]);
writePinLow(unused_pins[i]);
}
diff --git a/keyboards/ploopyco/trackball_mini/trackball_mini.c b/keyboards/ploopyco/trackball_mini/trackball_mini.c
index df13912af46..dc3708fd51a 100644
--- a/keyboards/ploopyco/trackball_mini/trackball_mini.c
+++ b/keyboards/ploopyco/trackball_mini/trackball_mini.c
@@ -57,7 +57,7 @@
keyboard_config_t keyboard_config;
uint16_t dpi_array[] = PLOOPY_DPI_OPTIONS;
-#define DPI_OPTION_SIZE (sizeof(dpi_array) / sizeof(uint16_t))
+#define DPI_OPTION_SIZE ARRAY_SIZE(dpi_array)
// TODO: Implement libinput profiles
// https://wayland.freedesktop.org/libinput/doc/latest/pointer-acceleration.html
@@ -203,7 +203,7 @@ void keyboard_pre_init_kb(void) {
#ifdef UNUSABLE_PINS
const pin_t unused_pins[] = UNUSABLE_PINS;
- for (uint8_t i = 0; i < (sizeof(unused_pins) / sizeof(pin_t)); i++) {
+ for (uint8_t i = 0; i < ARRAY_SIZE(unused_pins); i++) {
setPinOutput(unused_pins[i]);
writePinLow(unused_pins[i]);
}
diff --git a/keyboards/ploopyco/trackball_nano/trackball_nano.c b/keyboards/ploopyco/trackball_nano/trackball_nano.c
index eb1d8e10b0b..366918e1340 100644
--- a/keyboards/ploopyco/trackball_nano/trackball_nano.c
+++ b/keyboards/ploopyco/trackball_nano/trackball_nano.c
@@ -50,7 +50,7 @@
keyboard_config_t keyboard_config;
uint16_t dpi_array[] = PLOOPY_DPI_OPTIONS;
-#define DPI_OPTION_SIZE (sizeof(dpi_array) / sizeof(uint16_t))
+#define DPI_OPTION_SIZE ARRAY_SIZE(dpi_array)
void cycle_dpi(void) {
keyboard_config.dpi_config = (keyboard_config.dpi_config + 1) % DPI_OPTION_SIZE;
@@ -89,7 +89,7 @@ void keyboard_pre_init_kb(void) {
#ifdef UNUSABLE_PINS
const pin_t unused_pins[] = UNUSABLE_PINS;
- for (uint8_t i = 0; i < (sizeof(unused_pins) / sizeof(pin_t)); i++) {
+ for (uint8_t i = 0; i < ARRAY_SIZE(unused_pins); i++) {
setPinOutput(unused_pins[i]);
writePinLow(unused_pins[i]);
}
diff --git a/keyboards/plywrks/lune/keymaps/default/keymap.c b/keyboards/plywrks/lune/keymaps/default/keymap.c
index 8fb0746f434..10471fa35f6 100644
--- a/keyboards/plywrks/lune/keymaps/default/keymap.c
+++ b/keyboards/plywrks/lune/keymaps/default/keymap.c
@@ -24,7 +24,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL
),
[1] = LAYOUT_all(
- RESET, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
+ QK_BOOT, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
KC_HOME, _______, _______, KC_UP, _______, _______, _______, RGB_HUD, RGB_HUI, RGB_SAD, RGB_VAD, RGB_VAI, _______, _______, _______,
KC_END, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/plywrks/lune/keymaps/via/keymap.c b/keyboards/plywrks/lune/keymaps/via/keymap.c
index b2a7abb603b..f5b11f210a5 100644
--- a/keyboards/plywrks/lune/keymaps/via/keymap.c
+++ b/keyboards/plywrks/lune/keymaps/via/keymap.c
@@ -24,7 +24,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL
),
[1] = LAYOUT_all(
- RESET, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
+ QK_BOOT, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
KC_HOME, _______, _______, KC_UP, _______, _______, _______, RGB_HUD, RGB_HUI, RGB_SAD, RGB_VAD, RGB_VAI, _______, _______, _______,
KC_END, _______, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
diff --git a/keyboards/preonic/keymaps/kinesis/config.h b/keyboards/preonic/keymaps/kinesis/config.h
index eabce5e7900..2e8585d0eba 100644
--- a/keyboards/preonic/keymaps/kinesis/config.h
+++ b/keyboards/preonic/keymaps/kinesis/config.h
@@ -1,58 +1,4 @@
-/*
-Copyright 2012 Jun Wako
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6061
-#define DEVICE_VER 0x0001
-#define MANUFACTURER Ortholinear Keyboards
-#define PRODUCT The Preonic Keyboard
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 12
-
-/* Planck PCB default pin-out */
-#define MATRIX_ROW_PINS { D2, D5, B5, B6, D3 }
-#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
-
-#define BACKLIGHT_PIN B7
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
-
-/* number of backlight levels */
-#define BACKLIGHT_LEVELS 3
-
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE 5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
+#pragma once
/* ws2812 RGB LED */
#define RGB_DI_PIN D1
@@ -61,25 +7,3 @@ along with this program. If not, see .
#define RGBLIGHT_HUE_STEP 10
#define RGBLIGHT_SAT_STEP 17
#define RGBLIGHT_VAL_STEP 17
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-#define TAPPING_TERM 200
-
-/* disable debug print */
-// #define NO_DEBUG
-
-/* disable print */
-// #define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-//#define NO_ACTION_MACRO
-//#define NO_ACTION_FUNCTION
-
-#endif
diff --git a/keyboards/preonic/keymaps/zach/config.h b/keyboards/preonic/keymaps/zach/config.h
index 37e85bf5126..f5e4d2c2045 100644
--- a/keyboards/preonic/keymaps/zach/config.h
+++ b/keyboards/preonic/keymaps/zach/config.h
@@ -1,85 +1,7 @@
-/*
-Copyright 2012 Jun Wako
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-*/
-
-#ifndef CONFIG_H
-#define CONFIG_H
-
-#include "config_common.h"
-
-/* USB Device descriptor parameter */
-#define VENDOR_ID 0xFEED
-#define PRODUCT_ID 0x6061
-#define DEVICE_VER 0x0001
-#define MANUFACTURER Ortholinear Keyboards
-#define PRODUCT The Preonic Keyboard
-
-/* key matrix size */
-#define MATRIX_ROWS 5
-#define MATRIX_COLS 12
-
-/* Planck PCB default pin-out */
-#define MATRIX_ROW_PINS { D2, D5, B5, B6, D3 }
-#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }
-
-#define BACKLIGHT_PIN B7
-
-/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION COL2ROW
-
-/* define if matrix has ghost */
-//#define MATRIX_HAS_GHOST
+#pragma once
#define BACKLIGHT_BREATHING // LED breathing
-/* number of backlight levels */
+#undef BACKLIGHT_LEVELS
#define BACKLIGHT_LEVELS 5
-/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE 5
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-//#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-//#define LOCKING_RESYNC_ENABLE
-
-/* ws2812 RGB LED */
-//#define RGB_DI_PIN D1
-
-//#define RGBLED_NUM 28 // Number of LEDs
-//#define RGBLIGHT_HUE_STEP 10
-//#define RGBLIGHT_SAT_STEP 17
-//#define RGBLIGHT_VAL_STEP 17
-
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-#define NO_ACTION_MACRO
-#define NO_ACTION_FUNCTION
-//#define DYNAMIC_MACRO_ENABLE // Enable if you need to use the macro functionality
-//#define SPACE_CADET // Parenthesis on L/R shift
-
-#endif
diff --git a/keyboards/primekb/prime_e/keymaps/madhatter/config.h b/keyboards/primekb/prime_e/keymaps/madhatter/config.h
index 8075bb73d55..3ec816d7ee2 100644
--- a/keyboards/primekb/prime_e/keymaps/madhatter/config.h
+++ b/keyboards/primekb/prime_e/keymaps/madhatter/config.h
@@ -3,4 +3,4 @@
#define TAPPING_TERM 150
#undef PRODUCT
-#define PRODUCT MadHatter\x27s Custom Ilpse
+#define PRODUCT "MadHatter's Custom Ilpse"
diff --git a/keyboards/protozoa/cassini/config.h b/keyboards/protozoa/cassini/config.h
index 991a33db400..2c95c7be2ac 100644
--- a/keyboards/protozoa/cassini/config.h
+++ b/keyboards/protozoa/cassini/config.h
@@ -32,7 +32,7 @@ along with this program. If not, see .
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
-/* Ensure we jump to bootloader if the RESET keycode was pressed */
+/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
/* Indicator LEDs */
diff --git a/keyboards/rgbkb/pan/pan.c b/keyboards/rgbkb/pan/pan.c
index c367550e496..6a17456390f 100644
--- a/keyboards/rgbkb/pan/pan.c
+++ b/keyboards/rgbkb/pan/pan.c
@@ -51,7 +51,7 @@ static inline void setled(int i, uint8_t r, uint8_t g, uint8_t b) {
}
static void setled_all(uint8_t r, uint8_t g, uint8_t b) {
- for (int i = 0; i < sizeof(rgb_matrix_ws2812_array) / sizeof(rgb_matrix_ws2812_array[0]); i++) {
+ for (int i = 0; i < ARRAY_SIZE(rgb_matrix_ws2812_array); i++) {
setled(i, r, g, b);
}
}
diff --git a/keyboards/rgbkb/sol/keymaps/default/keymap.c b/keyboards/rgbkb/sol/keymaps/default/keymap.c
index 1ce18bc1ab7..87241521ae7 100644
--- a/keyboards/rgbkb/sol/keymaps/default/keymap.c
+++ b/keyboards/rgbkb/sol/keymaps/default/keymap.c
@@ -202,7 +202,7 @@ const rgb_matrix_f rgb_matrix_functions[6][2] = {
#ifdef ENCODER_ENABLE
static pin_t encoders_pad_a[] = ENCODERS_PAD_A;
-#define NUMBER_OF_ENCODERS (sizeof(encoders_pad_a)/sizeof(pin_t))
+#define NUMBER_OF_ENCODERS ARRAY_SIZE(encoders_pad_a)
const uint16_t PROGMEM encoders[][NUMBER_OF_ENCODERS * 2][2] = {
[_QWERTY] = ENCODER_LAYOUT(
diff --git a/keyboards/rgbkb/sol/keymaps/xyverz/keymap.c b/keyboards/rgbkb/sol/keymaps/xyverz/keymap.c
index cdd0c6620a7..d042a4fe279 100644
--- a/keyboards/rgbkb/sol/keymaps/xyverz/keymap.c
+++ b/keyboards/rgbkb/sol/keymaps/xyverz/keymap.c
@@ -232,7 +232,7 @@ const rgb_matrix_f rgb_matrix_functions[6][2] = {
#ifdef ENCODER_ENABLE
static pin_t encoders_pad_a[] = ENCODERS_PAD_A;
-#define NUMBER_OF_ENCODERS (sizeof(encoders_pad_a)/sizeof(pin_t))
+#define NUMBER_OF_ENCODERS ARRAY_SIZE(encoders_pad_a)
const uint16_t PROGMEM encoders[][NUMBER_OF_ENCODERS * 2][2] = {
[_QWERTY] = ENCODER_LAYOUT( \
diff --git a/keyboards/rocketboard_16/keycode_lookup.c b/keyboards/rocketboard_16/keycode_lookup.c
index d967a03c316..ab2e69b3467 100644
--- a/keyboards/rocketboard_16/keycode_lookup.c
+++ b/keyboards/rocketboard_16/keycode_lookup.c
@@ -18,7 +18,7 @@
#include "print.h"
#include "via.h"
-#define num_keycodes (sizeof(lookup_table)/sizeof(lookup_table[0]))
+#define num_keycodes ARRAY_SIZE(lookup_table)
static char UNKNOWN_KEYCODE[] = "UNKNOWN";
int cmp(const void *v1, const void *v2)
@@ -288,7 +288,7 @@ lookup_table_t lookup_table[334] =
{"KC_LT", KC_LT},
{"KC_GT", KC_GT},
{"KC_QUES", KC_QUES},
- {"RESET", RESET},
+ {"RESET", QK_BOOT},
{"DEBUG", DEBUG},
{"MAGIC_TOGGLE_NKRO", MAGIC_TOGGLE_NKRO},
{"KC_GESC", KC_GESC},
diff --git a/keyboards/shoc/config.h b/keyboards/shoc/config.h
new file mode 100644
index 00000000000..98084059af4
--- /dev/null
+++ b/keyboards/shoc/config.h
@@ -0,0 +1,34 @@
+/* Copyright 2022 JannikB5825
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#include "config_common.h"
+
+#define OLED_DISPLAY_128X64
+#define OLED_TIMEOUT 300000
+
+#define MATRIX_ROWS 8
+#define MATRIX_COLS 8
+
+/* key matrix pins */
+#define MATRIX_ROW_PINS { F4, F5, F6, F7, B1, B3, B6, B2 }
+#define MATRIX_COL_PINS { D3, D2, D4, C6, D7, E6, B4, B5 }
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+#define DEBOUNCE 5
+
diff --git a/keyboards/shoc/info.json b/keyboards/shoc/info.json
new file mode 100644
index 00000000000..d398e679565
--- /dev/null
+++ b/keyboards/shoc/info.json
@@ -0,0 +1,83 @@
+{
+ "keyboard_name": "Shoc",
+ "manufacturer": "JannikB5825",
+ "url": "https://github.com/JannikB5825/Shoc",
+ "maintainer": "JannikB5825",
+ "usb": {
+ "vid": "0xFEED",
+ "pid": "0x6060",
+ "device_version": "1.0.0"
+ },
+ "processor": "atmega32u4",
+ "bootloader": "caterina",
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ { "x": 0, "y": 0 },
+ { "x": 1, "y": 0 },
+ { "x": 2, "y": 0 },
+ { "x": 3, "y": 0 },
+ { "x": 4, "y": 0 },
+ { "x": 5, "y": 0 },
+ { "x": 6, "y": 0 },
+ { "x": 7, "y": 0 },
+ { "x": 0, "y": 1 },
+ { "x": 1, "y": 1 },
+ { "x": 2, "y": 1 },
+ { "x": 3, "y": 1 },
+ { "x": 4, "y": 1 },
+ { "x": 5, "y": 1 },
+ { "x": 6, "y": 1 },
+ { "x": 7, "y": 1 },
+ { "x": 0, "y": 2, "w": 1.5 },
+ { "x": 1.5, "y": 2 },
+ { "x": 2.5, "y": 2 },
+ { "x": 3.5, "y": 2 },
+ { "x": 4.5, "y": 2 },
+ { "x": 5.5, "y": 2 },
+ { "x": 6.5, "y": 2 },
+ { "x": 7.5, "y": 2 },
+ { "x": 0, "y": 3, "w": 2 },
+ { "x": 2, "y": 3 },
+ { "x": 3, "y": 3 },
+ { "x": 4, "y": 3 },
+ { "x": 5, "y": 3 },
+ { "x": 6, "y": 3 },
+ { "x": 7, "y": 3 },
+ { "x": 8, "y": 3 },
+ { "x": 0, "y": 4, "w": 1.5 },
+ { "x": 1.5, "y": 4 },
+ { "x": 2.5, "y": 4, "w": 1.5 },
+ { "x": 4, "y": 4, "w": 2 },
+ { "x": 6, "y": 4 },
+ { "x": 7, "y": 4, "w": 2 },
+ { "x": 9, "y": 4 },
+ { "x": 10, "y": 4 },
+ { "x": 12, "y": 0, "w": 2 },
+ { "x": 11, "y": 0 },
+ { "x": 10, "y": 0 },
+ { "x": 9, "y": 0 },
+ { "x": 8, "y": 0 },
+ { "x": 8, "y": 1 },
+ { "x": 9, "y": 1 },
+ { "x": 10, "y": 1 },
+ { "x": 13, "y": 4 },
+ { "x": 12, "y": 4 },
+ { "x": 11, "y": 4 },
+ { "x": 13, "y": 3 },
+ { "x": 12, "y": 3 },
+ { "x": 11, "y": 3 },
+ { "x": 10, "y": 3 },
+ { "x": 9, "y": 3 },
+ { "x": 11, "y": 1 },
+ { "x": 12, "y": 1 },
+ { "x": 13, "y": 1 },
+ { "x": 12.5, "y": 2, "w": 1.5 },
+ { "x": 11.5, "y": 2 },
+ { "x": 10.5, "y": 2 },
+ { "x": 9.5, "y": 2 },
+ { "x": 8.5, "y": 2 }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/shoc/keymaps/bongo/keymap.c b/keyboards/shoc/keymaps/bongo/keymap.c
new file mode 100644
index 00000000000..14779f1d755
--- /dev/null
+++ b/keyboards/shoc/keymaps/bongo/keymap.c
@@ -0,0 +1,176 @@
+/* Copyright 2022 JannikB5825
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Z, KC_U,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J,
+ KC_LSFT, KC_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL,
+ KC_BSPC, KC_MINS, KC_0, KC_9, KC_8, KC_I, KC_O, KC_P,
+ KC_RGHT, KC_DOWN, KC_LEFT, KC_EQL, KC_UP, KC_SLSH, KC_COMM, KC_DOT,
+ KC_RBRC, KC_LBRC, KC_BSLS, KC_ENT, KC_QUOT, KC_SCLN, KC_L, KC_K),
+
+ [1] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Z, KC_U,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J,
+ KC_LSFT, KC_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL,
+ KC_BSPC, KC_F11, KC_F10, KC_F9, KC_F8, KC_I, KC_O, KC_P,
+ KC_RGHT, KC_DOWN, KC_LEFT, KC_DEL, KC_UP, KC_SLSH, KC_COMM, KC_DOT,
+ KC_RBRC, KC_LBRC, KC_BSLS, KC_ENT, KC_QUOT, KC_SCLN, KC_L, KC_K)
+
+
+};
+#ifdef OLED_ENABLE
+
+oled_rotation_t oled_init_user(oled_rotation_t rotation) {
+ return OLED_ROTATION_0;
+}
+//full credit goes to https://www.reddit.com/user/Pop-X-/ only small feature comforts were added
+
+#define IDLE_FRAMES 5
+#define IDLE_SPEED 30 // below this wpm value your animation will idle
+#define TAP_FRAMES 2
+#define TAP_SPEED 60 // above this wpm value typing animation to triggere
+
+#define ANIM_FRAME_DURATION 200 // how long each frame lasts in ms
+#define ANIM_SIZE 636 // number of bytes in array, minimize for adequate firmware size, max is 1024
+
+uint32_t anim_timer = 0;
+uint32_t anim_sleep = 0;
+uint8_t current_idle_frame = 0;
+uint8_t current_tap_frame = 0;
+
+// Images credit j-inc(/James Incandenza) and pixelbenny. Credit to obosob for initial animation approach.
+static void render_anim(void) {
+ static const char PROGMEM idle[IDLE_FRAMES][ANIM_SIZE] = {
+ {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 16, 8, 8, 4, 4, 4, 8, 48, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,100,130, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 48, 48, 0,192,193,193,194, 4, 8, 16, 32, 64,128, 0, 0, 0,128,128,128,128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 8, 8, 8, 8, 8,196, 4,196, 4,196, 2,194, 2,194, 1, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 56, 4, 3, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 13, 1, 0, 64,160, 33, 34, 18, 17, 17, 17, 9, 8, 8, 8, 8, 4, 4, 8, 8, 16, 16, 16, 16, 16, 17, 15, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,170,170,255,255,195,191,127, 3,127,191,195,255,255,170,170, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 8, 8, 8, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,130,135, 31, 7,159, 7, 28, 7,159, 7,159, 7, 2,130, 0, 0, 0, 0,
+ 32, 16, 16, 16, 16, 8, 8, 8, 8, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 23, 0, 15, 1, 2, 1, 15, 0, 15, 2, 5, 8
+ },
+ {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 16, 8, 8, 4, 4, 4, 8, 48, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,100,130, 2, 2, 2, 2, 2, 1, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 48, 48, 0,192,193,193,194, 4, 8, 16, 32, 64,128, 0, 0, 0,128,128,128,128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 8, 8, 8, 8, 8,196, 4,196, 4,196, 2,194, 2,194, 1, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 56, 4, 3, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 13, 1, 0, 64,160, 33, 34, 18, 17, 17, 17, 9, 8, 8, 8, 8, 4, 4, 8, 8, 16, 16, 16, 16, 16, 17, 15, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,170,170,255,255,195,191,127, 3,127,191,195,255,255,170,170, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 8, 8, 8, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,130,135, 31, 7,159, 7, 28, 7,159, 7,159, 7, 2,130, 0, 0, 0, 0,
+ 32, 16, 16, 16, 16, 8, 8, 8, 8, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 23, 0, 15, 1, 2, 1, 15, 0, 15, 2, 5, 8
+ },
+ {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 8, 4, 2, 2, 4, 24, 96,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,194, 1, 1, 2, 2, 4, 4, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 96, 0,129,130,130,132, 8, 16, 32, 64,128, 0, 0, 0, 0,128,128,128,128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 8, 8, 8, 8, 8,196, 4,196, 4,196, 2,194, 2,194, 1, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,112, 25, 6, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 27, 3, 0, 64,160, 34, 36, 20, 18, 18, 18, 11, 8, 8, 8, 8, 5, 5, 9, 9, 16, 16, 16, 16, 16, 17, 15, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,170,170,255,255,195,191,127, 3,127,191,195,255,255,170,170, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 8, 8, 8, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,130,135, 31, 7,159, 7, 28, 7,159, 7,159, 7, 2,130, 0, 0, 0, 0,
+ 32, 16, 16, 16, 16, 8, 8, 8, 8, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 23, 0, 15, 1, 2, 1, 15, 0, 15, 2, 5, 8
+ },
+ {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0,128, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 8, 4, 2, 1, 1, 2, 12, 48, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,225, 0, 0, 1, 1, 2, 2, 1, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 48, 48, 0,192,193,193,194, 4, 8, 16, 32, 64,128, 0, 0, 0,128,128,128,128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 8, 8, 8, 8, 8,196, 4,196, 4,196, 2,194, 2,194, 1, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,112, 12, 3, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 13, 1, 0, 64,160, 33, 34, 18, 17, 17, 17, 9, 8, 8, 8, 8, 4, 4, 8, 8, 16, 16, 16, 16, 16, 17, 15, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,170,170,255,255,195,191,127, 3,127,191,195,255,255,170,170, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 8, 8, 8, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,130,135, 31, 7,159, 7, 28, 7,159, 7,159, 7, 2,130, 0, 0, 0, 0,
+ 32, 16, 16, 16, 16, 8, 8, 8, 8, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 23, 0, 15, 1, 2, 1, 15, 0, 15, 2, 5, 8
+ },
+ {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 8, 8, 4, 2, 2, 2, 4, 56, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,226, 1, 1, 2, 2, 2, 2, 1, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 48, 48, 0,192,193,193,194, 4, 8, 16, 32, 64,128, 0, 0, 0,128,128,128,128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 8, 8, 8, 8, 8,196, 4,196, 4,196, 2,194, 2,194, 1, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,112, 12, 3, 0, 0, 0, 0, 0, 0, 0, 12, 12, 12, 13, 1, 0, 64,160, 33, 34, 18, 17, 17, 17, 9, 8, 8, 8, 8, 4, 4, 8, 8, 16, 16, 16, 16, 16, 17, 15, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,170,170,255,255,195,191,127, 3,127,191,195,255,255,170,170, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 4, 4, 8, 8, 8, 8, 8, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,130,135, 31, 7,159, 7, 28, 7,159, 7,159, 7, 2,130, 0, 0, 0, 0,
+ 32, 16, 16, 16, 16, 8, 8, 8, 8, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 23, 0, 15, 1, 2, 1, 15, 0, 15, 2, 5, 8
+ }
+ };
+ static const char PROGMEM prep[][ANIM_SIZE] = {
+ {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0,128, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 8, 4, 2, 1, 1, 2, 12, 48, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,225, 0, 0, 1, 1, 2, 2,129,128,128, 0, 0,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 48, 48, 0, 0, 1,225, 26, 6, 9, 49, 53, 1,138,124, 0, 0,128,128,128,128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 8, 8, 8, 8, 8,196, 4,196, 4,196, 2,194, 2,194, 1, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,112, 12, 3, 0, 0, 24, 6, 5,152,153,132,195,124, 65, 65, 64, 64, 32, 33, 34, 18, 17, 17, 17, 9, 8, 8, 8, 8, 4, 4, 4, 4, 4, 4, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,170,170,255,255,195,191,127, 3,127,191,195,255,255,170,170, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,130,135, 31, 7,159, 7, 28, 7,159, 7,159, 7, 2,130, 0, 0, 0, 0,
+ 32, 16, 16, 16, 16, 8, 8, 8, 8, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 23, 0, 15, 1, 2, 1, 15, 0, 15, 2, 5, 8
+ }
+ };
+ static const char PROGMEM tap[TAP_FRAMES][ANIM_SIZE] = {
+ {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0,128, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 8, 4, 2, 1, 1, 2, 12, 48, 64,128, 0, 0, 0, 0, 0, 0, 0,248,248,248,248, 0, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,225, 0, 0, 1, 1, 2, 2,129,128,128, 0, 0,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 48, 48, 0, 0, 1, 1, 2, 4, 8, 16, 32, 67,135, 7, 1, 0,184,188,190,159, 95, 95, 79, 76, 32, 32, 32, 32, 16, 16, 16, 16, 8, 8, 8, 8, 8,196, 4,196, 4,196, 2,194, 2,194, 1, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,112, 12, 3, 0, 0, 24, 6, 5,152,153,132, 67,124, 65, 65, 64, 64, 32, 33, 34, 18, 17, 17, 17, 9, 8, 8, 8, 8, 4, 4, 8, 8, 16, 16, 16, 16, 16, 17, 15, 1, 61,124,252,252,252,252,252, 60, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,170,170,255,255,195,191,127, 3,127,191,195,255,255,170,170, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 3, 2, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,130,135, 31, 7,159, 7, 28, 7,159, 7,159, 7, 2,130, 0, 0, 0, 0,
+ 32, 16, 16, 16, 16, 8, 8, 8, 8, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 23, 0, 15, 1, 2, 1, 15, 0, 15, 2, 5, 8
+ },
+ {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0,128, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 8, 4, 2, 1, 1, 2, 12, 48, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,225, 0, 0, 1, 1, 2, 2, 1, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 48, 48, 0, 0, 1,225, 26, 6, 9, 49, 53, 1,138,124, 0, 0,128,128,128,128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 8, 8, 8, 8, 8,196, 4,196, 4,196, 2,194, 2,194, 1, 1, 1, 1, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,112, 12, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 64,160, 33, 34, 18, 17, 17, 17, 9, 8, 8, 8, 8, 4, 4, 4, 4, 4, 4, 2, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,170,170,255,255,195,191,127, 3,127,191,195,255,255,170,170, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128,128,128, 64, 64, 64, 64, 32, 32, 32, 32, 16, 16, 16, 16, 16, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 2, 3,122,122,121,121,121,121, 57, 49, 2, 2, 4, 4, 8, 8, 8,136,136,135,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2,130,135, 31, 7,159, 7, 28, 7,159, 7,159, 7, 2,130, 0, 0, 0, 0,
+ 32, 16, 16, 16, 16, 8, 8, 8, 8, 4, 4, 4, 4, 2, 2, 2, 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,120,124,254,255, 63, 7, 0, 0, 0, 0,255,255,127,127, 63, 62, 28, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 8, 8, 23, 0, 15, 1, 2, 1, 15, 0, 15, 2, 5, 8
+ },
+ };
+
+ //assumes 1 frame prep stage
+ void animation_phase(void) {
+ if(get_current_wpm() <=IDLE_SPEED){
+ current_idle_frame = (current_idle_frame + 1) % IDLE_FRAMES;
+ oled_write_raw_P(idle[abs((IDLE_FRAMES-1)-current_idle_frame)], ANIM_SIZE);
+ }
+ if(get_current_wpm() >IDLE_SPEED && get_current_wpm() =TAP_SPEED){
+ current_tap_frame = (current_tap_frame + 1) % TAP_FRAMES;
+ oled_write_raw_P(tap[abs((TAP_FRAMES-1)-current_tap_frame)], ANIM_SIZE);
+ }
+ }
+ if(get_current_wpm() != 000) {
+ oled_on();
+ if(timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) {
+ anim_timer = timer_read32();
+ animation_phase();
+ }
+ anim_sleep = timer_read32();
+ } else {
+ if(timer_elapsed32(anim_sleep) > OLED_TIMEOUT) {
+ oled_off();
+ } else {
+ if(timer_elapsed32(anim_timer) > ANIM_FRAME_DURATION) {
+ anim_timer = timer_read32();
+ animation_phase();
+ }
+ }
+ }
+}
+
+
+bool oled_task_user(void) {
+ render_anim();
+ oled_set_cursor(0,6);
+ oled_write_P(PSTR(" WPM: "), false);
+ oled_write(get_u8_str(get_current_wpm(), '0'), false);
+ if(host_keyboard_leds() & (1<.
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Z, KC_U,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J,
+ KC_LSFT, KC_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL,
+ KC_BSPC, KC_MINS, KC_0, KC_9, KC_8, KC_I, KC_O, KC_P,
+ KC_RGHT, KC_DOWN, KC_LEFT, KC_EQL, KC_UP, KC_SLSH, KC_COMM, KC_DOT,
+ KC_RBRC, KC_LBRC, KC_BSLS, KC_ENT, KC_QUOT, KC_SCLN, KC_L, KC_K),
+
+ [1] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Z, KC_U,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J,
+ KC_LSFT, KC_Y, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RCTL,
+ KC_BSPC, KC_F11, KC_F10, KC_F9, KC_F8, KC_I, KC_O, KC_P,
+ KC_RGHT, KC_DOWN, KC_LEFT, KC_DEL, KC_UP, KC_SLSH, KC_COMM, KC_DOT,
+ KC_RBRC, KC_LBRC, KC_BSLS, KC_ENT, KC_QUOT, KC_SCLN, KC_L, KC_K)
+
+
+};
diff --git a/keyboards/shoc/readme.md b/keyboards/shoc/readme.md
new file mode 100644
index 00000000000..4f81d47efbc
--- /dev/null
+++ b/keyboards/shoc/readme.md
@@ -0,0 +1,21 @@
+# Shoc
+
+
+
+A 64 Key keyboard with an Oled Display.
+
+* Keyboard Maintainer: [JannikB5825](https://github.com/JannikB5825)
+* Hardware Supported: Shoc PCB, Pro Micro 5V/16MHz and compatible.
+* Hardware Availability: [Shoc](https://github.com/JannikB5825/Shoc).
+
+Make example for this keyboard (after setting up your build environment):
+
+ make shoc:default
+
+Flashing example for this keyboard:
+
+ make shoc:default:flash
+
+## Bootloader
+
+Briefly press the button along the outer edge of the PCB next to the microcontroller.
diff --git a/keyboards/shoc/rules.mk b/keyboards/shoc/rules.mk
new file mode 100644
index 00000000000..806df504210
--- /dev/null
+++ b/keyboards/shoc/rules.mk
@@ -0,0 +1,15 @@
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = no # Mouse keys
+EXTRAKEY_ENABLE = no # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = no # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+OLED_ENABLE = yes
+OLED_DRIVER = SSD1306
+WPM_ENABLE = yes
diff --git a/keyboards/mechwild/bde/lefty/lefty.c b/keyboards/shoc/shoc.c
similarity index 72%
rename from keyboards/mechwild/bde/lefty/lefty.c
rename to keyboards/shoc/shoc.c
index 6873ed36a0e..eabb767d289 100644
--- a/keyboards/mechwild/bde/lefty/lefty.c
+++ b/keyboards/shoc/shoc.c
@@ -1,17 +1,16 @@
-/* Copyright 2020 Kyle McCreery
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
+/* Copyright 2022 JannikB5825
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
*/
-
-#include "bde.h"
+#include "shoc.h"
diff --git a/keyboards/shoc/shoc.h b/keyboards/shoc/shoc.h
new file mode 100644
index 00000000000..3ea48781e02
--- /dev/null
+++ b/keyboards/shoc/shoc.h
@@ -0,0 +1,38 @@
+/* Copyright 2022 JannikB5825
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+#include "quantum.h"
+
+#define LAYOUT( \
+ k00, k01, k02, k03, k04, k05, k06, k07, \
+ k10, k11, k12, k13, k14, k15, k16, k17, \
+ k20, k21, k22, k23, k24, k25, k26, k27, \
+ k30, k31, k32, k33, k34, k35, k36, k37, \
+ k40, k41, k42, k43, k44, k45, k46, k47, \
+ k50, k51, k52, k53, k54, k55, k56, k57, \
+ k60, k61, k62, k63, k64, k65, k66, k67, \
+ k70, k71, k72, k73, k74, k75, k76, k77 \
+) { \
+ { k00, k01, k02, k03, k04, k05, k06, k07 }, \
+ { k10, k11, k12, k13, k14, k15, k16, k17 }, \
+ { k20, k21, k22, k23, k24, k25, k26, k27 }, \
+ { k30, k31, k32, k33, k34, k35, k36, k37 }, \
+ { k40, k41, k42, k43, k44, k45, k46, k47 }, \
+ { k50, k51, k52, k53, k54, k55, k56, k57 }, \
+ { k60, k61, k62, k63, k64, k65, k66, k67 }, \
+ { k70, k71, k72, k73, k74, k75, k76, k77 } \
+}
+
diff --git a/keyboards/soda/cherish/readme.md b/keyboards/soda/cherish/readme.md
index d30ea11e4cf..9a22e635b2d 100644
--- a/keyboards/soda/cherish/readme.md
+++ b/keyboards/soda/cherish/readme.md
@@ -25,6 +25,6 @@ qmk compile -kb soda/cherish -km via
Enter the bootloader in 2 ways:
* **Physical reset button**: Briefly press the button: [boot] first, then press button: [reset] on the back of the PCB
-* **Keycode in layout**: Press the key mapped to `RESET` if it is available
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/sofle/keymaps/flare576/config.h b/keyboards/sofle/keymaps/flare576/config.h
index c0f0a7d563b..c89f38c127f 100644
--- a/keyboards/sofle/keymaps/flare576/config.h
+++ b/keyboards/sofle/keymaps/flare576/config.h
@@ -37,4 +37,4 @@
#define TAPPING_TERM 200
#undef MANUFACTURER
-#define MANUFACTURER Flare576
+#define MANUFACTURER "Flare576"
diff --git a/keyboards/spaceholdings/nebula12/config.h b/keyboards/spaceholdings/nebula12/config.h
index 6a2ac596fbd..97623f0ff0c 100755
--- a/keyboards/spaceholdings/nebula12/config.h
+++ b/keyboards/spaceholdings/nebula12/config.h
@@ -19,7 +19,7 @@ along with this program. If not, see .
#include "config_common.h"
-/* Ensure we jump to bootloader if the RESET keycode was pressed */
+/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
/* LSE clock */
@@ -39,7 +39,7 @@ along with this program. If not, see .
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
-/* Ensure we jump to bootloader if the RESET keycode was pressed */
+/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
/* Setting up 400KHz I2C Clock for a 48MHz system clock */
diff --git a/keyboards/spaceman/2_milk/keymaps/copypasta_macfancy/config.h b/keyboards/spaceman/2_milk/keymaps/copypasta_macfancy/config.h
new file mode 100644
index 00000000000..bbd93cfc162
--- /dev/null
+++ b/keyboards/spaceman/2_milk/keymaps/copypasta_macfancy/config.h
@@ -0,0 +1,6 @@
+// Copyright 2022 Ryan Neff (@JellyTitan)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define TAPPING_TERM 200
diff --git a/keyboards/spaceman/2_milk/keymaps/copypasta_macfancy/keymap.c b/keyboards/spaceman/2_milk/keymaps/copypasta_macfancy/keymap.c
new file mode 100644
index 00000000000..6f21c630bf9
--- /dev/null
+++ b/keyboards/spaceman/2_milk/keymaps/copypasta_macfancy/keymap.c
@@ -0,0 +1,56 @@
+// Copyright 2022 Ryan Neff (@JellyTitan)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum tapdance_keycodes {
+ TD_KEY_1,
+ TD_KEY_2
+};
+
+void dance_key_one(qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ /* Copy for Mac. */
+ /* Windows & Linux use Ctrl+C: tap_code16(C(KC_C)) */
+ tap_code16(G(KC_C));
+ reset_tap_dance(state);
+ } else if (state->count == 2) {
+ /* Cut for Mac. */
+ /* Windows & Linux use Ctrl+X: tap_code16(C(KC_X)) */
+ tap_code16(G(KC_X));
+ reset_tap_dance(state);
+ } else if (state->count == 3) {
+ /* Plain old Tab. */
+ tap_code(KC_TAB);
+ reset_tap_dance(state);
+ }
+}
+
+void dance_key_two(qk_tap_dance_state_t *state, void *user_data) {
+ if (state->count == 1) {
+ /* Paste for Mac. */
+ /* Windows & Linux use Ctrl+V: tap_code16(C(KC_V)) */
+ tap_code16(G(KC_V));
+ reset_tap_dance(state);
+ } else if (state->count == 2) {
+ /* Paste as value Gui+Shift+V for Mac. */
+ /* Windows & Linux use Ctrl+Shift V: tap_code16(C(S(KC_V))) */
+ tap_code16(G(S(KC_V)));
+ reset_tap_dance(state);
+ } else if (state->count == 3) {
+ /* Tab between programs for mac Gui+Tab. */
+ /* Windows & Linux use Ctrl+Tab: tap_code16(C(KC_TAB)) */
+ tap_code16(G(KC_TAB));
+ reset_tap_dance(state);
+ }
+}
+
+qk_tap_dance_action_t tap_dance_actions[] = {
+ [TD_KEY_1] = ACTION_TAP_DANCE_FN(dance_key_one),
+ [TD_KEY_2] = ACTION_TAP_DANCE_FN(dance_key_two)
+};
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(TD(TD_KEY_1),
+ TD(TD_KEY_2))
+};
diff --git a/keyboards/spaceman/2_milk/keymaps/copypasta_macfancy/readme.md b/keyboards/spaceman/2_milk/keymaps/copypasta_macfancy/readme.md
new file mode 100644
index 00000000000..722e7491bcb
--- /dev/null
+++ b/keyboards/spaceman/2_milk/keymaps/copypasta_macfancy/readme.md
@@ -0,0 +1,18 @@
+# Copypasta Macfancy Keymap for Milk 2%
+
+
+
+Extra fancy copy/paste utilities for the Milk 2% keyboard on MacOS. Milk 2% designed by [Spaceman](https://github.com/Spaceboards/SpaceboardsHardware/tree/master/Keyboards/2%25%20Milk).
+
+Uses Tapping term for double and tripple tapping.
+Tapping speed can be adjusted with TAPPING_TERM in config.h
+
+### Key One
+- 1 Tap: Copy
+- 2 Taps: Cut
+- 3 Taps: Tab
+
+### Key Two
+- 1 Tap: Paste
+- 2 Taps: Paste as Value
+- 3 Taps: Tab between programs
diff --git a/keyboards/spaceman/2_milk/keymaps/copypasta_macfancy/rules.mk b/keyboards/spaceman/2_milk/keymaps/copypasta_macfancy/rules.mk
new file mode 100644
index 00000000000..628a960a710
--- /dev/null
+++ b/keyboards/spaceman/2_milk/keymaps/copypasta_macfancy/rules.mk
@@ -0,0 +1,4 @@
+# Copyright 2022 Ryan Neff (@JellyTitan)
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+TAP_DANCE_ENABLE = yes # Tap Dance
diff --git a/keyboards/splitkb/kyria/keymaps/drashna/config.h b/keyboards/splitkb/kyria/keymaps/drashna/config.h
index 1de3615d986..ffd17ebd8fb 100644
--- a/keyboards/splitkb/kyria/keymaps/drashna/config.h
+++ b/keyboards/splitkb/kyria/keymaps/drashna/config.h
@@ -46,4 +46,9 @@
#define BOOTMAGIC_LITE_ROW_RIGHT 4
#define BOOTMAGIC_LITE_COLUMN_RIGHT 7
+#define BOOTMAGIC_LITE_EEPROM_ROW 1
+#define BOOTMAGIC_LITE_EEPROM_COLUMN 7
+#define BOOTMAGIC_LITE_EEPROM_ROW_RIGHT 5
+#define BOOTMAGIC_LITE_EEPROM_COLUMN_RIGHT 7
+
#define SERIAL_USART_SPEED 921600
diff --git a/keyboards/system76/launch_1/launch_1.c b/keyboards/system76/launch_1/launch_1.c
index 74288edf034..fd780f6fee2 100644
--- a/keyboards/system76/launch_1/launch_1.c
+++ b/keyboards/system76/launch_1/launch_1.c
@@ -182,7 +182,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
}
switch (keycode) {
- case RESET:
+ case QK_BOOT:
if (record->event.pressed) {
system76_ec_unlock();
}
diff --git a/keyboards/tanuki/keymaps/tucznak/config.h b/keyboards/tanuki/keymaps/tucznak/config.h
index 4f2a778ff29..37d42c08140 100644
--- a/keyboards/tanuki/keymaps/tucznak/config.h
+++ b/keyboards/tanuki/keymaps/tucznak/config.h
@@ -3,23 +3,16 @@
#undef MANUFACTURER
#undef PRODUCT
-#define MANUFACTURER Potato Inc.
-#define PRODUCT Trash Panda
+#define MANUFACTURER "Potato Inc."
+#define PRODUCT "Trash Panda"
/* for bootloader */
#define QMK_ESC_OUTPUT B2
#define QMK_ESC_INPUT D0
#define QMK_LED B0
-/* turn off RGB when computer sleeps */
-#ifdef RGBLIGHT_ENABLE
-#define RGBLIGHT_SLEEP
-#endif
-
/* send tap key if no layer key was used even after tap delay */
-#ifdef TAPPING_TERM
#undef TAPPING_TERM
-#endif
#define TAPPING_TERM 250
#define RETRO_TAPPING
#define TAPPING_TOGGLE 2
diff --git a/keyboards/tominabox1/le_chiffre/readme.md b/keyboards/tominabox1/le_chiffre/readme.md
index d2d688289eb..9ac3d6c81ca 100644
--- a/keyboards/tominabox1/le_chiffre/readme.md
+++ b/keyboards/tominabox1/le_chiffre/readme.md
@@ -2,7 +2,7 @@

-Le Chiffre (ironically, "the number" in French is a 30% keyboard designed by tominabox1. The purpose of the board is to provide a platform for MX and Choc ergo in one package for when ones wrists need a break. The board supports an RGB LED strip with DI on port F0. The board is also fitted with support for run-of-the-mill .91" OLED and EC11 rotary encoder.
+Le Chiffre (ironically, "the number" in French) is a 30% keyboard designed by tominabox1. The purpose of the board is to provide a platform for MX and Choc ergo in one package for when ones wrists need a break. The board supports an RGB LED strip with DI on port F0. The board is also fitted with support for run-of-the-mill .91" OLED and EC11 rotary encoder.
There are 3 PCB revisions: Rev 1 (Original), Rev 2 (P3D version sold with the Le Chiffre Plus), and HE (Hotswap Edition from Checkerboards.xyz).
diff --git a/keyboards/torn/bongocat.c b/keyboards/torn/bongocat.c
index 21322c9536e..9d6d9a85f5a 100644
--- a/keyboards/torn/bongocat.c
+++ b/keyboards/torn/bongocat.c
@@ -18,8 +18,6 @@
#ifdef OLED_ENABLE
-#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
-
#define IDLE_SPEED 20 // idle below this wpm
#define TAP_SPEED 60 // tap above this wpm
diff --git a/keyboards/tzarc/djinn/djinn_portscan_matrix.c b/keyboards/tzarc/djinn/djinn_portscan_matrix.c
index f0ae9721f96..6fcfd48bbaf 100644
--- a/keyboards/tzarc/djinn/djinn_portscan_matrix.c
+++ b/keyboards/tzarc/djinn/djinn_portscan_matrix.c
@@ -92,11 +92,11 @@ bool matrix_scan_custom(matrix_row_t current_matrix[]) {
void matrix_wait_for_interrupt(void) {
// Set up row/col pins and attach callback
- for (int i = 0; i < sizeof(col_pins) / sizeof(pin_t); ++i) {
+ for (int i = 0; i < ARRAY_SIZE(col_pins); ++i) {
setPinOutput(col_pins[i]);
writePinLow(col_pins[i]);
}
- for (int i = 0; i < sizeof(row_pins) / sizeof(pin_t); ++i) {
+ for (int i = 0; i < ARRAY_SIZE(row_pins); ++i) {
setPinInputHigh(row_pins[i]);
palEnableLineEvent(row_pins[i], PAL_EVENT_MODE_BOTH_EDGES);
}
@@ -105,12 +105,12 @@ void matrix_wait_for_interrupt(void) {
__WFI();
// Now that the interrupt has woken us up, reset all the row/col pins back to defaults
- for (int i = 0; i < sizeof(row_pins) / sizeof(pin_t); ++i) {
+ for (int i = 0; i < ARRAY_SIZE(row_pins); ++i) {
palDisableLineEvent(row_pins[i]);
writePinHigh(row_pins[i]);
setPinInputHigh(row_pins[i]);
}
- for (int i = 0; i < sizeof(col_pins) / sizeof(pin_t); ++i) {
+ for (int i = 0; i < ARRAY_SIZE(col_pins); ++i) {
writePinHigh(col_pins[i]);
setPinInputHigh(col_pins[i]);
}
diff --git a/keyboards/w1_at/config.h b/keyboards/w1_at/config.h
index 884b292447e..e04d3b15efd 100644
--- a/keyboards/w1_at/config.h
+++ b/keyboards/w1_at/config.h
@@ -32,7 +32,7 @@ along with this program. If not, see .
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
#define DEBOUNCE 5
-/* Ensure we jump to bootloader if the RESET keycode was pressed */
+/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
/* Indicator LEDs */
diff --git a/keyboards/westm/westm68/config.h b/keyboards/westm/westm68/config.h
index 1d4d028e9fd..3909c3e5e28 100644
--- a/keyboards/westm/westm68/config.h
+++ b/keyboards/westm/westm68/config.h
@@ -18,7 +18,7 @@
#include "config_common.h"
-/* Ensure we jump to bootloader if the RESET keycode was pressed */
+/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
/* key matrix size */
diff --git a/keyboards/westm/westm9/config.h b/keyboards/westm/westm9/config.h
index 6d0bf729ac0..51ccf743a06 100644
--- a/keyboards/westm/westm9/config.h
+++ b/keyboards/westm/westm9/config.h
@@ -18,7 +18,7 @@
#include "config_common.h"
-/* Ensure we jump to bootloader if the RESET keycode was pressed */
+/* Ensure we jump to bootloader if the QK_BOOT keycode was pressed */
#define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
/* key matrix size */
diff --git a/keyboards/wilba_tech/wt75_b/keymaps/madhatter/config.h b/keyboards/wilba_tech/wt75_b/keymaps/madhatter/config.h
index afb1d86d6c6..dc2a125b1e0 100644
--- a/keyboards/wilba_tech/wt75_b/keymaps/madhatter/config.h
+++ b/keyboards/wilba_tech/wt75_b/keymaps/madhatter/config.h
@@ -1,4 +1,4 @@
#pragma once
#undef PRODUCT
-#define PRODUCT MadHatter\x27s Custom Singa V3
+#define PRODUCT "MadHatter's Custom Singa V3"
diff --git a/keyboards/woodkeys/meira/meira.c b/keyboards/woodkeys/meira/meira.c
index e900fd0dd68..87a6d11b4ee 100644
--- a/keyboards/woodkeys/meira/meira.c
+++ b/keyboards/woodkeys/meira/meira.c
@@ -79,7 +79,7 @@ void matrix_scan_kb(void)
bool process_record_kb(uint16_t keycode, keyrecord_t *record) {
// Test code that turns on the switch led for the key that is pressed
// set_backlight_by_keymap(record->event.key.col, record->event.key.row);
- if (keycode == RESET) {
+ if (keycode == QK_BOOT) {
reset_keyboard_kb();
} else {
}
diff --git a/keyboards/work_louder/loop/config.h b/keyboards/work_louder/loop/config.h
index 057be6df341..32856ecebfa 100644
--- a/keyboards/work_louder/loop/config.h
+++ b/keyboards/work_louder/loop/config.h
@@ -52,7 +52,6 @@ along with this program. If not, see .
//#define BACKLIGHT_BREATHING
#define RGBLIGHT_DI_PIN E6
-# define RGBLED_NUM 24
//# define RGBLIGHT_HUE_STEP 8
//# define RGBLIGHT_SAT_STEP 8
//# define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/work_louder/loop/info.json b/keyboards/work_louder/loop/info.json
index f83124a32d6..67b9d1f06dd 100644
--- a/keyboards/work_louder/loop/info.json
+++ b/keyboards/work_louder/loop/info.json
@@ -5,8 +5,7 @@
"maintainer": "Work Louder",
"usb": {
"vid": "0x574C",
- "pid": "0x1DF9",
- "device_version": "0.0.1"
+ "pid": "0x1DF9"
},
"layouts": {
"LAYOUT": {
diff --git a/keyboards/work_louder/loop/rev1/config.h b/keyboards/work_louder/loop/rev1/config.h
new file mode 100644
index 00000000000..1bc02d08a68
--- /dev/null
+++ b/keyboards/work_louder/loop/rev1/config.h
@@ -0,0 +1,6 @@
+// Copyright 2021 Christopher Courtney, aka Drashna Jael're (@drashna)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+# define RGBLED_NUM 24
diff --git a/keyboards/work_louder/loop/rev1/info.json b/keyboards/work_louder/loop/rev1/info.json
new file mode 100644
index 00000000000..90ac25f360b
--- /dev/null
+++ b/keyboards/work_louder/loop/rev1/info.json
@@ -0,0 +1,5 @@
+{
+ "usb": {
+ "device_version": "0.0.1"
+ }
+}
diff --git a/keyboards/work_louder/loop/rev1/rules.mk b/keyboards/work_louder/loop/rev1/rules.mk
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/keyboards/work_louder/loop/rev3/config.h b/keyboards/work_louder/loop/rev3/config.h
new file mode 100644
index 00000000000..5451d4466e2
--- /dev/null
+++ b/keyboards/work_louder/loop/rev3/config.h
@@ -0,0 +1,6 @@
+// Copyright 2021 Christopher Courtney, aka Drashna Jael're (@drashna)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RGBLED_NUM 11
diff --git a/keyboards/work_louder/loop/rev3/info.json b/keyboards/work_louder/loop/rev3/info.json
new file mode 100644
index 00000000000..b377cdff008
--- /dev/null
+++ b/keyboards/work_louder/loop/rev3/info.json
@@ -0,0 +1,5 @@
+{
+ "usb": {
+ "device_version": "0.0.3"
+ }
+}
diff --git a/keyboards/work_louder/loop/rev3/rules.mk b/keyboards/work_louder/loop/rev3/rules.mk
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/keyboards/work_louder/loop/rules.mk b/keyboards/work_louder/loop/rules.mk
index 6414533ce06..ac0a5137858 100644
--- a/keyboards/work_louder/loop/rules.mk
+++ b/keyboards/work_louder/loop/rules.mk
@@ -24,3 +24,5 @@ RGB_MATRIX_DRIVER = WS2812
LTO_ENABLE = yes
SRC += rgb_functions.c
+
+DEFAULT_FOLDER = work_louder/loop/rev3
diff --git a/keyboards/work_louder/nano/keymaps/via/keymap.c b/keyboards/work_louder/nano/keymaps/via/keymap.c
index 612e8c8c03e..84c5895d5e8 100644
--- a/keyboards/work_louder/nano/keymaps/via/keymap.c
+++ b/keyboards/work_louder/nano/keymaps/via/keymap.c
@@ -18,10 +18,10 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
[0] = LAYOUT(
- KC_PSCR, MACRO00, MO(1)
+ TG(1), C(KC_C), C(KC_V)
),
[1] = LAYOUT(
- QK_BOOT, MACRO01, _______
+ TG(1) , G(KC_C), G(KC_V)
),
[2] = LAYOUT(
_______, _______, _______
@@ -34,9 +34,9 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][2] = {
- [0] = { ENCODER_CCW_CW(KC_PGDN, KC_PGDN) },
- [1] = { ENCODER_CCW_CW(_______, _______) },
+ [0] = { ENCODER_CCW_CW(C(KC_Z), C(KC_Y)) },
+ [1] = { ENCODER_CCW_CW(G(KC_Z), G(S(KC_Z))) },
[2] = { ENCODER_CCW_CW(_______, _______) },
- [3] = { ENCODER_CCW_CW(_______, _______) },
+ [3] = { ENCODER_CCW_CW(_______, _______) }
};
#endif
diff --git a/keyboards/work_louder/work_board/config.h b/keyboards/work_louder/work_board/config.h
index 9b507f56cac..512c2827948 100644
--- a/keyboards/work_louder/work_board/config.h
+++ b/keyboards/work_louder/work_board/config.h
@@ -42,7 +42,6 @@ along with this program. If not, see .
#define DIODE_DIRECTION COL2ROW
#define RGBLIGHT_DI_PIN D2
-#define RGBLED_NUM 26
//# define RGBLIGHT_HUE_STEP 8
//# define RGBLIGHT_SAT_STEP 8
//# define RGBLIGHT_VAL_STEP 8
diff --git a/keyboards/work_louder/work_board/info.json b/keyboards/work_louder/work_board/info.json
index cfb6e928109..570e5c21db9 100644
--- a/keyboards/work_louder/work_board/info.json
+++ b/keyboards/work_louder/work_board/info.json
@@ -5,8 +5,7 @@
"maintainer": "Work Louder",
"usb": {
"vid": "0x574C",
- "pid": "0xDCD1",
- "device_version": "0.0.1"
+ "pid": "0xDCD1"
},
"layouts": {
"LAYOUT_2u_space": {
diff --git a/keyboards/work_louder/work_board/keymaps/default/keymap.c b/keyboards/work_louder/work_board/keymaps/default/keymap.c
index cae65ff5c26..3489274fea4 100644
--- a/keyboards/work_louder/work_board/keymaps/default/keymap.c
+++ b/keyboards/work_louder/work_board/keymaps/default/keymap.c
@@ -18,19 +18,11 @@
enum planck_layers {
_QWERTY,
- _COLEMAK,
- _DVORAK,
_LOWER,
_RAISE,
_ADJUST
};
-enum planck_keycodes {
- QWERTY = SAFE_RANGE,
- COLEMAK,
- DVORAK,
-};
-
enum tap_dances {
ENC_TAP,
};
@@ -39,117 +31,33 @@ enum tap_dances {
#define RAISE MO(_RAISE)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [_QWERTY] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, TD(ENC_TAP),
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENT,
+ MO(3), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
-/* Qwerty
- * ,-----------------------------------------------------------------------------------.
- * | Esc | Q | W | E | R | T | Y | U | I | O | P | Bksp |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Tab | A | S | D | F | G | H | J | K | L | ; | " |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | N | M | , | . | / |Enter |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
- * `-----------------------------------------------------------------------------------'
- */
-[_QWERTY] = LAYOUT(
- KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, TD(ENC_TAP),
- KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
- KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
-),
+ [_LOWER] = LAYOUT(
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, _______,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
-/* Colemak
- * ,-----------------------------------------------------------------------------------.
- * | Esc | Q | W | F | P | G | J | L | U | Y | ; | Bksp |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Tab | A | R | S | T | D | H | N | E | I | O | " |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Shift| Z | X | C | V | B | K | M | , | . | / |Enter |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
- * `-----------------------------------------------------------------------------------'
- */
-[_COLEMAK] = LAYOUT(
- KC_ESC, KC_Q, KC_W, KC_F, KC_P, KC_G, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, KC_BSPC, _______,
- KC_TAB, KC_A, KC_R, KC_S, KC_T, KC_D, KC_H, KC_N, KC_E, KC_I, KC_O, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_K, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
- KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
-),
-
-/* Dvorak
- * ,-----------------------------------------------------------------------------------.
- * | Esc | " | , | . | P | Y | F | G | C | R | L | Bksp |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Tab | A | O | E | U | I | D | H | T | N | S | / |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Shift| ; | Q | J | K | X | B | M | W | V | Z |Enter |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Brite| Ctrl | Alt | GUI |Lower | Space |Raise | Left | Down | Up |Right |
- * `-----------------------------------------------------------------------------------'
- */
-[_DVORAK] = LAYOUT(
- KC_ESC, KC_QUOT, KC_COMM, KC_DOT, KC_P, KC_Y, KC_F, KC_G, KC_C, KC_R, KC_L, KC_BSPC, _______,
- KC_TAB, KC_A, KC_O, KC_E, KC_U, KC_I, KC_D, KC_H, KC_T, KC_N, KC_S, KC_SLSH,
- KC_LSFT, KC_SCLN, KC_Q, KC_J, KC_K, KC_X, KC_B, KC_M, KC_W, KC_V, KC_Z, KC_ENT ,
- KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
-),
-
-/* Lower
- * ,-----------------------------------------------------------------------------------.
- * | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | Bksp |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Del | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO ~ |ISO | | Home | End | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | Next | Vol- | Vol+ | Play |
- * `-----------------------------------------------------------------------------------'
- */
-[_LOWER] = LAYOUT(
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC, _______,
- KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
- _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, S(KC_NUHS), S(KC_NUBS), KC_HOME, KC_END, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
-),
-
-/* Raise
- * ,-----------------------------------------------------------------------------------.
- * | ` | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | Bksp |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | Del | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | F7 | F8 | F9 | F10 | F11 | F12 |ISO # |ISO / |Pg Up |Pg Dn | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | Next | Vol- | Vol+ | Play |
- * `-----------------------------------------------------------------------------------'
- */
-[_RAISE] = LAYOUT(
- KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, _______,
- KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
- _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
-),
-
-
-/* Adjust (Lower + Raise)
- * v------------------------RGB CONTROL--------------------v
- * ,-----------------------------------------------------------------------------------.
- * | | Reset|Debug | RGB |RGBMOD| HUE+ | HUE- | SAT+ | SAT- |BRGTH+|BRGTH-| Del |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | |MUSmod|Aud on|Audoff|AGnorm|AGswap|Qwerty|Colemk|Dvorak|Plover| |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | |Voice-|Voice+|Mus on|Musoff|MIDIon|MIDIof|TermOn|TermOf| | | |
- * |------+------+------+------+------+------+------+------+------+------+------+------|
- * | | | | | | | | | | | |
- * `-----------------------------------------------------------------------------------'
- */
-[_ADJUST] = LAYOUT(
- _______, QK_BOOT, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL , _______,
- _______, _______, MU_MOD, AU_ON, AU_OFF, AG_NORM, AG_SWAP, QWERTY, COLEMAK, DVORAK, _______, _______,
- _______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, _______, _______, _______, _______, _______,
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
-)
+ [_RAISE] = LAYOUT(
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC, _______,
+ KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS, KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
+ _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
+ ),
+ [_ADJUST] = LAYOUT(
+ _______, QK_BOOT, _______, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL , R_M_TOG,
+ _______, _______, MU_MOD, R_M_TOG, R_M_MOD, R_M_HUI, R_M_HUD, R_M_SAI, R_M_SAD, R_M_VAI, R_M_VAD, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
};
@@ -181,27 +89,3 @@ qk_tap_dance_action_t tap_dance_actions[] = {
layer_state_t layer_state_set_user(layer_state_t state) {
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
}
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_QWERTY);
- }
- return false;
- break;
- case COLEMAK:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_COLEMAK);
- }
- return false;
- break;
- case DVORAK:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_DVORAK);
- }
- return false;
- break;
- }
- return true;
-}
diff --git a/keyboards/work_louder/work_board/keymaps/via/keymap.c b/keyboards/work_louder/work_board/keymaps/via/keymap.c
index e68babc1a0c..999ffd9019f 100644
--- a/keyboards/work_louder/work_board/keymaps/via/keymap.c
+++ b/keyboards/work_louder/work_board/keymaps/via/keymap.c
@@ -35,8 +35,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT(
KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC, USER09,
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_ENT ,
- KC_LSFT, KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_UP, KC_ENT,
+ MO(3), KC_LCTL, KC_LALT, KC_LGUI, LOWER, KC_SPC, KC_SPC, RAISE, KC_SLSH, KC_LEFT, KC_DOWN, KC_RGHT
),
[_LOWER] = LAYOUT(
diff --git a/keyboards/work_louder/work_board/rev1/config.h b/keyboards/work_louder/work_board/rev1/config.h
new file mode 100644
index 00000000000..b7d85d490d9
--- /dev/null
+++ b/keyboards/work_louder/work_board/rev1/config.h
@@ -0,0 +1,6 @@
+// Copyright 2021 Christopher Courtney, aka Drashna Jael're (@drashna)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+# define RGBLED_NUM 26
diff --git a/keyboards/work_louder/work_board/rev1/info.json b/keyboards/work_louder/work_board/rev1/info.json
new file mode 100644
index 00000000000..90ac25f360b
--- /dev/null
+++ b/keyboards/work_louder/work_board/rev1/info.json
@@ -0,0 +1,5 @@
+{
+ "usb": {
+ "device_version": "0.0.1"
+ }
+}
diff --git a/keyboards/work_louder/work_board/rev1/rules.mk b/keyboards/work_louder/work_board/rev1/rules.mk
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/keyboards/work_louder/work_board/rev3/config.h b/keyboards/work_louder/work_board/rev3/config.h
new file mode 100644
index 00000000000..8e3cd8bce80
--- /dev/null
+++ b/keyboards/work_louder/work_board/rev3/config.h
@@ -0,0 +1,6 @@
+// Copyright 2021 Christopher Courtney, aka Drashna Jael're (@drashna)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RGBLED_NUM 19
diff --git a/keyboards/work_louder/work_board/rev3/info.json b/keyboards/work_louder/work_board/rev3/info.json
new file mode 100644
index 00000000000..b377cdff008
--- /dev/null
+++ b/keyboards/work_louder/work_board/rev3/info.json
@@ -0,0 +1,5 @@
+{
+ "usb": {
+ "device_version": "0.0.3"
+ }
+}
diff --git a/keyboards/work_louder/work_board/rev3/rules.mk b/keyboards/work_louder/work_board/rev3/rules.mk
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/keyboards/work_louder/work_board/rules.mk b/keyboards/work_louder/work_board/rules.mk
index ddbd9618d0b..b89d0adf1e8 100644
--- a/keyboards/work_louder/work_board/rules.mk
+++ b/keyboards/work_louder/work_board/rules.mk
@@ -23,3 +23,5 @@ RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = WS2812
SRC += rgb_functions.c
+
+DEFAULT_FOLDER = work_louder/work_board/rev3
diff --git a/keyboards/xelus/kangaroo/info.json b/keyboards/xelus/kangaroo/info.json
index d70cb92e930..adb6450826e 100644
--- a/keyboards/xelus/kangaroo/info.json
+++ b/keyboards/xelus/kangaroo/info.json
@@ -1,12 +1,10 @@
{
- "keyboard_name": "Kangaroo",
"manufacturer": "Xelus",
- "url": "https://github.com/qmk/qmk_firmware/tree/master/keyboards/xelus/kangaroo",
- "maintainer": "qmk",
+ "url": "https://github.com/qmk/qmk_firmware/tree/master/keyboards/xelus/kangaroo",
+ "maintainer": "qmk",
"usb": {
"vid": "0x5845",
- "pid": "0x524F",
- "device_version": "0.0.1"
+ "pid": "0x524F"
},
"layouts": {
"LAYOUT_all": {
diff --git a/keyboards/xelus/kangaroo/kangaroo.c b/keyboards/xelus/kangaroo/kangaroo.c
index a7a3d24800b..585d33d498a 100644
--- a/keyboards/xelus/kangaroo/kangaroo.c
+++ b/keyboards/xelus/kangaroo/kangaroo.c
@@ -1,4 +1,4 @@
-/* Copyright 2020 Harrison Chan (Xelus)
+/* Copyright 2022 Harrison Chan (Xelus)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,9 +16,4 @@
#include "kangaroo.h"
-void board_init(void) {
- SYSCFG->CFGR1 |= SYSCFG_CFGR1_I2C1_DMA_RMP;
- SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_SPI2_DMA_RMP);
-}
-
void matrix_io_delay(void) { __asm__ volatile("nop\nnop\nnop\n"); }
diff --git a/keyboards/xelus/kangaroo/config.h b/keyboards/xelus/kangaroo/rev1/config.h
similarity index 100%
rename from keyboards/xelus/kangaroo/config.h
rename to keyboards/xelus/kangaroo/rev1/config.h
diff --git a/keyboards/xelus/kangaroo/halconf.h b/keyboards/xelus/kangaroo/rev1/halconf.h
similarity index 100%
rename from keyboards/xelus/kangaroo/halconf.h
rename to keyboards/xelus/kangaroo/rev1/halconf.h
diff --git a/keyboards/xelus/kangaroo/rev1/info.json b/keyboards/xelus/kangaroo/rev1/info.json
new file mode 100644
index 00000000000..523aef4aaa8
--- /dev/null
+++ b/keyboards/xelus/kangaroo/rev1/info.json
@@ -0,0 +1,6 @@
+{
+ "keyboard_name": "Kangaroo Rev 1.0",
+ "usb": {
+ "device_version": "0.0.1"
+ }
+}
diff --git a/keyboards/xelus/kangaroo/mcuconf.h b/keyboards/xelus/kangaroo/rev1/mcuconf.h
similarity index 100%
rename from keyboards/xelus/kangaroo/mcuconf.h
rename to keyboards/xelus/kangaroo/rev1/mcuconf.h
diff --git a/keyboards/xelus/kangaroo/readme.md b/keyboards/xelus/kangaroo/rev1/readme.md
similarity index 86%
rename from keyboards/xelus/kangaroo/readme.md
rename to keyboards/xelus/kangaroo/rev1/readme.md
index e91f32f96a9..800497b698e 100644
--- a/keyboards/xelus/kangaroo/readme.md
+++ b/keyboards/xelus/kangaroo/rev1/readme.md
@@ -1,4 +1,4 @@
-# Kangaroo
+# Kangaroo Rev 1
Left Hand Fullsized Keyboard designed by Jono.
@@ -8,6 +8,7 @@ Left Hand Fullsized Keyboard designed by Jono.
Make example for this keyboard (after setting up your build environment):
- make xelus/kangaroo:default
+ make xelus/kangaroo/rev1:default
+ make xelus/kangaroo/rev1:via
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/xelus/kangaroo/rev1/rev1.c b/keyboards/xelus/kangaroo/rev1/rev1.c
new file mode 100644
index 00000000000..a71f476498e
--- /dev/null
+++ b/keyboards/xelus/kangaroo/rev1/rev1.c
@@ -0,0 +1,22 @@
+/* Copyright 2022 Harrison Chan (Xelus)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "rev1.h"
+
+void board_init(void) {
+ SYSCFG->CFGR1 |= SYSCFG_CFGR1_I2C1_DMA_RMP;
+ SYSCFG->CFGR1 &= ~(SYSCFG_CFGR1_SPI2_DMA_RMP);
+}
diff --git a/keyboards/mechwild/bde/righty/righty.c b/keyboards/xelus/kangaroo/rev1/rev1.h
similarity index 72%
rename from keyboards/mechwild/bde/righty/righty.c
rename to keyboards/xelus/kangaroo/rev1/rev1.h
index 6873ed36a0e..f146b4f9646 100644
--- a/keyboards/mechwild/bde/righty/righty.c
+++ b/keyboards/xelus/kangaroo/rev1/rev1.h
@@ -1,17 +1,17 @@
-/* Copyright 2020 Kyle McCreery
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
+/* Copyright 2022 Harrison Chan (Xelus)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
*/
-#include "bde.h"
+#include "quantum.h"
diff --git a/keyboards/xelus/kangaroo/rules.mk b/keyboards/xelus/kangaroo/rev1/rules.mk
similarity index 100%
rename from keyboards/xelus/kangaroo/rules.mk
rename to keyboards/xelus/kangaroo/rev1/rules.mk
diff --git a/keyboards/mechwild/bde/righty/config.h b/keyboards/xelus/kangaroo/rev2/config.h
similarity index 55%
rename from keyboards/mechwild/bde/righty/config.h
rename to keyboards/xelus/kangaroo/rev2/config.h
index 732e125bf90..a2f89a0ab16 100644
--- a/keyboards/mechwild/bde/righty/config.h
+++ b/keyboards/xelus/kangaroo/rev2/config.h
@@ -1,46 +1,38 @@
-/* Copyright 2020 Kyle McCreery
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
+/* Copyright 2020 Harrison Chan (Xelus)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
*/
-
#pragma once
-#include "config_common.h"
-
/* key matrix size */
-#define MATRIX_ROWS 3
-#define MATRIX_COLS 14
+#define MATRIX_ROWS 12
+#define MATRIX_COLS 11
-/* key matrix pins */
-#define MATRIX_ROW_PINS { D1, D7, D3}
-#define MATRIX_COL_PINS { B4, B5, E6, C6, D4, D0, F4, F5, F6, B6, B3, B2, B1, F7}
+#define MATRIX_COL_PINS { B10, B2, B11, A10, B7, B6, B5, B4, B3, A15, A14 }
+#define MATRIX_ROW_PINS { A9, A8, B15, B14, B13, B12, A4, A5, A6, A7, B0, B1 }
/* COL2ROW or ROW2COL */
-#define DIODE_DIRECTION ROW2COL
-
-/* If RGBLIGHT_ENABLE is set to yes in the rules, ensure the RGBLED_NUM is accurate for how many you have attached. */
-#define RGB_DI_PIN D2
-#define RGBLED_NUM 16
-#define RGBLIGHT_ANIMATIONS
+#define DIODE_DIRECTION COL2ROW
/* Set 0 if debouncing isn't needed */
-#define DEBOUNCE 5
+#define DEBOUNCE 5
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
-
/* Locking resynchronize hack */
#define LOCKING_RESYNC_ENABLE
+#define WEAR_LEVELING_LOGICAL_SIZE 2048
+#define WEAR_LEVELING_BACKING_SIZE WEAR_LEVELING_LOGICAL_SIZE*2
diff --git a/keyboards/xelus/kangaroo/rev2/info.json b/keyboards/xelus/kangaroo/rev2/info.json
new file mode 100644
index 00000000000..8f7a2c6ce95
--- /dev/null
+++ b/keyboards/xelus/kangaroo/rev2/info.json
@@ -0,0 +1,6 @@
+{
+ "keyboard_name": "Kangaroo Rev 2.0",
+ "usb": {
+ "device_version": "0.0.2"
+ }
+}
diff --git a/keyboards/xelus/kangaroo/rev2/readme.md b/keyboards/xelus/kangaroo/rev2/readme.md
new file mode 100644
index 00000000000..b94bd43cd11
--- /dev/null
+++ b/keyboards/xelus/kangaroo/rev2/readme.md
@@ -0,0 +1,14 @@
+# Kangaroo Rev 2
+
+Left Hand Fullsized Keyboard designed by Jono.
+
+* Keyboard Maintainer: [Xelus22](https://github.com/Xelus22)
+* Hardware Supported: Kangaroo
+* Hardware Availability: Custom keyboard group buys
+
+Make example for this keyboard (after setting up your build environment):
+
+ make xelus/kangaroo/rev2:default
+ make xelus/kangaroo/rev2:via
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/xelus/kangaroo/rev2/rules.mk b/keyboards/xelus/kangaroo/rev2/rules.mk
new file mode 100644
index 00000000000..44ac92bb816
--- /dev/null
+++ b/keyboards/xelus/kangaroo/rev2/rules.mk
@@ -0,0 +1,24 @@
+# MCU name
+MCU = STM32L412
+
+# Bootloader selection
+BOOTLOADER = stm32-dfu
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = yes # Console for debug
+COMMAND_ENABLE = yes # Commands for debug and configuration
+NKRO_ENABLE = yes # Enable N-Key Rollover
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+EEPROM_DRIVER = i2c
+
+EEPROM_DRIVER = wear_leveling
+WEAR_LEVELING_DRIVER = embedded_flash
+
+# Enter lower-power sleep mode when on the ChibiOS idle thread
+OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
diff --git a/keyboards/xiudi/xd75/keymaps/mtdjr/config.h b/keyboards/xiudi/xd75/keymaps/mtdjr/config.h
index 3c8b17df1f8..f70569b024c 100644
--- a/keyboards/xiudi/xd75/keymaps/mtdjr/config.h
+++ b/keyboards/xiudi/xd75/keymaps/mtdjr/config.h
@@ -18,5 +18,4 @@
// place overrides here
#undef MANUFACTURER
-#define MANUFACTURER mtdjr
-#define PRODUCT XD75
+#define MANUFACTURER "mtdjr"
diff --git a/keyboards/yandrstudio/tg67/board.h b/keyboards/yandrstudio/tg67/board.h
new file mode 100644
index 00000000000..d83804babdf
--- /dev/null
+++ b/keyboards/yandrstudio/tg67/board.h
@@ -0,0 +1,21 @@
+/* Copyright 2022 JasonRen(biu)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#include_next "board.h"
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000
diff --git a/keyboards/yandrstudio/tg67/config.h b/keyboards/yandrstudio/tg67/config.h
new file mode 100644
index 00000000000..729375f987e
--- /dev/null
+++ b/keyboards/yandrstudio/tg67/config.h
@@ -0,0 +1,101 @@
+/* Copyright 2022 JasonRen(biu)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#include "config_common.h"
+
+/* key matrix size */
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+#define MATRIX_COL_PINS { B2, B10, B11, A8, A9, A10, B5, A15, B3, A2, A3, B4, A4, A5, A6 }
+#define MATRIX_ROW_PINS { B0, B6, B1, B7, A1 }
+
+/* Set 0 if debouncing isn't needed */
+#define DEBOUNCE 5
+
+/* RGB Matrix */
+#ifdef RGB_MATRIX_ENABLE
+
+# define RGB_DI_PIN A7
+# define RGBLED_NUM 69
+# define DRIVER_LED_TOTAL RGBLED_NUM
+
+# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 250
+# define RGBLIGHT_VAL_STEP 5
+# define RGB_DISABLE_WHEN_USB_SUSPENDED
+# define RGB_MATRIX_CENTER { 112, 32 }
+# define RGB_MATRIX_KEYPRESSES
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+# define RGBLIGHT_ANIMATIONS
+
+# define ENABLE_RGB_MATRIX_ALPHAS_MODS
+# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_BREATHING
+# define ENABLE_RGB_MATRIX_BAND_SAT
+# define ENABLE_RGB_MATRIX_BAND_VAL
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+# define ENABLE_RGB_MATRIX_CYCLE_ALL
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+# define ENABLE_RGB_MATRIX_DUAL_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+# define ENABLE_RGB_MATRIX_RAINDROPS
+# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+# define ENABLE_RGB_MATRIX_HUE_BREATHING
+# define ENABLE_RGB_MATRIX_HUE_PENDULUM
+# define ENABLE_RGB_MATRIX_HUE_WAVE
+# define ENABLE_RGB_MATRIX_PIXEL_RAIN
+# define ENABLE_RGB_MATRIX_PIXEL_FLOW
+# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+
+# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define ENABLE_RGB_MATRIX_SPLASH
+# define ENABLE_RGB_MATRIX_MULTISPLASH
+# define ENABLE_RGB_MATRIX_SOLID_SPLASH
+# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+
+
+# define WS2812_PWM_DRIVER PWMD3
+# define WS2812_PWM_CHANNEL 2
+# define WS2812_PWM_PAL_MODE 2
+# define WS2812_DMA_STREAM STM32_DMA1_STREAM3
+# define WS2812_DMA_CHANNEL 3
+
+#endif
diff --git a/keyboards/yandrstudio/tg67/halconf.h b/keyboards/yandrstudio/tg67/halconf.h
new file mode 100644
index 00000000000..1f5f3e7009c
--- /dev/null
+++ b/keyboards/yandrstudio/tg67/halconf.h
@@ -0,0 +1,23 @@
+/* Copyright 2022 JasonRen(biu)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+
+#pragma once
+#include_next
+
+#undef HAL_USE_PWM
+#define HAL_USE_PWM TRUE
+
diff --git a/keyboards/yandrstudio/tg67/info.json b/keyboards/yandrstudio/tg67/info.json
new file mode 100644
index 00000000000..d48809128fa
--- /dev/null
+++ b/keyboards/yandrstudio/tg67/info.json
@@ -0,0 +1,362 @@
+{
+ "keyboard_name": "tg67",
+ "processor": "STM32F103",
+ "bootloader": "stm32duino",
+ "usb": {
+ "pid": "0xAA8D",
+ "device_version": "1.0.0"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {
+ "label": "~",
+ "x": 0,
+ "y": 0
+ },
+ {
+ "label": "!",
+ "x": 1,
+ "y": 0
+ },
+ {
+ "label": "@",
+ "x": 2,
+ "y": 0
+ },
+ {
+ "label": "#",
+ "x": 3,
+ "y": 0
+ },
+ {
+ "label": "$",
+ "x": 4,
+ "y": 0
+ },
+ {
+ "label": "%",
+ "x": 5,
+ "y": 0
+ },
+ {
+ "label": "^",
+ "x": 6,
+ "y": 0
+ },
+ {
+ "label": "&",
+ "x": 7,
+ "y": 0
+ },
+ {
+ "label": "*",
+ "x": 8,
+ "y": 0
+ },
+ {
+ "label": "(",
+ "x": 9,
+ "y": 0
+ },
+ {
+ "label": ")",
+ "x": 10,
+ "y": 0
+ },
+ {
+ "label": "_",
+ "x": 11,
+ "y": 0
+ },
+ {
+ "label": "+",
+ "x": 12,
+ "y": 0
+ },
+ {
+ "label": "Backspace",
+ "x": 13,
+ "y": 0,
+ "w": 2
+ },
+ {
+ "label": "Home",
+ "x": 15,
+ "y": 0
+ },
+ {
+ "label": "Tab",
+ "x": 0,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "Q",
+ "x": 1.5,
+ "y": 1
+ },
+ {
+ "label": "W",
+ "x": 2.5,
+ "y": 1
+ },
+ {
+ "label": "E",
+ "x": 3.5,
+ "y": 1
+ },
+ {
+ "label": "R",
+ "x": 4.5,
+ "y": 1
+ },
+ {
+ "label": "T",
+ "x": 5.5,
+ "y": 1
+ },
+ {
+ "label": "Y",
+ "x": 6.5,
+ "y": 1
+ },
+ {
+ "label": "U",
+ "x": 7.5,
+ "y": 1
+ },
+ {
+ "label": "I",
+ "x": 8.5,
+ "y": 1
+ },
+ {
+ "label": "O",
+ "x": 9.5,
+ "y": 1
+ },
+ {
+ "label": "P",
+ "x": 10.5,
+ "y": 1
+ },
+ {
+ "label": "{",
+ "x": 11.5,
+ "y": 1
+ },
+ {
+ "label": "}",
+ "x": 12.5,
+ "y": 1
+ },
+ {
+ "label": "|",
+ "x": 13.5,
+ "y": 1,
+ "w": 1.5
+ },
+ {
+ "label": "End",
+ "x": 15,
+ "y": 1
+ },
+ {
+ "label": "Caps Lock",
+ "x": 0,
+ "y": 2,
+ "w": 1.75
+ },
+ {
+ "label": "A",
+ "x": 1.75,
+ "y": 2
+ },
+ {
+ "label": "S",
+ "x": 2.75,
+ "y": 2
+ },
+ {
+ "label": "D",
+ "x": 3.75,
+ "y": 2
+ },
+ {
+ "label": "F",
+ "x": 4.75,
+ "y": 2
+ },
+ {
+ "label": "G",
+ "x": 5.75,
+ "y": 2
+ },
+ {
+ "label": "H",
+ "x": 6.75,
+ "y": 2
+ },
+ {
+ "label": "J",
+ "x": 7.75,
+ "y": 2
+ },
+ {
+ "label": "K",
+ "x": 8.75,
+ "y": 2
+ },
+ {
+ "label": "L",
+ "x": 9.75,
+ "y": 2
+ },
+ {
+ "label": ":",
+ "x": 10.75,
+ "y": 2
+ },
+ {
+ "label": "\"",
+ "x": 11.75,
+ "y": 2
+ },
+ {
+ "label": "Enter",
+ "x": 12.75,
+ "y": 2,
+ "w": 2.25
+ },
+ {
+ "label": "PgUp",
+ "x": 15,
+ "y": 2
+ },
+ {
+ "label": "Shift",
+ "x": 0,
+ "y": 3,
+ "w": 2.25
+ },
+ {
+ "label": "Z",
+ "x": 2.25,
+ "y": 3
+ },
+ {
+ "label": "X",
+ "x": 3.25,
+ "y": 3
+ },
+ {
+ "label": "C",
+ "x": 4.25,
+ "y": 3
+ },
+ {
+ "label": "V",
+ "x": 5.25,
+ "y": 3
+ },
+ {
+ "label": "B",
+ "x": 6.25,
+ "y": 3
+ },
+ {
+ "label": "N",
+ "x": 7.25,
+ "y": 3
+ },
+ {
+ "label": "M",
+ "x": 8.25,
+ "y": 3
+ },
+ {
+ "label": "<",
+ "x": 9.25,
+ "y": 3
+ },
+ {
+ "label": ">",
+ "x": 10.25,
+ "y": 3
+ },
+ {
+ "label": "?",
+ "x": 11.25,
+ "y": 3
+ },
+ {
+ "label": "Shift",
+ "x": 12.25,
+ "y": 3,
+ "w": 1.75
+ },
+ {
+ "label": "\u2191",
+ "x": 14,
+ "y": 3
+ },
+ {
+ "label": "PgDn",
+ "x": 15,
+ "y": 3
+ },
+ {
+ "label": "Ctrl",
+ "x": 0,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Win",
+ "x": 1.25,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Alt",
+ "x": 2.5,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "x": 3.75,
+ "y": 4,
+ "w": 6.25
+ },
+ {
+ "label": "Alt",
+ "x": 10,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "Fn",
+ "x": 11.25,
+ "y": 4,
+ "w": 1.25
+ },
+ {
+ "label": "\u2190",
+ "x": 13,
+ "y": 4
+ },
+ {
+ "label": "\u2193",
+ "x": 14,
+ "y": 4
+ },
+ {
+ "label": "\u2192",
+ "x": 15,
+ "y": 4
+ }
+ ]
+ }
+ }
+}
diff --git a/keyboards/yandrstudio/tg67/keymaps/default/keymap.c b/keyboards/yandrstudio/tg67/keymaps/default/keymap.c
new file mode 100644
index 00000000000..17e31d90c51
--- /dev/null
+++ b/keyboards/yandrstudio/tg67/keymaps/default/keymap.c
@@ -0,0 +1,31 @@
+/* Copyright 2022 JasonRen(biu)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+ [1] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_RMOD,RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
diff --git a/keyboards/yandrstudio/tg67/keymaps/via/keymap.c b/keyboards/yandrstudio/tg67/keymaps/via/keymap.c
new file mode 100644
index 00000000000..d955a72114b
--- /dev/null
+++ b/keyboards/yandrstudio/tg67/keymaps/via/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2022 JasonRen(biu)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_HOME,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_END,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_PGDN,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT),
+ [1] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_RMOD,RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ [2] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS),
+ [3] = LAYOUT(
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
diff --git a/keyboards/yandrstudio/tg67/keymaps/via/rules.mk b/keyboards/yandrstudio/tg67/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/yandrstudio/tg67/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/yandrstudio/tg67/mcuconf.h b/keyboards/yandrstudio/tg67/mcuconf.h
new file mode 100644
index 00000000000..3ec9c201288
--- /dev/null
+++ b/keyboards/yandrstudio/tg67/mcuconf.h
@@ -0,0 +1,25 @@
+/* Copyright 2022 JasonRen(biu)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_TIM3
+#define STM32_PWM_USE_TIM3 TRUE
+
+#undef STM32_PLLXTPRE
+#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV2
diff --git a/keyboards/yandrstudio/tg67/readme.md b/keyboards/yandrstudio/tg67/readme.md
new file mode 100644
index 00000000000..7dabbc13d4b
--- /dev/null
+++ b/keyboards/yandrstudio/tg67/readme.md
@@ -0,0 +1,22 @@
+# tg67
+
+
+A 65% keyboard with RGBs.
+This keyboard use 16mhz HSE and APM32F103 as MCU.
+
+- Keyboard Maintainer: https://github.com/jiaxin96
+- Hardware Supported: tg67
+- Hardware Availability: https://kineticlabs.com/
+
+Make example for this keyboard (after setting up your build environment):
+
+ make yandrstudio/tg67:default
+
+See [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) then the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information.
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+- **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key which is Escape in this keyboard) and plug in the keyboard
+- **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available.
diff --git a/keyboards/yandrstudio/tg67/rules.mk b/keyboards/yandrstudio/tg67/rules.mk
new file mode 100644
index 00000000000..4f60885efdd
--- /dev/null
+++ b/keyboards/yandrstudio/tg67/rules.mk
@@ -0,0 +1,18 @@
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -p FFFF -v FFFF
+
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+NKRO_ENABLE = yes # Enable N-Key Rollover
+BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
+AUDIO_ENABLE = no # Audio output
+RGB_MATRIX_ENABLE = yes # Enable keyboard RGB Matrix
+RGB_MATRIX_DRIVER = WS2812 # RGB matrix driver support
+WS2812_DRIVER = pwm # WS2812 RGB Driver
diff --git a/keyboards/yandrstudio/tg67/tg67.c b/keyboards/yandrstudio/tg67/tg67.c
new file mode 100644
index 00000000000..b1f3907a22d
--- /dev/null
+++ b/keyboards/yandrstudio/tg67/tg67.c
@@ -0,0 +1,46 @@
+/* Copyright 2022 JasonRen(biu)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include "tg67.h"
+
+#ifdef RGB_MATRIX_ENABLE
+
+led_config_t g_led_config = {
+ {
+ {54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68},
+ {53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39},
+ {25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, NO_LED, 37, 38},
+ {24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, NO_LED, 13, 12, 11},
+ {0, 1, 2, NO_LED, NO_LED, 4, NO_LED, NO_LED, NO_LED, 6, 7, NO_LED, 8, 9, 10}
+ },
+ {
+ {0,64},{16,64},{32,64},{48,64}, {80,64}, {112,64}, {144,64},{160,64}, {192,64},{208,64},{224,64},
+ {224,48},{208,48},{192,48}, {160,48},{144,48},{128,48},{112,48},{96,48},{80,48},{64,48},{48,48},{32,48},{16,48},{0,48},
+ {0,32},{16,32},{32,32},{48,32},{64,32},{80,32},{96,32},{112,32},{128,32},{144,32},{160,32},{176,32}, {208,32},{224,32},
+ {224,16},{208,16},{192,16},{176,16},{160,16},{144,16},{128,16},{112,16},{96,16},{80,16},{64,16},{48,16},{32,16},{16,16},{0,16},
+ {0,0},{16,0},{32,0},{48,0},{64,0},{80,0},{96,0},{112,0},{128,0},{144,0},{160,0},{176,0},{192,0},{208,0},{224,0}
+ },
+ {
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4
+ }
+};
+
+#endif
diff --git a/keyboards/yandrstudio/tg67/tg67.h b/keyboards/yandrstudio/tg67/tg67.h
new file mode 100644
index 00000000000..efb7d680591
--- /dev/null
+++ b/keyboards/yandrstudio/tg67/tg67.h
@@ -0,0 +1,33 @@
+/* Copyright 2022 JasonRen(biu)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014, \
+ K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114, \
+ K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K213, K214, \
+ K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K312, K313, K314, \
+ K400, K401, K402, K405, K409, K410, K412, K413, K414 \
+) { \
+ { K000, K001, K002, K003, K004, K005, K006, K007, K008, K009, K010, K011, K012, K013, K014 }, \
+ { K100, K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, K113, K114 }, \
+ { K200, K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, KC_NO, K213, K214 }, \
+ { K300, K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, KC_NO, K312, K313, K314 }, \
+ { K400, K401, K402, KC_NO, KC_NO, K405, KC_NO, KC_NO, KC_NO, K409, K410, KC_NO, K412, K413, K414 } \
+}
+
diff --git a/keyboards/ymdk/melody96/keymaps/konstantin/keymap.c b/keyboards/ymdk/melody96/keymaps/konstantin/keymap.c
index 1ee7ca1e776..cc6cbd90c22 100644
--- a/keyboards/ymdk/melody96/keymaps/konstantin/keymap.c
+++ b/keyboards/ymdk/melody96/keymaps/konstantin/keymap.c
@@ -2,7 +2,7 @@
#include "konstantin.h"
static const HSV *colors[] = { &godspeed_blue, &godspeed_yellow };
-static const size_t cnum = sizeof colors / sizeof *colors;
+static const size_t cnum = ARRAY_SIZE(colors);
static size_t cidx = 0;
enum keycodes_keymap {
diff --git a/keyboards/ymdk/ymd96/keymaps/AnthonyWharton/config.h b/keyboards/ymdk/ymd96/keymaps/AnthonyWharton/config.h
index e730e99b273..27a2fcd6a7c 100644
--- a/keyboards/ymdk/ymd96/keymaps/AnthonyWharton/config.h
+++ b/keyboards/ymdk/ymd96/keymaps/AnthonyWharton/config.h
@@ -19,36 +19,13 @@ along with this program. If not, see .
#pragma once
-#define VENDOR_ID 0x20A0
-#define PRODUCT_ID 0x422D
-// Edit usbconfig.h to change these.
-#define MANUFACTURER ymdkey
-#define PRODUCT ymd96
-
-/* Matrix Size */
-#define MATRIX_ROWS 8
-#define MATRIX_COLS 15
-#define DIODE_DIRECTION COL2ROW
-
/* Required for MX Locks installed */
#define LOCKING_SUPPORT_ENABLE
#define LOCKING_RESYNC_ENABLE
-#define PREVENT_STUCK_MODIFIERS
-#define TAPPING_TOGGLE 3
-#define NO_UART 1
-
+#undef BACKLIGHT_LEVELS
#define BACKLIGHT_LEVELS 12
-/* RGB Underglow */
-// The RGB_DI_PING value seems to be shared between all PS2AVRGB boards.
-// The same pin is used on the JJ40, at least.
-#define RGBLED_NUM 18
-#define RGB_DI_PIN E2 // NOTE: for PS2AVRGB boards, underglow commands are send
- // via I2C to 0xB0
-
-#define RGBLIGHT_ANIMATIONS
-
#define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1.0-2.7
#define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 1-255
#define RGBLIGHT_EFFECT_SNAKE_LENGTH 7
diff --git a/keyboards/yoichiro/lunakey_pico/config.h b/keyboards/yoichiro/lunakey_pico/config.h
new file mode 100644
index 00000000000..be9b5057940
--- /dev/null
+++ b/keyboards/yoichiro/lunakey_pico/config.h
@@ -0,0 +1,38 @@
+// Copyright 2022 Yoichiro Tanaka (@yoichiro)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED GP25
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 500U
+
+#define SERIAL_USART_FULL_DUPLEX
+#define SERIAL_USART_TX_PIN GP0
+#define SERIAL_USART_RX_PIN GP1
+
+//#define SERIAL_DEBUG
+
+#define WS2812_PIO_USE_PIO1
+
+#define RGBLIGHT_LED_MAP { 0, 1, 2, 3, 4, 5, \
+ 11, 10, 9, 8, 7, 6 }
+
+/* define if matrix has ghost (lacks anti-ghosting diodes) */
+//#define MATRIX_HAS_GHOST
+
+/*
+ * Feature disable options
+ * These options are also useful to firmware size reduction.
+ */
+
+/* disable debug print */
+//#define NO_DEBUG
+
+/* disable print */
+//#define NO_PRINT
+
+/* disable action features */
+//#define NO_ACTION_LAYER
+//#define NO_ACTION_TAPPING
+//#define NO_ACTION_ONESHOT
diff --git a/keyboards/yoichiro/lunakey_pico/halconf.h b/keyboards/yoichiro/lunakey_pico/halconf.h
new file mode 100644
index 00000000000..21b3de7d6d3
--- /dev/null
+++ b/keyboards/yoichiro/lunakey_pico/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2022 Yoichiro Tanaka (@yoichiro)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_SIO TRUE
+
+#include_next
diff --git a/keyboards/yoichiro/lunakey_pico/info.json b/keyboards/yoichiro/lunakey_pico/info.json
new file mode 100644
index 00000000000..d914f8687f2
--- /dev/null
+++ b/keyboards/yoichiro/lunakey_pico/info.json
@@ -0,0 +1,106 @@
+{
+ "keyboard_name": "Lunakey Pico",
+ "manufacturer": "yoichiro",
+ "maintainer": "Yoichiro Tanaka",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": false,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": false,
+ "rgblight": true,
+ "audio": false
+ },
+ "matrix_pins": {
+ "cols": ["GP21", "GP20", "GP19", "GP18", "GP17", "GP16"],
+ "rows": ["GP12", "GP13", "GP14", "GP15"]
+ },
+ "debounce": 5,
+ "processor": "RP2040",
+ "usb": {
+ "device_version": "3.0.0",
+ "pid": "0x0003",
+ "vid": "0x5954"
+ },
+ "rgblight": {
+ "led_count": 12,
+ "pin": "GP6",
+ "sleep": true,
+ "split": true,
+ "split_count": [6, 6],
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": false,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "hue_steps": 8,
+ "saturation_steps": 8,
+ "brightness_steps": 8,
+ "max_brightness": 255
+ },
+ "split": {
+ "enabled": true
+ },
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_split_3x6_4"
+ },
+ "layouts": {
+ "LAYOUT_split_3x6_4": {
+ "layout": [
+ {"label":"L00", "x":0, "y":1.5},
+ {"label":"L01", "x":1, "y":1.25},
+ {"label":"L02", "x":2, "y":0.5},
+ {"label":"L03", "x":3, "y":0},
+ {"label":"L04", "x":4, "y":0.25},
+ {"label":"L05", "x":5, "y":0.5},
+ {"label":"R00", "x":8.75, "y":0.5},
+ {"label":"R01", "x":9.75, "y":0.25},
+ {"label":"R02", "x":10.75, "y":0},
+ {"label":"R03", "x":11.75, "y":0.5},
+ {"label":"R04", "x":12.75, "y":1.25},
+ {"label":"R05", "x":13.75, "y":1.5},
+ {"label":"L10", "x":0, "y":2.5},
+ {"label":"L11", "x":1, "y":2.25},
+ {"label":"L12", "x":2, "y":1.5},
+ {"label":"L13", "x":3, "y":1},
+ {"label":"L14", "x":4, "y":1.25},
+ {"label":"L15", "x":5, "y":1.5},
+ {"label":"R10", "x":8.75, "y":1.5},
+ {"label":"R11", "x":9.75, "y":1.25},
+ {"label":"R12", "x":10.75, "y":1},
+ {"label":"R13", "x":11.75, "y":1.5},
+ {"label":"R14", "x":12.75, "y":2.25},
+ {"label":"R15", "x":13.75, "y":2.5},
+ {"label":"L20", "x":0, "y":3.5},
+ {"label":"L21", "x":1, "y":3.25},
+ {"label":"L22", "x":2, "y":2.5},
+ {"label":"L23", "x":3, "y":2},
+ {"label":"L24", "x":4, "y":2.25},
+ {"label":"L25", "x":5, "y":2.5},
+ {"label":"R20", "x":8.75, "y":2.5},
+ {"label":"R21", "x":9.75, "y":2.25},
+ {"label":"R22", "x":10.75, "y":2},
+ {"label":"R23", "x":11.75, "y":2.5},
+ {"label":"R24", "x":12.75, "y":3.25},
+ {"label":"R25", "x":13.75, "y":3.5},
+ {"label":"L30", "x":3, "y":4},
+ {"label":"L31", "x":4, "y":3.75},
+ {"label":"L32", "x":5, "y":3.75},
+ {"label":"L33", "x":6, "y":4},
+ {"label":"R30", "x":7.75, "y":4},
+ {"label":"R31", "x":8.75, "y":3.75},
+ {"label":"R32", "x":9.75, "y":3.75},
+ {"label":"R33", "x":10.75, "y":4}]
+ }
+ }
+}
diff --git a/keyboards/yoichiro/lunakey_pico/keymaps/default/keymap.c b/keyboards/yoichiro/lunakey_pico/keymaps/default/keymap.c
new file mode 100644
index 00000000000..83a326c33a3
--- /dev/null
+++ b/keyboards/yoichiro/lunakey_pico/keymaps/default/keymap.c
@@ -0,0 +1,69 @@
+// Copyright 2022 Yoichiro Tanaka (@yoichiro)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum layer_number {
+ _QWERTY = 0,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+#define LOWER MO(_LOWER)
+#define RAISE MO(_RAISE)
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_split_3x6_4(
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+//+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI
+//+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ ),
+
+ [_LOWER] = LAYOUT_split_3x6_4(
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ KC_LCTL, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,_______, _______,
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+//+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI
+//+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ ),
+
+ [_RAISE] = LAYOUT_split_3x6_4(
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ KC_LCTL, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV,
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ KC_LSFT, KC_TILD, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_BSLS, KC_TILD,
+//+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI
+//+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ ),
+
+ [_ADJUST] = LAYOUT_split_3x6_4(
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ QK_BOOT, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______,
+//+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI
+//+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ )
+};
+
+layer_state_t layer_state_set_user(layer_state_t state) {
+ return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
+}
diff --git a/keyboards/yoichiro/lunakey_pico/keymaps/via/keymap.c b/keyboards/yoichiro/lunakey_pico/keymaps/via/keymap.c
new file mode 100644
index 00000000000..d664eb5a03d
--- /dev/null
+++ b/keyboards/yoichiro/lunakey_pico/keymaps/via/keymap.c
@@ -0,0 +1,65 @@
+// Copyright 2022 Yoichiro Tanaka (@yoichiro)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+enum layer_number {
+ _QWERTY = 0,
+ _LOWER,
+ _RAISE,
+ _ADJUST,
+};
+
+#define LOWER FN_MO13
+#define RAISE FN_MO23
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [_QWERTY] = LAYOUT_split_3x6_4(
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+//+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI
+//+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ ),
+
+ [_LOWER] = LAYOUT_split_3x6_4(
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ KC_LCTL, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT,_______, _______,
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ KC_LSFT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+//+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI
+//+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ ),
+
+ [_RAISE] = LAYOUT_split_3x6_4(
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ KC_ESC, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ KC_LCTL, _______, _______, _______, _______, _______, KC_MINS, KC_EQL, KC_LCBR, KC_RCBR, KC_PIPE, KC_GRV,
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ KC_LSFT, KC_TILD, _______, _______, _______, _______, KC_UNDS, KC_PLUS, KC_LBRC, KC_RBRC, KC_BSLS, KC_TILD,
+//+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI
+//+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ ),
+
+ [_ADJUST] = LAYOUT_split_3x6_4(
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ QK_BOOT, _______, _______, _______, _______, _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6,
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12,
+//+--------+--------+--------+--------+--------+--------+ +--------+--------+--------+--------+--------+--------+
+ RGB_MOD, RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______,
+//+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ KC_LGUI, KC_LALT, LOWER, KC_SPC, KC_ENT, RAISE, KC_RALT, KC_RGUI
+//+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+
+ )
+};
diff --git a/keyboards/yoichiro/lunakey_pico/keymaps/via/rules.mk b/keyboards/yoichiro/lunakey_pico/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/yoichiro/lunakey_pico/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/yoichiro/lunakey_pico/lunakey_pico.c b/keyboards/yoichiro/lunakey_pico/lunakey_pico.c
new file mode 100644
index 00000000000..3e57edad681
--- /dev/null
+++ b/keyboards/yoichiro/lunakey_pico/lunakey_pico.c
@@ -0,0 +1,4 @@
+// Copyright 2022 Yoichiro Tanaka (@yoichiro)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "lunakey_pico.h"
diff --git a/keyboards/yoichiro/lunakey_pico/lunakey_pico.h b/keyboards/yoichiro/lunakey_pico/lunakey_pico.h
new file mode 100644
index 00000000000..0725054f0f6
--- /dev/null
+++ b/keyboards/yoichiro/lunakey_pico/lunakey_pico.h
@@ -0,0 +1,23 @@
+// Copyright 2022 Yoichiro Tanaka (@yoichiro)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT_split_3x6_4( \
+ L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, \
+ L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, \
+ L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, \
+ L30, L31, L32, L33, R30, R31, R32, R33 \
+ ) \
+ { \
+ { L00, L01, L02, L03, L04, L05 }, \
+ { L10, L11, L12, L13, L14, L15 }, \
+ { L20, L21, L22, L23, L24, L25 }, \
+ { KC_NO, KC_NO, L30, L31, L32, L33 }, \
+ { R05, R04, R03, R02, R01, R00 }, \
+ { R15, R14, R13, R12, R11, R10 }, \
+ { R25, R24, R23, R22, R21, R20 }, \
+ { KC_NO, KC_NO, R33, R32, R31, R30 } \
+ }
diff --git a/keyboards/yoichiro/lunakey_pico/mcuconf.h b/keyboards/yoichiro/lunakey_pico/mcuconf.h
new file mode 100644
index 00000000000..482df316e9d
--- /dev/null
+++ b/keyboards/yoichiro/lunakey_pico/mcuconf.h
@@ -0,0 +1,11 @@
+// Copyright 2022 Yoichiro Tanaka (@yoichiro)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef RP_SIO_USE_UART0
+#define RP_SIO_USE_UART0 TRUE
+#undef RP_SIO_USE_UART1
+#define RP_SIO_USE_UART1 FALSE
diff --git a/keyboards/yoichiro/lunakey_pico/readme.md b/keyboards/yoichiro/lunakey_pico/readme.md
new file mode 100644
index 00000000000..9017ad9d36f
--- /dev/null
+++ b/keyboards/yoichiro/lunakey_pico/readme.md
@@ -0,0 +1,27 @@
+# Lunakey Pico
+
+
+
+This is a 40% split keyboard which has 3x6 vertically staggered keys and 4 thumbnail keys.
+
+* Keyboard Maintainer: [Yoichiro Tanaka](https://github.com/yoichiro)
+* Hardware Supported: Lunakey Pico PCB, Raspberry Pi Pico MCU.
+* Hardware Availability: https://booth.pm/ja/items/3324672
+
+Make example for this keyboard (after setting up your build environment):
+
+ qmk compile -kb yoichiro/lunakey_pico -km default
+
+Flashing example for this keyboard:
+
+ qmk flash -kb yoichiro/lunakey_pico -km default -bl avrdude
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/yoichiro/lunakey_pico/rules.mk b/keyboards/yoichiro/lunakey_pico/rules.mk
new file mode 100644
index 00000000000..26c3aca886d
--- /dev/null
+++ b/keyboards/yoichiro/lunakey_pico/rules.mk
@@ -0,0 +1,2 @@
+WS2812_DRIVER = vendor
+SERIAL_DRIVER = vendor
diff --git a/layouts/community/65_ansi_blocker/spidey3/keymap.c b/layouts/community/65_ansi_blocker/spidey3/keymap.c
index aa4378fdcc4..e682a281aad 100644
--- a/layouts/community/65_ansi_blocker/spidey3/keymap.c
+++ b/layouts/community/65_ansi_blocker/spidey3/keymap.c
@@ -24,10 +24,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
),
// FN
[_FN] = LAYOUT_65_ansi_blocker(
- KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_SLCK,
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_SLCK,
XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, SPI_GLO, VLK_TOG, CH_SUSP, KC_SLEP, KC_PWR, KC_BRIU,
- MO(_GLYPH), RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_G, RGB_M_TW, SPI_LNX, XXXXXXX, XXXXXXX, CH_CPNL, KC_BRID,
- _______, XXXXXXX, XXXXXXX, SPI_WIN, UC_MOD, NK_TOGG, TG(_NUMPAD),SPI_OSX, XXXXXXX, XXXXXXX, DEBUG, _______, KC_VOLU, KC_MUTE,
+ MO(_GLYPH), RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_G, RGB_M_TW, UC_M_LN, XXXXXXX, XXXXXXX, CH_CPNL, KC_BRID,
+ _______, XXXXXXX, UC_M_EM, UC_M_WC, UC_MOD, NK_TOGG, TG(_NUMPAD),UC_M_MA, XXXXXXX, XXXXXXX, DEBUG, _______, KC_VOLU, KC_MUTE,
_______, _______, _______, KC_MPLY, CH_ASST, _______, KC_MPRV, KC_VOLD, KC_MNXT
),
// Glyph Transformation
diff --git a/layouts/community/75_ansi/spidey3/config.h b/layouts/community/75_ansi/spidey3/config.h
index 3fb06b23636..93fc4faf71b 100644
--- a/layouts/community/75_ansi/spidey3/config.h
+++ b/layouts/community/75_ansi/spidey3/config.h
@@ -1,7 +1,5 @@
#pragma once
-#define NO_ACTION_MACRO
-#define NO_ACTION_FUNCTION
#define NO_ACTION_ONESHOT
#undef LOCKING_SUPPORT_ENABLE
diff --git a/layouts/community/75_ansi/spidey3/keymap.c b/layouts/community/75_ansi/spidey3/keymap.c
index 37851830dec..5ede8026761 100644
--- a/layouts/community/75_ansi/spidey3/keymap.c
+++ b/layouts/community/75_ansi/spidey3/keymap.c
@@ -26,8 +26,8 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
QK_BOOT, SPI_NORMAL, SPI_WIDE, SPI_SCRIPT, SPI_BLOCKS, SPI_CIRCLE, SPI_SQUARE, SPI_PARENS, SPI_FRAKTR, SPI_BOLD, SPI_MATH, XXXXXXX, SPI_GFLOCK, KC_SLEP, CH_SUSP, KC_PWR,
EEP_RST, X(SAD), X(MEH), X(HAPPY), X(ANGRY), X(THUMBDN), X(THUMBUP), X(SPIDER), X_BUL, X(LOL), X(SURPRISE),X_DASH, XXXXXXX, KC_PAUS, KC_SLCK,
XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, RGB_VAD, RGB_VAI, SPI_GLO, VLK_TOG, XXXXXXX, XXXXXXX, XXXXXXX, KC_BRIU,
- XXXXXXX, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_G, RGB_M_TW, SPI_LNX, XXXXXXX, XXXXXXX, XXXXXXX, KC_BRID,
- _______, XXXXXXX, XXXXXXX, SPI_WIN, UC_MOD, NK_TOGG, TG(_NUMPAD),SPI_OSX, X(LARR), X(RARR), DEBUG, _______, KC_VOLU, KC_MUTE,
+ XXXXXXX, RGB_M_P, RGB_M_B, RGB_M_R, RGB_M_SW, RGB_M_SN, RGB_M_K, RGB_M_G, RGB_M_TW, UC_M_LN, XXXXXXX, XXXXXXX, XXXXXXX, KC_BRID,
+ _______, XXXXXXX, UC_M_EM, UC_M_WC, UC_MOD, NK_TOGG, TG(_NUMPAD),UC_M_MA, X(LARR), X(RARR), DEBUG, _______, KC_VOLU, KC_MUTE,
_______, _______, _______, KC_MPLY, CH_ASST, _______, CH_CPNL, KC_MPRV, KC_VOLD, KC_MNXT
)
};
diff --git a/layouts/community/ergodox/drashna/config.h b/layouts/community/ergodox/drashna/config.h
index d669f272986..aa1d05779b5 100644
--- a/layouts/community/ergodox/drashna/config.h
+++ b/layouts/community/ergodox/drashna/config.h
@@ -28,7 +28,7 @@
#endif // RGBLIGHT_ENABLE
#undef PRODUCT
-#define PRODUCT DrashnaDox - Hacked ErgoDox EZ Hybrid Monstrosity
+#define PRODUCT "DrashnaDox - Hacked ErgoDox EZ Hybrid Monstrosity"
#undef DEBOUNCE
#define DEBOUNCE 20
diff --git a/layouts/community/ergodox/jjerrell/config.h b/layouts/community/ergodox/jjerrell/config.h
index 8223108d15c..6aeaef35cec 100644
--- a/layouts/community/ergodox/jjerrell/config.h
+++ b/layouts/community/ergodox/jjerrell/config.h
@@ -17,5 +17,5 @@
#ifdef KEYBOARD_ergodox_ez
#undef PRODUCT
-#define PRODUCT ErgoDox EZ - Modified by <@jjerrell>
+#define PRODUCT "ErgoDox EZ - Modified by <@jjerrell>"
#endif
diff --git a/layouts/community/ergodox/meagerfindings/config.h b/layouts/community/ergodox/meagerfindings/config.h
index d69aaf79dde..28a92e2bf66 100644
--- a/layouts/community/ergodox/meagerfindings/config.h
+++ b/layouts/community/ergodox/meagerfindings/config.h
@@ -5,9 +5,9 @@
#undef DEVICE_VER
#define DEVICE_VER 0x0001
#undef MANUFACTURER
-#define MANUFACTURER meagerfindings
+#define MANUFACTURER "meagerfindings"
#undef PRODUCT
-#define PRODUCT ErgoDox
+#define PRODUCT "ErgoDox"
#define USB_MAX_POWER_CONSUMPTION 500
diff --git a/layouts/community/numpad_5x6/drashna/config.h b/layouts/community/numpad_5x6/drashna/config.h
index aa0c201232a..83e8766b270 100644
--- a/layouts/community/numpad_5x6/drashna/config.h
+++ b/layouts/community/numpad_5x6/drashna/config.h
@@ -32,5 +32,5 @@
#if defined(KEYBOARD_primekb_prime_m)
# undef PRODUCT
-# define PRODUCT Drashna Hacked Prime_M Macro Pad
+# define PRODUCT "Drashna Hacked Prime_M Macro Pad"
#endif
diff --git a/layouts/community/ortho_4x12/drashna/config.h b/layouts/community/ortho_4x12/drashna/config.h
index d6197ece29d..0b10a64eaa8 100644
--- a/layouts/community/ortho_4x12/drashna/config.h
+++ b/layouts/community/ortho_4x12/drashna/config.h
@@ -70,11 +70,11 @@
#if defined(KEYBOARD_planck)
# undef PRODUCT
# if defined(KEYBOARD_planck_light)
-# define PRODUCT Drashna Hacked RGB Beacon(Planck Light)
+# define PRODUCT "Drashna Hacked RGB Beacon(Planck Light)"
# elif defined(KEYBOARD_planck_rev6)
-# define PRODUCT Drashna Hacked Planck Rev6
+# define PRODUCT "Drashna Hacked Planck Rev6"
# elif defined(KEYBOARD_planck_ez)
-# define PRODUCT Drashna Hacked Planck EZ
+# define PRODUCT "Drashna Hacked Planck EZ"
# define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 4095
# endif
#endif
diff --git a/layouts/community/ortho_4x12/jjerrell/config.h b/layouts/community/ortho_4x12/jjerrell/config.h
index aee885b8d05..8d2080d8680 100644
--- a/layouts/community/ortho_4x12/jjerrell/config.h
+++ b/layouts/community/ortho_4x12/jjerrell/config.h
@@ -32,7 +32,7 @@
#ifdef KEYBOARD_planck_ez_glow
#undef PRODUCT
-#define PRODUCT Planck EZ Glow - Modified by <@jjerrell>
+#define PRODUCT "Planck EZ Glow - Modified by <@jjerrell>"
#endif
/*
diff --git a/layouts/community/ortho_4x12/junonum/keymap.c b/layouts/community/ortho_4x12/junonum/keymap.c
index d6fb1a4b076..b5ed159f6af 100644
--- a/layouts/community/ortho_4x12/junonum/keymap.c
+++ b/layouts/community/ortho_4x12/junonum/keymap.c
@@ -90,7 +90,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_ADJUST] = LAYOUT_ortho_4x12(
_______, QK_BOOT, DEBUG, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, KC_DEL ,
- _______, _______, MU_MOD, AU_ON, AU_OFF, CG_NORM, CG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______,
+ _______, AG_NORM, MU_MOD, AU_ON, AU_OFF, CG_NORM, CG_SWAP, QWERTY, COLEMAK, DVORAK, PLOVER, _______,
_______, MUV_DE, MUV_IN, MU_ON, MU_OFF, MI_ON, MI_OFF, TERM_ON, TERM_OFF, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
),
diff --git a/layouts/community/split_3x6_3/bbaserdem/config.h b/layouts/community/split_3x6_3/bbaserdem/config.h
index adf707d1bab..1d269335fe4 100644
--- a/layouts/community/split_3x6_3/bbaserdem/config.h
+++ b/layouts/community/split_3x6_3/bbaserdem/config.h
@@ -26,9 +26,9 @@
// Rebrand the PCB
# undef PRODUCT
-# define PRODUCT Protorne Keyboard
+# define PRODUCT "Protorne Keyboard"
# undef MANUFACTURER
-# define MANUFACTURER Waffles
+# define MANUFACTURER "Waffles"
// Remove OLED definitions?
# undef USE_I2C
diff --git a/layouts/community/split_3x6_3/drashna/config.h b/layouts/community/split_3x6_3/drashna/config.h
index cfcb873a80c..a84d6eef2ef 100644
--- a/layouts/community/split_3x6_3/drashna/config.h
+++ b/layouts/community/split_3x6_3/drashna/config.h
@@ -87,9 +87,9 @@
#undef PRODUCT
#ifdef CONVERT_TO_PROTON_C
-# define PRODUCT Drashna Hacked ARM Corne Keyboard
+# define PRODUCT "Drashna Hacked ARM Corne Keyboard"
#else
-# define PRODUCT Drashna Hacked Corne Keyboard
+# define PRODUCT "Drashna Hacked Corne Keyboard"
#endif
#define TAPPING_TERM_PER_KEY
diff --git a/lib/python/qmk/cli/generate/config_h.py b/lib/python/qmk/cli/generate/config_h.py
index a26dcdf7d7a..a2178bf1e96 100755
--- a/lib/python/qmk/cli/generate/config_h.py
+++ b/lib/python/qmk/cli/generate/config_h.py
@@ -117,9 +117,10 @@ def generate_config_items(kb_info_json, config_h_lines):
config_h_lines.append(f'# define {key} {value}')
config_h_lines.append(f'#endif // {key}')
elif key_type == 'str':
+ escaped_str = config_value.replace('\\', '\\\\').replace('"', '\\"')
config_h_lines.append('')
config_h_lines.append(f'#ifndef {config_key}')
- config_h_lines.append(f'# define {config_key} "{config_value}"')
+ config_h_lines.append(f'# define {config_key} "{escaped_str}"')
config_h_lines.append(f'#endif // {config_key}')
elif key_type == 'bcd_version':
(major, minor, revision) = config_value.split('.')
diff --git a/lib/python/qmk/cli/lint.py b/lib/python/qmk/cli/lint.py
index 38b6457c43f..6b077c250fc 100644
--- a/lib/python/qmk/cli/lint.py
+++ b/lib/python/qmk/cli/lint.py
@@ -87,7 +87,7 @@ def keymap_check(kb, km):
return ok
# Additional checks
- invalid_files = git_get_ignored_files(keymap_path.parent)
+ invalid_files = git_get_ignored_files(keymap_path.parent.as_posix())
for file in invalid_files:
cli.log.error(f'{kb}/{km}: The file "{file}" should not exist!')
ok = False
diff --git a/lib/python/qmk/info.py b/lib/python/qmk/info.py
index c95b55916c1..637a27b7640 100644
--- a/lib/python/qmk/info.py
+++ b/lib/python/qmk/info.py
@@ -479,7 +479,7 @@ def _config_to_json(key_type, config_value):
return int(config_value)
elif key_type == 'str':
- return config_value.strip('"')
+ return config_value.strip('"').replace('\\"', '"').replace('\\\\', '\\')
elif key_type == 'bcd_version':
major = int(config_value[2:4])
@@ -755,9 +755,6 @@ def arm_processor_rules(info_data, rules):
info_data['processor_type'] = 'arm'
info_data['protocol'] = 'ChibiOS'
- if 'bootloader' not in info_data:
- info_data['bootloader'] = 'unknown'
-
if 'STM32' in info_data['processor']:
info_data['platform'] = 'STM32'
elif 'MCU_SERIES' in rules:
@@ -775,9 +772,6 @@ def avr_processor_rules(info_data, rules):
info_data['platform'] = rules['ARCH'] if 'ARCH' in rules else 'unknown'
info_data['protocol'] = 'V-USB' if rules.get('MCU') in VUSB_PROCESSORS else 'LUFA'
- if 'bootloader' not in info_data:
- info_data['bootloader'] = 'atmel-dfu'
-
# FIXME(fauxpark/anyone): Eventually we should detect the protocol by looking at PROTOCOL inherited from mcu_selection.mk:
# info_data['protocol'] = 'V-USB' if rules.get('PROTOCOL') == 'VUSB' else 'LUFA'
diff --git a/lib/python/qmk/keymap.py b/lib/python/qmk/keymap.py
index f317f4d11e7..fc1421962f9 100644
--- a/lib/python/qmk/keymap.py
+++ b/lib/python/qmk/keymap.py
@@ -412,7 +412,7 @@ def list_keymaps(keyboard, c=True, json=True, additional_files=None, fullpath=Fa
rules = rules_mk(keyboard)
names = set()
- if rules:
+ if rules is not None:
keyboards_dir = Path('keyboards')
kb_path = keyboards_dir / keyboard
diff --git a/lib/python/qmk/tests/test_cli_commands.py b/lib/python/qmk/tests/test_cli_commands.py
index fde8b079a3f..185abb5f213 100644
--- a/lib/python/qmk/tests/test_cli_commands.py
+++ b/lib/python/qmk/tests/test_cli_commands.py
@@ -265,8 +265,8 @@ def test_generate_config_h():
check_returncode(result)
assert '# define DEVICE_VER 0x0001' in result.stdout
assert '# define DIODE_DIRECTION COL2ROW' in result.stdout
- assert '# define MANUFACTURER none' in result.stdout
- assert '# define PRODUCT pytest' in result.stdout
+ assert '# define MANUFACTURER "none"' in result.stdout
+ assert '# define PRODUCT "pytest"' in result.stdout
assert '# define PRODUCT_ID 0x6465' in result.stdout
assert '# define VENDOR_ID 0xFEED' in result.stdout
assert '# define MATRIX_COLS 1' in result.stdout
diff --git a/lib/usbhost/USB_Host_Shield_2.0/SPP.cpp b/lib/usbhost/USB_Host_Shield_2.0/SPP.cpp
index 0f4ee5e9810..8169707661f 100644
--- a/lib/usbhost/USB_Host_Shield_2.0/SPP.cpp
+++ b/lib/usbhost/USB_Host_Shield_2.0/SPP.cpp
@@ -757,7 +757,7 @@ size_t SPP::write(const uint8_t *data, size_t size) {
void SPP::write(const uint8_t *data, size_t size) {
#endif
for(uint8_t i = 0; i < size; i++) {
- if(sppIndex >= sizeof (sppOutputBuffer) / sizeof (sppOutputBuffer[0]))
+ if(sppIndex >= ARRAY_SIZE(sppOutputBuffer))
send(); // Send the current data in the buffer
sppOutputBuffer[sppIndex++] = data[i]; // All the bytes are put into a buffer and then send using the send() function
}
diff --git a/lib/usbhost/USB_Host_Shield_2.0/examples/Bluetooth/PS3Multi/PS3Multi.ino b/lib/usbhost/USB_Host_Shield_2.0/examples/Bluetooth/PS3Multi/PS3Multi.ino
index 5ebfd7819c2..11833334d04 100644
--- a/lib/usbhost/USB_Host_Shield_2.0/examples/Bluetooth/PS3Multi/PS3Multi.ino
+++ b/lib/usbhost/USB_Host_Shield_2.0/examples/Bluetooth/PS3Multi/PS3Multi.ino
@@ -19,7 +19,7 @@ USB Usb;
BTD Btd(&Usb); // You have to create the Bluetooth Dongle instance like so
PS3BT *PS3[2]; // We will use this pointer to store the two instance, you can easily make it larger if you like, but it will use a lot of RAM!
-const uint8_t length = sizeof(PS3) / sizeof(PS3[0]); // Get the lenght of the array
+const uint8_t length = ARRAY_SIZE(PS3); // Get the lenght of the array
bool printAngle[length];
bool oldControllerState[length];
diff --git a/lib/usbhost/USB_Host_Shield_2.0/examples/Bluetooth/WiiMulti/WiiMulti.ino b/lib/usbhost/USB_Host_Shield_2.0/examples/Bluetooth/WiiMulti/WiiMulti.ino
index 07c6f13d2bb..93cd084651d 100644
--- a/lib/usbhost/USB_Host_Shield_2.0/examples/Bluetooth/WiiMulti/WiiMulti.ino
+++ b/lib/usbhost/USB_Host_Shield_2.0/examples/Bluetooth/WiiMulti/WiiMulti.ino
@@ -19,7 +19,7 @@ USB Usb;
BTD Btd(&Usb); // You have to create the Bluetooth Dongle instance like so
WII *Wii[2]; // We will use this pointer to store the two instance, you can easily make it larger if you like, but it will use a lot of RAM!
-const uint8_t length = sizeof(Wii) / sizeof(Wii[0]); // Get the lenght of the array
+const uint8_t length = ARRAY_SIZE(Wii); // Get the lenght of the array
bool printAngle[length];
bool oldControllerState[length];
diff --git a/lib/usbhost/USB_Host_Shield_2.0/examples/HID/le3dp/le3dp_rptparser.h b/lib/usbhost/USB_Host_Shield_2.0/examples/HID/le3dp/le3dp_rptparser.h
index 2400364e65f..05dab14afe1 100644
--- a/lib/usbhost/USB_Host_Shield_2.0/examples/HID/le3dp/le3dp_rptparser.h
+++ b/lib/usbhost/USB_Host_Shield_2.0/examples/HID/le3dp/le3dp_rptparser.h
@@ -25,7 +25,7 @@ public:
virtual void OnGamePadChanged(const GamePadEventData *evt);
};
-#define RPT_GAMEPAD_LEN sizeof(GamePadEventData)/sizeof(uint8_t)
+#define RPT_GAMEPAD_LEN sizeof(GamePadEventData)
class JoystickReportParser : public HIDReportParser
{
diff --git a/lib/usbhost/USB_Host_Shield_2.0/examples/HID/scale/scale_rptparser.h b/lib/usbhost/USB_Host_Shield_2.0/examples/HID/scale/scale_rptparser.h
index 57fbb033bf7..7af18b88f71 100644
--- a/lib/usbhost/USB_Host_Shield_2.0/examples/HID/scale/scale_rptparser.h
+++ b/lib/usbhost/USB_Host_Shield_2.0/examples/HID/scale/scale_rptparser.h
@@ -38,7 +38,7 @@ public:
virtual void OnScaleChanged(const ScaleEventData *evt);
};
-#define RPT_SCALE_LEN sizeof(ScaleEventData)/sizeof(uint8_t)
+#define RPT_SCALE_LEN sizeof(ScaleEventData)
class ScaleReportParser : public HIDReportParser
{
diff --git a/platforms/arm_atsam/bootloader.mk b/platforms/arm_atsam/bootloader.mk
new file mode 100644
index 00000000000..1ec42edeb68
--- /dev/null
+++ b/platforms/arm_atsam/bootloader.mk
@@ -0,0 +1,46 @@
+# Copyright 2017 Jack Humbert
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+# If it's possible that multiple bootloaders can be used for one project,
+# you can leave this unset, and the correct size will be selected
+# automatically.
+#
+# Sets the bootloader defined in the keyboard's/keymap's rules.mk
+#
+# Current options for ARM (ATSAM):
+# md-boot Atmel SAM-BA (only used by Drop boards)
+#
+# If you need to provide your own implementation, you can set inside `rules.mk`
+# `BOOTLOADER = custom` -- you'll need to provide your own implementations. See
+# the respective file under `platforms//bootloaders/custom.c` to see
+# which functions may be overridden.
+
+ifeq ($(strip $(BOOTLOADER)), custom)
+ OPT_DEFS += -DBOOTLOADER_CUSTOM
+ BOOTLOADER_TYPE = custom
+endif
+
+ifeq ($(strip $(BOOTLOADER)), md-boot)
+ OPT_DEFS += -DBOOTLOADER_MD_BOOT
+ BOOTLOADER_TYPE = md_boot
+endif
+
+ifeq ($(strip $(BOOTLOADER_TYPE)),)
+ ifneq ($(strip $(BOOTLOADER)),)
+ $(call CATASTROPHIC_ERROR,Invalid BOOTLOADER,Invalid bootloader specified. Please set an appropriate bootloader in your rules.mk or info.json.)
+ else
+ $(call CATASTROPHIC_ERROR,Invalid BOOTLOADER,No bootloader specified. Please set an appropriate bootloader in your rules.mk or info.json.)
+ endif
+endif
diff --git a/builddefs/bootloader.mk b/platforms/avr/bootloader.mk
similarity index 60%
rename from builddefs/bootloader.mk
rename to platforms/avr/bootloader.mk
index 9f555364236..63fe635d96a 100644
--- a/builddefs/bootloader.mk
+++ b/platforms/avr/bootloader.mk
@@ -18,9 +18,8 @@
# automatically.
#
# Sets the bootloader defined in the keyboard's/keymap's rules.mk
-# Current options:
#
-# AVR:
+# Current options for AVR:
# halfkay PJRC Teensy
# caterina Pro Micro (Sparkfun/generic)
# atmel-dfu Atmel factory DFU
@@ -29,14 +28,6 @@
# qmk-hid QMK HID (LUFA + blinkenlight)
# bootloadhid HIDBootFlash compatible (ATmega32A)
# usbasploader USBaspLoader (ATmega328P)
-# ARM:
-# halfkay PJRC Teensy
-# kiibohd Input:Club Kiibohd bootloader (only used on their boards)
-# stm32duino STM32Duino (STM32F103x8)
-# stm32-dfu STM32 USB DFU in ROM
-# apm32-dfu APM32 USB DFU in ROM
-# RISC-V:
-# gd32v-dfu GD32V USB DFU in ROM
#
# If you need to provide your own implementation, you can set inside `rules.mk`
# `BOOTLOADER = custom` -- you'll need to provide your own implementations. See
@@ -50,6 +41,7 @@ ifeq ($(strip $(BOOTLOADER)), custom)
OPT_DEFS += -DBOOTLOADER_CUSTOM
BOOTLOADER_TYPE = custom
endif
+
ifeq ($(strip $(BOOTLOADER)), atmel-dfu)
OPT_DEFS += -DBOOTLOADER_ATMEL_DFU
OPT_DEFS += -DBOOTLOADER_DFU
@@ -105,10 +97,6 @@ ifeq ($(strip $(BOOTLOADER)), halfkay)
ifeq ($(strip $(MCU)), at90usb1286)
BOOTLOADER_SIZE = 1024
endif
- # Teensy LC, 3.0, 3.1/2, 3.5, 3.6
- ifneq (,$(filter $(MCU_ORIG), MKL26Z64 MK20DX128 MK20DX256 MK64FX512 MK66FX1M0))
- FIRMWARE_FORMAT = hex
- endif
endif
ifeq ($(strip $(BOOTLOADER)), caterina)
OPT_DEFS += -DBOOTLOADER_CATERINA
@@ -116,13 +104,13 @@ ifeq ($(strip $(BOOTLOADER)), caterina)
BOOTLOADER_SIZE = 4096
endif
-ifneq (,$(filter $(BOOTLOADER), bootloadhid bootloadHID))
+ifeq ($(strip $(BOOTLOADER)), bootloadhid)
OPT_DEFS += -DBOOTLOADER_BOOTLOADHID
BOOTLOADER_TYPE = bootloadhid
BOOTLOADER_SIZE = 4096
endif
-ifneq (,$(filter $(BOOTLOADER), usbasploader USBasp))
+ifeq ($(strip $(BOOTLOADER)), usbasploader)
OPT_DEFS += -DBOOTLOADER_USBASP
BOOTLOADER_TYPE = usbasploader
@@ -147,77 +135,10 @@ ifdef BOOTLOADER_SIZE
OPT_DEFS += -DBOOTLOADER_SIZE=$(strip $(BOOTLOADER_SIZE))
endif
-ifeq ($(strip $(BOOTLOADER)), stm32-dfu)
- OPT_DEFS += -DBOOTLOADER_STM32_DFU
- BOOTLOADER_TYPE = stm32_dfu
-
- # Options to pass to dfu-util when flashing
- DFU_ARGS ?= -d 0483:DF11 -a 0 -s 0x08000000:leave
- DFU_SUFFIX_ARGS ?= -v 0483 -p DF11
-endif
-ifeq ($(strip $(BOOTLOADER)), apm32-dfu)
- OPT_DEFS += -DBOOTLOADER_APM32_DFU
- BOOTLOADER_TYPE = stm32_dfu
-
- # Options to pass to dfu-util when flashing
- DFU_ARGS ?= -d 314B:0106 -a 0 -s 0x08000000:leave
- DFU_SUFFIX_ARGS ?= -v 314B -p 0106
-endif
-ifeq ($(strip $(BOOTLOADER)), gd32v-dfu)
- OPT_DEFS += -DBOOTLOADER_GD32V_DFU
- BOOTLOADER_TYPE = gd32v_dfu
-
- # Options to pass to dfu-util when flashing
- DFU_ARGS ?= -d 28E9:0189 -a 0 -s 0x08000000:leave
- DFU_SUFFIX_ARGS ?= -v 28E9 -p 0189
-endif
-ifeq ($(strip $(BOOTLOADER)), kiibohd)
- OPT_DEFS += -DBOOTLOADER_KIIBOHD
- BOOTLOADER_TYPE = kiibohd
-
- ifeq ($(strip $(MCU_ORIG)), MK20DX128)
- MCU_LDSCRIPT = MK20DX128BLDR4
- endif
- ifeq ($(strip $(MCU_ORIG)), MK20DX256)
- MCU_LDSCRIPT = MK20DX256BLDR8
- endif
-
- # Options to pass to dfu-util when flashing
- DFU_ARGS = -d 1C11:B007
- DFU_SUFFIX_ARGS = -v 1C11 -p B007
-endif
-ifeq ($(strip $(BOOTLOADER)), stm32duino)
- OPT_DEFS += -DBOOTLOADER_STM32DUINO
- MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
- BOARD = STM32_F103_STM32DUINO
- BOOTLOADER_TYPE = stm32duino
-
- # Options to pass to dfu-util when flashing
- DFU_ARGS = -d 1EAF:0003 -a 2 -R
- DFU_SUFFIX_ARGS = -v 1EAF -p 0003
-endif
-ifeq ($(strip $(BOOTLOADER)), tinyuf2)
- OPT_DEFS += -DBOOTLOADER_TINYUF2
- BOOTLOADER_TYPE = tinyuf2
- FIRMWARE_FORMAT = uf2
-endif
-ifeq ($(strip $(BOOTLOADER)), rp2040)
- OPT_DEFS += -DBOOTLOADER_RP2040
- BOOTLOADER_TYPE = rp2040
-endif
-ifeq ($(strip $(BOOTLOADER)), halfkay)
- OPT_DEFS += -DBOOTLOADER_HALFKAY
- BOOTLOADER_TYPE = halfkay
-endif
-ifeq ($(strip $(BOOTLOADER)), md-boot)
- OPT_DEFS += -DBOOTLOADER_MD_BOOT
- BOOTLOADER_TYPE = md_boot
-endif
-ifeq ($(strip $(BOOTLOADER)), wb32-dfu)
- OPT_DEFS += -DBOOTLOADER_WB32_DFU
- BOOTLOADER_TYPE = wb32_dfu
-endif
-
ifeq ($(strip $(BOOTLOADER_TYPE)),)
- $(call CATASTROPHIC_ERROR,Invalid BOOTLOADER,No bootloader specified. Please set an appropriate 'BOOTLOADER' in your keyboard's 'rules.mk' file.)
+ ifneq ($(strip $(BOOTLOADER)),)
+ $(call CATASTROPHIC_ERROR,Invalid BOOTLOADER,Invalid bootloader specified. Please set an appropriate bootloader in your rules.mk or info.json.)
+ else
+ $(call CATASTROPHIC_ERROR,Invalid BOOTLOADER,No bootloader specified. Please set an appropriate bootloader in your rules.mk or info.json.)
+ endif
endif
diff --git a/platforms/avr/flash.mk b/platforms/avr/flash.mk
index 6d50e72534e..cd980b97337 100644
--- a/platforms/avr/flash.mk
+++ b/platforms/avr/flash.mk
@@ -177,9 +177,9 @@ else ifeq ($(strip $(BOOTLOADER)), halfkay)
$(UNSYNC_OUTPUT_CMD) && $(call EXEC_TEENSY)
else ifeq (dfu,$(findstring dfu,$(BOOTLOADER)))
$(UNSYNC_OUTPUT_CMD) && $(call EXEC_DFU)
-else ifneq (,$(filter $(BOOTLOADER), usbasploader USBasp))
+else ifeq ($(strip $(BOOTLOADER)), usbasploader)
$(UNSYNC_OUTPUT_CMD) && $(call EXEC_USBASP)
-else ifneq (,$(filter $(BOOTLOADER), bootloadhid bootloadHID))
+else ifeq ($(strip $(BOOTLOADER)), bootloadhid)
$(UNSYNC_OUTPUT_CMD) && $(call EXEC_BOOTLOADHID)
else ifeq ($(strip $(BOOTLOADER)), qmk-hid)
$(UNSYNC_OUTPUT_CMD) && $(call EXEC_HID_LUFA)
diff --git a/platforms/chibios/boards/GENERIC_WB32_F3G71XX/board/board.c b/platforms/chibios/boards/GENERIC_WB32_F3G71XX/board/board.c
index e38a7e00549..f74c9e8be7f 100644
--- a/platforms/chibios/boards/GENERIC_WB32_F3G71XX/board/board.c
+++ b/platforms/chibios/boards/GENERIC_WB32_F3G71XX/board/board.c
@@ -80,3 +80,7 @@ void __early_init(void) {
void boardInit(void) {
}
+
+void restart_usb_driver(USBDriver *usbp) {
+ // Do nothing. Restarting the USB driver on these boards breaks it.
+}
diff --git a/platforms/chibios/boards/GENERIC_WB32_FQ95XX/board/board.c b/platforms/chibios/boards/GENERIC_WB32_FQ95XX/board/board.c
index 22b4ff73b53..a99537fc270 100644
--- a/platforms/chibios/boards/GENERIC_WB32_FQ95XX/board/board.c
+++ b/platforms/chibios/boards/GENERIC_WB32_FQ95XX/board/board.c
@@ -80,3 +80,7 @@ void __early_init(void) {
void boardInit(void) {
}
+
+void restart_usb_driver(USBDriver *usbp) {
+ // Do nothing. Restarting the USB driver on these boards breaks it.
+}
diff --git a/platforms/chibios/boards/GENERIC_WB32_FQ95XX/configs/config.h b/platforms/chibios/boards/GENERIC_WB32_FQ95XX/configs/config.h
index e02e526113d..d4c7e546428 100644
--- a/platforms/chibios/boards/GENERIC_WB32_FQ95XX/configs/config.h
+++ b/platforms/chibios/boards/GENERIC_WB32_FQ95XX/configs/config.h
@@ -18,3 +18,5 @@
#ifndef EARLY_INIT_PERFORM_BOOTLOADER_JUMP
# define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
#endif
+
+#define USB_ENDPOINTS_ARE_REORDERABLE
diff --git a/platforms/chibios/bootloader.mk b/platforms/chibios/bootloader.mk
new file mode 100644
index 00000000000..0568d353219
--- /dev/null
+++ b/platforms/chibios/bootloader.mk
@@ -0,0 +1,122 @@
+# Copyright 2017 Jack Humbert
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+# If it's possible that multiple bootloaders can be used for one project,
+# you can leave this unset, and the correct size will be selected
+# automatically.
+#
+# Sets the bootloader defined in the keyboard's/keymap's rules.mk
+#
+# Current options for ARM:
+# halfkay PJRC Teensy
+# kiibohd Input:Club Kiibohd bootloader (only used on their boards)
+# stm32duino STM32Duino (STM32F103x8)
+# stm32-dfu STM32 USB DFU in ROM
+# apm32-dfu APM32 USB DFU in ROM
+# wb32-dfu WB32 USB DFU in ROM
+# tinyuf2 TinyUF2
+# rp2040 Raspberry Pi RP2040
+# Current options for RISC-V:
+# gd32v-dfu GD32V USB DFU in ROM
+#
+# If you need to provide your own implementation, you can set inside `rules.mk`
+# `BOOTLOADER = custom` -- you'll need to provide your own implementations. See
+# the respective file under `platforms//bootloaders/custom.c` to see
+# which functions may be overridden.
+
+ifeq ($(strip $(BOOTLOADER)), custom)
+ OPT_DEFS += -DBOOTLOADER_CUSTOM
+ BOOTLOADER_TYPE = custom
+endif
+
+ifeq ($(strip $(BOOTLOADER)), halfkay)
+ OPT_DEFS += -DBOOTLOADER_HALFKAY
+ BOOTLOADER_TYPE = halfkay
+
+ # Teensy LC, 3.0, 3.1/2, 3.5, 3.6
+ ifneq (,$(filter $(MCU_ORIG), MKL26Z64 MK20DX128 MK20DX256 MK64FX512 MK66FX1M0))
+ FIRMWARE_FORMAT = hex
+ endif
+endif
+ifeq ($(strip $(BOOTLOADER)), stm32-dfu)
+ OPT_DEFS += -DBOOTLOADER_STM32_DFU
+ BOOTLOADER_TYPE = stm32_dfu
+
+ # Options to pass to dfu-util when flashing
+ DFU_ARGS ?= -d 0483:DF11 -a 0 -s 0x08000000:leave
+ DFU_SUFFIX_ARGS ?= -v 0483 -p DF11
+endif
+ifeq ($(strip $(BOOTLOADER)), apm32-dfu)
+ OPT_DEFS += -DBOOTLOADER_APM32_DFU
+ BOOTLOADER_TYPE = stm32_dfu
+
+ # Options to pass to dfu-util when flashing
+ DFU_ARGS ?= -d 314B:0106 -a 0 -s 0x08000000:leave
+ DFU_SUFFIX_ARGS ?= -v 314B -p 0106
+endif
+ifeq ($(strip $(BOOTLOADER)), gd32v-dfu)
+ OPT_DEFS += -DBOOTLOADER_GD32V_DFU
+ BOOTLOADER_TYPE = gd32v_dfu
+
+ # Options to pass to dfu-util when flashing
+ DFU_ARGS ?= -d 28E9:0189 -a 0 -s 0x08000000:leave
+ DFU_SUFFIX_ARGS ?= -v 28E9 -p 0189
+endif
+ifeq ($(strip $(BOOTLOADER)), kiibohd)
+ OPT_DEFS += -DBOOTLOADER_KIIBOHD
+ BOOTLOADER_TYPE = kiibohd
+
+ ifeq ($(strip $(MCU_ORIG)), MK20DX128)
+ MCU_LDSCRIPT = MK20DX128BLDR4
+ endif
+ ifeq ($(strip $(MCU_ORIG)), MK20DX256)
+ MCU_LDSCRIPT = MK20DX256BLDR8
+ endif
+
+ # Options to pass to dfu-util when flashing
+ DFU_ARGS = -d 1C11:B007
+ DFU_SUFFIX_ARGS = -v 1C11 -p B007
+endif
+ifeq ($(strip $(BOOTLOADER)), stm32duino)
+ OPT_DEFS += -DBOOTLOADER_STM32DUINO
+ MCU_LDSCRIPT = STM32F103x8_stm32duino_bootloader
+ BOARD = STM32_F103_STM32DUINO
+ BOOTLOADER_TYPE = stm32duino
+
+ # Options to pass to dfu-util when flashing
+ DFU_ARGS = -d 1EAF:0003 -a 2 -R
+ DFU_SUFFIX_ARGS = -v 1EAF -p 0003
+endif
+ifeq ($(strip $(BOOTLOADER)), tinyuf2)
+ OPT_DEFS += -DBOOTLOADER_TINYUF2
+ BOOTLOADER_TYPE = tinyuf2
+ FIRMWARE_FORMAT = uf2
+endif
+ifeq ($(strip $(BOOTLOADER)), rp2040)
+ OPT_DEFS += -DBOOTLOADER_RP2040
+ BOOTLOADER_TYPE = rp2040
+endif
+ifeq ($(strip $(BOOTLOADER)), wb32-dfu)
+ OPT_DEFS += -DBOOTLOADER_WB32_DFU
+ BOOTLOADER_TYPE = wb32_dfu
+endif
+
+ifeq ($(strip $(BOOTLOADER_TYPE)),)
+ ifneq ($(strip $(BOOTLOADER)),)
+ $(call CATASTROPHIC_ERROR,Invalid BOOTLOADER,Invalid bootloader specified. Please set an appropriate bootloader in your rules.mk or info.json.)
+ else
+ $(call CATASTROPHIC_ERROR,Invalid BOOTLOADER,No bootloader specified. Please set an appropriate bootloader in your rules.mk or info.json.)
+ endif
+endif
diff --git a/platforms/chibios/converters/promicro_to_bit_c_pro/_pin_defs.h b/platforms/chibios/converters/promicro_to_bit_c_pro/_pin_defs.h
index 92e8fbfa1a9..a693e330113 100644
--- a/platforms/chibios/converters/promicro_to_bit_c_pro/_pin_defs.h
+++ b/platforms/chibios/converters/promicro_to_bit_c_pro/_pin_defs.h
@@ -34,6 +34,3 @@
// LEDs (Mapped to R and G channel of the Bit-C PRO's RGB led)
#define D5 16U
#define B0 17U
-
-// Bit-C LED (mapped to B channel of the Bit-C PRO's RGB led)
-#define F0 18U
diff --git a/platforms/chibios/converters/promicro_to_stemcell/_pin_defs.h b/platforms/chibios/converters/promicro_to_stemcell/_pin_defs.h
index f5dd55905d8..a7b709f8374 100644
--- a/platforms/chibios/converters/promicro_to_stemcell/_pin_defs.h
+++ b/platforms/chibios/converters/promicro_to_stemcell/_pin_defs.h
@@ -46,12 +46,6 @@
#define B2 PAL_LINE(GPIOA, 7)
#define B6 PAL_LINE(GPIOA, 4)
-// Extra elite-c compatible pinout
-#define B7 PAL_LINE(GPIOC, 13)
-#define D5 PAL_LINE(GPIOC, 14)
-#define C7 PAL_LINE(GPIOC, 15)
-#define F1 PAL_LINE(GPIOA, 0)
-#define F0 PAL_LINE(GPIOA, 1)
-
-// TX/RX pins of promicro
+// LEDs
+#define D5 PAL_LINE(GPIOA, 8) // User LED
#define B0 PAL_LINE(GPIOA, 9) // unconnected pin
diff --git a/platforms/chibios/drivers/ws2812_spi.c b/platforms/chibios/drivers/ws2812_spi.c
index a73eb697205..390884a2a45 100644
--- a/platforms/chibios/drivers/ws2812_spi.c
+++ b/platforms/chibios/drivers/ws2812_spi.c
@@ -181,7 +181,7 @@ void ws2812_init(void) {
spiStart(&WS2812_SPI, &spicfg); /* Setup transfer parameters. */
spiSelect(&WS2812_SPI); /* Slave Select assertion. */
#ifdef WS2812_SPI_USE_CIRCULAR_BUFFER
- spiStartSend(&WS2812_SPI, sizeof(txbuf) / sizeof(txbuf[0]), txbuf);
+ spiStartSend(&WS2812_SPI, ARRAY_SIZE(txbuf), txbuf);
#endif
}
@@ -200,9 +200,9 @@ void ws2812_setleds(LED_TYPE* ledarray, uint16_t leds) {
// Instead spiSend can be used to send synchronously (or the thread logic can be added back).
#ifndef WS2812_SPI_USE_CIRCULAR_BUFFER
# ifdef WS2812_SPI_SYNC
- spiSend(&WS2812_SPI, sizeof(txbuf) / sizeof(txbuf[0]), txbuf);
+ spiSend(&WS2812_SPI, ARRAY_SIZE(txbuf), txbuf);
# else
- spiStartSend(&WS2812_SPI, sizeof(txbuf) / sizeof(txbuf[0]), txbuf);
+ spiStartSend(&WS2812_SPI, ARRAY_SIZE(txbuf), txbuf);
# endif
#endif
}
diff --git a/quantum/backlight/backlight_driver_common.c b/quantum/backlight/backlight_driver_common.c
index e4c2e90b5fd..1eb8969084e 100644
--- a/quantum/backlight/backlight_driver_common.c
+++ b/quantum/backlight/backlight_driver_common.c
@@ -9,7 +9,7 @@
#if defined(BACKLIGHT_PINS)
static const pin_t backlight_pins[] = BACKLIGHT_PINS;
# ifndef BACKLIGHT_LED_COUNT
-# define BACKLIGHT_LED_COUNT (sizeof(backlight_pins) / sizeof(pin_t))
+# define BACKLIGHT_LED_COUNT ARRAY_SIZE(backlight_pins)
# endif
# define FOR_EACH_LED(x) \
diff --git a/quantum/backlight/backlight_software.c b/quantum/backlight/backlight_software.c
index 3d412cab521..27ccbd2c9ff 100644
--- a/quantum/backlight/backlight_software.c
+++ b/quantum/backlight/backlight_software.c
@@ -26,7 +26,7 @@ static const uint16_t backlight_duty_table[] = {
0b1110111011101110,
0b1111111111111111,
};
-#define backlight_duty_table_size (sizeof(backlight_duty_table) / sizeof(backlight_duty_table[0]))
+#define backlight_duty_table_size ARRAY_SIZE(backlight_duty_table)
// clang-format on
diff --git a/quantum/dip_switch.c b/quantum/dip_switch.c
index eee29aaf912..e180cfccdf5 100644
--- a/quantum/dip_switch.c
+++ b/quantum/dip_switch.c
@@ -33,7 +33,7 @@
#endif
#ifdef DIP_SWITCH_PINS
-# define NUMBER_OF_DIP_SWITCHES (sizeof(dip_switch_pad) / sizeof(pin_t))
+# define NUMBER_OF_DIP_SWITCHES (ARRAY_SIZE(dip_switch_pad))
static pin_t dip_switch_pad[] = DIP_SWITCH_PINS;
#endif
@@ -43,7 +43,7 @@ typedef struct matrix_index_t {
uint8_t col;
} matrix_index_t;
-# define NUMBER_OF_DIP_SWITCHES (sizeof(dip_switch_pad) / sizeof(matrix_index_t))
+# define NUMBER_OF_DIP_SWITCHES (ARRAY_SIZE(dip_switch_pad))
static matrix_index_t dip_switch_pad[] = DIP_SWITCH_MATRIX_GRID;
extern bool peek_matrix(uint8_t row_index, uint8_t col_index, bool read_raw);
static uint16_t scan_count;
diff --git a/quantum/encoder.c b/quantum/encoder.c
index 5f8a7ce080f..1393e34868c 100644
--- a/quantum/encoder.c
+++ b/quantum/encoder.c
@@ -24,7 +24,8 @@
#include
#ifndef ENCODER_MAP_KEY_DELAY
-# define ENCODER_MAP_KEY_DELAY 2
+# include "action.h"
+# define ENCODER_MAP_KEY_DELAY TAP_CODE_DELAY
#endif
#if !defined(ENCODER_RESOLUTIONS) && !defined(ENCODER_RESOLUTION)
@@ -143,9 +144,14 @@ void encoder_init(void) {
static void encoder_exec_mapping(uint8_t index, bool clockwise) {
// The delays below cater for Windows and its wonderful requirements.
action_exec(clockwise ? ENCODER_CW_EVENT(index, true) : ENCODER_CCW_EVENT(index, true));
+# if ENCODER_MAP_KEY_DELAY > 0
wait_ms(ENCODER_MAP_KEY_DELAY);
+# endif // ENCODER_MAP_KEY_DELAY > 0
+
action_exec(clockwise ? ENCODER_CW_EVENT(index, false) : ENCODER_CCW_EVENT(index, false));
+# if ENCODER_MAP_KEY_DELAY > 0
wait_ms(ENCODER_MAP_KEY_DELAY);
+# endif // ENCODER_MAP_KEY_DELAY > 0
}
#endif // ENCODER_MAP_ENABLE
diff --git a/quantum/encoder.h b/quantum/encoder.h
index 82f95b4931c..4eb67fa25dd 100644
--- a/quantum/encoder.h
+++ b/quantum/encoder.h
@@ -32,17 +32,17 @@ void encoder_state_raw(uint8_t* slave_state);
void encoder_update_raw(uint8_t* slave_state);
# if defined(ENCODERS_PAD_A_RIGHT)
-# define NUM_ENCODERS_LEFT (sizeof(((pin_t[])ENCODERS_PAD_A)) / sizeof(pin_t))
-# define NUM_ENCODERS_RIGHT (sizeof(((pin_t[])ENCODERS_PAD_A_RIGHT)) / sizeof(pin_t))
+# define NUM_ENCODERS_LEFT ARRAY_SIZE(((pin_t[])ENCODERS_PAD_A))
+# define NUM_ENCODERS_RIGHT ARRAY_SIZE(((pin_t[])ENCODERS_PAD_A_RIGHT))
# else
-# define NUM_ENCODERS_LEFT (sizeof(((pin_t[])ENCODERS_PAD_A)) / sizeof(pin_t))
+# define NUM_ENCODERS_LEFT ARRAY_SIZE(((pin_t[])ENCODERS_PAD_A))
# define NUM_ENCODERS_RIGHT NUM_ENCODERS_LEFT
# endif
# define NUM_ENCODERS (NUM_ENCODERS_LEFT + NUM_ENCODERS_RIGHT)
#else // SPLIT_KEYBOARD
-# define NUM_ENCODERS (sizeof(((pin_t[])ENCODERS_PAD_A)) / sizeof(pin_t))
+# define NUM_ENCODERS ARRAY_SIZE(((pin_t[])ENCODERS_PAD_A))
# define NUM_ENCODERS_LEFT NUM_ENCODERS
# define NUM_ENCODERS_RIGHT 0
diff --git a/quantum/pointing_device/pointing_device.c b/quantum/pointing_device/pointing_device.c
index 505a7a6ffd5..ae3f122e89f 100644
--- a/quantum/pointing_device/pointing_device.c
+++ b/quantum/pointing_device/pointing_device.c
@@ -166,11 +166,9 @@ __attribute__((weak)) void pointing_device_send(void) {
host_mouse_send(&local_mouse_report);
}
// send it and 0 it out except for buttons, so those stay until they are explicity over-ridden using update_pointing_device
- local_mouse_report.x = 0;
- local_mouse_report.y = 0;
- local_mouse_report.v = 0;
- local_mouse_report.h = 0;
-
+ uint8_t buttons = local_mouse_report.buttons;
+ memset(&local_mouse_report, 0, sizeof(local_mouse_report));
+ local_mouse_report.buttons = buttons;
memcpy(&old_report, &local_mouse_report, sizeof(local_mouse_report));
}
diff --git a/quantum/pointing_device/pointing_device_drivers.c b/quantum/pointing_device/pointing_device_drivers.c
index b96f8ff4b33..096ad5d028e 100644
--- a/quantum/pointing_device/pointing_device_drivers.c
+++ b/quantum/pointing_device/pointing_device_drivers.c
@@ -17,6 +17,7 @@
*/
#include "pointing_device.h"
+#include "pointing_device_internal.h"
#include "debug.h"
#include "wait.h"
#include "timer.h"
@@ -32,10 +33,7 @@ report_mouse_t adns5050_get_report(report_mouse_t mouse_report) {
report_adns5050_t data = adns5050_read_burst();
if (data.dx != 0 || data.dy != 0) {
-# ifdef CONSOLE_ENABLE
- if (debug_mouse) dprintf("Raw ] X: %d, Y: %d\n", data.dx, data.dy);
-# endif
-
+ pd_dprintf("Raw ] X: %d, Y: %d\n", data.dx, data.dy);
mouse_report.x = (mouse_xy_report_t)data.dx;
mouse_report.y = (mouse_xy_report_t)data.dy;
}
@@ -76,9 +74,7 @@ const pointing_device_driver_t pointing_device_driver = {
report_mouse_t analog_joystick_get_report(report_mouse_t mouse_report) {
report_analog_joystick_t data = analog_joystick_read();
-# ifdef CONSOLE_ENABLE
- if (debug_mouse) dprintf("Raw ] X: %d, Y: %d\n", data.x, data.y);
-# endif
+ pd_dprintf("Raw ] X: %d, Y: %d\n", data.x, data.y);
mouse_report.x = data.x;
mouse_report.y = data.y;
@@ -140,11 +136,9 @@ report_mouse_t cirque_pinnacle_get_report(report_mouse_t mouse_report) {
return mouse_report;
}
-# if CONSOLE_ENABLE
- if (debug_mouse && touchData.touchDown) {
- dprintf("cirque_pinnacle touchData x=%4d y=%4d z=%2d\n", touchData.xValue, touchData.yValue, touchData.zValue);
+ if (touchData.touchDown) {
+ pd_dprintf("cirque_pinnacle touchData x=%4d y=%4d z=%2d\n", touchData.xValue, touchData.yValue, touchData.zValue);
}
-# endif
// Scale coordinates to arbitrary X, Y resolution
cirque_pinnacle_scale_data(&touchData, cirque_pinnacle_get_scale(), cirque_pinnacle_get_scale());
@@ -227,9 +221,7 @@ const pointing_device_driver_t pointing_device_driver = {
report_mouse_t paw3204_get_report(report_mouse_t mouse_report) {
report_paw3204_t data = paw3204_read();
if (data.isMotion) {
-# ifdef CONSOLE_ENABLE
- dprintf("Raw ] X: %d, Y: %d\n", data.x, data.y);
-# endif
+ pd_dprintf("Raw ] X: %d, Y: %d\n", data.x, data.y);
mouse_report.x = data.x;
mouse_report.y = data.y;
@@ -329,7 +321,7 @@ report_mouse_t pmw33xx_get_report(report_mouse_t mouse_report) {
if (!in_motion) {
in_motion = true;
- dprintf("PWM3360 (0): starting motion\n");
+ pd_dprintf("PWM3360 (0): starting motion\n");
}
mouse_report.x = CONSTRAIN_HID_XY(report.delta_x);
diff --git a/quantum/pointing_device_internal.h b/quantum/pointing_device_internal.h
new file mode 100644
index 00000000000..ef649407caf
--- /dev/null
+++ b/quantum/pointing_device_internal.h
@@ -0,0 +1,14 @@
+// Copyright 2022 Stefan Kerkmann
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#ifdef POINTING_DEVICE_DEBUG
+# include "debug.h"
+# include "print.h"
+# define pd_dprintf(...) dprintf(__VA_ARGS__)
+#else
+# define pd_dprintf(...) \
+ do { \
+ } while (0)
+#endif
diff --git a/quantum/process_keycode/process_leader.c b/quantum/process_keycode/process_leader.c
index ae00b3227ab..3593f75f0d5 100644
--- a/quantum/process_keycode/process_leader.c
+++ b/quantum/process_keycode/process_leader.c
@@ -58,7 +58,7 @@ bool process_leader(uint16_t keycode, keyrecord_t *record) {
keycode = keycode & 0xFF;
}
# endif // LEADER_KEY_STRICT_KEY_PROCESSING
- if (leader_sequence_size < (sizeof(leader_sequence) / sizeof(leader_sequence[0]))) {
+ if (leader_sequence_size < ARRAY_SIZE(leader_sequence)) {
leader_sequence[leader_sequence_size] = keycode;
leader_sequence_size++;
} else {
diff --git a/quantum/process_keycode/process_unicode_common.c b/quantum/process_keycode/process_unicode_common.c
index 8de31c055c3..94809cf0297 100644
--- a/quantum/process_keycode/process_unicode_common.c
+++ b/quantum/process_keycode/process_unicode_common.c
@@ -25,10 +25,24 @@ bool unicode_saved_num_lock;
#if UNICODE_SELECTED_MODES != -1
static uint8_t selected[] = {UNICODE_SELECTED_MODES};
-static int8_t selected_count = sizeof selected / sizeof *selected;
+static int8_t selected_count = ARRAY_SIZE(selected);
static int8_t selected_index;
#endif
+/** \brief Uunicode input mode set at user level
+ *
+ * Run user code on unicode input mode change
+ */
+__attribute__((weak)) void unicode_input_mode_set_user(uint8_t input_mode) {}
+
+/** \brief unicode input mode set at keyboard level
+ *
+ * Run keyboard code on unicode input mode change
+ */
+__attribute__((weak)) void unicode_input_mode_set_kb(uint8_t input_mode) {
+ unicode_input_mode_set_user(input_mode);
+}
+
void unicode_input_mode_init(void) {
unicode_config.raw = eeprom_read_byte(EECONFIG_UNICODEMODE);
#if UNICODE_SELECTED_MODES != -1
@@ -50,6 +64,7 @@ void unicode_input_mode_init(void) {
unicode_config.input_mode = selected[selected_index = 0];
# endif
#endif
+ unicode_input_mode_set_kb(unicode_config.input_mode);
dprintf("Unicode input mode init to: %u\n", unicode_config.input_mode);
}
@@ -60,6 +75,7 @@ uint8_t get_unicode_input_mode(void) {
void set_unicode_input_mode(uint8_t mode) {
unicode_config.input_mode = mode;
persist_unicode_input_mode();
+ unicode_input_mode_set_kb(mode);
dprintf("Unicode input mode set to: %u\n", unicode_config.input_mode);
}
@@ -73,6 +89,7 @@ void cycle_unicode_input_mode(int8_t offset) {
# if UNICODE_CYCLE_PERSIST
persist_unicode_input_mode();
# endif
+ unicode_input_mode_set_kb(unicode_config.input_mode);
dprintf("Unicode input mode cycle to: %u\n", unicode_config.input_mode);
#endif
}
diff --git a/quantum/process_keycode/process_unicode_common.h b/quantum/process_keycode/process_unicode_common.h
index 15e798dbb31..bdc7a1deddd 100644
--- a/quantum/process_keycode/process_unicode_common.h
+++ b/quantum/process_keycode/process_unicode_common.h
@@ -87,6 +87,9 @@ void unicode_input_start(void);
void unicode_input_finish(void);
void unicode_input_cancel(void);
+void unicode_input_mode_set_user(uint8_t input_mode);
+void unicode_input_mode_set_kb(uint8_t input_mode);
+
void register_hex(uint16_t hex);
void register_hex32(uint32_t hex);
void register_unicode(uint32_t code_point);
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 9a0016b1506..acafd8025ca 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -361,8 +361,10 @@ bool process_record_quantum(keyrecord_t *record) {
#endif
return false;
case QK_CLEAR_EEPROM:
+#ifdef NO_RESET
eeconfig_init();
-#ifndef NO_RESET
+#else
+ eeconfig_disable();
soft_reset_keyboard();
#endif
return false;
diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c
index 27fa7369bfd..99151e5a924 100644
--- a/quantum/rgb_matrix/rgb_matrix_drivers.c
+++ b/quantum/rgb_matrix/rgb_matrix_drivers.c
@@ -369,7 +369,7 @@ static inline void setled(int i, uint8_t r, uint8_t g, uint8_t b) {
}
static void setled_all(uint8_t r, uint8_t g, uint8_t b) {
- for (int i = 0; i < sizeof(rgb_matrix_ws2812_array) / sizeof(rgb_matrix_ws2812_array[0]); i++) {
+ for (int i = 0; i < ARRAY_SIZE(rgb_matrix_ws2812_array); i++) {
setled(i, r, g, b);
}
}
diff --git a/quantum/secure.c b/quantum/secure.c
index f07f6af2cb2..f2a567f31d9 100644
--- a/quantum/secure.c
+++ b/quantum/secure.c
@@ -3,6 +3,7 @@
#include "secure.h"
#include "timer.h"
+#include "util.h"
#ifndef SECURE_UNLOCK_TIMEOUT
# define SECURE_UNLOCK_TIMEOUT 5000
@@ -59,7 +60,7 @@ void secure_activity_event(void) {
void secure_keypress_event(uint8_t row, uint8_t col) {
static const uint8_t sequence[][2] = SECURE_UNLOCK_SEQUENCE;
- static const uint8_t sequence_len = sizeof(sequence) / sizeof(sequence[0]);
+ static const uint8_t sequence_len = ARRAY_SIZE(sequence);
static uint8_t offset = 0;
if ((sequence[offset][0] == row) && (sequence[offset][1] == col)) {
diff --git a/quantum/util.h b/quantum/util.h
index ab96ce4bdeb..9c034cc404f 100644
--- a/quantum/util.h
+++ b/quantum/util.h
@@ -1,26 +1,11 @@
-/*
-Copyright 2011 Jun Wako
+// Copyright 2022 Stefan Kerkmann (KarlK90)
+// Copyright 2011 Jun Wako
+// SPDX-License-Identifier: GPL-2.0-or-later
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-*/
#pragma once
#include "bitwise.h"
-// convert to L string
-#define LSTR(s) XLSTR(s)
-#define XLSTR(s) L## #s
// convert to string
#define STR(s) XSTR(s)
#define XSTR(s) #s
@@ -32,3 +17,32 @@ along with this program. If not, see .
#if !defined(MAX)
# define MAX(x, y) (((x) > (y)) ? (x) : (y))
#endif
+
+#if !defined(CEILING)
+/**
+ * @brief Computes the rounded up result of a division of two integers at
+ * compile time.
+ */
+# define CEILING(dividend, divisor) (((dividend) + (divisor)-1) / (divisor))
+#endif
+
+#if !defined(IS_ARRAY)
+/**
+ * @brief Returns true if the value is an array, false if it's a pointer.
+ *
+ * This macro is ill-formed for scalars, which is OK for its intended use in
+ * ARRAY_SIZE.
+ */
+# define IS_ARRAY(value) (!__builtin_types_compatible_p(typeof((value)), typeof(&(value)[0])))
+#endif
+
+#if !defined(ARRAY_SIZE)
+/**
+ * @brief Computes the number of elements of the given array at compile time.
+ *
+ * This Macro can only be used for statically allocated arrays that have not
+ * been decayed into a pointer. This is detected at compile time, though the
+ * error message for scalar values is poor.
+ */
+# define ARRAY_SIZE(array) (__builtin_choose_expr(IS_ARRAY((array)), sizeof((array)) / sizeof((array)[0]), (void)0))
+#endif
diff --git a/tests/test_common/test_driver.cpp b/tests/test_common/test_driver.cpp
index 86644ab6bda..7ecd4931ed7 100644
--- a/tests/test_common/test_driver.cpp
+++ b/tests/test_common/test_driver.cpp
@@ -31,7 +31,7 @@ uint8_t hex_digit_to_keycode(uint8_t digit) {
}
} // namespace
-TestDriver::TestDriver() : m_driver{&TestDriver::keyboard_leds, &TestDriver::send_keyboard, &TestDriver::send_mouse, &TestDriver::send_system, &TestDriver::send_consumer} {
+TestDriver::TestDriver() : m_driver{&TestDriver::keyboard_leds, &TestDriver::send_keyboard, &TestDriver::send_mouse, &TestDriver::send_extra} {
host_set_driver(&m_driver);
m_this = this;
}
@@ -53,12 +53,8 @@ void TestDriver::send_mouse(report_mouse_t* report) {
m_this->send_mouse_mock(*report);
}
-void TestDriver::send_system(uint16_t data) {
- m_this->send_system_mock(data);
-}
-
-void TestDriver::send_consumer(uint16_t data) {
- m_this->send_consumer(data);
+void TestDriver::send_extra(uint8_t report_id, uint16_t data) {
+ m_this->send_extra_mock(report_id, data);
}
namespace internal {
diff --git a/tests/test_common/test_driver.hpp b/tests/test_common/test_driver.hpp
index b58cfd1ebca..666bfb1fba8 100644
--- a/tests/test_common/test_driver.hpp
+++ b/tests/test_common/test_driver.hpp
@@ -32,15 +32,13 @@ class TestDriver {
MOCK_METHOD1(send_keyboard_mock, void(report_keyboard_t&));
MOCK_METHOD1(send_mouse_mock, void(report_mouse_t&));
- MOCK_METHOD1(send_system_mock, void(uint16_t));
- MOCK_METHOD1(send_consumer_mock, void(uint16_t));
+ MOCK_METHOD2(send_extra_mock, void(uint8_t, uint16_t));
private:
static uint8_t keyboard_leds(void);
static void send_keyboard(report_keyboard_t* report);
static void send_mouse(report_mouse_t* report);
- static void send_system(uint16_t data);
- static void send_consumer(uint16_t data);
+ static void send_extra(uint8_t report_id, uint16_t data);
host_driver_t m_driver;
uint8_t m_leds = 0;
static TestDriver* m_this;
diff --git a/tmk_core/protocol/arm_atsam/main_arm_atsam.c b/tmk_core/protocol/arm_atsam/main_arm_atsam.c
index 8ee9e042e7e..0537e3937d9 100644
--- a/tmk_core/protocol/arm_atsam/main_arm_atsam.c
+++ b/tmk_core/protocol/arm_atsam/main_arm_atsam.c
@@ -37,14 +37,13 @@ void main_subtasks(void);
uint8_t keyboard_leds(void);
void send_keyboard(report_keyboard_t *report);
void send_mouse(report_mouse_t *report);
-void send_system(uint16_t data);
-void send_consumer(uint16_t data);
+void send_extra(uint8_t report_id, uint16_t data);
#ifdef DEFERRED_EXEC_ENABLE
void deferred_exec_task(void);
#endif // DEFERRED_EXEC_ENABLE
-host_driver_t arm_atsam_driver = {keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer};
+host_driver_t arm_atsam_driver = {keyboard_leds, send_keyboard, send_mouse, send_extra};
uint8_t led_states;
@@ -114,8 +113,8 @@ void send_mouse(report_mouse_t *report) {
#endif // MOUSEKEY_ENABLE
}
-#ifdef EXTRAKEY_ENABLE
void send_extra(uint8_t report_id, uint16_t data) {
+#ifdef EXTRAKEY_ENABLE
uint32_t irqflags;
irqflags = __get_PRIMASK();
@@ -129,18 +128,6 @@ void send_extra(uint8_t report_id, uint16_t data) {
__DMB();
__set_PRIMASK(irqflags);
-}
-#endif // EXTRAKEY_ENABLE
-
-void send_system(uint16_t data) {
-#ifdef EXTRAKEY_ENABLE
- send_extra(REPORT_ID_SYSTEM, data);
-#endif // EXTRAKEY_ENABLE
-}
-
-void send_consumer(uint16_t data) {
-#ifdef EXTRAKEY_ENABLE
- send_extra(REPORT_ID_CONSUMER, data);
#endif // EXTRAKEY_ENABLE
}
diff --git a/tmk_core/protocol/arm_atsam/md_rgb_matrix_programs.c b/tmk_core/protocol/arm_atsam/md_rgb_matrix_programs.c
index 69b3ad574cc..58fc4efd9c6 100644
--- a/tmk_core/protocol/arm_atsam/md_rgb_matrix_programs.c
+++ b/tmk_core/protocol/arm_atsam/md_rgb_matrix_programs.c
@@ -95,7 +95,7 @@ led_setup_t leds_rainbow_s[] = {
void *led_setups[] = {leds_rainbow_s, leds_rainbow_ns, leds_teal_salmon, leds_yellow, leds_red, leds_green, leds_blue, leds_white, leds_white_with_red_stripe, leds_black_with_red_stripe, leds_off};
-const uint8_t led_setups_count = sizeof(led_setups) / sizeof(led_setups[0]);
+const uint8_t led_setups_count = ARRAY_SIZE(led_setups);
# endif // USE_MASSDROP_CONFIGURATOR
#endif // RGB_MATRIX_ENABLE
\ No newline at end of file
diff --git a/tmk_core/protocol/chibios/chibios.c b/tmk_core/protocol/chibios/chibios.c
index c9a480c3255..024160a9257 100644
--- a/tmk_core/protocol/chibios/chibios.c
+++ b/tmk_core/protocol/chibios/chibios.c
@@ -58,13 +58,12 @@
uint8_t keyboard_leds(void);
void send_keyboard(report_keyboard_t *report);
void send_mouse(report_mouse_t *report);
-void send_system(uint16_t data);
-void send_consumer(uint16_t data);
+void send_extra(uint8_t report_id, uint16_t data);
void send_programmable_button(uint32_t data);
void send_digitizer(report_digitizer_t *report);
/* host struct */
-host_driver_t chibios_driver = {keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer, send_programmable_button};
+host_driver_t chibios_driver = {keyboard_leds, send_keyboard, send_mouse, send_extra, send_programmable_button};
#ifdef VIRTSER_ENABLE
void virtser_task(void);
diff --git a/tmk_core/protocol/chibios/usb_main.c b/tmk_core/protocol/chibios/usb_main.c
index eb9ef825548..222a867e3c7 100644
--- a/tmk_core/protocol/chibios/usb_main.c
+++ b/tmk_core/protocol/chibios/usb_main.c
@@ -946,8 +946,8 @@ void shared_in_cb(USBDriver *usbp, usbep_t ep) {
* ---------------------------------------------------------
*/
+void send_extra(uint8_t report_id, uint16_t data) {
#ifdef EXTRAKEY_ENABLE
-static void send_extra(uint8_t report_id, uint16_t data) {
osalSysLock();
if (usbGetDriverStateI(&USB_DRIVER) != USB_ACTIVE) {
osalSysUnlock();
@@ -970,18 +970,6 @@ static void send_extra(uint8_t report_id, uint16_t data) {
usbStartTransmitI(&USB_DRIVER, SHARED_IN_EPNUM, (uint8_t *)&report, sizeof(report_extra_t));
osalSysUnlock();
-}
-#endif
-
-void send_system(uint16_t data) {
-#ifdef EXTRAKEY_ENABLE
- send_extra(REPORT_ID_SYSTEM, data);
-#endif
-}
-
-void send_consumer(uint16_t data) {
-#ifdef EXTRAKEY_ENABLE
- send_extra(REPORT_ID_CONSUMER, data);
#endif
}
diff --git a/tmk_core/protocol/host.c b/tmk_core/protocol/host.c
index 3d8604d5414..2ebd176ea40 100644
--- a/tmk_core/protocol/host.c
+++ b/tmk_core/protocol/host.c
@@ -107,7 +107,7 @@ void host_system_send(uint16_t report) {
last_system_report = report;
if (!driver) return;
- (*driver->send_system)(report);
+ (*driver->send_extra)(REPORT_ID_SYSTEM, report);
}
void host_consumer_send(uint16_t report) {
@@ -115,7 +115,7 @@ void host_consumer_send(uint16_t report) {
last_consumer_report = report;
if (!driver) return;
- (*driver->send_consumer)(report);
+ (*driver->send_extra)(REPORT_ID_CONSUMER, report);
}
void host_digitizer_send(digitizer_t *digitizer) {
diff --git a/tmk_core/protocol/host_driver.h b/tmk_core/protocol/host_driver.h
index affd0dcb348..680d9727d37 100644
--- a/tmk_core/protocol/host_driver.h
+++ b/tmk_core/protocol/host_driver.h
@@ -27,9 +27,8 @@ typedef struct {
uint8_t (*keyboard_leds)(void);
void (*send_keyboard)(report_keyboard_t *);
void (*send_mouse)(report_mouse_t *);
- void (*send_system)(uint16_t);
- void (*send_consumer)(uint16_t);
+ void (*send_extra)(uint8_t, uint16_t);
void (*send_programmable_button)(uint32_t);
} host_driver_t;
-void send_digitizer(report_digitizer_t *report);
\ No newline at end of file
+void send_digitizer(report_digitizer_t *report);
diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c
index b4b03357a36..03e19745f84 100644
--- a/tmk_core/protocol/lufa/lufa.c
+++ b/tmk_core/protocol/lufa/lufa.c
@@ -101,10 +101,9 @@ static report_keyboard_t keyboard_report_sent;
static uint8_t keyboard_leds(void);
static void send_keyboard(report_keyboard_t *report);
static void send_mouse(report_mouse_t *report);
-static void send_system(uint16_t data);
-static void send_consumer(uint16_t data);
+static void send_extra(uint8_t report_id, uint16_t data);
static void send_programmable_button(uint32_t data);
-host_driver_t lufa_driver = {keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer, send_programmable_button};
+host_driver_t lufa_driver = {keyboard_leds, send_keyboard, send_mouse, send_extra, send_programmable_button};
#ifdef VIRTSER_ENABLE
// clang-format off
@@ -746,32 +745,10 @@ static void send_report(void *report, size_t size) {
*
* FIXME: Needs doc
*/
-#ifdef EXTRAKEY_ENABLE
static void send_extra(uint8_t report_id, uint16_t data) {
- static report_extra_t r;
- r = (report_extra_t){.report_id = report_id, .usage = data};
- send_report(&r, sizeof(r));
-}
-#endif
-
-/** \brief Send System
- *
- * FIXME: Needs doc
- */
-static void send_system(uint16_t data) {
-#ifdef EXTRAKEY_ENABLE
- send_extra(REPORT_ID_SYSTEM, data);
-#endif
-}
-
-/** \brief Send Consumer
- *
- * FIXME: Needs doc
- */
-static void send_consumer(uint16_t data) {
#ifdef EXTRAKEY_ENABLE
# ifdef BLUETOOTH_ENABLE
- if (where_to_send() == OUTPUT_BLUETOOTH) {
+ if (report_id == REPORT_ID_CONSUMER && where_to_send() == OUTPUT_BLUETOOTH) {
# ifdef BLUETOOTH_BLUEFRUIT_LE
bluefruit_le_send_consumer_key(data);
# elif BLUETOOTH_RN42
@@ -781,7 +758,9 @@ static void send_consumer(uint16_t data) {
}
# endif
- send_extra(REPORT_ID_CONSUMER, data);
+ static report_extra_t r;
+ r = (report_extra_t){.report_id = report_id, .usage = data};
+ send_report(&r, sizeof(r));
#endif
}
diff --git a/tmk_core/protocol/midi/midi.c b/tmk_core/protocol/midi/midi.c
index f3792552f4b..1ba3e73a402 100644
--- a/tmk_core/protocol/midi/midi.c
+++ b/tmk_core/protocol/midi/midi.c
@@ -19,7 +19,9 @@
#include "midi.h"
#include //for memcpy
-#define MIN(x, y) (((x) < (y)) ? (x) : (y))
+#ifndef MIN
+# define MIN(x, y) (((x) < (y)) ? (x) : (y))
+#endif
#ifndef NULL
# define NULL 0
diff --git a/tmk_core/protocol/usb_descriptor.c b/tmk_core/protocol/usb_descriptor.c
index 52e3276d359..635e4c6cd70 100644
--- a/tmk_core/protocol/usb_descriptor.c
+++ b/tmk_core/protocol/usb_descriptor.c
@@ -1043,7 +1043,7 @@ const USB_Descriptor_Configuration_t PROGMEM ConfigurationDescriptor = {
*/
const USB_Descriptor_String_t PROGMEM LanguageString = {
.Header = {
- .Size = USB_STRING_LEN(1),
+ .Size = 4,
.Type = DTYPE_String
},
.UnicodeString = {LANGUAGE_ID_ENG}
@@ -1051,24 +1051,24 @@ const USB_Descriptor_String_t PROGMEM LanguageString = {
const USB_Descriptor_String_t PROGMEM ManufacturerString = {
.Header = {
- .Size = USB_STRING_LEN(sizeof(STR(MANUFACTURER)) - 1), // Subtract 1 for null terminator
+ .Size = sizeof(USBSTR(MANUFACTURER)),
.Type = DTYPE_String
},
- .UnicodeString = LSTR(MANUFACTURER)
+ .UnicodeString = USBSTR(MANUFACTURER)
};
const USB_Descriptor_String_t PROGMEM ProductString = {
.Header = {
- .Size = USB_STRING_LEN(sizeof(STR(PRODUCT)) - 1), // Subtract 1 for null terminator
+ .Size = sizeof(USBSTR(PRODUCT)),
.Type = DTYPE_String
},
- .UnicodeString = LSTR(PRODUCT)
+ .UnicodeString = USBSTR(PRODUCT)
};
#if defined(SERIAL_NUMBER)
const USB_Descriptor_String_t PROGMEM SerialNumberString = {
.Header = {
- .Size = USB_STRING_LEN(sizeof(SERIAL_NUMBER) - 1), // Subtract 1 for null terminator
+ .Size = sizeof(USBSTR(SERIAL_NUMBER)),
.Type = DTYPE_String
},
.UnicodeString = USBSTR(SERIAL_NUMBER)
diff --git a/tmk_core/protocol/vusb/vusb.c b/tmk_core/protocol/vusb/vusb.c
index d07cc0d27ed..013d637b6fc 100644
--- a/tmk_core/protocol/vusb/vusb.c
+++ b/tmk_core/protocol/vusb/vusb.c
@@ -224,11 +224,10 @@ void console_task(void) {
static uint8_t keyboard_leds(void);
static void send_keyboard(report_keyboard_t *report);
static void send_mouse(report_mouse_t *report);
-static void send_system(uint16_t data);
-static void send_consumer(uint16_t data);
+static void send_extra(uint8_t report_id, uint16_t data);
static void send_programmable_button(uint32_t data);
-static host_driver_t driver = {keyboard_leds, send_keyboard, send_mouse, send_system, send_consumer, send_programmable_button};
+static host_driver_t driver = {keyboard_leds, send_keyboard, send_mouse, send_extra, send_programmable_button};
host_driver_t *vusb_driver(void) {
return &driver;
@@ -269,8 +268,8 @@ static void send_mouse(report_mouse_t *report) {
#endif
}
-#ifdef EXTRAKEY_ENABLE
static void send_extra(uint8_t report_id, uint16_t data) {
+#ifdef EXTRAKEY_ENABLE
static uint8_t last_id = 0;
static uint16_t last_data = 0;
if ((report_id == last_id) && (data == last_data)) return;
@@ -282,18 +281,6 @@ static void send_extra(uint8_t report_id, uint16_t data) {
if (usbInterruptIsReadyShared()) {
usbSetInterruptShared((void *)&report, sizeof(report_extra_t));
}
-}
-#endif
-
-static void send_system(uint16_t data) {
-#ifdef EXTRAKEY_ENABLE
- send_extra(REPORT_ID_SYSTEM, data);
-#endif
-}
-
-static void send_consumer(uint16_t data) {
-#ifdef EXTRAKEY_ENABLE
- send_extra(REPORT_ID_CONSUMER, data);
#endif
}
@@ -672,7 +659,7 @@ const PROGMEM uchar console_hid_report[] = {
// clang-format off
const PROGMEM usbStringDescriptor_t usbStringDescriptorZero = {
.header = {
- .bLength = USB_STRING_LEN(1),
+ .bLength = 4,
.bDescriptorType = USBDESCR_STRING
},
.bString = {0x0409} // US English
@@ -680,24 +667,24 @@ const PROGMEM usbStringDescriptor_t usbStringDescriptorZero = {
const PROGMEM usbStringDescriptor_t usbStringDescriptorManufacturer = {
.header = {
- .bLength = USB_STRING_LEN(sizeof(STR(MANUFACTURER)) - 1),
+ .bLength = sizeof(USBSTR(MANUFACTURER)),
.bDescriptorType = USBDESCR_STRING
},
- .bString = LSTR(MANUFACTURER)
+ .bString = USBSTR(MANUFACTURER)
};
const PROGMEM usbStringDescriptor_t usbStringDescriptorProduct = {
.header = {
- .bLength = USB_STRING_LEN(sizeof(STR(PRODUCT)) - 1),
+ .bLength = sizeof(USBSTR(PRODUCT)),
.bDescriptorType = USBDESCR_STRING
},
- .bString = LSTR(PRODUCT)
+ .bString = USBSTR(PRODUCT)
};
#if defined(SERIAL_NUMBER)
const PROGMEM usbStringDescriptor_t usbStringDescriptorSerial = {
.header = {
- .bLength = USB_STRING_LEN(sizeof(SERIAL_NUMBER) - 1),
+ .bLength = sizeof(USBSTR(SERIAL_NUMBER)),
.bDescriptorType = USBDESCR_STRING
},
.bString = USBSTR(SERIAL_NUMBER)
diff --git a/tmk_core/protocol/vusb/vusb.h b/tmk_core/protocol/vusb/vusb.h
index b1ecc98f371..c5cb27ded68 100644
--- a/tmk_core/protocol/vusb/vusb.h
+++ b/tmk_core/protocol/vusb/vusb.h
@@ -118,8 +118,6 @@ typedef struct usbConfigurationDescriptor {
#endif
} __attribute__((packed)) usbConfigurationDescriptor_t;
-#define USB_STRING_LEN(s) (sizeof(usbDescriptorHeader_t) + ((s) << 1))
-
extern bool vusb_suspended;
host_driver_t *vusb_driver(void);
diff --git a/users/brandonschlack/rgb_bs.c b/users/brandonschlack/rgb_bs.c
index 1abf785b494..94842021cd7 100644
--- a/users/brandonschlack/rgb_bs.c
+++ b/users/brandonschlack/rgb_bs.c
@@ -75,7 +75,7 @@ void rgb_theme_step_reverse(void) {
rgb_theme_color_t get_rgb_theme_color(uint8_t index) {
rgb_theme_t theme = get_rgb_theme();
- size_t rgb_theme_color_max = sizeof theme.colors / sizeof *theme.colors;
+ size_t rgb_theme_color_max = ARRAY_SIZE(theme.colors);
if (index == _ADJUST) {
return default_adjust;
diff --git a/users/curry/oled.c b/users/curry/oled.c
index 5a8f0de61d8..89112af121e 100644
--- a/users/curry/oled.c
+++ b/users/curry/oled.c
@@ -41,7 +41,7 @@ void add_keylog(uint16_t keycode) {
keylog_str[i] = keylog_str[i - 1];
}
- if (keycode < (sizeof(code_to_name) / sizeof(char))) {
+ if (keycode < ARRAY_SIZE(code_to_name)) {
keylog_str[0] = pgm_read_byte(&code_to_name[keycode]);
}
diff --git a/users/davidkristoffersen/util/functions.c b/users/davidkristoffersen/util/functions.c
index 781d8f214d9..3ab4ace2d61 100644
--- a/users/davidkristoffersen/util/functions.c
+++ b/users/davidkristoffersen/util/functions.c
@@ -33,14 +33,14 @@ code_set_t EN_SHIFT_CODES [] = {
const shift_code_t SHIFT_CODES [] = {
#ifdef LAYER_NO
{.lang = LAYER_NO,
- .size = ARR_LEN(NO_SHIFT_CODES),
+ .size = ARRAY_SIZE(NO_SHIFT_CODES),
.codes = NO_SHIFT_CODES},
#endif
{.lang = LAYER_EN,
- .size = ARR_LEN(EN_SHIFT_CODES),
+ .size = ARRAY_SIZE(EN_SHIFT_CODES),
.codes = EN_SHIFT_CODES},
};
-const int SHIFT_CODES_SIZE = ARR_LEN(SHIFT_CODES);
+const int SHIFT_CODES_SIZE = ARRAY_SIZE(SHIFT_CODES);
#endif
#ifdef LAYER_NO
@@ -72,7 +72,7 @@ const code_set_t EN2NO_CODES [] = {
{KC_DLR, NO_DLR},
{KC_GRV, NO_GRV}
};
-const int EN2NO_CODES_SIZE = ARR_LEN(EN2NO_CODES);
+const int EN2NO_CODES_SIZE = ARRAY_SIZE(EN2NO_CODES);
#endif
// Check if layer is an active default layer
diff --git a/users/davidkristoffersen/util/functions.h b/users/davidkristoffersen/util/functions.h
index eee1dadc57e..5fef010694d 100644
--- a/users/davidkristoffersen/util/functions.h
+++ b/users/davidkristoffersen/util/functions.h
@@ -15,8 +15,6 @@
// Return false if test equal false
#define HANDLE_FALSE(bool) if (!bool) return false;
-// Generic array lenght define
-#define ARR_LEN(arr) (sizeof(arr) / sizeof(arr)[0])
// Printf-like functionality for send_string
#define SEND_VAR(str, ...) \
do { \
diff --git a/users/drashna/autocorrect_data.h b/users/drashna/autocorrect_data.h
index bcb5858aa8f..52ed7fa9a72 100644
--- a/users/drashna/autocorrect_data.h
+++ b/users/drashna/autocorrect_data.h
@@ -1,5 +1,93 @@
#if __has_include("../qmk_secrets/autocorrection_data.h")
+# pragma message "Loading custom library"
# include "../qmk_secrets/autocorrection_data.h"
+# define AUTOCORRECTION_MIN_LENGTH AUTOCORRECT_MIN_LENGTH
+# define AUTOCORRECTION_MAX_LENGTH AUTOCORRECT_MAX_LENGTH
+
#else
-# include "autocorrect_data_default.h"
+// Generated code.
+
+// Autocorrection dictionary (70 entries):
+// :guage -> gauge
+// :the:the: -> the
+// :thier -> their
+// :ture -> true
+// accomodate -> accommodate
+// acommodate -> accommodate
+// aparent -> apparent
+// aparrent -> apparent
+// apparant -> apparent
+// apparrent -> apparent
+// aquire -> acquire
+// becuase -> because
+// cauhgt -> caught
+// cheif -> chief
+// choosen -> chosen
+// cieling -> ceiling
+// collegue -> colleague
+// concensus -> consensus
+// contians -> contains
+// cosnt -> const
+// dervied -> derived
+// fales -> false
+// fasle -> false
+// fitler -> filter
+// flase -> false
+// foward -> forward
+// frequecy -> frequency
+// gaurantee -> guarantee
+// guaratee -> guarantee
+// heigth -> height
+// heirarchy -> hierarchy
+// inclued -> include
+// interator -> iterator
+// intput -> input
+// invliad -> invalid
+// lenght -> length
+// liasion -> liaison
+// libary -> library
+// listner -> listener
+// looses: -> loses
+// looup -> lookup
+// manefist -> manifest
+// namesapce -> namespace
+// namespcae -> namespace
+// occassion -> occasion
+// occured -> occurred
+// ouptut -> output
+// ouput -> output
+// overide -> override
+// postion -> position
+// priviledge -> privilege
+// psuedo -> pseudo
+// recieve -> receive
+// refered -> referred
+// relevent -> relevant
+// repitition -> repetition
+// retrun -> return
+// retun -> return
+// reuslt -> result
+// reutrn -> return
+// saftey -> safety
+// seperate -> separate
+// singed -> signed
+// stirng -> string
+// strign -> string
+// swithc -> switch
+// swtich -> switch
+// thresold -> threshold
+// udpate -> update
+// widht -> width
+
+#define AUTOCORRECT_MIN_LENGTH 5 // ":ture"
+#define AUTOCORRECT_MAX_LENGTH 10 // "accomodate"
+
+#define DICTIONARY_SIZE 1104
+
+static const uint8_t autocorrect_data[DICTIONARY_SIZE] PROGMEM = {108, 43, 0, 6, 71, 0, 7, 81, 0, 8, 199, 0, 9, 240, 1, 10, 250, 1, 11, 26, 2, 17, 53, 2, 18, 190, 2, 19, 202, 2, 21, 212, 2, 22, 20, 3, 23, 67, 3, 28, 16, 4, 0, 72, 50, 0, 22, 60, 0, 0, 11, 23, 44, 8, 11, 23, 44, 0, 132, 0, 8, 22, 18, 18, 15, 0, 132, 115, 101, 115, 0, 11, 23, 12, 26, 22, 0, 129, 99, 104, 0, 68, 94, 0, 8, 106, 0, 15, 174, 0, 21, 187, 0, 0, 12, 15, 25, 17, 12, 0, 131, 97, 108, 105, 100, 0, 74, 119, 0, 12, 129, 0, 21, 140, 0, 24, 165, 0, 0, 17, 12, 22, 0, 131, 103, 110, 101, 100, 0, 25, 21, 8, 7, 0, 131, 105, 118, 101, 100, 0, 72, 147, 0, 24, 156, 0, 0, 9, 8, 21, 0, 129, 114, 101, 100, 0, 6, 6, 18, 0, 129, 114, 101, 100, 0, 15, 6, 17, 12, 0, 129, 100, 101, 0, 18, 22, 8, 21, 11, 23, 0, 130, 104, 111,
+ 108, 100, 0, 4, 26, 18, 9, 0, 131, 114, 119, 97, 114, 100, 0, 68, 233, 0, 6, 246, 0, 7, 4, 1, 8, 16, 1, 10, 52, 1, 15, 81, 1, 21, 90, 1, 22, 117, 1, 23, 144, 1, 24, 215, 1, 25, 228, 1, 0, 6, 19, 22, 8, 16, 4, 17, 0, 130, 97, 99, 101, 0, 19, 4, 22, 8, 16, 4, 17, 0, 131, 112, 97, 99, 101, 0, 12, 21, 8, 25, 18, 0, 130, 114, 105, 100, 101, 0, 23, 0, 68, 25, 1, 17, 36, 1, 0, 21, 4, 24, 10, 0, 130, 110, 116, 101, 101, 0, 4, 21, 24, 4, 10, 0, 135, 117, 97, 114, 97, 110, 116, 101, 101, 0, 68, 59, 1, 7, 69, 1, 0, 24, 10, 44, 0, 131, 97, 117, 103, 101, 0, 8, 15, 12, 25, 12, 21, 19, 0, 130, 103, 101, 0, 22, 4, 9, 0, 130, 108, 115, 101, 0, 76, 97, 1, 24, 109, 1, 0, 24, 20, 4, 0, 132, 99, 113, 117, 105, 114, 101, 0, 23, 44, 0,
+ 130, 114, 117, 101, 0, 4, 0, 79, 126, 1, 24, 134, 1, 0, 9, 0, 131, 97, 108, 115, 101, 0, 6, 8, 5, 0, 131, 97, 117, 115, 101, 0, 4, 0, 71, 156, 1, 19, 193, 1, 21, 203, 1, 0, 18, 16, 0, 80, 166, 1, 18, 181, 1, 0, 18, 6, 4, 0, 135, 99, 111, 109, 109, 111, 100, 97, 116, 101, 0, 6, 6, 4, 0, 132, 109, 111, 100, 97, 116, 101, 0, 7, 24, 0, 132, 112, 100, 97, 116, 101, 0, 8, 19, 8, 22, 0, 132, 97, 114, 97, 116, 101, 0, 10, 8, 15, 15, 18, 6, 0, 130, 97, 103, 117, 101, 0, 8, 12, 6, 8, 21, 0, 131, 101, 105, 118, 101, 0, 12, 8, 11, 6, 0, 130, 105, 101, 102, 0, 17, 0, 76, 3, 2, 21, 16, 2, 0, 15, 8, 12, 6, 0, 133, 101, 105, 108, 105, 110, 103, 0, 12, 23, 22, 0, 131, 114, 105, 110, 103, 0, 70, 33, 2, 23, 44, 2, 0, 12, 23, 26, 22, 0, 131, 105,
+ 116, 99, 104, 0, 10, 12, 8, 11, 0, 129, 104, 116, 0, 72, 69, 2, 10, 80, 2, 18, 89, 2, 21, 156, 2, 24, 167, 2, 0, 22, 18, 18, 11, 6, 0, 131, 115, 101, 110, 0, 12, 21, 23, 22, 0, 129, 110, 103, 0, 12, 0, 86, 98, 2, 23, 124, 2, 0, 68, 105, 2, 22, 114, 2, 0, 12, 15, 0, 131, 105, 115, 111, 110, 0, 4, 6, 6, 18, 0, 131, 105, 111, 110, 0, 76, 131, 2, 22, 146, 2, 0, 23, 12, 19, 8, 21, 0, 134, 101, 116, 105, 116, 105, 111, 110, 0, 18, 19, 0, 131, 105, 116, 105, 111, 110, 0, 23, 24, 8, 21, 0, 131, 116, 117, 114, 110, 0, 85, 174, 2, 23, 183, 2, 0, 23, 8, 21, 0, 130, 117, 114, 110, 0, 8, 21, 0, 128, 114, 110, 0, 7, 8, 24, 22, 19, 0, 131, 101, 117, 100, 111, 0, 24, 18, 18, 15, 0, 129, 107, 117, 112, 0, 72, 219, 2, 18, 3, 3, 0, 76, 229, 2, 15, 238,
+ 2, 17, 248, 2, 0, 11, 23, 44, 0, 130, 101, 105, 114, 0, 23, 12, 9, 0, 131, 108, 116, 101, 114, 0, 23, 22, 12, 15, 0, 130, 101, 110, 101, 114, 0, 23, 4, 21, 8, 23, 17, 12, 0, 135, 116, 101, 114, 97, 116, 111, 114, 0, 72, 30, 3, 17, 38, 3, 24, 51, 3, 0, 15, 4, 9, 0, 129, 115, 101, 0, 4, 12, 23, 17, 18, 6, 0, 131, 97, 105, 110, 115, 0, 22, 17, 8, 6, 17, 18, 6, 0, 133, 115, 101, 110, 115, 117, 115, 0, 74, 86, 3, 11, 96, 3, 15, 118, 3, 17, 129, 3, 22, 218, 3, 24, 232, 3, 0, 11, 24, 4, 6, 0, 130, 103, 104, 116, 0, 71, 103, 3, 10, 110, 3, 0, 12, 26, 0, 129, 116, 104, 0, 17, 8, 15, 0, 129, 116, 104, 0, 22, 24, 8, 21, 0, 131, 115, 117, 108, 116, 0, 68, 139, 3, 8, 150, 3, 22, 210, 3, 0, 21, 4, 19, 19, 4, 0, 130, 101, 110, 116, 0, 85, 157,
+ 3, 25, 200, 3, 0, 68, 164, 3, 21, 175, 3, 0, 19, 4, 0, 132, 112, 97, 114, 101, 110, 116, 0, 4, 19, 0, 68, 185, 3, 19, 193, 3, 0, 133, 112, 97, 114, 101, 110, 116, 0, 4, 0, 131, 101, 110, 116, 0, 8, 15, 8, 21, 0, 130, 97, 110, 116, 0, 18, 6, 0, 130, 110, 115, 116, 0, 12, 9, 8, 17, 4, 16, 0, 132, 105, 102, 101, 115, 116, 0, 83, 239, 3, 23, 6, 4, 0, 87, 246, 3, 24, 254, 3, 0, 17, 12, 0, 131, 112, 117, 116, 0, 18, 0, 130, 116, 112, 117, 116, 0, 19, 24, 18, 0, 131, 116, 112, 117, 116, 0, 70, 29, 4, 8, 41, 4, 11, 51, 4, 21, 69, 4, 0, 8, 24, 20, 8, 21, 9, 0, 129, 110, 99, 121, 0, 23, 9, 4, 22, 0, 130, 101, 116, 121, 0, 6, 21, 4, 21, 12, 8, 11, 0, 135, 105, 101, 114, 97, 114, 99, 104, 121, 0, 4, 5, 12, 15, 0, 130, 114, 97, 114, 121, 0};
#endif
diff --git a/users/drashna/bootmagic_better.c b/users/drashna/bootmagic_better.c
new file mode 100644
index 00000000000..4932e25f1d3
--- /dev/null
+++ b/users/drashna/bootmagic_better.c
@@ -0,0 +1,56 @@
+// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "drashna.h"
+#include "bootmagic_lite.h"
+
+void bootmagic_lite(void) {
+ bool perform_reset = false;
+ // We need multiple scans because debouncing can't be turned off.
+ matrix_scan();
+#if defined(DEBOUNCE) && DEBOUNCE > 0
+ wait_ms(DEBOUNCE * 2);
+#else
+ wait_ms(30);
+#endif
+ matrix_scan();
+
+ // If the configured key (commonly Esc) is held down on power up,
+ // reset the EEPROM valid state and jump to bootloader.
+ // This isn't very generalized, but we need something that doesn't
+ // rely on user's keymaps in firmware or EEPROM.
+ uint8_t row = BOOTMAGIC_LITE_ROW, col = BOOTMAGIC_LITE_COLUMN;
+#if defined(BOOTMAGIC_LITE_EEPROM_ROW) && defined(BOOTMAGIC_LITE_EEPROM_COLUMN)
+ uint8_t row_e = BOOTMAGIC_LITE_EEPROM_ROW, col_e = BOOTMAGIC_LITE_EEPROM_COLUMN;
+#endif
+
+#if defined(SPLIT_KEYBOARD) && defined(BOOTMAGIC_LITE_ROW_RIGHT) && defined(BOOTMAGIC_LITE_COLUMN_RIGHT)
+ if (!is_keyboard_left()) {
+ row = BOOTMAGIC_LITE_ROW_RIGHT;
+ col = BOOTMAGIC_LITE_COLUMN_RIGHT;
+#if defined(BOOTMAGIC_LITE_EEPROM_ROW) && defined(BOOTMAGIC_LITE_EEPROM_COLUMN) && defined(BOOTMAGIC_LITE_EEPROM_ROW_RIGHT) && defined(BOOTMAGIC_LITE_EEPROM_COLUMN_RIGHT)
+ row_e = BOOTMAGIC_LITE_EEPROM_ROW_RIGHT;
+ col_e = BOOTMAGIC_LITE_EEPROM_COLUMN_RIGHT;
+# endif
+ }
+#endif
+
+#if defined(BOOTMAGIC_LITE_EEPROM_ROW) && defined(BOOTMAGIC_LITE_EEPROM_COLUMN)
+ if (matrix_get_row(row_e) & (1 << col_e)) {
+ eeconfig_disable();
+ perform_reset = true;
+ }
+#endif
+ if (matrix_get_row(row) & (1 << col)) {
+ perform_reset = true;
+ }
+#ifdef STM32F411xE
+ if (!readPin(A0)) {
+ perform_reset = true;
+ }
+#endif
+
+ if (perform_reset) {
+ bootloader_jump();
+ }
+}
diff --git a/users/drashna/callbacks.c b/users/drashna/callbacks.c
index f9a3f598d36..111b5f79d77 100644
--- a/users/drashna/callbacks.c
+++ b/users/drashna/callbacks.c
@@ -3,6 +3,12 @@
#include "drashna.h"
+
+#ifdef I2C_SCANNER_ENABLE
+void matrix_scan_i2c(void);
+void keyboard_post_init_i2c(void);
+#endif
+
__attribute__((weak)) void keyboard_pre_init_keymap(void) {}
void keyboard_pre_init_user(void) {
userspace_config.raw = eeconfig_read_user();
@@ -42,6 +48,10 @@ void keyboard_post_init_user(void) {
#if defined(SPLIT_KEYBOARD) && defined(SPLIT_TRANSACTION_IDS_USER)
keyboard_post_init_transport_sync();
#endif
+#ifdef I2C_SCANNER_ENABLE
+ matrix_scan_i2c();
+#endif
+
keyboard_post_init_keymap();
}
@@ -54,10 +64,10 @@ void shutdown_user(void) {
#ifdef RGBLIGHT_ENABLE
rgblight_enable_noeeprom();
rgblight_mode_noeeprom(1);
- rgblight_setrgb_red();
+ rgblight_setrgb(rgblight_get_val(), 0x00, 0x00);
#endif // RGBLIGHT_ENABLE
#ifdef RGB_MATRIX_ENABLE
- rgb_matrix_set_color_all(0xFF, 0x00, 0x00);
+ rgb_matrix_set_color_all(rgb_matrix_get_val(), 0x00, 0x00);
rgb_matrix_update_pwm_buffers();
#endif // RGB_MATRIX_ENABLE
#ifdef OLED_ENABLE
@@ -112,6 +122,12 @@ void matrix_scan_user(void) {
#endif
#if defined(CUSTOM_RGB_MATRIX)
matrix_scan_rgb_matrix();
+#endif
+#ifdef I2C_SCANNER_ENABLE
+ matrix_scan_i2c();
+#endif
+#ifdef CUSTOM_OLED_DRIVER
+ matrix_scan_oled();
#endif
matrix_scan_secret();
diff --git a/users/drashna/config.h b/users/drashna/config.h
index fd1530a100a..57b26786b3f 100644
--- a/users/drashna/config.h
+++ b/users/drashna/config.h
@@ -11,26 +11,20 @@
#endif
#define IS_COMMAND() (((get_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT) == MOD_MASK_SHIFT)
-/* Set Polling rate to 1000Hz */
-#define USB_POLLING_INTERVAL_MS 1
#if defined(SPLIT_KEYBOARD)
-// # define SPLIT_TRANSPORT_MIRROR
-# define SPLIT_LAYER_STATE_ENABLE
-# define SPLIT_LED_STATE_ENABLE
-# define SPLIT_MODS_ENABLE
-# ifdef WPM_ENABLE
-# define SPLIT_WPM_ENABLE
-# endif
-# ifdef OLED_ENABLE
-# define SPLIT_OLED_ENABLE
-# endif
-# if defined(__AVR__) && !defined(SELECT_SOFT_SERIAL_SPEED)
-# define SELECT_SOFT_SERIAL_SPEED 1
-# endif
-# ifdef CUSTOM_SPLIT_TRANSPORT_SYNC
-# define SPLIT_TRANSACTION_IDS_USER RPC_ID_USER_STATE_SYNC, RPC_ID_USER_KEYMAP_SYNC, RPC_ID_USER_CONFIG_SYNC, RPC_ID_USER_WATCHDOG_SYNC, RPC_ID_USER_KEYLOG_STR
-# endif
+# include "split/split_config.h"
+#endif
+#ifdef RGBLIGHT_ENABLE
+# include "rgb/rgblight_config.h"
+#endif // RGBLIGHT_ENABLE
+
+#ifdef RGB_MATRIX_ENABLE
+# include "rgb/rgb_matrix_config.h"
+#endif // RGB_MATRIX_ENABLE
+
+#ifdef OLED_ENABLE
+# include "oled/oled_config.h"
#endif
#if defined(WPM_ENABLE)
@@ -71,157 +65,6 @@
#define UNICODE_SELECTED_MODES UC_WINC, UC_MAC
-#ifdef RGBLIGHT_ENABLE
-# define RGBLIGHT_SLEEP
-# define RGBLIGHT_EFFECT_TWINKLE_LIFE 250
-# define RGBLIGHT_EFFECT_TWINKLE_PROBABILITY 1 / 24
-#endif // RGBLIGHT_ENABLE
-
-#ifdef RGB_MATRIX_ENABLE
-# define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot)
-// # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened)
-# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
-// # define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
-// # define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
-
-# undef ENABLE_RGB_MATRIX_ALPHAS_MODS
-# undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
-# undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
-# undef ENABLE_RGB_MATRIX_BREATHING
-# undef ENABLE_RGB_MATRIX_BAND_SAT
-# undef ENABLE_RGB_MATRIX_BAND_VAL
-# undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
-# undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
-# undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
-# undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
-# undef ENABLE_RGB_MATRIX_CYCLE_ALL
-# undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-# undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
-# undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
-# undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN
-# undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
-# undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
-# undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL
-# undef ENABLE_RGB_MATRIX_DUAL_BEACON
-# undef ENABLE_RGB_MATRIX_RAINBOW_BEACON
-# undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
-# undef ENABLE_RGB_MATRIX_RAINDROPS
-# undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
-# undef ENABLE_RGB_MATRIX_HUE_BREATHING
-# undef ENABLE_RGB_MATRIX_HUE_PENDULUM
-# undef ENABLE_RGB_MATRIX_HUE_WAVE
-# undef ENABLE_RGB_MATRIX_PIXEL_RAIN
-# undef ENABLE_RGB_MATRIX_PIXEL_FLOW
-# undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL
-// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
-# undef ENABLE_RGB_MATRIX_TYPING_HEATMAP
-# undef ENABLE_RGB_MATRIX_DIGITAL_RAIN
-// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
-# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
-# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE
-# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
-# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
-# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
-# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
-# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
-# undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
-# undef ENABLE_RGB_MATRIX_SPLASH
-# undef ENABLE_RGB_MATRIX_MULTISPLASH
-# undef ENABLE_RGB_MATRIX_SOLID_SPLASH
-# undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-
-# define ENABLE_RGB_MATRIX_TYPING_HEATMAP
-# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
-# if !defined(SPLIT_KEYBOARD) && !defined(KEYBOARD_ergodox_ez) && !defined(KEYBOARD_moonlander)
-# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
-# endif
-# if defined(__arm__) || defined(__AVR_AT90USB1286__) || defined(KEYBOARD_launchpad)
-// RGB Matrix Animation modes. Explicitly enabled
-// For full list of effects, see:
-// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
-# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
-# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
-# define ENABLE_RGB_MATRIX_BREATHING
-# define ENABLE_RGB_MATRIX_BAND_SAT
-# define ENABLE_RGB_MATRIX_BAND_VAL
-# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
-# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
-# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
-# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
-# define ENABLE_RGB_MATRIX_CYCLE_ALL
-# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
-# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
-# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
-# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
-# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
-# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
-# define ENABLE_RGB_MATRIX_DUAL_BEACON
-# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
-# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
-# define ENABLE_RGB_MATRIX_RAINDROPS
-# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
-# define ENABLE_RGB_MATRIX_HUE_BREATHING
-# define ENABLE_RGB_MATRIX_HUE_PENDULUM
-# define ENABLE_RGB_MATRIX_HUE_WAVE
-# define ENABLE_RGB_MATRIX_PIXEL_RAIN
-# define ENABLE_RGB_MATRIX_PIXEL_FLOW
-# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
-# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
-# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
-# define ENABLE_RGB_MATRIX_SPLASH
-# define ENABLE_RGB_MATRIX_MULTISPLASH
-# define ENABLE_RGB_MATRIX_SOLID_SPLASH
-# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
-# endif // AVR
-#endif // RGB_MATRIX_ENABLE
-
-#ifdef OLED_ENABLE
-# ifndef OLED_UPDATE_INTERVAL
-# ifdef OLED_DRIVER_SH1107
-# define OLED_UPDATE_INTERVAL 75
-# else
-# ifdef SPLIT_KEYBOARD
-# define OLED_UPDATE_INTERVAL 60
-# else
-# define OLED_UPDATE_INTERVAL 15
-# endif
-# endif
-# endif
-# define OLED_DISABLE_TIMEOUT
-# ifdef OLED_FONT_H
-# undef OLED_FONT_H
-# endif
-# define OLED_FONT_H "oled/drashna_font.h"
-# define OLED_FONT_END 255
-// # define OLED_FONT_5X5
-// # define OLED_FONT_AZTECH
-// # define OLED_FONT_BMPLAIN
-// # define OLED_FONT_CRACKERS
-# define OLED_FONT_DEAD_MEAL
-// # define OLED_FONT_EIN
-// # define OLED_FONT_HISKYF21
-// # define OLED_FONT_SQUASH
-// # define OLED_FONT_ZXPIX
-// # define OLED_FONT_SUPER_DIGG
-
-// # define OLED_LOGO_BEBOP
-// # define OLED_LOGO_CORNE
-// # define OLED_LOGO_GMK_BAD
-// # define OLED_LOGO_GOTHAM
-// # define OLED_LOGO_HUE_MANITEE
-// # define OLED_LOGO_LOOSE
-# define OLED_LOGO_SCIFI
-// # define OLED_LOGO_SETS3N
-// # define OLED_LOGO_SKEEB
-#endif
-
// #define WPM_ESTIMATED_WORD_SIZE 5
#define WPM_ALLOW_COUNT_REGRESSION
// #define WPM_UNFILTERED
@@ -237,11 +80,18 @@
# define ONESHOT_TIMEOUT 3000
#endif // !ONESHOT_TIMEOUT
-#define IGNORE_MOD_TAP_INTERRUPT_PER_KEY
-#define PERMISSIVE_HOLD_PER_KEY
-#define TAPPING_FORCE_HOLD_PER_KEY
-#define RETRO_TAPPING_PER_KEY
-#define TAPPING_TERM_PER_KEY
+#if defined(PER_KEY_TAPPING)
+# define IGNORE_MOD_TAP_INTERRUPT_PER_KEY
+# define PERMISSIVE_HOLD_PER_KEY
+# define TAPPING_FORCE_HOLD_PER_KEY
+# define HOLD_ON_OTHER_KEY
+# define RETRO_TAPPING_PER_KEY
+# define HOLD_ON_OTHER_KEY_PRESS_PER_KEY
+# define TAPPING_TERM_PER_KEY
+#else
+# define IGNORE_MOD_TAP_INTERRUPT
+# undef PERMISSIVE_HOLD
+#endif
#ifndef TAPPING_TOGGLE
# define TAPPING_TOGGLE 1
@@ -276,41 +126,7 @@
# define C15 PAL_LINE(GPIOC, 15)
#endif
-#ifdef OLED_DRIVER_SH1107
-# define OLED_DISPLAY_CUSTOM
-# define OLED_IC_SH1107 2
-# define OLED_DISPLAY_128X128
-# define OLED_DISPLAY_WIDTH 128
-# define OLED_DISPLAY_HEIGHT 128
-# define OLED_MATRIX_SIZE (OLED_DISPLAY_HEIGHT / 8 * OLED_DISPLAY_WIDTH)
-# define OLED_BLOCK_TYPE uint32_t
-# define OLED_SOURCE_MAP \
- { 0, 8, 16, 24, 32, 40, 48, 56 }
-# define OLED_TARGET_MAP \
- { 56, 48, 40, 32, 24, 16, 8, 0 }
-# define OLED_BLOCK_COUNT (sizeof(OLED_BLOCK_TYPE) * 8)
-# define OLED_BLOCK_SIZE (OLED_MATRIX_SIZE / OLED_BLOCK_COUNT)
-# define OLED_COM_PINS COM_PINS_ALT
-# define OLED_IC OLED_IC_SH1107
-# ifndef OLED_BRIGHTNESS
-# define OLED_BRIGHTNESS 50
-# endif
-#endif
-
-#ifdef USE_I2CV1
-# define I2C1_CLOCK_SPEED 400000
-# define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_2
-#endif
#define ENABLE_COMPILE_KEYCODE
#define BOTH_SHIFTS_TURNS_ON_CAPS_WORD
-
-#ifndef SECURE_UNLOCK_SEQUENCE
-# define SECURE_UNLOCK_SEQUENCE \
- { \
- {2, 1}, {2, 2}, {2, 3}, { \
- 2, 4 \
- } \
- }
-#endif
diff --git a/users/drashna/drashna.c b/users/drashna/drashna.c
index 6e8d4ac9bd0..91f3a06b7cf 100644
--- a/users/drashna/drashna.c
+++ b/users/drashna/drashna.c
@@ -2,9 +2,6 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include "drashna.h"
-#ifdef __AVR__
-# include
-#endif
userspace_config_t userspace_config;
@@ -76,49 +73,59 @@ void tap_code16_nomods(uint16_t kc) {
set_mods(temp_mod);
}
-/**
- * @brief Run shutdown routine and soft reboot firmware.
- *
- */
+#ifdef I2C_SCANNER_ENABLE
+# include "i2c_master.h"
+# include "debug.h"
-#ifdef HAPTIC_ENABLE
-# include "haptic.h"
-#endif
-
-#ifdef AUDIO_ENABLE
-# ifndef GOODBYE_SONG
-# define GOODBYE_SONG SONG(GOODBYE_SOUND)
+# ifndef I2C_SCANNER_TIMEOUT
+# define I2C_SCANNER_TIMEOUT 50
# endif
-float reset_song[][2] = GOODBYE_SONG;
-#endif
-void software_reset(void) {
- clear_keyboard();
-#if defined(MIDI_ENABLE) && defined(MIDI_BASIC)
- process_midi_all_notes_off();
-#endif
-#ifdef AUDIO_ENABLE
-# ifndef NO_MUSIC_MODE
- music_all_notes_off();
-# endif
- uint16_t timer_start = timer_read();
- PLAY_SONG(reset_song);
- shutdown_user();
- while (timer_elapsed(timer_start) < 250) wait_ms(1);
- stop_all_notes();
-#else
- shutdown_user();
- wait_ms(250);
-#endif
-#ifdef HAPTIC_ENABLE
- haptic_shutdown();
-#endif
+i2c_status_t i2c_start_bodge(uint8_t address, uint16_t timeout) {
+ i2c_start(address);
-#if defined(PROTOCOL_LUFA)
- wdt_enable(WDTO_250MS);
-#elif defined(PROTOCOL_CHIBIOS)
-# if defined(MCU_STM32) || defined(MCU_KINETIS)
- NVIC_SystemReset();
-# endif
-#endif
+ // except on ChibiOS where the only way is do do "something"
+ uint8_t data = 0;
+ return i2c_readReg(address, 0, &data, sizeof(data), I2C_SCANNER_TIMEOUT);
}
+
+# define i2c_start i2c_start_bodge
+
+void do_scan(void) {
+ uint8_t nDevices = 0;
+
+ dprintf("Scanning...\n");
+
+ for (uint8_t address = 1; address < 127; address++) {
+ // The i2c_scanner uses the return value of
+ // i2c_start to see if a device did acknowledge to the address.
+ i2c_status_t error = i2c_start(address << 1, I2C_SCANNER_TIMEOUT);
+ if (error == I2C_STATUS_SUCCESS) {
+ i2c_stop();
+ xprintf(" I2C device found at address 0x%02X\n", I2C_SCANNER_TIMEOUT);
+ nDevices++;
+ } else {
+ // dprintf(" Unknown error (%u) at address 0x%02X\n", error, address);
+ }
+ }
+
+ if (nDevices == 0)
+ xprintf("No I2C devices found\n");
+ else
+ xprintf("done\n");
+}
+
+uint16_t scan_timer = 0;
+
+void matrix_scan_i2c(void) {
+ if (timer_elapsed(scan_timer) > 5000) {
+ do_scan();
+ scan_timer = timer_read();
+ }
+}
+
+void keyboard_post_init_i2c(void) {
+ i2c_init();
+ scan_timer = timer_read();
+}
+#endif
diff --git a/users/drashna/drashna.h b/users/drashna/drashna.h
index 0bf1de84cf6..16d7cda638b 100644
--- a/users/drashna/drashna.h
+++ b/users/drashna/drashna.h
@@ -79,7 +79,6 @@ bool mod_key_press_timer(uint16_t code, uint16_t mod_code, bool pressed);
bool mod_key_press(uint16_t code, uint16_t mod_code, bool pressed, uint16_t this_timer);
bool hasAllBitsInMask(uint8_t value, uint8_t mask);
void tap_code16_nomods(uint16_t kc);
-void software_reset(void);
// clang-format off
typedef union {
diff --git a/users/drashna/keyrecords/autocorrection/autocorrection_data.h b/users/drashna/keyrecords/autocorrection/autocorrection_data.h
new file mode 100644
index 00000000000..90484d3b12c
--- /dev/null
+++ b/users/drashna/keyrecords/autocorrection/autocorrection_data.h
@@ -0,0 +1 @@
+#include "autocorrect_data.h"
diff --git a/users/drashna/keyrecords/process_records.c b/users/drashna/keyrecords/process_records.c
index c328451b759..197fd941717 100644
--- a/users/drashna/keyrecords/process_records.c
+++ b/users/drashna/keyrecords/process_records.c
@@ -6,9 +6,6 @@
#ifdef AUTOCORRECTION_ENABLE
# include "autocorrection/autocorrection.h"
#endif
-#ifdef __AVR__
-# include
-#endif
uint16_t copy_paste_timer;
bool host_driver_disabled = false;
@@ -49,7 +46,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
#endif
// If console is enabled, it will print the matrix position and status of each key pressed
#ifdef KEYLOGGER_ENABLE
- uprintf("KL: kc: 0x%04X, col: %2u, row: %2u, pressed: %b, time: %5u, int: %b, count: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, record->event.time, record->tap.interrupted, record->tap.count);
+ uprintf("KL: kc: 0x%04X, col: %2u, row: %2u, pressed: %1d, time: %5u, int: %1d, count: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, record->event.time, record->tap.interrupted, record->tap.count);
#endif // KEYLOGGER_ENABLE
#if defined(OLED_ENABLE) && defined(CUSTOM_OLED_DRIVER)
process_record_user_oled(keycode, record);
diff --git a/users/drashna/keyrecords/tap_dance.md b/users/drashna/keyrecords/tap_dance.md
index 0bf67cbd5af..fef1435918f 100644
--- a/users/drashna/keyrecords/tap_dance.md
+++ b/users/drashna/keyrecords/tap_dance.md
@@ -88,7 +88,7 @@ void diablo_tapdance_master(qk_tap_dance_state_t *state, void *user_data) {
diablo_timer[diablo_keys->index].keycode = diablo_keys->keycode;
// if the tapdance is hit more than the number of elemints in the array, reset
- if (state->count >= (sizeof(diablo_times) / sizeof(uint8_t) ) ) {
+ if (state->count >= ARRAY_SIZE(diablo_times) ) {
diablo_timer[diablo_keys->index].key_interval = 0;
reset_tap_dance(state);
} else { // else set the interval (tapdance count starts at 1, array starts at 0, so offset by one)
diff --git a/users/drashna/keyrecords/tap_dances.c b/users/drashna/keyrecords/tap_dances.c
index 6caf6b6b3ea..7bdea3cae3e 100644
--- a/users/drashna/keyrecords/tap_dances.c
+++ b/users/drashna/keyrecords/tap_dances.c
@@ -23,7 +23,7 @@ void diablo_tapdance_master(qk_tap_dance_state_t *state, void *user_data) {
diablo_timer[diablo_keys->index].keycode = diablo_keys->keycode;
// if the tapdance is hit more than the number of elemints in the array, reset
- if (state->count >= (sizeof(diablo_times) / sizeof(uint8_t))) {
+ if (state->count >= ARRAY_SIZE(diablo_times)) {
diablo_timer[diablo_keys->index].key_interval = 0;
reset_tap_dance(state);
} else { // else set the interval (tapdance count starts at 1, array starts at 0, so offset by one)
diff --git a/users/drashna/keyrecords/tapping.c b/users/drashna/keyrecords/tapping.c
index daba25bd728..7496610c2fd 100644
--- a/users/drashna/keyrecords/tapping.c
+++ b/users/drashna/keyrecords/tapping.c
@@ -3,6 +3,7 @@
#include "drashna.h"
+#ifdef TAPPING_TERM_PER_KEY
__attribute__((weak)) uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case BK_LWER:
@@ -11,7 +12,9 @@ __attribute__((weak)) uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *r
return TAPPING_TERM;
}
}
+#endif // TAPPING_TERM_PER_KEY
+#ifdef PERMISSIVE_HOLD_PER_KEY
__attribute__((weak)) bool get_permissive_hold(uint16_t keycode, keyrecord_t *record) {
// Immediately select the hold action when another key is tapped:
// return true;
@@ -22,7 +25,9 @@ __attribute__((weak)) bool get_permissive_hold(uint16_t keycode, keyrecord_t *re
return false;
}
}
+#endif // PERMISSIVE_HOLD_PER_KEY
+#ifdef HOLD_ON_OTHER_KEY_PRESS_PER_KEY
__attribute__((weak)) bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
// Immediately select the hold action when another key is pressed.
// return true;
@@ -32,10 +37,12 @@ __attribute__((weak)) bool get_hold_on_other_key_press(uint16_t keycode, keyreco
// case QK_LAYER_TAP ... QK_LAYER_TAP_MAX:
// return true;
default:
- return true;
+ return false;
}
}
+#endif // HOLD_ON_OTHER_KEY_PRESS_PER_KEY
+#ifdef IGNORE_MOD_TAP_INTERRUPT_PER_KEY
__attribute__((weak)) bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) {
// Do not force the mod-tap key press to be handled as a modifier
// if any other key was pressed while the mod-tap key is held down.
@@ -48,17 +55,22 @@ __attribute__((weak)) bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrec
return true;
}
}
+#endif // IGNORE_MOD_TAP_INTERRUPT_PER_KEY
+#ifdef TAPPING_FORCE_HOLD_PER_KEY
__attribute__((weak)) bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
default:
return false;
}
}
+#endif // TAPPING_FORCE_HOLD_PER_KEY
+#ifdef RETRO_TAPPING_PER_KEY
__attribute__((weak)) bool get_retro_tapping(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
default:
return false;
}
}
+#endif // RETRO_TAPPING_PER_KEY
diff --git a/users/drashna/keyrecords/unicode.c b/users/drashna/keyrecords/unicode.c
index ea51b26061b..bfce38f555f 100644
--- a/users/drashna/keyrecords/unicode.c
+++ b/users/drashna/keyrecords/unicode.c
@@ -43,7 +43,7 @@ typedef uint32_t (*translator_function_t)(bool is_shifted, uint32_t keycode);
static inline uint32_t translator_name(bool is_shifted, uint32_t keycode) { \
static const uint32_t translation[] = {__VA_ARGS__}; \
uint32_t ret = keycode; \
- if ((keycode - KC_A) < (sizeof(translation) / sizeof(uint32_t))) { \
+ if ((keycode - KC_A) < ARRAY_SIZE(translation)) { \
ret = translation[keycode - KC_A]; \
} \
return ret; \
@@ -142,7 +142,7 @@ DEFINE_UNICODE_LUT_TRANSLATOR(unicode_lut_translator_super,
0x2071, // i
0x02B2, // j
0x1D4F, // k
- 0x1D4F, // l
+ 0x02E1, // l
0x1D50, // m
0x207F, // n
0x1D52, // o
diff --git a/users/drashna/oled/oled_config.h b/users/drashna/oled/oled_config.h
new file mode 100644
index 00000000000..c46c0c39ce2
--- /dev/null
+++ b/users/drashna/oled/oled_config.h
@@ -0,0 +1,63 @@
+// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#ifndef OLED_UPDATE_INTERVAL
+# ifdef OLED_DRIVER_SH1107
+# define OLED_UPDATE_INTERVAL 75
+# else
+# ifdef SPLIT_KEYBOARD
+# define OLED_UPDATE_INTERVAL 60
+# else
+# define OLED_UPDATE_INTERVAL 15
+# endif
+# endif
+#endif
+#define OLED_DISABLE_TIMEOUT
+#ifdef OLED_FONT_H
+# undef OLED_FONT_H
+#endif
+#define OLED_FONT_H "oled/drashna_font.h"
+#define OLED_FONT_END 255
+// # define OLED_FONT_5X5
+// # define OLED_FONT_AZTECH
+// # define OLED_FONT_BMPLAIN
+// # define OLED_FONT_CRACKERS
+#define OLED_FONT_DEAD_MEAL
+// # define OLED_FONT_EIN
+// # define OLED_FONT_HISKYF21
+// # define OLED_FONT_SQUASH
+// # define OLED_FONT_ZXPIX
+// # define OLED_FONT_SUPER_DIGG
+
+// # define OLED_LOGO_BEBOP
+// # define OLED_LOGO_CORNE
+// # define OLED_LOGO_GMK_BAD
+// # define OLED_LOGO_GOTHAM
+// # define OLED_LOGO_HUE_MANITEE
+// # define OLED_LOGO_LOOSE
+#define OLED_LOGO_SCIFI
+// # define OLED_LOGO_SETS3N
+// # define OLED_LOGO_SKEEB
+
+#ifdef OLED_DRIVER_SH1107
+# define OLED_DISPLAY_CUSTOM
+# define OLED_IC_SH1107 2
+# define OLED_DISPLAY_128X128
+# define OLED_DISPLAY_WIDTH 128
+# define OLED_DISPLAY_HEIGHT 128
+# define OLED_MATRIX_SIZE (OLED_DISPLAY_HEIGHT / 8 * OLED_DISPLAY_WIDTH)
+# define OLED_BLOCK_TYPE uint32_t
+# define OLED_SOURCE_MAP \
+ { 0, 8, 16, 24, 32, 40, 48, 56 }
+# define OLED_TARGET_MAP \
+ { 56, 48, 40, 32, 24, 16, 8, 0 }
+# define OLED_BLOCK_COUNT (sizeof(OLED_BLOCK_TYPE) * 8)
+# define OLED_BLOCK_SIZE (OLED_MATRIX_SIZE / OLED_BLOCK_COUNT)
+# define OLED_COM_PINS COM_PINS_ALT
+# define OLED_IC OLED_IC_SH1107
+# ifndef OLED_BRIGHTNESS
+# define OLED_BRIGHTNESS 50
+# endif
+#endif
diff --git a/users/drashna/oled/oled_stuff.c b/users/drashna/oled/oled_stuff.c
index 5baf5b558b2..68801b80a4c 100644
--- a/users/drashna/oled/oled_stuff.c
+++ b/users/drashna/oled/oled_stuff.c
@@ -28,6 +28,8 @@
#endif
#include
+bool is_oled_enabled = true;
+
extern bool host_driver_disabled;
uint32_t oled_timer = 0;
@@ -85,7 +87,7 @@ void add_keylog(uint16_t keycode, keyrecord_t *record) {
memmove(keylog_str, keylog_str + 1, OLED_KEYLOGGER_LENGTH - 1);
- if (keycode < (sizeof(code_to_name) / sizeof(char))) {
+ if (keycode < ARRAY_SIZE(code_to_name)) {
keylog_str[(OLED_KEYLOGGER_LENGTH - 1)] = pgm_read_byte(&code_to_name[keycode]);
}
@@ -850,7 +852,7 @@ void render_status_right(void) {
render_layer_state(1, 2);
render_mod_status(get_mods() | get_oneshot_mods(), 1, 5);
#if !defined(OLED_DISPLAY_VERBOSE) && defined(WPM_ENABLE) && !defined(STM32F303xC)
- render_wpm(2);
+ render_wpm(2, 7, 1);
#endif
render_keylock_status(host_keyboard_led_state(), 1, 6);
}
@@ -929,16 +931,14 @@ __attribute__((weak)) bool oled_task_keymap(void) {
}
bool oled_task_user(void) {
- if (is_keyboard_master()) {
#ifndef OLED_DISPLAY_TEST
- if (timer_elapsed32(oled_timer) > 60000) {
- oled_off();
- return false;
- } else
+ if (!is_oled_enabled) {
+ oled_off();
+ return false;
+ } else
#endif
- {
- oled_on();
- }
+ {
+ oled_on();
}
if (!oled_task_keymap()) {
@@ -990,3 +990,9 @@ bool oled_task_user(void) {
return false;
}
+
+extern bool oled_initialized;
+
+__attribute__((weak)) void matrix_scan_oled(void) {
+ is_oled_enabled = !(timer_elapsed32(oled_timer) > 60000);
+}
diff --git a/users/drashna/oled/oled_stuff.h b/users/drashna/oled/oled_stuff.h
index 17bd9319d15..df1a6d1805e 100644
--- a/users/drashna/oled/oled_stuff.h
+++ b/users/drashna/oled/oled_stuff.h
@@ -44,6 +44,8 @@ void render_wpm_graph(uint8_t max_lines_graph, uint8_t vertical_offse
void render_kitty(uint8_t col, uint8_t line);
void render_unicode_mode(uint8_t col, uint8_t line);
void render_rgb_hsv(uint8_t col, uint8_t line);
+void render_mouse_mode(uint8_t col, uint8_t line);
+void matrix_scan_oled(void);
void oled_pan_section(bool left, uint16_t y_start, uint16_t y_end, uint16_t x_start, uint16_t x_end);
diff --git a/users/drashna/pointing/pointing.c b/users/drashna/pointing/pointing.c
index 551034ff455..c9a7945a846 100644
--- a/users/drashna/pointing/pointing.c
+++ b/users/drashna/pointing/pointing.c
@@ -22,7 +22,7 @@ __attribute__((weak)) report_mouse_t pointing_device_task_keymap(report_mouse_t
}
report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
- int8_t x = mouse_report.x, y = mouse_report.y;
+ mouse_xy_report_t x = mouse_report.x, y = mouse_report.y;
mouse_report.x = 0;
mouse_report.y = 0;
@@ -33,8 +33,8 @@ report_mouse_t pointing_device_task_user(report_mouse_t mouse_report) {
#endif
if (timer_elapsed(mouse_debounce_timer) > TAP_CHECK) {
if (enable_acceleration) {
- x = (x > 0 ? x * x / 16 + x : -x * x / 16 + x);
- y = (y > 0 ? y * y / 16 + y : -y * y / 16 + y);
+ x = (mouse_xy_report_t)(x > 0 ? x * x / 16 + x : -x * x / 16 + x);
+ y = (mouse_xy_report_t)(y > 0 ? y * y / 16 + y : -y * y / 16 + y);
}
mouse_report.x = x;
mouse_report.y = y;
diff --git a/users/drashna/post_config.h b/users/drashna/post_config.h
index 85c028076e5..ec9aa49462a 100644
--- a/users/drashna/post_config.h
+++ b/users/drashna/post_config.h
@@ -113,13 +113,17 @@
# endif
#endif // MOUSEKEY_ENABLE
-#if !defined(LAYER_STATE_16BIT) && !defined(LAYER_STATE_8BIT) && !defined(LAYER_STATE_32BIT)
-# define LAYER_STATE_16BIT
-#endif
-#ifndef DYNAMIC_KEYMAP_LAYER_COUNT
-# define DYNAMIC_KEYMAP_LAYER_COUNT 11
-#endif
+#define MOUSE_EXTENDED_REPORT
#ifndef TAPPING_TERM
# define TAPPING_TERM 175
#endif
+
+#ifndef SECURE_UNLOCK_SEQUENCE
+# define SECURE_UNLOCK_SEQUENCE \
+ { \
+ {2, 1}, {2, 2}, {2, 3}, { \
+ 2, 4 \
+ } \
+ }
+#endif
diff --git a/users/drashna/rgb/rgb_matrix_config.h b/users/drashna/rgb/rgb_matrix_config.h
new file mode 100644
index 00000000000..33979a198e7
--- /dev/null
+++ b/users/drashna/rgb/rgb_matrix_config.h
@@ -0,0 +1,107 @@
+// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define RGB_MATRIX_KEYPRESSES // reacts to keypresses (will slow down matrix scan by a lot)
+// # define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (not recommened)
+#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+// # define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
+// # define RGB_DISABLE_WHEN_USB_SUSPENDED // turn off effects when suspended
+
+#undef ENABLE_RGB_MATRIX_ALPHAS_MODS
+#undef ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+#undef ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+#undef ENABLE_RGB_MATRIX_BREATHING
+#undef ENABLE_RGB_MATRIX_BAND_SAT
+#undef ENABLE_RGB_MATRIX_BAND_VAL
+#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+#undef ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+#undef ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+#undef ENABLE_RGB_MATRIX_CYCLE_ALL
+#undef ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+#undef ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+#undef ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+#undef ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+#undef ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+#undef ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+#undef ENABLE_RGB_MATRIX_DUAL_BEACON
+#undef ENABLE_RGB_MATRIX_RAINBOW_BEACON
+#undef ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+#undef ENABLE_RGB_MATRIX_RAINDROPS
+#undef ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+#undef ENABLE_RGB_MATRIX_HUE_BREATHING
+#undef ENABLE_RGB_MATRIX_HUE_PENDULUM
+#undef ENABLE_RGB_MATRIX_HUE_WAVE
+#undef ENABLE_RGB_MATRIX_PIXEL_RAIN
+#undef ENABLE_RGB_MATRIX_PIXEL_FLOW
+#undef ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
+#undef ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#undef ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+#undef ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+#undef ENABLE_RGB_MATRIX_SPLASH
+#undef ENABLE_RGB_MATRIX_MULTISPLASH
+#undef ENABLE_RGB_MATRIX_SOLID_SPLASH
+#undef ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+
+#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+#if !defined(SPLIT_KEYBOARD) && !defined(KEYBOARD_ergodox_ez) && !defined(KEYBOARD_moonlander)
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+#endif
+#if defined(__arm__) || defined(__AVR_AT90USB1286__) || defined(KEYBOARD_launchpad)
+// RGB Matrix Animation modes. Explicitly enabled
+// For full list of effects, see:
+// https://docs.qmk.fm/#/feature_rgb_matrix?id=rgb-matrix-effects
+# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_BREATHING
+# define ENABLE_RGB_MATRIX_BAND_SAT
+# define ENABLE_RGB_MATRIX_BAND_VAL
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+# define ENABLE_RGB_MATRIX_CYCLE_ALL
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+# define ENABLE_RGB_MATRIX_DUAL_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+# define ENABLE_RGB_MATRIX_RAINDROPS
+# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+# define ENABLE_RGB_MATRIX_HUE_BREATHING
+# define ENABLE_RGB_MATRIX_HUE_PENDULUM
+# define ENABLE_RGB_MATRIX_HUE_WAVE
+# define ENABLE_RGB_MATRIX_PIXEL_RAIN
+# define ENABLE_RGB_MATRIX_PIXEL_FLOW
+# define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+# define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+# define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+# define ENABLE_RGB_MATRIX_SPLASH
+# define ENABLE_RGB_MATRIX_MULTISPLASH
+# define ENABLE_RGB_MATRIX_SOLID_SPLASH
+# define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+#endif // AVR
diff --git a/users/drashna/rgb/rgblight_config.h b/users/drashna/rgb/rgblight_config.h
new file mode 100644
index 00000000000..bb2bc3b3ef6
--- /dev/null
+++ b/users/drashna/rgb/rgblight_config.h
@@ -0,0 +1,8 @@
+// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+# define RGBLIGHT_SLEEP
+# define RGBLIGHT_EFFECT_TWINKLE_LIFE 250
+# define RGBLIGHT_EFFECT_TWINKLE_PROBABILITY 1 / 24
diff --git a/users/drashna/rules.mk b/users/drashna/rules.mk
index 38d34fb2759..5644aad2c40 100644
--- a/users/drashna/rules.mk
+++ b/users/drashna/rules.mk
@@ -36,6 +36,10 @@ ifeq ($(strip $(PROTOCOL)), VUSB)
NKRO_ENABLE := no
endif
+ifeq ($(strip $(PER_KEY_TAPPING)), yes)
+ OPT_DEFS += -DPER_KEY_TAPPING
+endif
+
CUSTOM_UNICODE_ENABLE ?= yes
ifeq ($(strip $(CUSTOM_UNICODE_ENABLE)), yes)
UNICODE_ENABLE := no
@@ -83,6 +87,11 @@ ifdef CONSOLE_ENABLE
endif
endif
+ifeq ($(strip $(I2C_SCANNER_ENABLE)), yes)
+ OPT_DEFS += -DI2C_SCANNER_ENABLE
+ CONSOLE_ENABLE := yes
+endif
+
CUSTOM_OLED_DRIVER ?= yes
ifeq ($(strip $(OLED_ENABLE)), yes)
ifeq ($(strip $(OLED_DRIVER)), custom)
@@ -124,3 +133,7 @@ ifeq ($(strip $(AUTOCORRECTION_ENABLE)), yes)
$(shell touch $(USER_PATH)/keyrecords/autocorrection/autocorrection.c)
OPT_DEFS += -DAUTOCORRECTION_ENABLE
endif
+
+ifeq ($(strip $(BOOTMAGIC_ENABLE)), yes)
+ SRC += bootmagic_better.c
+endif
diff --git a/users/drashna/split/split_config.h b/users/drashna/split/split_config.h
new file mode 100644
index 00000000000..66c12392d97
--- /dev/null
+++ b/users/drashna/split/split_config.h
@@ -0,0 +1,21 @@
+// Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+// # define SPLIT_TRANSPORT_MIRROR
+#define SPLIT_LAYER_STATE_ENABLE
+#define SPLIT_LED_STATE_ENABLE
+#define SPLIT_MODS_ENABLE
+#ifdef WPM_ENABLE
+# define SPLIT_WPM_ENABLE
+#endif
+#ifdef OLED_ENABLE
+# undef SPLIT_OLED_ENABLE
+#endif
+#if defined(__AVR__) && !defined(SELECT_SOFT_SERIAL_SPEED)
+# define SELECT_SOFT_SERIAL_SPEED 1
+#endif
+#ifdef CUSTOM_SPLIT_TRANSPORT_SYNC
+# define SPLIT_TRANSACTION_IDS_USER RPC_ID_USER_STATE_SYNC, RPC_ID_USER_KEYMAP_SYNC, RPC_ID_USER_CONFIG_SYNC, RPC_ID_USER_WATCHDOG_SYNC, RPC_ID_USER_KEYLOG_STR
+#endif
diff --git a/users/drashna/split/transport_sync.c b/users/drashna/split/transport_sync.c
index 2050d687ae4..6b5c3844801 100644
--- a/users/drashna/split/transport_sync.c
+++ b/users/drashna/split/transport_sync.c
@@ -4,9 +4,6 @@
#include "transport_sync.h"
#include "transactions.h"
#include
-#ifdef __AVR__
-# include
-#endif
#ifdef UNICODE_COMMON_ENABLE
# include "process_unicode_common.h"
@@ -18,6 +15,9 @@ extern unicode_config_t unicode_config;
extern audio_config_t audio_config;
extern bool delayed_tasks_run;
#endif
+#if defined(OLED_ENABLE) && !defined(SPLIT_OLED_ENABLE) && defined(CUSTOM_OLED_DRIVER)
+extern bool is_oled_enabled;
+#endif
#if defined(POINTING_DEVICE_ENABLE) && defined(KEYBOARD_handwired_tractyl_manuform)
extern bool tap_toggling;
#endif
@@ -95,6 +95,9 @@ void user_transport_update(void) {
user_state.audio_enable = is_audio_on();
user_state.audio_clicky_enable = is_clicky_on();
#endif
+#if defined(OLED_ENABLE) && !defined(SPLIT_OLED_ENABLE) && defined(CUSTOM_OLED_DRIVER)
+ user_state.is_oled_enabled = is_oled_enabled;
+#endif
#if defined(CUSTOM_POINTING_DEVICE)
user_state.tap_toggling = tap_toggling;
#endif
@@ -116,6 +119,9 @@ void user_transport_update(void) {
unicode_config.input_mode = user_state.unicode_mode;
typing_mode = user_state.unicode_typing_mode;
#endif
+#if defined(OLED_ENABLE) && !defined(SPLIT_OLED_ENABLE) && defined(CUSTOM_OLED_DRIVER)
+ is_oled_enabled = user_state.is_oled_enabled;
+#endif
#if defined(CUSTOM_POINTING_DEVICE)
tap_toggling = user_state.tap_toggling;
#endif
@@ -226,7 +232,7 @@ void user_transport_sync(void) {
}
} else {
if (timer_elapsed32(watchdog_timer) > 3500) {
- software_reset();
+ mcu_reset();
while (1) {
}
}
diff --git a/users/drashna/split/transport_sync.h b/users/drashna/split/transport_sync.h
index ceb8f818757..8bfb49bf638 100644
--- a/users/drashna/split/transport_sync.h
+++ b/users/drashna/split/transport_sync.h
@@ -19,6 +19,7 @@ typedef union {
bool swap_hands :1;
bool host_driver_disabled :1;
uint8_t unicode_typing_mode :3;
+ bool is_oled_enabled :1;
};
} user_runtime_config_t;
diff --git a/users/gourdo1/gourdo1.h b/users/gourdo1/gourdo1.h
index ecf6eaf25d8..a198fd0805f 100644
--- a/users/gourdo1/gourdo1.h
+++ b/users/gourdo1/gourdo1.h
@@ -17,9 +17,6 @@ along with this program. If not, see .
#pragma once
-// DEFINE MACROS
-#define ARRAYSIZE(arr) sizeof(arr) / sizeof(arr[0])
-
// LAYERS -- Note: to avoid compile problems, make sure total layers matches DYNAMIC_KEYMAP_LAYER_COUNT defined in config.h (where _COLEMAK layer is defined)
enum custom_user_layers {
_BASE,
diff --git a/users/jonavin/jonavin.h b/users/jonavin/jonavin.h
index ab2ce0dff2f..c3e383bd3a6 100644
--- a/users/jonavin/jonavin.h
+++ b/users/jonavin/jonavin.h
@@ -17,9 +17,6 @@ along with this program. If not, see .
#pragma once
-// DEFINE MACROS
-#define ARRAYSIZE(arr) sizeof(arr)/sizeof(arr[0])
-
// LAYERS
enum custom_user_layers {
diff --git a/users/spidey3/config.h b/users/spidey3/config.h
index 49409ed85db..36d59b6a5dc 100644
--- a/users/spidey3/config.h
+++ b/users/spidey3/config.h
@@ -9,7 +9,7 @@
#ifdef RGBLIGHT_ENABLE
# define RGBLIGHT_LAYERS
-# define RGBLIGHT_MAX_LAYERS 17
+# define RGBLIGHT_MAX_LAYERS 18
# define RGBLIGHT_LAYER_BLINK
# define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF
# define RGBLIGHT_STARTUP_ANIMATION
@@ -37,12 +37,12 @@
#endif
-#define UNICODE_SELECTED_MODES UC_MAC, UC_LNX, UC_WINC
+#define UNICODE_SELECTED_MODES UC_MAC, UC_LNX, UC_WINC, UC_EMACS
#define SPI_DEBUG_SCAN_RATE
#undef MANUFACTURER
-#define MANUFACTURER Window of Fire
+#define MANUFACTURER "Window of Fire"
// Some keyboards enable BACKLIGHT_CAPS_LOCK without checking if backlight is enabled.
// Undef as appropriate to avoid compiler warnings in that case.
diff --git a/users/spidey3/layer_rgb.c b/users/spidey3/layer_rgb.c
index 671205362f7..bdf4584ef17 100644
--- a/users/spidey3/layer_rgb.c
+++ b/users/spidey3/layer_rgb.c
@@ -65,6 +65,7 @@ const rgblight_segment_t PROGMEM _uc_mac_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORN
// UC_WIN disabled in config.h
// UC_BSD not implemented
const rgblight_segment_t PROGMEM _uc_winc_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNER_BR(HSV_CYAN));
+const rgblight_segment_t PROGMEM _uc_emacs_layer[] = RGBLIGHT_LAYER_SEGMENTS(CORNER_BR(HSV_GREEN));
// Now define the array of layers. Higher numbered layers take precedence.
const rgblight_segment_t *const PROGMEM _rgb_layers[] = {
@@ -89,13 +90,14 @@ const rgblight_segment_t *const PROGMEM _rgb_layers[] = {
[UNICODE_OFFSET + UC_WIN] = _none,
[UNICODE_OFFSET + UC_BSD] = _none,
[UNICODE_OFFSET + UC_WINC] = _uc_winc_layer,
+ [UNICODE_OFFSET + UC_EMACS] = _uc_emacs_layer,
[UNICODE_OFFSET + UC__COUNT] = NULL
};
// clang-format on
-const uint8_t PROGMEM _n_rgb_layers = sizeof(_rgb_layers) / sizeof(_rgb_layers[0]) - 1;
+const uint8_t PROGMEM _n_rgb_layers = ARRAY_SIZE(_rgb_layers) - 1;
void clear_rgb_layers() {
for (uint8_t i = 0; i < _n_rgb_layers; i++) {
@@ -110,8 +112,7 @@ void do_rgb_layers(layer_state_t state, uint8_t start, uint8_t end) {
}
}
-void do_rgb_unicode(void) {
- uint8_t uc_mode = get_unicode_input_mode();
+void do_rgb_unicode(uint8_t uc_mode) {
for (uint8_t i = 0; i < UC__COUNT; i++) {
bool is_on = i == uc_mode;
rgblight_set_layer_state(UNICODE_OFFSET + i, is_on);
@@ -121,7 +122,7 @@ void do_rgb_unicode(void) {
void do_rgb_all(void) {
do_rgb_layers(default_layer_state, LAYER_BASE_DEFAULT, LAYER_BASE_REGULAR);
do_rgb_layers(layer_state, LAYER_BASE_REGULAR, LAYER_BASE_END);
- do_rgb_unicode();
+ do_rgb_unicode(get_unicode_input_mode());
rgblight_set_layer_state(MISC_OFFSET + 0, spi_gflock);
rgblight_set_layer_state(MISC_OFFSET + 1, spi_replace_mode != SPI_NORMAL);
}
@@ -146,7 +147,7 @@ extern rgblight_status_t rgblight_status;
# define STARTUP_ANIMATION_CYCLE_STEP 2
# define STARTUP_ANIMATION_RAMP_TO_STEPS 70
# define STARTUP_ANIMATION_STEP_TIME 10
-# define STARTUP_ANIMATION_INITIAL_DELAY 0 // milliseconds, must be < 255 * STEP_TIME
+# define STARTUP_ANIMATION_INITIAL_DELAY 0 // milliseconds, must be < 255 * STEP_TIME
// clang-format off
typedef enum {
@@ -300,8 +301,8 @@ void matrix_scan_user_rgb(void) {
# ifdef STARTUP_ANIMATION_DEBUG
dprintf("sua RAMP_DOWN counter=%u\n", counter);
# endif
+ rgblight_sethsv_noeeprom(old_config.hue, STARTUP_ANIMATION_SATURATION, counter);
if (counter >= STARTUP_ANIMATION_FADE_STEP) {
- rgblight_sethsv_noeeprom(old_config.hue, STARTUP_ANIMATION_SATURATION, counter);
counter -= STARTUP_ANIMATION_FADE_STEP;
} else {
startup_animation_state = CLEAN_UP;
@@ -380,6 +381,13 @@ bool led_update_user_rgb(led_t led_state) {
return true;
}
+#if defined(UNICODE_COMMON_ENABLE)
+void unicode_input_mode_set_user_rgb(uint8_t input_mode) {
+ rgb_layer_ack(ACK_MEH);
+ do_rgb_unicode(input_mode);
+}
+#endif
+
void rgb_layer_ack_yn(bool yn) { rgb_layer_ack(yn ? ACK_YES : ACK_NO); }
void rgb_layer_ack(layer_ack_t n) {
@@ -456,7 +464,9 @@ void post_process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
break;
case RGB_TOG:
- rgb_layer_ack_yn(rgblight_config.enable);
+ // Hack - we only get called on the press for RGB_TOG,
+ // but the flag is only flipped on the release...
+ rgb_layer_ack_yn(!rgblight_config.enable);
break;
#ifdef VELOCIKEY_ENABLE
@@ -472,16 +482,5 @@ void post_process_record_user_rgb(uint16_t keycode, keyrecord_t *record) {
rgb_layer_ack_yn(keymap_config.nkro);
break;
#endif
-
-#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)
- case SPI_LNX:
- case SPI_OSX:
- case SPI_WIN:
- case UC_MOD:
- case UC_RMOD:
- rgb_layer_ack(ACK_MEH);
- do_rgb_unicode();
- break;
-#endif
}
}
diff --git a/users/spidey3/rules.mk b/users/spidey3/rules.mk
index de8ed113e77..c95582e1769 100644
--- a/users/spidey3/rules.mk
+++ b/users/spidey3/rules.mk
@@ -1,6 +1,7 @@
BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
CONSOLE_ENABLE = yes # Console for debug
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+NKRO_ENABLE = yes
LTO_ENABLE = yes
SRC += init.c
diff --git a/users/spidey3/spidey3.c b/users/spidey3/spidey3.c
index e993f4828e5..d9b893814ab 100644
--- a/users/spidey3/spidey3.c
+++ b/users/spidey3/spidey3.c
@@ -55,7 +55,8 @@ void matrix_scan_user(void) {
}
static uint32_t math_glyph_exceptions(const uint16_t keycode, const bool shifted) {
- if (shifted) {
+ bool caps = host_keyboard_led_state().caps_lock;
+ if (shifted != caps) {
switch (keycode) {
// clang-format off
case KC_C: return 0x2102;
@@ -97,13 +98,14 @@ bool process_record_glyph_replacement(uint16_t keycode, keyrecord_t *record, uin
clear_oneshot_mods();
#endif
- uint32_t base = shifted ? baseAlphaUpper : baseAlphaLower;
+ bool caps = host_keyboard_led_state().caps_lock;
+ uint32_t base = ((shifted == caps) ? baseAlphaLower : baseAlphaUpper);
_register(base + (keycode - KC_A));
set_mods(temp_mod);
}
return false;
case KC_0:
- if (shifted) { // skip shifted numbers, so that we can still use symbols etc.
+ if (shifted) { // skip shifted numbers, so that we can still use symbols etc.
return true;
}
if (record->event.pressed) {
@@ -111,7 +113,7 @@ bool process_record_glyph_replacement(uint16_t keycode, keyrecord_t *record, uin
}
return false;
case KC_1 ... KC_9:
- if (shifted) { // skip shifted numbers, so that we can still use symbols etc.
+ if (shifted) { // skip shifted numbers, so that we can still use symbols etc.
return true;
}
if (record->event.pressed) {
@@ -120,7 +122,7 @@ bool process_record_glyph_replacement(uint16_t keycode, keyrecord_t *record, uin
return false;
case KC_SPACE:
if (record->event.pressed) {
- _register(spaceGlyph); // em space
+ _register(spaceGlyph); // em space
}
return false;
}
@@ -201,11 +203,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case CH_ASST: host_consumer_send(AL_ASSISTANT); return false;
case CH_SUSP: tap_code16(LGUI(LSFT(KC_L))); return true;
-#if defined(UNICODE_ENABLE) || defined(UNICODEMAP_ENABLE) || defined(UCIS_ENABLE)
- case SPI_LNX: set_unicode_input_mode(UC_LNX); break;
- case SPI_OSX: set_unicode_input_mode(UC_OSX); break;
- case SPI_WIN: set_unicode_input_mode(UC_WINC); break;
-#endif
// clang-format on
case SPI_NORMAL ... SPI_MATH:
@@ -341,7 +338,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
set_mods(mods);
return false;
}
- } else { // on release of KC_BSPC
+ } else { // on release of KC_BSPC
// In case KC_DEL is still being sent even after the release of KC_BSPC
if (delkey_registered) {
unregister_code(KC_DEL);
@@ -390,3 +387,11 @@ bool led_update_user(led_t led_state) {
return true;
#endif
}
+
+#if defined(UNICODE_COMMON_ENABLE)
+void unicode_input_mode_set_user(uint8_t input_mode) {
+# ifdef RGBLIGHT_ENABLE
+ unicode_input_mode_set_user_rgb(input_mode);
+# endif
+}
+#endif
diff --git a/users/spidey3/spidey3.h b/users/spidey3/spidey3.h
index e96ab7a1452..7a9407969e9 100644
--- a/users/spidey3/spidey3.h
+++ b/users/spidey3/spidey3.h
@@ -17,12 +17,9 @@ enum userspace_layers {
};
enum custom_keycodes {
- SPI_LNX = SAFE_RANGE, // Mode: Linux
- SPI_OSX, // Mode: Mac
- SPI_WIN, // Mode: Windows
- CH_CPNL, // AL Control Panel
- CH_ASST, // AL Context-aware Desktop Assistant
- CH_SUSP, // Suspend
+ CH_CPNL = SAFE_RANGE, // AL Control Panel
+ CH_ASST, // AL Context-aware Desktop Assistant
+ CH_SUSP, // Suspend
SPI_NORMAL,
SPI_WIDE,
@@ -68,6 +65,11 @@ void rgb_layer_ack(layer_ack_t n);
void rgb_layer_ack_yn(bool yn);
void clear_rgb_layers(void);
void shutdown_user_rgb(void);
+
+# if defined(UNICODE_COMMON_ENABLE)
+void unicode_input_mode_set_user_rgb(uint8_t input_mode);
+# endif
+
#endif
#ifdef UNICODEMAP_ENABLE
diff --git a/users/uqs/uqs.c b/users/uqs/uqs.c
index 72284143c62..7e2d09e0f6b 100644
--- a/users/uqs/uqs.c
+++ b/users/uqs/uqs.c
@@ -78,9 +78,9 @@ const rgblight_segment_t* const PROGMEM my_rgb_layers[] = {
my_rgb_segments[L_MOUSE],
};
-_Static_assert(sizeof(my_rgb_layers) / sizeof(my_rgb_layers[0]) ==
- sizeof(my_rgb_segments) / sizeof(my_rgb_segments[0]),
- "Number of rgb_segment definitions does not match up!");
+_Static_assert(ARRAY_SIZE(my_rgb_layers) ==
+ ARRAY_SIZE(my_rgb_segments),
+ "Number of rgb_segment definitions does not match up!");
#endif
#ifdef COMBO_ENABLE
@@ -125,7 +125,7 @@ const uint16_t PROGMEM my_combos[][4] = {
{KC_BTN1, KC_BTN2, KC_BTN3, COMBO_END},
};
-const uint16_t COMBO_LEN = sizeof(my_action_combos) / sizeof(my_action_combos[0]) + sizeof(my_combos) / sizeof(my_combos[0]);
+const uint16_t COMBO_LEN = ARRAY_SIZE(my_action_combos) + ARRAY_SIZE(my_combos);
#define MY_ACTION_COMBO(ck) \
[ck] = { .keys = &(my_action_combos[ck][0]) }
@@ -162,11 +162,11 @@ combo_t key_combos[] = {
MY_COMBO(14),
};
-_Static_assert(sizeof(key_combos) / sizeof(key_combos[0]) ==
- (sizeof(my_action_combos) / sizeof(my_action_combos[0]) + sizeof(my_combos) / sizeof(my_combos[0])),
- "Number of combo definitions does not match up!");
+_Static_assert(ARRAY_SIZE(key_combos) ==
+ (ARRAY_SIZE(my_action_combos) + ARRAY_SIZE(my_combos)),
+ "Number of combo definitions does not match up!");
#else
-combo_t key_combos[sizeof(my_action_combos) / sizeof(my_action_combos[0]) + sizeof(my_combos) / sizeof(my_combos[0])];
+combo_t key_combos[ARRAY_SIZE(my_action_combos) + ARRAY_SIZE(my_combos)];
#endif
void process_combo_event(uint16_t combo_index, bool pressed) {
@@ -235,10 +235,10 @@ void keyboard_post_init_user(void) {
#endif
#if defined(COMBO_ENABLE) && !defined(COMBO_STATICALLY)
uint8_t i = 0;
- for (; i < sizeof(my_action_combos) / sizeof(my_action_combos[0]); i++) {
+ for (; i < ARRAY_SIZE(my_action_combos); i++) {
key_combos[i].keys = &(my_action_combos[i][0]);
}
- for (uint8_t j = 0; j < sizeof(my_combos) / sizeof(my_combos[0]); j++, i++) {
+ for (uint8_t j = 0; j < ARRAY_SIZE(my_combos); j++, i++) {
key_combos[i].keycode = my_combos[j][0];
key_combos[i].keys = &(my_combos[j][1]);
}
diff --git a/util/install/fedora.sh b/util/install/fedora.sh
index b140438b424..4227906ad9f 100755
--- a/util/install/fedora.sh
+++ b/util/install/fedora.sh
@@ -8,7 +8,7 @@ _qmk_install() {
clang diffutils git gcc glibc-headers kernel-devel kernel-headers \
make unzip wget zip python3 avr-binutils avr-gcc avr-libc \
arm-none-eabi-binutils-cs arm-none-eabi-gcc-cs arm-none-eabi-newlib \
- avrdude dfu-programmer dfu-util hidapi libusb1-devel
+ avrdude dfu-programmer dfu-util hidapi libusb-devel
python3 -m pip install --user -r $QMK_FIRMWARE_DIR/requirements.txt
}