aboutsummaryrefslogtreecommitdiff
path: root/keyboards/handwired
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/handwired')
-rw-r--r--keyboards/handwired/dygma/raise/rules.mk2
-rw-r--r--keyboards/handwired/franky36/keyboard.json4
-rw-r--r--keyboards/handwired/hen_des/epssp75/keyboard.json2
-rw-r--r--keyboards/handwired/lumawing/keyboard.json2
-rw-r--r--keyboards/handwired/onekey/at_start_f415/config.h14
-rw-r--r--keyboards/handwired/onekey/at_start_f415/halconf.h2
-rw-r--r--keyboards/handwired/onekey/at_start_f415/keyboard.json2
-rw-r--r--keyboards/handwired/onekey/at_start_f415/mcuconf.h3
-rw-r--r--keyboards/handwired/onekey/info.json12
-rw-r--r--keyboards/handwired/onekey/kb2040/config.h10
-rw-r--r--keyboards/handwired/onekey/kb2040/halconf.h21
-rw-r--r--keyboards/handwired/onekey/kb2040/mcuconf.h3
-rw-r--r--keyboards/handwired/onekey/keymaps/cm_flow_led_matrix_effect/config.h16
-rw-r--r--keyboards/handwired/onekey/keymaps/cm_flow_led_matrix_effect/keymap.c27
-rw-r--r--keyboards/handwired/onekey/keymaps/cm_flow_led_matrix_effect/keymap.json3
-rw-r--r--keyboards/handwired/onekey/keymaps/cm_flow_rgb_matrix_effect/config.h16
-rw-r--r--keyboards/handwired/onekey/keymaps/cm_flow_rgb_matrix_effect/keymap.c27
-rw-r--r--keyboards/handwired/onekey/keymaps/cm_flow_rgb_matrix_effect/keymap.json3
-rw-r--r--keyboards/handwired/onekey/keymaps/lvgl/config.h15
-rw-r--r--keyboards/handwired/onekey/keymaps/lvgl/halconf.h12
-rw-r--r--keyboards/handwired/onekey/keymaps/lvgl/mcuconf.h9
-rw-r--r--keyboards/handwired/onekey/rp2040/config.h11
-rw-r--r--keyboards/handwired/onekey/rp2040/halconf.h4
-rw-r--r--keyboards/handwired/onekey/rp2040/mcuconf.h3
-rw-r--r--keyboards/handwired/onekey/weact_g0b1cb/config.h28
-rw-r--r--keyboards/handwired/onekey/weact_g0b1cb/halconf.h11
-rw-r--r--keyboards/handwired/onekey/weact_g0b1cb/keyboard.json20
-rw-r--r--keyboards/handwired/onekey/weact_g0b1cb/mcuconf.h18
-rw-r--r--keyboards/handwired/onekey/weact_g0b1cb/readme.md5
-rw-r--r--keyboards/handwired/riblee_split/keyboard.json4
-rw-r--r--keyboards/handwired/tractyl_manuform/4x6_right/rules.mk1
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/config.h9
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/f303/halconf.h2
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/f405/board.h23
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/f405/config.h89
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/f405/f405.c52
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/f405/halconf.h30
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/f405/keyboard.json66
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/f405/mcuconf.h82
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/f411/config.h4
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/f411/f411.c41
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/f411/halconf.h2
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/f411/rules.mk2
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/info.json203
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/post_rules.mk1
-rw-r--r--keyboards/handwired/tractyl_manuform/5x6_right/rules.mk4
-rw-r--r--keyboards/handwired/tractyl_manuform/config.h12
-rw-r--r--keyboards/handwired/tractyl_manuform/info.json6
-rw-r--r--keyboards/handwired/tractyl_manuform/post_config.h112
-rw-r--r--keyboards/handwired/tractyl_manuform/tractyl_manuform.c231
-rw-r--r--keyboards/handwired/tractyl_manuform/tractyl_manuform.h22
-rw-r--r--keyboards/handwired/wwa/soyuz/keyboard.json10
-rw-r--r--keyboards/handwired/wwa/soyuz/keymaps/default/keymap.c10
-rw-r--r--keyboards/handwired/wwa/soyuz/keymaps/default/rules.mk1
-rw-r--r--keyboards/handwired/wwa/soyuz/readme.md2
-rw-r--r--keyboards/handwired/yodadistro/macro/keyboard.json33
-rw-r--r--keyboards/handwired/yodadistro/macro/keymaps/default/keymap.json11
-rw-r--r--keyboards/handwired/yodadistro/macro/readme.md25
-rw-r--r--keyboards/handwired/zeropad/keyboard.json38
-rw-r--r--keyboards/handwired/zeropad/keymaps/default/keymap.c13
-rw-r--r--keyboards/handwired/zeropad/readme.md27
61 files changed, 1143 insertions, 330 deletions
diff --git a/keyboards/handwired/dygma/raise/rules.mk b/keyboards/handwired/dygma/raise/rules.mk
index cd02f80200..195edabcae 100644
--- a/keyboards/handwired/dygma/raise/rules.mk
+++ b/keyboards/handwired/dygma/raise/rules.mk
@@ -7,5 +7,3 @@ CUSTOM_MATRIX = lite
I2C_DRIVER_REQUIRED = yes
SRC += matrix.c
-
-DEFAULT_FOLDER = handwired/dygma/raise/ansi
diff --git a/keyboards/handwired/franky36/keyboard.json b/keyboards/handwired/franky36/keyboard.json
index 038fc1eb67..871e6abf9d 100644
--- a/keyboards/handwired/franky36/keyboard.json
+++ b/keyboards/handwired/franky36/keyboard.json
@@ -23,8 +23,8 @@
"url": "https://github.com/avdyushin/franky36",
"usb": {
"device_version": "0.2.0",
- "pid": "0x0001",
- "vid": "0xFEED"
+ "pid": "0x3336",
+ "vid": "0x1209"
},
"community_layouts": ["split_3x5_3"],
"layouts": {
diff --git a/keyboards/handwired/hen_des/epssp75/keyboard.json b/keyboards/handwired/hen_des/epssp75/keyboard.json
index 4d0739b800..1917fd87cc 100644
--- a/keyboards/handwired/hen_des/epssp75/keyboard.json
+++ b/keyboards/handwired/hen_des/epssp75/keyboard.json
@@ -6,8 +6,6 @@
"diode_direction": "COL2ROW",
"features": {
"bootmagic": true,
- "command": false,
- "console": false,
"extrakey": true,
"mousekey": true,
"nkro": true
diff --git a/keyboards/handwired/lumawing/keyboard.json b/keyboards/handwired/lumawing/keyboard.json
index a99d6d2a2e..8af89134aa 100644
--- a/keyboards/handwired/lumawing/keyboard.json
+++ b/keyboards/handwired/lumawing/keyboard.json
@@ -1,7 +1,6 @@
{
"keyboard_name": "LuMaWing",
"manufacturer": "Lucas Mateijsen",
- "url": "",
"maintainer": "qmk",
"usb": {
"vid": "0xBB80",
@@ -11,7 +10,6 @@
"features": {
"bootmagic": true,
"command": true,
- "console": false,
"extrakey": true,
"mousekey": true,
"nkro": false
diff --git a/keyboards/handwired/onekey/at_start_f415/config.h b/keyboards/handwired/onekey/at_start_f415/config.h
index 41aece900c..7e41e7da89 100644
--- a/keyboards/handwired/onekey/at_start_f415/config.h
+++ b/keyboards/handwired/onekey/at_start_f415/config.h
@@ -4,11 +4,25 @@
#pragma once
+/* ADC pin */
#define ADC_PIN A0
+/* Backlight configs */
#define BACKLIGHT_PWM_DRIVER PWMD5
#define BACKLIGHT_PWM_CHANNEL 1
+/* LCD configs */
+#define LCD_RST_PIN A2
+#define LCD_DC_PIN A3
+#define LCD_CS_PIN A4
+
+/* SPI pins */
+#define SPI_DRIVER SPID1
+#define SPI_SCK_PIN A5
+#define SPI_MOSI_PIN A7
+#define SPI_MISO_PIN A6
+
+/* Haptic configs */
#define SOLENOID_PIN B12
#define SOLENOID_PINS { B12, B13, B14, B15 }
#define SOLENOID_PINS_ACTIVE_STATE { high, high, low }
diff --git a/keyboards/handwired/onekey/at_start_f415/halconf.h b/keyboards/handwired/onekey/at_start_f415/halconf.h
index e3c075936d..3c3ba3812a 100644
--- a/keyboards/handwired/onekey/at_start_f415/halconf.h
+++ b/keyboards/handwired/onekey/at_start_f415/halconf.h
@@ -10,4 +10,6 @@
#define HAL_USE_PWM TRUE
+#define HAL_USE_SPI TRUE
+
#include_next <halconf.h>
diff --git a/keyboards/handwired/onekey/at_start_f415/keyboard.json b/keyboards/handwired/onekey/at_start_f415/keyboard.json
index 6e5683a474..8024e776a8 100644
--- a/keyboards/handwired/onekey/at_start_f415/keyboard.json
+++ b/keyboards/handwired/onekey/at_start_f415/keyboard.json
@@ -16,7 +16,7 @@
},
"ws2812": {
"pin": "B0"
- }
+ },
"apa102": {
"data_pin": "B0",
"clock_pin": "B1"
diff --git a/keyboards/handwired/onekey/at_start_f415/mcuconf.h b/keyboards/handwired/onekey/at_start_f415/mcuconf.h
index 246f6762d3..8f6333ca01 100644
--- a/keyboards/handwired/onekey/at_start_f415/mcuconf.h
+++ b/keyboards/handwired/onekey/at_start_f415/mcuconf.h
@@ -14,3 +14,6 @@
#undef AT32_PWM_USE_TMR5
#define AT32_PWM_USE_TMR5 TRUE
+
+#undef AT32_SPI_USE_SPI1
+#define AT32_SPI_USE_SPI1 TRUE
diff --git a/keyboards/handwired/onekey/info.json b/keyboards/handwired/onekey/info.json
index 7b6b7ddab8..d5f650f1bd 100644
--- a/keyboards/handwired/onekey/info.json
+++ b/keyboards/handwired/onekey/info.json
@@ -26,5 +26,17 @@
{"x": 0, "y": 0, "matrix": [0, 0]}
]
}
+ },
+ "led_matrix": {
+ "driver": "snled27351",
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}
+ ]
+ },
+ "rgb_matrix": {
+ "driver": "snled27351",
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1}
+ ]
}
}
diff --git a/keyboards/handwired/onekey/kb2040/config.h b/keyboards/handwired/onekey/kb2040/config.h
index e9c4eef273..a9508bc4cc 100644
--- a/keyboards/handwired/onekey/kb2040/config.h
+++ b/keyboards/handwired/onekey/kb2040/config.h
@@ -16,3 +16,13 @@
#define I2C1_SDA_PIN GP12
#define I2C1_SCL_PIN GP13
+/* LCD configs */
+#define LCD_RST_PIN GP0
+#define LCD_DC_PIN GP1
+#define LCD_CS_PIN GP2
+
+/* SPI pins */
+#define SPI_DRIVER SPID0
+#define SPI_SCK_PIN GP18
+#define SPI_MOSI_PIN GP19
+#define SPI_MISO_PIN GP20
diff --git a/keyboards/handwired/onekey/kb2040/halconf.h b/keyboards/handwired/onekey/kb2040/halconf.h
new file mode 100644
index 0000000000..96d14ae85c
--- /dev/null
+++ b/keyboards/handwired/onekey/kb2040/halconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2020 QMK
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#define HAL_USE_SPI TRUE
+
+#include_next <halconf.h>
diff --git a/keyboards/handwired/onekey/kb2040/mcuconf.h b/keyboards/handwired/onekey/kb2040/mcuconf.h
index 57e58e14d7..cc44ce77c3 100644
--- a/keyboards/handwired/onekey/kb2040/mcuconf.h
+++ b/keyboards/handwired/onekey/kb2040/mcuconf.h
@@ -22,3 +22,6 @@
#undef RP_I2C_USE_I2C1
#define RP_I2C_USE_I2C1 TRUE
+
+#undef RP_SPI_USE_SPI0
+#define RP_SPI_USE_SPI0 TRUE
diff --git a/keyboards/handwired/onekey/keymaps/cm_flow_led_matrix_effect/config.h b/keyboards/handwired/onekey/keymaps/cm_flow_led_matrix_effect/config.h
new file mode 100644
index 0000000000..aed1e4ac6f
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/cm_flow_led_matrix_effect/config.h
@@ -0,0 +1,16 @@
+// Copyright 2025 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+#pragma once
+
+#define SNLED27351_I2C_ADDRESS_1 SNLED27351_I2C_ADDRESS_GND
diff --git a/keyboards/handwired/onekey/keymaps/cm_flow_led_matrix_effect/keymap.c b/keyboards/handwired/onekey/keymaps/cm_flow_led_matrix_effect/keymap.c
new file mode 100644
index 0000000000..0bd835ff25
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/cm_flow_led_matrix_effect/keymap.c
@@ -0,0 +1,27 @@
+// Copyright 2025 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// This keymap serves as a test for modules/qmk/flow_led_matrix_effect.
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {LAYOUT_ortho_1x1(LM_TOGG)};
+
+const snled27351_led_t PROGMEM g_snled27351_leds[LED_MATRIX_LED_COUNT] = {
+ {0, CB6_CA1},
+};
+
+void keyboard_post_init_user(void) {
+ led_matrix_mode_noeeprom(LED_MATRIX_COMMUNITY_MODULE_FLOW);
+}
diff --git a/keyboards/handwired/onekey/keymaps/cm_flow_led_matrix_effect/keymap.json b/keyboards/handwired/onekey/keymaps/cm_flow_led_matrix_effect/keymap.json
new file mode 100644
index 0000000000..0ff6bf5a4d
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/cm_flow_led_matrix_effect/keymap.json
@@ -0,0 +1,3 @@
+{
+ "modules": ["qmk/flow_led_matrix_effect"]
+}
diff --git a/keyboards/handwired/onekey/keymaps/cm_flow_rgb_matrix_effect/config.h b/keyboards/handwired/onekey/keymaps/cm_flow_rgb_matrix_effect/config.h
new file mode 100644
index 0000000000..aed1e4ac6f
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/cm_flow_rgb_matrix_effect/config.h
@@ -0,0 +1,16 @@
+// Copyright 2025 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+#pragma once
+
+#define SNLED27351_I2C_ADDRESS_1 SNLED27351_I2C_ADDRESS_GND
diff --git a/keyboards/handwired/onekey/keymaps/cm_flow_rgb_matrix_effect/keymap.c b/keyboards/handwired/onekey/keymaps/cm_flow_rgb_matrix_effect/keymap.c
new file mode 100644
index 0000000000..72ef2d3f80
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/cm_flow_rgb_matrix_effect/keymap.c
@@ -0,0 +1,27 @@
+// Copyright 2025 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// This keymap serves as a test for modules/qmk/flow_rgb_matrix_effect.
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {LAYOUT_ortho_1x1(RM_TOGG)};
+
+const snled27351_led_t PROGMEM g_snled27351_leds[LED_MATRIX_LED_COUNT] = {
+ {0, CB6_CA1},
+};
+
+void keyboard_post_init_user(void) {
+ rgb_matrix_mode_noeeprom(RGB_MATRIX_COMMUNITY_MODULE_FLOW);
+}
diff --git a/keyboards/handwired/onekey/keymaps/cm_flow_rgb_matrix_effect/keymap.json b/keyboards/handwired/onekey/keymaps/cm_flow_rgb_matrix_effect/keymap.json
new file mode 100644
index 0000000000..56d2342867
--- /dev/null
+++ b/keyboards/handwired/onekey/keymaps/cm_flow_rgb_matrix_effect/keymap.json
@@ -0,0 +1,3 @@
+{
+ "modules": ["qmk/flow_rgb_matrix_effect"]
+}
diff --git a/keyboards/handwired/onekey/keymaps/lvgl/config.h b/keyboards/handwired/onekey/keymaps/lvgl/config.h
deleted file mode 100644
index 38bb5d0cf3..0000000000
--- a/keyboards/handwired/onekey/keymaps/lvgl/config.h
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright 2022 Jose Pablo Ramirez (@jpe230)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-/* SPI pins */
-#define SPI_DRIVER SPID0
-#define SPI_SCK_PIN GP18
-#define SPI_MOSI_PIN GP19
-#define SPI_MISO_PIN GP20
-
-/* LCD Configuration */
-#define LCD_RST_PIN GP0
-#define LCD_DC_PIN GP1
-#define LCD_CS_PIN GP2
diff --git a/keyboards/handwired/onekey/keymaps/lvgl/halconf.h b/keyboards/handwired/onekey/keymaps/lvgl/halconf.h
deleted file mode 100644
index 27646bb3f5..0000000000
--- a/keyboards/handwired/onekey/keymaps/lvgl/halconf.h
+++ /dev/null
@@ -1,12 +0,0 @@
-// Copyright 2022 Jose Pablo Ramirez (@jpe230)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#include_next <halconf.h>
-
-#undef HAL_USE_SPI
-#define HAL_USE_SPI TRUE
-
-#undef SPI_USE_WAIT
-#define SPI_USE_WAIT TRUE
diff --git a/keyboards/handwired/onekey/keymaps/lvgl/mcuconf.h b/keyboards/handwired/onekey/keymaps/lvgl/mcuconf.h
deleted file mode 100644
index bff74867ff..0000000000
--- a/keyboards/handwired/onekey/keymaps/lvgl/mcuconf.h
+++ /dev/null
@@ -1,9 +0,0 @@
-// Copyright 2022 Jose Pablo Ramirez (@jpe230)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#pragma once
-
-#include_next <mcuconf.h>
-
-#undef RP_SPI_USE_SPI0
-#define RP_SPI_USE_SPI0 TRUE
diff --git a/keyboards/handwired/onekey/rp2040/config.h b/keyboards/handwired/onekey/rp2040/config.h
index 0030e97b0f..974fc688d3 100644
--- a/keyboards/handwired/onekey/rp2040/config.h
+++ b/keyboards/handwired/onekey/rp2040/config.h
@@ -17,3 +17,14 @@
#define AUDIO_PWM_CHANNEL RP2040_PWM_CHANNEL_A
#define ADC_PIN GP26
+
+/* LCD configs */
+#define LCD_RST_PIN GP0
+#define LCD_DC_PIN GP1
+#define LCD_CS_PIN GP2
+
+/* SPI pins */
+#define SPI_DRIVER SPID0
+#define SPI_SCK_PIN GP18
+#define SPI_MOSI_PIN GP19
+#define SPI_MISO_PIN GP20
diff --git a/keyboards/handwired/onekey/rp2040/halconf.h b/keyboards/handwired/onekey/rp2040/halconf.h
index ec56be2263..6310808d9a 100644
--- a/keyboards/handwired/onekey/rp2040/halconf.h
+++ b/keyboards/handwired/onekey/rp2040/halconf.h
@@ -4,7 +4,11 @@
#pragma once
#define HAL_USE_I2C TRUE
+
#define HAL_USE_PWM TRUE
+
#define HAL_USE_ADC TRUE
+#define HAL_USE_SPI TRUE
+
#include_next <halconf.h>
diff --git a/keyboards/handwired/onekey/rp2040/mcuconf.h b/keyboards/handwired/onekey/rp2040/mcuconf.h
index e24a0d4f24..c1d22657ca 100644
--- a/keyboards/handwired/onekey/rp2040/mcuconf.h
+++ b/keyboards/handwired/onekey/rp2040/mcuconf.h
@@ -10,3 +10,6 @@
#undef RP_PWM_USE_PWM4
#define RP_PWM_USE_PWM4 TRUE
+
+#undef RP_SPI_USE_SPI0
+#define RP_SPI_USE_SPI0 TRUE
diff --git a/keyboards/handwired/onekey/weact_g0b1cb/config.h b/keyboards/handwired/onekey/weact_g0b1cb/config.h
new file mode 100644
index 0000000000..b4550b15f4
--- /dev/null
+++ b/keyboards/handwired/onekey/weact_g0b1cb/config.h
@@ -0,0 +1,28 @@
+// Copyright 2025 Stefan Kerkmann (@karlk90)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define ADC_PIN A0
+
+#define BACKLIGHT_PAL_MODE 1
+#define BACKLIGHT_PWM_CHANNEL 1
+#define BACKLIGHT_PWM_DRIVER PWMD3
+
+#define I2C1_SCL_PAL_MODE 6
+#define I2C1_SDA_PAL_MODE 6
+
+#define LCD_RST_PIN B12
+#define LCD_DC_PIN B11
+#define LCD_CS_PIN B10
+
+#define SPI_MOSI_PAL_MODE 0
+#define SPI_MISO_PAL_MODE 0
+#define SPI_SCK_PAL_MODE 0
+
+#define WS2812_PWM_CHANNEL 3
+#define WS2812_PWM_DMA_CHANNEL 2
+#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM2
+#define WS2812_PWM_DMAMUX_ID STM32_DMAMUX1_TIM3_UP
+#define WS2812_PWM_DRIVER PWMD3
+#define WS2812_PWM_PAL_MODE 1
diff --git a/keyboards/handwired/onekey/weact_g0b1cb/halconf.h b/keyboards/handwired/onekey/weact_g0b1cb/halconf.h
new file mode 100644
index 0000000000..2d6f87eba2
--- /dev/null
+++ b/keyboards/handwired/onekey/weact_g0b1cb/halconf.h
@@ -0,0 +1,11 @@
+// Copyright 2025 Stefan Kerkmann (@karlk90)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_ADC TRUE
+#define HAL_USE_I2C TRUE
+#define HAL_USE_PWM TRUE
+#define HAL_USE_SPI TRUE
+
+#include_next <halconf.h>
diff --git a/keyboards/handwired/onekey/weact_g0b1cb/keyboard.json b/keyboards/handwired/onekey/weact_g0b1cb/keyboard.json
new file mode 100644
index 0000000000..bb1ce7d5ca
--- /dev/null
+++ b/keyboards/handwired/onekey/weact_g0b1cb/keyboard.json
@@ -0,0 +1,20 @@
+{
+ "keyboard_name": "Onekey WeAct G0B1CB",
+ "processor": "STM32G0B1",
+ "bootloader": "stm32-dfu",
+ "matrix_pins": {
+ "cols": ["B4"],
+ "rows": ["B5"]
+ },
+ "backlight": {
+ "pin": "C6"
+ },
+ "ws2812": {
+ "driver": "pwm",
+ "pin": "B0"
+ },
+ "apa102": {
+ "data_pin": "B15",
+ "clock_pin": "B13"
+ }
+}
diff --git a/keyboards/handwired/onekey/weact_g0b1cb/mcuconf.h b/keyboards/handwired/onekey/weact_g0b1cb/mcuconf.h
new file mode 100644
index 0000000000..50f2bcf627
--- /dev/null
+++ b/keyboards/handwired/onekey/weact_g0b1cb/mcuconf.h
@@ -0,0 +1,18 @@
+// Copyright 2025 Stefan Kerkmann (@karlk90)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next <mcuconf.h>
+
+#undef STM32_ADC_USE_ADC1
+#define STM32_ADC_USE_ADC1 TRUE
+
+#undef STM32_PWM_USE_TIM3
+#define STM32_PWM_USE_TIM3 TRUE
+
+#undef STM32_I2C_USE_I2C1
+#define STM32_I2C_USE_I2C1 TRUE
+
+#undef STM32_SPI_USE_SPI2
+#define STM32_SPI_USE_SPI2 TRUE
diff --git a/keyboards/handwired/onekey/weact_g0b1cb/readme.md b/keyboards/handwired/onekey/weact_g0b1cb/readme.md
new file mode 100644
index 0000000000..4119ffa2ed
--- /dev/null
+++ b/keyboards/handwired/onekey/weact_g0b1cb/readme.md
@@ -0,0 +1,5 @@
+# WeAct Studio STM32G0B1CB onekey
+
+Supported Hardware: <https://github.com/WeActStudio/WeActStudio.STM32G0B1CoreBoard>
+
+To trigger keypress, short together pins *B4* and *B5*.
diff --git a/keyboards/handwired/riblee_split/keyboard.json b/keyboards/handwired/riblee_split/keyboard.json
index 6006f0e4c3..2bf78f96f1 100644
--- a/keyboards/handwired/riblee_split/keyboard.json
+++ b/keyboards/handwired/riblee_split/keyboard.json
@@ -29,7 +29,9 @@
"driver": "usart"
},
"transport": {
- "sync_matrix_state": true
+ "sync": {
+ "matrix_state": true
+ }
}
},
"community_layouts": ["ortho_5x12"],
diff --git a/keyboards/handwired/tractyl_manuform/4x6_right/rules.mk b/keyboards/handwired/tractyl_manuform/4x6_right/rules.mk
index 0f3d0657aa..fab9162dc6 100644
--- a/keyboards/handwired/tractyl_manuform/4x6_right/rules.mk
+++ b/keyboards/handwired/tractyl_manuform/4x6_right/rules.mk
@@ -1,2 +1 @@
POINTING_DEVICE_DRIVER = pmw3360
-MOUSE_SHARED_EP = yes
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/config.h b/keyboards/handwired/tractyl_manuform/5x6_right/config.h
index 194874b5cf..686cb30fc2 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/config.h
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/config.h
@@ -21,13 +21,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define ROTATIONAL_TRANSFORM_ANGLE -25
#define POINTING_DEVICE_INVERT_X
-#define DYNAMIC_KEYMAP_LAYER_COUNT 16
-#define LAYER_STATE_16BIT
-
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
-
#define POINTING_DEVICE_RIGHT
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f303/halconf.h b/keyboards/handwired/tractyl_manuform/5x6_right/f303/halconf.h
index 62f56e4d2b..b06f52b7df 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/f303/halconf.h
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/f303/halconf.h
@@ -21,7 +21,5 @@
#define HAL_USE_SPI TRUE
#define HAL_USE_GPT TRUE
#define HAL_USE_DAC TRUE
-#define SPI_USE_WAIT TRUE
-#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
#include_next <halconf.h>
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f405/board.h b/keyboards/handwired/tractyl_manuform/5x6_right/f405/board.h
new file mode 100644
index 0000000000..9be86942d6
--- /dev/null
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/f405/board.h
@@ -0,0 +1,23 @@
+/* Copyright 2020 Nick Brassel (tzarc)
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#include_next <board.h>
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 8000000U
+#undef STM32_LSECLK
+#define STM32_LSECLK 32768U
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f405/config.h b/keyboards/handwired/tractyl_manuform/5x6_right/f405/config.h
new file mode 100644
index 0000000000..3878d9c671
--- /dev/null
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/f405/config.h
@@ -0,0 +1,89 @@
+/*
+Copyright 2012 Jun Wako <[email protected]>
+Copyright 2015 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 <http://www.gnu.org/licenses/>.
+*/
+
+#pragma once
+
+#define USER_BUTTON_PIN C13
+#define DEBUG_LED_PIN B2
+#define USB_VBUS_PIN B10
+
+#ifdef USE_USB_OTG_HS_PORT
+# define USB_DRIVER USBD2
+#endif
+
+// WS2812 RGB LED strip input and number of LEDs
+#define WS2812_PWM_DRIVER PWMD3
+#define WS2812_PWM_CHANNEL 1
+#define WS2812_PWM_PAL_MODE 2
+#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM2
+#define WS2812_PWM_DMA_CHANNEL 5
+#define WS2812_EXTERNAL_PULLUP
+
+#define BACKLIGHT_PWM_DRIVER PWMD8
+#define BACKLIGHT_PWM_CHANNEL 2
+#define BACKLIGHT_PAL_MODE 3
+
+/* Audio config */
+#define AUDIO_PIN A4
+#define AUDIO_PIN_ALT A5
+#define AUDIO_PIN_ALT_AS_NEGATIVE
+
+/* serial.c configuration for split keyboard */
+#define SERIAL_USART_DRIVER SD1
+#define SERIAL_USART_TX_PIN A10
+#define SERIAL_USART_TX_PAL_MODE 7
+#define SERIAL_USART_RX_PIN A9
+#define SERIAL_USART_RX_PAL_MODE 7
+#define SERIAL_USART_TIMEOUT 10
+#define SERIAL_USART_SPEED (1 * 1024 * 1024)
+#define SERIAL_USART_FULL_DUPLEX
+
+
+/* i2c config for oleds */
+#define I2C_DRIVER I2CD1
+#define I2C1_CLOCK_SPEED 400000
+#define I2C1_DUTY_CYCLE FAST_DUTY_CYCLE_16_9
+
+/* spi config for eeprom and pmw3360 sensor */
+#define SPI_DRIVER SPID1
+#define SPI_SCK_PIN B3
+#define SPI_SCK_PAL_MODE 5
+#define SPI_MOSI_PIN B5
+#define SPI_MOSI_PAL_MODE 5
+#define SPI_MISO_PIN B4
+#define SPI_MISO_PAL_MODE 5
+
+#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN B13
+#define EXTERNAL_FLASH_SPI_CLOCK_DIVISOR 4
+#define EXTERNAL_FLASH_SIZE (8 * 1024 * 1024)
+
+/* pmw3360 config */
+#define POINTING_DEVICE_CS_PIN B8
+#define POINTING_DEVICE_ROTATION_270
+#undef ROTATIONAL_TRANSFORM_ANGLE
+#define PMW33XX_SPI_DIVISOR 16
+
+// lcd
+#define DISPLAY_RST_PIN NO_PIN
+#define DISPLAY_DC_PIN B12
+#define DISPLAY_CS_PIN B9
+#define DISPLAY_SPI_DIVIDER 1
+
+#define DRV2605L_FB_ERM_LRA 0
+#define DRV2605L_GREETING DRV2605L_EFFECT_750_MS_ALERT_100
+#define DRV2605L_DEFAULT_MODE DRV2605L_EFFECT_BUZZ_1_100
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f405/f405.c b/keyboards/handwired/tractyl_manuform/5x6_right/f405/f405.c
new file mode 100644
index 0000000000..5aabc70dca
--- /dev/null
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/f405/f405.c
@@ -0,0 +1,52 @@
+/* Copyright 2020 Christopher Courtney, aka Drashna Jael're (@drashna) <[email protected]>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
+#include "tractyl_manuform.h"
+
+#ifdef USB_VBUS_PIN
+bool usb_vbus_state(void) {
+ gpio_set_pin_input_low(USB_VBUS_PIN);
+ wait_us(5);
+ return gpio_read_pin(USB_VBUS_PIN);
+}
+#endif
+
+#ifdef USER_BUTTON_PIN
+void user_button_init(void) {
+ // Pin needs to be configured as input low
+ gpio_set_pin_input_low(USER_BUTTON_PIN);
+}
+
+bool check_user_button_state(void) {
+ return gpio_read_pin(USER_BUTTON_PIN);
+}
+#endif // USER_BUTTON_PIN
+
+void board_init(void) {
+ // Board setup sets these pins as SPI, but we aren't using them as such.
+ // So to prevent them from misbehaving, we need to set them to a different, non-spi mode.
+ // This is a bit of a hack, but nothing else runs soon enough, without re-implementing spi_init().
+ gpio_set_pin_input(A5);
+ gpio_set_pin_input(A6);
+ gpio_set_pin_input(A7);
+
+ // If using USB_OTG_HS, we need to set the data pins since they're set wrong for our needs by default.
+ // We set it here by default, in case it's bridged with A11/A12, as to reduce the chance of issues.
+ palSetLineMode(
+ B14, PAL_MODE_ALTERNATE(12) | PAL_STM32_OTYPE_PUSHPULL | PAL_STM32_OSPEED_HIGHEST | PAL_STM32_PUPDR_FLOATING);
+ palSetLineMode(
+ B15, PAL_MODE_ALTERNATE(12) | PAL_STM32_OTYPE_PUSHPULL | PAL_STM32_OSPEED_HIGHEST | PAL_STM32_PUPDR_FLOATING);
+}
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f405/halconf.h b/keyboards/handwired/tractyl_manuform/5x6_right/f405/halconf.h
new file mode 100644
index 0000000000..3cf07b9be0
--- /dev/null
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/f405/halconf.h
@@ -0,0 +1,30 @@
+/* Copyright 2020 Nick Brassel (tzarc)
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ */
+#pragma once
+
+#define HAL_USE_SERIAL TRUE
+#define SERIAL_BUFFERS_SIZE 256
+
+#if defined(WS2812_PWM) || defined(BACKLIGHT_PWM)
+# define HAL_USE_PWM TRUE
+#endif // defined(WS2812_PWM) || defined(BACKLIGHT_PWM)
+
+#ifdef AUDIO_DRIVER_DAC
+# define HAL_USE_GPT TRUE
+# define HAL_USE_DAC TRUE
+#endif
+
+#include_next <halconf.h>
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f405/keyboard.json b/keyboards/handwired/tractyl_manuform/5x6_right/f405/keyboard.json
new file mode 100644
index 0000000000..b56e2d31c2
--- /dev/null
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/f405/keyboard.json
@@ -0,0 +1,66 @@
+{
+ "keyboard_name": "Tractyl Manuform (5x6) WeAct STM32F405",
+ "audio": {
+ "driver": "dac_additive",
+ "power_control": {
+ "pin": "A3"
+ }
+ },
+ "backlight": {
+ "levels": 16,
+ "pin": "C7"
+ },
+ "bootloader": "stm32-dfu",
+ "build": {
+ "debounce_type": "asym_eager_defer_pk"
+ },
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "C0", "pin_b": "A15"}
+ ]
+ },
+ "eeprom": {
+ "driver": "wear_leveling",
+ "wear_leveling": {
+ "driver": "spi_flash",
+ "backing_size": 16384,
+ "logical_size": 4096
+ }
+ },
+ "features": {
+ "console": true,
+ "haptic": true
+ },
+ "haptic": {
+ "driver": "drv2605l"
+ },
+ "matrix_pins": {
+ "cols": ["C1", "C2", "C3", "A0", "A1", "A2"],
+ "rows": ["A6", "A7", "C4", "C5", "B0", "B1"]
+ },
+ "processor": "STM32F405",
+ "rgblight": {
+ "led_count": 24,
+ "split": true
+ },
+ "split": {
+ "handedness": {
+ "pin": "B11"
+ },
+ "serial": {
+ "driver": "usart"
+ },
+ "transport": {
+ "sync": {
+ "activity": true,
+ "haptic": true,
+ "matrix_state": true
+ }
+ }
+ },
+ "ws2812": {
+ "driver": "pwm",
+ "pin": "C6"
+ }
+}
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f405/mcuconf.h b/keyboards/handwired/tractyl_manuform/5x6_right/f405/mcuconf.h
new file mode 100644
index 0000000000..46920b17b3
--- /dev/null
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/f405/mcuconf.h
@@ -0,0 +1,82 @@
+/* Copyright 2020 Nick Brassel (tzarc)
+ *
+ * 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 <https://www.gnu.org/licenses/>.
+ */
+
+#pragma once
+
+#include_next <mcuconf.h>
+
+#undef STM32_LSE_ENABLED
+#define STM32_LSE_ENABLED TRUE
+
+#undef STM32_PLLM_VALUE
+#define STM32_PLLM_VALUE 8
+
+#undef STM32_RTCSEL
+#define STM32_RTCSEL STM32_RTCSEL_LSE
+
+#undef STM32_SERIAL_USE_USART1
+#define STM32_SERIAL_USE_USART1 TRUE
+
+#if HAL_USE_WDG == TRUE
+# undef STM32_WDG_USE_IWDG
+# define STM32_WDG_USE_IWDG TRUE
+#endif
+
+#if HAL_USE_I2C == TRUE
+# undef STM32_I2C_USE_I2C1
+# define STM32_I2C_USE_I2C1 TRUE
+
+# undef STM32_I2C_BUSY_TIMEOUT
+# define STM32_I2C_BUSY_TIMEOUT 10
+
+# undef STM32_I2C_I2C1_RX_DMA_STREAM
+# define STM32_I2C_I2C1_RX_DMA_STREAM STM32_DMA_STREAM_ID(1, 0)
+# undef STM32_I2C_I2C1_TX_DMA_STREAM
+# define STM32_I2C_I2C1_TX_DMA_STREAM STM32_DMA_STREAM_ID(1, 7)
+#endif // HAL_USE_I2C
+
+#ifdef WS2812_PWM
+# undef STM32_PWM_USE_TIM3
+# define STM32_PWM_USE_TIM3 TRUE
+#endif // WS2812_PWM
+
+#ifdef BACKLIGHT_PWM
+# undef STM32_PWM_USE_TIM8
+# define STM32_PWM_USE_TIM8 TRUE
+#endif
+
+#if HAL_USE_SPI == TRUE
+# undef STM32_SPI_USE_SPI1
+# define STM32_SPI_USE_SPI1 TRUE
+#endif
+
+#ifdef AUDIO_DRIVER_DAC
+# undef STM32_DAC_USE_DAC1_CH1
+# define STM32_DAC_USE_DAC1_CH1 TRUE
+# undef STM32_DAC_USE_DAC1_CH2
+# define STM32_DAC_USE_DAC1_CH2 TRUE
+
+# undef STM32_GPT_USE_TIM6
+# define STM32_GPT_USE_TIM6 TRUE
+#endif // AUDIO_DRIVER_DAC
+
+
+#ifdef USE_USB_OTG_HS_PORT
+# undef STM32_USB_USE_OTG1
+# define STM32_USB_USE_OTG1 FALSE
+# undef STM32_USB_USE_OTG2
+# define STM32_USB_USE_OTG2 TRUE
+#endif
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f411/config.h b/keyboards/handwired/tractyl_manuform/5x6_right/f411/config.h
index 28acc1e69b..bbbc16e3ea 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/f411/config.h
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/f411/config.h
@@ -19,6 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
// #define USB_VBUS_PIN B10 // doesn't seem to work for me on one of my controllers... */
+#define USER_BUTTON_PIN A0
// WS2812 RGB LED strip input and number of LEDs
#define WS2812_PWM_DRIVER PWMD2 // default: PWMD2
@@ -70,7 +71,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* eeprom config */
#define EXTERNAL_EEPROM_SPI_SLAVE_SELECT_PIN A4
-#define EXTERNAL_EEPROM_SPI_CLOCK_DIVISOR 64
+#define EXTERNAL_EEPROM_SPI_CLOCK_DIVISOR 8
/* pmw3360 config */
#define PMW33XX_CS_PIN B0
+#define PMW33XX_SPI_DIVISOR 8
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f411/f411.c b/keyboards/handwired/tractyl_manuform/5x6_right/f411/f411.c
index dbacb1685c..cfe97d6318 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/f411/f411.c
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/f411/f411.c
@@ -16,41 +16,6 @@
#include "tractyl_manuform.h"
-void keyboard_pre_init_sub(void) { gpio_set_pin_input_high(A0); }
-
-void matrix_scan_sub_kb(void) {
- if (!gpio_read_pin(A0)) {
- reset_keyboard();
- }
-}
-
-__attribute__((weak)) void bootmagic_scan(void) {
- // 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();
-
- uint8_t row = BOOTMAGIC_ROW;
- uint8_t col = BOOTMAGIC_COLUMN;
-
-#if defined(SPLIT_KEYBOARD) && defined(BOOTMAGIC_ROW_RIGHT) && defined(BOOTMAGIC_COLUMN_RIGHT)
- if (!is_keyboard_left()) {
- row = BOOTMAGIC_ROW_RIGHT;
- col = BOOTMAGIC_COLUMN_RIGHT;
- }
-#endif
-
- if (matrix_get_row(row) & (1 << col) || !gpio_read_pin(A0)) {
- eeconfig_disable();
- bootloader_jump();
- }
-}
-
-
#ifdef USB_VBUS_PIN
bool usb_vbus_state(void) {
gpio_set_pin_input_low(USB_VBUS_PIN);
@@ -58,9 +23,3 @@ bool usb_vbus_state(void) {
return gpio_read_pin(USB_VBUS_PIN);
}
#endif
-
-void matrix_output_unselect_delay(uint8_t line, bool key_pressed) {
- for (int32_t i = 0; i < 40; i++) {
- __asm__ volatile("nop" ::: "memory");
- }
-}
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f411/halconf.h b/keyboards/handwired/tractyl_manuform/5x6_right/f411/halconf.h
index bc07c10527..296119b080 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/f411/halconf.h
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/f411/halconf.h
@@ -19,7 +19,5 @@
#define HAL_USE_SERIAL TRUE
#define HAL_USE_I2C TRUE
#define HAL_USE_SPI TRUE
-#define SPI_USE_WAIT TRUE
-#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
#include_next <halconf.h>
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f411/rules.mk b/keyboards/handwired/tractyl_manuform/5x6_right/f411/rules.mk
deleted file mode 100644
index 4aa582e7a2..0000000000
--- a/keyboards/handwired/tractyl_manuform/5x6_right/f411/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-KEYBOARD_SHARED_EP = yes
-MOUSE_SHARED_EP = yes
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/info.json b/keyboards/handwired/tractyl_manuform/5x6_right/info.json
index fe3f2432ca..0264000b20 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/info.json
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/info.json
@@ -98,6 +98,209 @@
{"matrix": [11, 2], "x": 9, "y": 7},
{"matrix": [11, 3], "x": 10, "y": 7}
]
+ },
+ "LAYOUT_5x6_full_right": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+
+ {"matrix": [6, 0], "x": 11, "y": 0},
+ {"matrix": [6, 1], "x": 12, "y": 0},
+ {"matrix": [6, 2], "x": 13, "y": 0},
+ {"matrix": [6, 3], "x": 14, "y": 0},
+ {"matrix": [6, 4], "x": 15, "y": 0},
+ {"matrix": [6, 5], "x": 16, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+
+ {"matrix": [7, 0], "x": 11, "y": 1},
+ {"matrix": [7, 1], "x": 12, "y": 1},
+ {"matrix": [7, 2], "x": 13, "y": 1},
+ {"matrix": [7, 3], "x": 14, "y": 1},
+ {"matrix": [7, 4], "x": 15, "y": 1},
+ {"matrix": [7, 5], "x": 16, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+
+ {"matrix": [8, 0], "x": 11, "y": 2},
+ {"matrix": [8, 1], "x": 12, "y": 2},
+ {"matrix": [8, 2], "x": 13, "y": 2},
+ {"matrix": [8, 3], "x": 14, "y": 2},
+ {"matrix": [8, 4], "x": 15, "y": 2},
+ {"matrix": [8, 5], "x": 16, "y": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+
+ {"matrix": [9, 0], "x": 11, "y": 3},
+ {"matrix": [9, 1], "x": 12, "y": 3},
+ {"matrix": [9, 2], "x": 13, "y": 3},
+ {"matrix": [9, 3], "x": 14, "y": 3},
+ {"matrix": [9, 4], "x": 15, "y": 3},
+ {"matrix": [9, 5], "x": 16, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4},
+
+ {"matrix": [10, 2], "x": 13, "y": 4},
+ {"matrix": [10, 3], "x": 14, "y": 4},
+ {"matrix": [10, 4], "x": 15, "y": 4},
+ {"matrix": [10, 5], "x": 16, "y": 4},
+
+ {"matrix": [4, 4], "x": 4, "y": 5},
+ {"matrix": [4, 5], "x": 5, "y": 5},
+
+ {"matrix": [10, 1], "x": 12, "y": 5},
+
+ {"matrix": [5, 4], "x": 6, "y": 6},
+ {"matrix": [5, 5], "x": 7, "y": 6},
+
+ {"matrix": [11, 1], "x": 10, "y": 6},
+
+ {"matrix": [5, 2], "x": 6, "y": 7},
+ {"matrix": [5, 3], "x": 7, "y": 7},
+
+ {"matrix": [11, 2], "x": 9, "y": 7},
+ {"matrix": [11, 3], "x": 10, "y": 7}
+ ]
}
+ },
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "gradient_up_down": true,
+ "gradient_left_right": true,
+ "breathing": true,
+ "band_sat": true,
+ "band_val": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_up_down": true,
+ "rainbow_moving_chevron": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "dual_beacon": true,
+ "rainbow_beacon": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "jellybean_raindrops": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "pixel_rain": true,
+ "pixel_flow": true,
+ "pixel_fractal": true,
+ "typing_heatmap": true,
+ "digital_rain": true,
+ "solid_reactive_simple": true,
+ "solid_reactive": true,
+ "solid_reactive_wide": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_multinexus": true,
+ "splash": true,
+ "multisplash": true,
+ "solid_splash": true,
+ "solid_multisplash": true
+ },
+ "driver": "ws2812",
+ "led_count": 64,
+ "max_brightness": 100,
+ "split_count": [33, 31],
+ "sleep": true,
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1},
+ {"matrix": [1, 0], "x": 0, "y": 10, "flags": 1},
+ {"matrix": [2, 0], "x": 0, "y": 20, "flags": 1},
+ {"matrix": [3, 0], "x": 0, "y": 30, "flags": 1},
+ {"matrix": [3, 1], "x": 12, "y": 30, "flags": 4},
+ {"matrix": [2, 1], "x": 12, "y": 20, "flags": 4},
+ {"matrix": [1, 1], "x": 12, "y": 10, "flags": 4},
+ {"matrix": [0, 1], "x": 12, "y": 0, "flags": 4},
+ {"matrix": [0, 2], "x": 24, "y": 0, "flags": 4},
+ {"matrix": [1, 2], "x": 24, "y": 10, "flags": 4},
+ {"matrix": [2, 2], "x": 24, "y": 20, "flags": 4},
+ {"matrix": [3, 2], "x": 24, "y": 30, "flags": 4},
+ {"matrix": [4, 2], "x": 24, "y": 40, "flags": 1},
+ {"matrix": [4, 3], "x": 36, "y": 40, "flags": 1},
+ {"matrix": [3, 3], "x": 36, "y": 30, "flags": 4},
+ {"matrix": [2, 3], "x": 36, "y": 20, "flags": 4},
+ {"matrix": [1, 3], "x": 36, "y": 10, "flags": 4},
+ {"matrix": [0, 3], "x": 36, "y": 0, "flags": 4},
+ {"matrix": [0, 4], "x": 48, "y": 0, "flags": 4},
+ {"matrix": [1, 4], "x": 48, "y": 10, "flags": 4},
+ {"matrix": [2, 4], "x": 48, "y": 40, "flags": 4},
+ {"matrix": [3, 4], "x": 48, "y": 30, "flags": 4},
+ {"matrix": [3, 5], "x": 60, "y": 30, "flags": 4},
+ {"matrix": [2, 5], "x": 60, "y": 20, "flags": 4},
+ {"matrix": [1, 5], "x": 60, "y": 10, "flags": 4},
+ {"matrix": [0, 5], "x": 60, "y": 0, "flags": 4},
+ {"matrix": [4, 4], "x": 48, "y": 50, "flags": 1},
+ {"matrix": [5, 4], "x": 65, "y": 56, "flags": 1},
+ {"matrix": [5, 5], "x": 70, "y": 60, "flags": 1},
+ {"matrix": [5, 3], "x": 65, "y": 64, "flags": 1},
+ {"matrix": [5, 2], "x": 60, "y": 60, "flags": 1},
+ {"matrix": [4, 1], "x": 0, "y": 40, "flags": 1},
+ {"matrix": [4, 0], "x": 12, "y": 40, "flags": 1},
+ {"matrix": [6, 5], "x": 224, "y": 0, "flags": 1},
+ {"matrix": [7, 5], "x": 224, "y": 10, "flags": 1},
+ {"matrix": [8, 5], "x": 224, "y": 20, "flags": 1},
+ {"matrix": [9, 5], "x": 224, "y": 30, "flags": 1},
+ {"matrix": [9, 4], "x": 212, "y": 30, "flags": 4},
+ {"matrix": [8, 4], "x": 212, "y": 20, "flags": 4},
+ {"matrix": [7, 4], "x": 212, "y": 10, "flags": 4},
+ {"matrix": [6, 4], "x": 212, "y": 0, "flags": 4},
+ {"matrix": [6, 3], "x": 200, "y": 0, "flags": 4},
+ {"matrix": [7, 3], "x": 200, "y": 10, "flags": 4},
+ {"matrix": [8, 3], "x": 200, "y": 20, "flags": 4},
+ {"matrix": [9, 3], "x": 200, "y": 30, "flags": 4},
+ {"matrix": [10, 3], "x": 200, "y": 40, "flags": 1},
+ {"matrix": [10, 2], "x": 188, "y": 40, "flags": 1},
+ {"matrix": [9, 2], "x": 188, "y": 30, "flags": 4},
+ {"matrix": [8, 2], "x": 188, "y": 20, "flags": 4},
+ {"matrix": [7, 2], "x": 188, "y": 10, "flags": 4},
+ {"matrix": [6, 2], "x": 188, "y": 0, "flags": 4},
+ {"matrix": [6, 1], "x": 176, "y": 0, "flags": 4},
+ {"matrix": [7, 1], "x": 176, "y": 10, "flags": 4},
+ {"matrix": [8, 1], "x": 176, "y": 20, "flags": 4},
+ {"matrix": [9, 1], "x": 176, "y": 30, "flags": 4},
+ {"matrix": [9, 0], "x": 164, "y": 30, "flags": 4},
+ {"matrix": [8, 0], "x": 164, "y": 20, "flags": 4},
+ {"matrix": [7, 0], "x": 164, "y": 10, "flags": 4},
+ {"matrix": [6, 0], "x": 164, "y": 0, "flags": 4},
+ {"matrix": [11, 1], "x": 164, "y": 60, "flags": 1},
+ {"matrix": [11, 3], "x": 152, "y": 70, "flags": 1},
+ {"matrix": [11, 2], "x": 140, "y": 70, "flags": 1},
+ {"matrix": [10, 4], "x": 224, "y": 40, "flags": 1},
+ {"matrix": [10, 5], "x": 208, "y": 40, "flags": 1}
+ ]
}
}
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/post_rules.mk b/keyboards/handwired/tractyl_manuform/5x6_right/post_rules.mk
new file mode 100644
index 0000000000..fab9162dc6
--- /dev/null
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/post_rules.mk
@@ -0,0 +1 @@
+POINTING_DEVICE_DRIVER = pmw3360
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/rules.mk b/keyboards/handwired/tractyl_manuform/5x6_right/rules.mk
deleted file mode 100644
index b7f7c949ec..0000000000
--- a/keyboards/handwired/tractyl_manuform/5x6_right/rules.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-POINTING_DEVICE_DRIVER = pmw3360
-MOUSE_SHARED_EP = yes
-
-DEFAULT_FOLDER = handwired/tractyl_manuform/5x6_right/teensy2pp
diff --git a/keyboards/handwired/tractyl_manuform/config.h b/keyboards/handwired/tractyl_manuform/config.h
index 9f4dd8651b..5a8091a098 100644
--- a/keyboards/handwired/tractyl_manuform/config.h
+++ b/keyboards/handwired/tractyl_manuform/config.h
@@ -18,18 +18,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#pragma once
-
-/* 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 SPLIT_POINTING_ENABLE
#define POINTING_DEVICE_TASK_THROTTLE_MS 1
diff --git a/keyboards/handwired/tractyl_manuform/info.json b/keyboards/handwired/tractyl_manuform/info.json
index c84d008e15..fb50c8d359 100644
--- a/keyboards/handwired/tractyl_manuform/info.json
+++ b/keyboards/handwired/tractyl_manuform/info.json
@@ -2,6 +2,10 @@
"manufacturer": "QMK Community",
"maintainer": "Drashna Jael're",
"usb": {
- "vid": "0x44DD"
+ "vid": "0x44DD",
+ "shared_endpoint": {
+ "keyboard": true,
+ "mouse": true
+ }
}
}
diff --git a/keyboards/handwired/tractyl_manuform/post_config.h b/keyboards/handwired/tractyl_manuform/post_config.h
deleted file mode 100644
index b5d67132b2..0000000000
--- a/keyboards/handwired/tractyl_manuform/post_config.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
-Copyright 2012 Jun Wako <[email protected]>
-Copyright 2015 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 <http://www.gnu.org/licenses/>.
-*/
-
-#pragma once
-
-// mouse config
-#ifdef MOUSEKEY_ENABLE
-# ifndef MOUSEKEY_MOVE_DELTA
-# ifndef MK_KINETIC_SPEED
-# define MOUSEKEY_MOVE_DELTA 5
-# else
-# define MOUSEKEY_MOVE_DELTA 25
-# endif
-# endif
-# ifndef MOUSEKEY_DELAY
-# ifndef MK_KINETIC_SPEED
-# define MOUSEKEY_DELAY 300
-# else
-# define MOUSEKEY_DELAY 8
-# endif
-# endif
-# ifndef MOUSEKEY_INTERVAL
-# ifndef MK_KINETIC_SPEED
-# define MOUSEKEY_INTERVAL 50
-# else
-# define MOUSEKEY_INTERVAL 20
-# endif
-# endif
-# ifndef MOUSEKEY_MAX_SPEED
-# define MOUSEKEY_MAX_SPEED 7
-# endif
-# ifndef MOUSEKEY_TIME_TO_MAX
-# define MOUSEKEY_TIME_TO_MAX 60
-# endif
-# ifndef MOUSEKEY_INITIAL_SPEED
-# define MOUSEKEY_INITIAL_SPEED 100
-# endif
-# ifndef MOUSEKEY_BASE_SPEED
-# define MOUSEKEY_BASE_SPEED 1000
-# endif
-# ifndef MOUSEKEY_DECELERATED_SPEED
-# define MOUSEKEY_DECELERATED_SPEED 400
-# endif
-# ifndef MOUSEKEY_ACCELERATED_SPEED
-# define MOUSEKEY_ACCELERATED_SPEED 3000
-# endif
-
-// mouse scroll config
-# ifndef MOUSEKEY_WHEEL_DELAY
-# define MOUSEKEY_WHEEL_DELAY 15
-# endif
-# ifndef MOUSEKEY_WHEEL_DELTA
-# define MOUSEKEY_WHEEL_DELTA 1
-# endif
-# ifndef MOUSEKEY_WHEEL_INTERVAL
-# define MOUSEKEY_WHEEL_INTERVAL 50
-# endif
-# ifndef MOUSEKEY_WHEEL_MAX_SPEED
-# define MOUSEKEY_WHEEL_MAX_SPEED 8
-# endif
-# ifndef MOUSEKEY_WHEEL_TIME_TO_MAX
-# define MOUSEKEY_WHEEL_TIME_TO_MAX 80
-# endif
-
-# ifndef MOUSEKEY_WHEEL_INITIAL_MOVEMENTS
-# define MOUSEKEY_WHEEL_INITIAL_MOVEMENTS 8
-# endif
-# ifndef MOUSEKEY_WHEEL_BASE_MOVEMENTS
-# define MOUSEKEY_WHEEL_BASE_MOVEMENTS 48
-# endif
-# ifndef MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS
-# define MOUSEKEY_WHEEL_ACCELERATED_MOVEMENTS 48
-# endif
-# ifndef MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS
-# define MOUSEKEY_WHEEL_DECELERATED_MOVEMENTS 8
-# endif
-#endif
-
-#ifndef DEBOUNCE
-# define DEBOUNCE 5
-#endif
-
-#if defined(RGBLIGHT_ENABLE) && !defined(RGBLIGHT_LIMIT_VAL)
-# if defined(OLED_ENABLE)
-# define RGBLIGHT_LIMIT_VAL 100
-# else
-# define RGBLIGHT_LIMIT_VAL 150
-# endif
-#endif
-
-#if !defined(OLED_BRIGHTNESS)
-# if defined(RGBLIGHT_ENABLE) || defined(RGB_MATRIX_ENABLE)
-# define OLED_BRIGHTNESS 80
-# else
-# define OLED_BRIGHTNESS 150
-# endif
-#endif
diff --git a/keyboards/handwired/tractyl_manuform/tractyl_manuform.c b/keyboards/handwired/tractyl_manuform/tractyl_manuform.c
index 7ded835a6e..3ae74be47f 100644
--- a/keyboards/handwired/tractyl_manuform/tractyl_manuform.c
+++ b/keyboards/handwired/tractyl_manuform/tractyl_manuform.c
@@ -15,48 +15,47 @@
*/
#include "tractyl_manuform.h"
+#ifdef POINTING_DEVICE_ENABLE
+# include "pointing_device.h"
+#endif
#include "transactions.h"
#include <string.h>
#ifdef CONSOLE_ENABLE
# include "print.h"
-#endif // CONSOLE_ENABLE
+#endif // CONSOLE_ENABLE
#ifdef POINTING_DEVICE_ENABLE
# ifndef CHARYBDIS_MINIMUM_DEFAULT_DPI
# define CHARYBDIS_MINIMUM_DEFAULT_DPI 400
-# endif // CHARYBDIS_MINIMUM_DEFAULT_DPI
+# endif // CHARYBDIS_MINIMUM_DEFAULT_DPI
# ifndef CHARYBDIS_DEFAULT_DPI_CONFIG_STEP
# define CHARYBDIS_DEFAULT_DPI_CONFIG_STEP 200
-# endif // CHARYBDIS_DEFAULT_DPI_CONFIG_STEP
+# endif // CHARYBDIS_DEFAULT_DPI_CONFIG_STEP
# ifndef CHARYBDIS_MINIMUM_SNIPING_DPI
# define CHARYBDIS_MINIMUM_SNIPING_DPI 200
-# endif // CHARYBDIS_MINIMUM_SNIPER_MODE_DPI
+# endif // CHARYBDIS_MINIMUM_SNIPER_MODE_DPI
# ifndef CHARYBDIS_SNIPING_DPI_CONFIG_STEP
# define CHARYBDIS_SNIPING_DPI_CONFIG_STEP 100
-# endif // CHARYBDIS_SNIPING_DPI_CONFIG_STEP
+# endif // CHARYBDIS_SNIPING_DPI_CONFIG_STEP
// Fixed DPI for drag-scroll.
# ifndef CHARYBDIS_DRAGSCROLL_DPI
# define CHARYBDIS_DRAGSCROLL_DPI 100
-# endif // CHARYBDIS_DRAGSCROLL_DPI
+# endif // CHARYBDIS_DRAGSCROLL_DPI
# ifndef CHARYBDIS_DRAGSCROLL_BUFFER_SIZE
# define CHARYBDIS_DRAGSCROLL_BUFFER_SIZE 6
-# endif // !CHARYBDIS_DRAGSCROLL_BUFFER_SIZE
-
-# ifndef CHARYBDIS_POINTER_ACCELERATION_FACTOR
-# define CHARYBDIS_POINTER_ACCELERATION_FACTOR 24
-# endif // !CHARYBDIS_POINTER_ACCELERATION_FACTOR
+# endif // !CHARYBDIS_DRAGSCROLL_BUFFER_SIZE
typedef union {
uint8_t raw;
struct {
- uint8_t pointer_default_dpi : 4; // 16 steps available.
- uint8_t pointer_sniping_dpi : 2; // 4 steps available.
+ uint8_t pointer_default_dpi : 4; // 16 steps available.
+ uint8_t pointer_sniping_dpi : 2; // 4 steps available.
bool is_dragscroll_enabled : 1;
bool is_sniping_enabled : 1;
} __attribute__((packed));
@@ -86,13 +85,19 @@ static void read_charybdis_config_from_eeprom(charybdis_config_t* config) {
* resets these 2 values to `false` since it does not make sense to persist
* these across reboots of the board.
*/
-static void write_charybdis_config_to_eeprom(charybdis_config_t* config) { eeconfig_update_kb(config->raw); }
+static void write_charybdis_config_to_eeprom(charybdis_config_t* config) {
+ eeconfig_update_kb(config->raw);
+}
/** \brief Return the current value of the pointer's default DPI. */
-static uint16_t get_pointer_default_dpi(charybdis_config_t* config) { return (uint16_t)config->pointer_default_dpi * CHARYBDIS_DEFAULT_DPI_CONFIG_STEP + CHARYBDIS_MINIMUM_DEFAULT_DPI; }
+static uint16_t get_pointer_default_dpi(charybdis_config_t* config) {
+ return (uint16_t)config->pointer_default_dpi * CHARYBDIS_DEFAULT_DPI_CONFIG_STEP + CHARYBDIS_MINIMUM_DEFAULT_DPI;
+}
/** \brief Return the current value of the pointer's sniper-mode DPI. */
-static uint16_t get_pointer_sniping_dpi(charybdis_config_t* config) { return (uint16_t)config->pointer_sniping_dpi * CHARYBDIS_SNIPING_DPI_CONFIG_STEP + CHARYBDIS_MINIMUM_SNIPING_DPI; }
+static uint16_t get_pointer_sniping_dpi(charybdis_config_t* config) {
+ return (uint16_t)config->pointer_sniping_dpi * CHARYBDIS_SNIPING_DPI_CONFIG_STEP + CHARYBDIS_MINIMUM_SNIPING_DPI;
+}
/** \brief Set the appropriate DPI for the input config. */
static void maybe_update_pointing_device_cpi(charybdis_config_t* config) {
@@ -127,64 +132,54 @@ static void step_pointer_sniping_dpi(charybdis_config_t* config, bool forward) {
maybe_update_pointing_device_cpi(config);
}
-uint16_t charybdis_get_pointer_default_dpi(void) { return get_pointer_default_dpi(&g_charybdis_config); }
+uint16_t charybdis_get_pointer_default_dpi(void) {
+ return get_pointer_default_dpi(&g_charybdis_config);
+}
-uint16_t charybdis_get_pointer_sniping_dpi(void) { return get_pointer_sniping_dpi(&g_charybdis_config); }
+uint16_t charybdis_get_pointer_sniping_dpi(void) {
+ return get_pointer_sniping_dpi(&g_charybdis_config);
+}
-void charybdis_cycle_pointer_default_dpi_noeeprom(bool forward) { step_pointer_default_dpi(&g_charybdis_config, forward); }
+void charybdis_cycle_pointer_default_dpi_noeeprom(bool forward) {
+ step_pointer_default_dpi(&g_charybdis_config, forward);
+}
void charybdis_cycle_pointer_default_dpi(bool forward) {
step_pointer_default_dpi(&g_charybdis_config, forward);
write_charybdis_config_to_eeprom(&g_charybdis_config);
}
-void charybdis_cycle_pointer_sniping_dpi_noeeprom(bool forward) { step_pointer_sniping_dpi(&g_charybdis_config, forward); }
+void charybdis_cycle_pointer_sniping_dpi_noeeprom(bool forward) {
+ step_pointer_sniping_dpi(&g_charybdis_config, forward);
+}
void charybdis_cycle_pointer_sniping_dpi(bool forward) {
step_pointer_sniping_dpi(&g_charybdis_config, forward);
write_charybdis_config_to_eeprom(&g_charybdis_config);
}
-bool charybdis_get_pointer_sniping_enabled(void) { return g_charybdis_config.is_sniping_enabled; }
+bool charybdis_get_pointer_sniping_enabled(void) {
+ return g_charybdis_config.is_sniping_enabled;
+}
void charybdis_set_pointer_sniping_enabled(bool enable) {
g_charybdis_config.is_sniping_enabled = enable;
maybe_update_pointing_device_cpi(&g_charybdis_config);
}
-bool charybdis_get_pointer_dragscroll_enabled(void) { return g_charybdis_config.is_dragscroll_enabled; }
+bool charybdis_get_pointer_dragscroll_enabled(void) {
+ return g_charybdis_config.is_dragscroll_enabled;
+}
void charybdis_set_pointer_dragscroll_enabled(bool enable) {
g_charybdis_config.is_dragscroll_enabled = enable;
maybe_update_pointing_device_cpi(&g_charybdis_config);
}
-# ifndef CONSTRAIN_HID
-# define CONSTRAIN_HID(value) ((value) < XY_REPORT_MIN ? XY_REPORT_MIN : ((value) > XY_REPORT_MAX ? XY_REPORT_MAX : (value)))
-# endif // !CONSTRAIN_HID
-
-/**
- * \brief Add optional acceleration effect.
- *
- * If `CHARYBDIS_ENABLE_POINTER_ACCELERATION` is defined, add a simple and naive
- * acceleration effect to the provided value. Return the value unchanged
- * otherwise.
- */
-# ifndef DISPLACEMENT_WITH_ACCELERATION
-# ifdef CHARYBDIS_POINTER_ACCELERATION_ENABLE
-# define DISPLACEMENT_WITH_ACCELERATION(d) (CONSTRAIN_HID(d > 0 ? d * d / CHARYBDIS_POINTER_ACCELERATION_FACTOR + d : -d * d / CHARYBDIS_POINTER_ACCELERATION_FACTOR + d))
-# else // !CHARYBDIS_POINTER_ACCELERATION_ENABLE
-# define DISPLACEMENT_WITH_ACCELERATION(d) (d)
-# endif // CHARYBDIS_POINTER_ACCELERATION_ENABLE
-# endif // !DISPLACEMENT_WITH_ACCELERATION
-
/**
* \brief Augment the pointing device behavior.
*
- * Implement the Charybdis-specific features for pointing devices:
- * - Drag-scroll
- * - Sniping
- * - Acceleration
+ * Implement drag-scroll.
*/
static void pointing_device_task_charybdis(report_mouse_t* mouse_report) {
static int16_t scroll_buffer_x = 0;
@@ -194,12 +189,12 @@ static void pointing_device_task_charybdis(report_mouse_t* mouse_report) {
scroll_buffer_x -= mouse_report->x;
# else
scroll_buffer_x += mouse_report->x;
-# endif // CHARYBDIS_DRAGSCROLL_REVERSE_X
+# endif // CHARYBDIS_DRAGSCROLL_REVERSE_X
# ifdef CHARYBDIS_DRAGSCROLL_REVERSE_Y
scroll_buffer_y -= mouse_report->y;
# else
scroll_buffer_y += mouse_report->y;
-# endif // CHARYBDIS_DRAGSCROLL_REVERSE_Y
+# endif // CHARYBDIS_DRAGSCROLL_REVERSE_Y
mouse_report->x = 0;
mouse_report->y = 0;
if (abs(scroll_buffer_x) > CHARYBDIS_DRAGSCROLL_BUFFER_SIZE) {
@@ -210,16 +205,14 @@ static void pointing_device_task_charybdis(report_mouse_t* mouse_report) {
mouse_report->v = scroll_buffer_y > 0 ? 1 : -1;
scroll_buffer_y = 0;
}
- } else if (!g_charybdis_config.is_sniping_enabled) {
- mouse_report->x = DISPLACEMENT_WITH_ACCELERATION(mouse_report->x);
- mouse_report->y = DISPLACEMENT_WITH_ACCELERATION(mouse_report->y);
}
}
report_mouse_t pointing_device_task_kb(report_mouse_t mouse_report) {
- pointing_device_task_charybdis(&mouse_report);
- mouse_report = pointing_device_task_user(mouse_report);
-
+ if (is_keyboard_master()) {
+ pointing_device_task_charybdis(&mouse_report);
+ mouse_report = pointing_device_task_user(mouse_report);
+ }
return mouse_report;
}
@@ -230,9 +223,9 @@ static bool has_shift_mod(void) {
return mod_config(get_mods()) & MOD_MASK_SHIFT;
# else
return mod_config(get_mods() | get_oneshot_mods()) & MOD_MASK_SHIFT;
-# endif // NO_ACTION_ONESHOT
+# endif // NO_ACTION_ONESHOT
}
-# endif // POINTING_DEVICE_ENABLE && !NO_CHARYBDIS_KEYCODES
+# endif // POINTING_DEVICE_ENABLE && !NO_CHARYBDIS_KEYCODES
/**
* \brief Outputs the Charybdis configuration to console.
@@ -247,16 +240,16 @@ static bool has_shift_mod(void) {
*/
__attribute__((unused)) static void debug_charybdis_config_to_console(charybdis_config_t* config) {
# ifdef CONSOLE_ENABLE
- IGNORE_FORMAT_WARNING(dprintf("(charybdis) process_record_kb: config = {\n"
- "\traw = 0x%04X,\n"
- "\t{\n"
- "\t\tis_dragscroll_enabled=%b\n"
- "\t\tis_sniping_enabled=%b\n"
- "\t\tdefault_dpi=0x%02X (%ld)\n"
- "\t\tsniping_dpi=0x%01X (%ld)\n"
- "\t}\n"
- "}\n",
- config->raw, config->is_dragscroll_enabled, config->is_sniping_enabled, config->pointer_default_dpi, get_pointer_default_dpi(config), config->pointer_sniping_dpi, get_pointer_sniping_dpi(config)));
+ dprintf("(charybdis) process_record_kb: config = {\n"
+ "\traw = 0x%X,\n"
+ "\t{\n"
+ "\t\tis_dragscroll_enabled=%u\n"
+ "\t\tis_sniping_enabled=%u\n"
+ "\t\tdefault_dpi=0x%X (%u)\n"
+ "\t\tsniping_dpi=0x%X (%u)\n"
+ "\t}\n"
+ "}\n",
+ config->raw, config->is_dragscroll_enabled, config->is_sniping_enabled, config->pointer_default_dpi, get_pointer_default_dpi(config), config->pointer_sniping_dpi, get_pointer_sniping_dpi(config));
# endif // CONSOLE_ENABLE
}
@@ -307,7 +300,7 @@ bool process_record_kb(uint16_t keycode, keyrecord_t* record) {
}
break;
}
-# endif // !NO_CHARYBDIS_KEYCODES
+# endif // !NO_CHARYBDIS_KEYCODES
return true;
}
@@ -318,22 +311,70 @@ void eeconfig_init_kb(void) {
eeconfig_init_user();
}
-void matrix_power_up(void) { pointing_device_task(); }
+void matrix_power_up(void) {
+ pointing_device_task();
+}
void charybdis_config_sync_handler(uint8_t initiator2target_buffer_size, const void* initiator2target_buffer, uint8_t target2initiator_buffer_size, void* target2initiator_buffer) {
if (initiator2target_buffer_size == sizeof(g_charybdis_config)) {
memcpy(&g_charybdis_config, initiator2target_buffer, sizeof(g_charybdis_config));
}
}
+#endif // POINTING_DEVICE_ENABLE
+
+__attribute__((weak)) void user_button_init(void) {
+#ifdef USER_BUTTON_PIN
+ gpio_set_pin_input_high(USER_BUTTON_PIN);
+#endif // USER_BUTTON_PIN
+}
+
+__attribute__((weak)) bool check_user_button_state(void) {
+#ifdef USER_BUTTON_PIN
+ return !gpio_read_pin(USER_BUTTON_PIN);
+#endif // USER_BUTTON_PIN
+ return false;
+}
void keyboard_post_init_kb(void) {
+#ifdef DEBUG_LED_PIN
+ gpio_set_pin_output(DEBUG_LED_PIN);
+ gpio_write_pin_low(DEBUG_LED_PIN);
+#endif // DEBUG_LED_PIN
+
+#ifdef POINTING_DEVICE_ENABLE
maybe_update_pointing_device_cpi(&g_charybdis_config);
transaction_register_rpc(RPC_ID_KB_CONFIG_SYNC, charybdis_config_sync_handler);
-
+#endif // POINTING_DEVICE_ENABLE
keyboard_post_init_user();
}
+void keyboard_pre_init_kb(void) {
+ user_button_init();
+#ifdef POINTING_DEVICE_ENABLE
+ read_charybdis_config_from_eeprom(&g_charybdis_config);
+#endif // POINTING_DEVICE_ENAcBLE
+ keyboard_pre_init_user();
+}
+
+__attribute__((weak)) void execute_user_button_action(bool state) {
+ if (state) {
+ if (is_keyboard_master()) {
+ reset_keyboard();
+ } else {
+ soft_reset_keyboard();
+ }
+ }
+}
+
void housekeeping_task_kb(void) {
+ static bool last_state = false;
+ bool state = check_user_button_state();
+ if (state != last_state) {
+ last_state = state;
+ execute_user_button_action(state);
+ }
+
+#ifdef POINTING_DEVICE_ENABLE
if (is_keyboard_master()) {
// Keep track of the last state, so that we can tell if we need to propagate to slave
static charybdis_config_t last_charybdis_config = {0};
@@ -357,22 +398,50 @@ void housekeeping_task_kb(void) {
}
}
}
- // no need for user function, is called already
+#endif // POINTING_DEVICE_ENABLE
+ // no need for user function, is called already
}
-#endif // POINTING_DEVICE_ENABLE
+#ifdef USER_BUTTON_PIN
+/**
+ * @brief Replace and add upon the default bootmagic reset function.
+ * In this case, we also check the user button.
+ *
+ * @return true if the user button is pressed, or normal bootmagic key position.
+ * @return false if the user button is not pressed and normal bootmagic key position is not pressed.
+ */
+__attribute__((weak)) bool bootmagic_should_reset(void) {
+ uint8_t row = BOOTMAGIC_ROW;
+ uint8_t col = BOOTMAGIC_COLUMN;
+
+# if defined(SPLIT_KEYBOARD) && defined(BOOTMAGIC_ROW_RIGHT) && defined(BOOTMAGIC_COLUMN_RIGHT)
+ if (!is_keyboard_left()) {
+ row = BOOTMAGIC_ROW_RIGHT;
+ col = BOOTMAGIC_COLUMN_RIGHT;
+ }
+# endif
-__attribute__((weak)) void matrix_init_sub_kb(void) {}
-void matrix_init_kb(void) {
-#ifdef POINTING_DEVICE_ENABLE
- read_charybdis_config_from_eeprom(&g_charybdis_config);
-#endif // POINTING_DEVICE_ENABLE
- matrix_init_sub_kb();
- matrix_init_user();
+ return matrix_get_row(row) & (1 << col) || check_user_button_state();
}
+#endif // USER_BUTTON_PIN
-__attribute__((weak)) void matrix_scan_sub_kb(void) {}
-void matrix_scan_kb(void) {
- matrix_scan_sub_kb();
- matrix_scan_user();
+bool shutdown_kb(bool jump_to_bootloader) {
+ if (!shutdown_user(jump_to_bootloader)) {
+ return false;
+ }
+#ifdef RGB_MATRIX_ENABLE
+ void rgb_matrix_update_pwm_buffers(void);
+ rgb_matrix_set_color_all(RGB_RED);
+ rgb_matrix_update_pwm_buffers();
+#endif // RGB_MATRIX_ENABLE
+ return true;
+}
+
+#ifdef POINTING_DEVICE_AUTO_MOUSE_ENABLE
+bool is_mouse_record_kb(uint16_t keycode, keyrecord_t* record) {
+ if (IS_KB_KEYCODE(keycode)) {
+ return true;
+ }
+ return is_mouse_record_user(keycode, record);
}
+#endif // POINTING_DEVICE_AUTO_MOUSE_ENABLE
diff --git a/keyboards/handwired/tractyl_manuform/tractyl_manuform.h b/keyboards/handwired/tractyl_manuform/tractyl_manuform.h
index 48020c89bd..0c473517c7 100644
--- a/keyboards/handwired/tractyl_manuform/tractyl_manuform.h
+++ b/keyboards/handwired/tractyl_manuform/tractyl_manuform.h
@@ -28,14 +28,15 @@ enum charybdis_keycodes {
DRAGSCROLL_MODE,
DRAGSCROLL_MODE_TOGGLE,
};
-# define DPI_MOD POINTER_DEFAULT_DPI_FORWARD
-# define DPI_RMOD POINTER_DEFAULT_DPI_REVERSE
-# define S_D_MOD POINTER_SNIPING_DPI_FORWARD
-# define S_D_RMOD POINTER_SNIPING_DPI_REVERSE
-# define SNIPING SNIPING_MODE
-# define SNP_TOG SNIPING_MODE_TOGGLE
-# define DRGSCRL DRAGSCROLL_MODE
-# define DRG_TOG DRAGSCROLL_MODE_TOGGLE
+
+#define DPI_MOD POINTER_DEFAULT_DPI_FORWARD
+#define DPI_RMOD POINTER_DEFAULT_DPI_REVERSE
+#define S_D_MOD POINTER_SNIPING_DPI_FORWARD
+#define S_D_RMOD POINTER_SNIPING_DPI_REVERSE
+#define SNIPING SNIPING_MODE
+#define SNP_TOG SNIPING_MODE_TOGGLE
+#define DRGSCRL DRAGSCROLL_MODE
+#define DRG_TOG DRAGSCROLL_MODE_TOGGLE
#ifdef POINTING_DEVICE_ENABLE
/** \brief Return the current DPI value for the pointer's default mode. */
@@ -103,7 +104,4 @@ bool charybdis_get_pointer_dragscroll_enabled(void);
* are translated into horizontal and vertical scroll movements.
*/
void charybdis_set_pointer_dragscroll_enabled(bool enable);
-#endif // POINTING_DEVICE_ENABLE
-
-void matrix_init_sub_kb(void);
-void matrix_scan_sub_kb(void);
+#endif // POINTING_DEVICE_ENABLE
diff --git a/keyboards/handwired/wwa/soyuz/keyboard.json b/keyboards/handwired/wwa/soyuz/keyboard.json
index 4b3a015a35..b922af10a2 100644
--- a/keyboards/handwired/wwa/soyuz/keyboard.json
+++ b/keyboards/handwired/wwa/soyuz/keyboard.json
@@ -8,7 +8,8 @@
"bootmagic": true,
"extrakey": true,
"mousekey": true,
- "nkro": true
+ "nkro": true,
+ "encoder" : true
},
"matrix_pins": {
"cols": ["GP0", "GP1", "GP2", "GP3", "GP4", "GP5", "GP6"],
@@ -20,6 +21,13 @@
"pid": "0x0004",
"vid": "0x5757"
},
+ "encoder": {
+ "rotary": [
+ {"pin_a": "GP16", "pin_b": "GP17"},
+ {"pin_a": "GP18", "pin_b": "GP19"},
+ {"pin_a": "GP20", "pin_b": "GP21"}
+ ]
+ },
"layouts": {
"LAYOUT": {
"layout": [
diff --git a/keyboards/handwired/wwa/soyuz/keymaps/default/keymap.c b/keyboards/handwired/wwa/soyuz/keymaps/default/keymap.c
index af0eb592dc..c1d75ffc54 100644
--- a/keyboards/handwired/wwa/soyuz/keymaps/default/keymap.c
+++ b/keyboards/handwired/wwa/soyuz/keymaps/default/keymap.c
@@ -3,11 +3,17 @@
#include QMK_KEYBOARD_H
-
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT(
KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10,
KC_F11, KC_F12, KC_F13, KC_F14, KC_F15, KC_F16, KC_F17,
KC_F18, KC_F19, KC_F20, KC_F21, KC_F22, KC_F23, KC_F24
)
-}; \ No newline at end of file
+};
+
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU), ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+};
+#endif
diff --git a/keyboards/handwired/wwa/soyuz/keymaps/default/rules.mk b/keyboards/handwired/wwa/soyuz/keymaps/default/rules.mk
new file mode 100644
index 0000000000..ee32568148
--- /dev/null
+++ b/keyboards/handwired/wwa/soyuz/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/handwired/wwa/soyuz/readme.md b/keyboards/handwired/wwa/soyuz/readme.md
index 69f8ef9d76..01a3b60dfe 100644
--- a/keyboards/handwired/wwa/soyuz/readme.md
+++ b/keyboards/handwired/wwa/soyuz/readme.md
@@ -2,7 +2,7 @@
![soyuz](https://i.imgur.com/KwwORGSh.jpeg)
-21 Key and 3 MIDI Potentiometers Macro Keyboard
+21 Key, 3 Encoder
* Keyboard Maintainer: [spacehangover](https://github.com/spacehangover)
* Hardware Supported: RP2040 Handwired
diff --git a/keyboards/handwired/yodadistro/macro/keyboard.json b/keyboards/handwired/yodadistro/macro/keyboard.json
new file mode 100644
index 0000000000..f0a03453b4
--- /dev/null
+++ b/keyboards/handwired/yodadistro/macro/keyboard.json
@@ -0,0 +1,33 @@
+{
+ "manufacturer": "Raspberry Pi",
+ "keyboard_name": "KBP 8-Key Macro Pad",
+ "maintainer": "yodadistro",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "matrix_pins": {
+ "direct": [
+ ["GP3", "GP5", "GP7", "GP9"],
+ ["GP2", "GP4", "GP6", "GP8"]
+ ]
+ },
+ "processor": "RP2040",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x2044",
+ "vid": "0x1209"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/yodadistro/macro/keymaps/default/keymap.json b/keyboards/handwired/yodadistro/macro/keymaps/default/keymap.json
new file mode 100644
index 0000000000..5f5ccb88b0
--- /dev/null
+++ b/keyboards/handwired/yodadistro/macro/keymaps/default/keymap.json
@@ -0,0 +1,11 @@
+{
+ "keyboard": "handwired/yodadistro/macro",
+ "keymap": "default",
+ "layout": "LAYOUT",
+ "layers": [
+ [
+ "KC_A", "KC_B", "KC_C", "KC_D",
+ "KC_E", "KC_F", "KC_G", "KC_H"
+ ]
+ ]
+}
diff --git a/keyboards/handwired/yodadistro/macro/readme.md b/keyboards/handwired/yodadistro/macro/readme.md
new file mode 100644
index 0000000000..ceda19acba
--- /dev/null
+++ b/keyboards/handwired/yodadistro/macro/readme.md
@@ -0,0 +1,25 @@
+# Yoda Distro
+
+![YodaDistro](https://i.imgur.com/W2xnKjF.jpeg)
+
+Scratch made direct wire pin 8-Key (4x2) Macro Pad using a Raspberry Pi Pico (2040).
+
+* Keyboard Maintainer: [YodaDistro](https://github.com/YodaDistro)
+* Hardware Supported: Raspberry Pi Pico (2040)
+* Hardware Availability: 3D Printed Design (https://github.com/YodaDistro/MacroPad)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/yodadistro/macro:default
+
+Flashing example for this keyboard:
+
+ make handwired/yodadistro/macro: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
+
+* **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/handwired/zeropad/keyboard.json b/keyboards/handwired/zeropad/keyboard.json
new file mode 100644
index 0000000000..40bf6c8c2a
--- /dev/null
+++ b/keyboards/handwired/zeropad/keyboard.json
@@ -0,0 +1,38 @@
+{
+ "manufacturer": "Leon Sieber",
+ "keyboard_name": "ZeroPad",
+ "maintainer": "diffrentGuesser",
+ "development_board": "promicro",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["D1", "D0", "D4"],
+ "rows": ["C6", "D7", "E6"],
+ },
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0000",
+ "vid": "0x5A50"
+ },
+ "community_layouts": [ "ortho_3x3" ],
+ "layouts": {
+ "LAYOUT_ortho_3x3": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/handwired/zeropad/keymaps/default/keymap.c b/keyboards/handwired/zeropad/keymaps/default/keymap.c
new file mode 100644
index 0000000000..aa674bcbda
--- /dev/null
+++ b/keyboards/handwired/zeropad/keymaps/default/keymap.c
@@ -0,0 +1,13 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_ortho_3x3(
+ KC_1, KC_2, KC_3,
+ KC_4, KC_5, KC_6,
+ KC_7, KC_8, KC_9
+ )
+};
diff --git a/keyboards/handwired/zeropad/readme.md b/keyboards/handwired/zeropad/readme.md
new file mode 100644
index 0000000000..c021d7dc05
--- /dev/null
+++ b/keyboards/handwired/zeropad/readme.md
@@ -0,0 +1,27 @@
+# ZeroPad
+
+![ZeroPad](https://i.imgur.com/KBkI4q1.jpeg)
+
+This keyboard is inspired by the scotto9 from Joe Scotto. This keyboard is compatible with via and has 4 layers of keybinds (24 keybinds - 4x8 + 1 per layer for changing the layer).
+
+* Keyboard Maintainer: [Leon Sieber](https://github.com/diffrentGuesser)
+* Hardware Supported: Pro Micro, 3 pin switches
+* Hardware Availability: [Pro Micro](https://de.aliexpress.com/item/32846843498.html?spm=a2g0o.cart.0.0.146d4ae4kCjqDY&mp=1&gatewayAdapt=glo2deu), [switches](https://de.aliexpress.com/item/1005007135709029.html?spm=a2g0o.cart.0.0.146d4ae4kCjqDY&mp=1&gatewayAdapt=glo2deu)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make handwired/zeropad:default
+
+Flashing example for this keyboard:
+
+ make handwired/zeropad: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 (the top left key) and plug in the keyboard
+* **Physical reset**: Short the GND and the RST pins on the Pro Micro.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available