aboutsummaryrefslogtreecommitdiff
path: root/keyboards/splitkb/halcyon/elora/rev2
diff options
context:
space:
mode:
Diffstat (limited to 'keyboards/splitkb/halcyon/elora/rev2')
-rw-r--r--keyboards/splitkb/halcyon/elora/rev2/config.h32
-rw-r--r--keyboards/splitkb/halcyon/elora/rev2/halconf.h11
-rw-r--r--keyboards/splitkb/halcyon/elora/rev2/keyboard.json177
-rw-r--r--keyboards/splitkb/halcyon/elora/rev2/mcuconf.h14
-rw-r--r--keyboards/splitkb/halcyon/elora/rev2/rev2.c28
5 files changed, 262 insertions, 0 deletions
diff --git a/keyboards/splitkb/halcyon/elora/rev2/config.h b/keyboards/splitkb/halcyon/elora/rev2/config.h
new file mode 100644
index 0000000000..b5cd6f95f2
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/rev2/config.h
@@ -0,0 +1,32 @@
+// Copyright 2025 splitkb.com ([email protected])
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+// Make it easier to enter the bootloader
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 1000U
+
+// UART1, communication between the two halves
+#define SERIAL_USART_FULL_DUPLEX // Enable full duplex operation mode.
+#define SERIAL_USART_TX_PIN GP28 // USART TX pin
+#define SERIAL_USART_RX_PIN GP29 // USART RX pin
+#define SERIAL_PIO_USE_PIO1 // Use PIO1 as PIO0 is used for WS2812 driver
+
+// VBUS detection
+#define USB_VBUS_PIN GP1
+
+//// VIK
+
+// GPIO1 = GP27
+// GPIO2 = GP26
+// CS = GP13
+
+#define I2C_DRIVER I2C0
+#define I2C1_SDA_PIN GP16
+#define I2C1_SCL_PIN GP17
+
+#define SPI_DRIVER SPID1
+#define SPI_SCK_PIN GP14
+#define SPI_MOSI_PIN GP15
+#define SPI_MISO_PIN GP12
diff --git a/keyboards/splitkb/halcyon/elora/rev2/halconf.h b/keyboards/splitkb/halcyon/elora/rev2/halconf.h
new file mode 100644
index 0000000000..a6937ddf9d
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/rev2/halconf.h
@@ -0,0 +1,11 @@
+// Copyright 2025 splitkb.com ([email protected])
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+//// VIK
+
+#define HAL_USE_I2C TRUE
+#define HAL_USE_SPI TRUE
+
+#include_next <halconf.h>
diff --git a/keyboards/splitkb/halcyon/elora/rev2/keyboard.json b/keyboards/splitkb/halcyon/elora/rev2/keyboard.json
new file mode 100644
index 0000000000..c2dc711f07
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/rev2/keyboard.json
@@ -0,0 +1,177 @@
+{
+ "keyboard_name": "Halcyon Elora rev2",
+ "bootloader": "rp2040",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "GP22", "pin_b": "GP18", "resolution": 2}
+ ]
+ },
+ "features": {
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["GP24", "GP19", "GP20", "GP25", "GP4", "GP9", "GP10"],
+ "rows": ["GP8", "GP11", "GP7", "GP6", "GP5"]
+ },
+ "processor": "RP2040",
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_sat": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "band_val": true,
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "cycle_up_down": true,
+ "digital_rain": true,
+ "dual_beacon": true,
+ "gradient_left_right": true,
+ "gradient_up_down": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "jellybean_raindrops": true,
+ "multisplash": true,
+ "pixel_flow": true,
+ "pixel_fractal": true,
+ "pixel_rain": true,
+ "rainbow_beacon": true,
+ "rainbow_moving_chevron": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "solid_color": true,
+ "solid_multisplash": true,
+ "solid_reactive": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_multinexus": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_wide": true,
+ "solid_splash": true,
+ "splash": true,
+ "typing_heatmap": true
+ },
+ "driver": "ws2812",
+ "layout": [
+ {"x": 75, "y": 2, "flags": 2},
+ {"x": 50, "y": 1, "flags": 2},
+ {"x": 14, "y": 4, "flags": 2},
+ {"x": 25, "y": 45, "flags": 2},
+ {"x": 58, "y": 49, "flags": 2},
+ {"x": 94, "y": 53, "flags": 2},
+ {"matrix": [4, 0], "x": 94, "y": 64, "flags": 4},
+ {"matrix": [4, 5], "x": 79, "y": 61, "flags": 4},
+ {"matrix": [4, 1], "x": 65, "y": 55, "flags": 4},
+ {"matrix": [4, 2], "x": 51, "y": 52, "flags": 4},
+ {"matrix": [4, 4], "x": 36, "y": 52, "flags": 4},
+ {"matrix": [3, 0], "x": 101, "y": 52, "flags": 4},
+ {"matrix": [4, 3], "x": 87, "y": 49, "flags": 4},
+ {"matrix": [3, 1], "x": 72, "y": 43, "flags": 4},
+ {"matrix": [3, 2], "x": 58, "y": 40, "flags": 4},
+ {"matrix": [3, 3], "x": 43, "y": 37, "flags": 4},
+ {"matrix": [3, 4], "x": 29, "y": 40, "flags": 4},
+ {"matrix": [3, 5], "x": 14, "y": 46, "flags": 4},
+ {"matrix": [3, 6], "x": 0, "y": 46, "flags": 4},
+ {"matrix": [2, 1], "x": 72, "y": 30, "flags": 4},
+ {"matrix": [2, 2], "x": 58, "y": 27, "flags": 4},
+ {"matrix": [2, 3], "x": 43, "y": 24, "flags": 4},
+ {"matrix": [2, 4], "x": 29, "y": 27, "flags": 4},
+ {"matrix": [2, 5], "x": 14, "y": 34, "flags": 4},
+ {"matrix": [2, 6], "x": 0, "y": 34, "flags": 4},
+ {"matrix": [1, 1], "x": 72, "y": 18, "flags": 4},
+ {"matrix": [1, 2], "x": 58, "y": 15, "flags": 4},
+ {"matrix": [1, 3], "x": 43, "y": 12, "flags": 4},
+ {"matrix": [1, 4], "x": 29, "y": 15, "flags": 4},
+ {"matrix": [1, 5], "x": 14, "y": 21, "flags": 4},
+ {"matrix": [1, 6], "x": 0, "y": 21, "flags": 4},
+ {"matrix": [0, 1], "x": 72, "y": 6, "flags": 4},
+ {"matrix": [0, 2], "x": 48, "y": 3, "flags": 4},
+ {"matrix": [0, 3], "x": 43, "y": 0, "flags": 4},
+ {"matrix": [0, 4], "x": 29, "y": 3, "flags": 4},
+ {"matrix": [0, 5], "x": 14, "y": 9, "flags": 4},
+ {"matrix": [0, 6], "x": 0, "y": 9, "flags": 4},
+ {"x": 149, "y": 2, "flags": 2},
+ {"x": 174, "y": 1, "flags": 2},
+ {"x": 210, "y": 4, "flags": 2},
+ {"x": 199, "y": 45, "flags": 2},
+ {"x": 166, "y": 49, "flags": 2},
+ {"x": 130, "y": 53, "flags": 2},
+ {"matrix": [9, 0], "x": 130, "y": 64, "flags": 4},
+ {"matrix": [9, 5], "x": 145, "y": 61, "flags": 4},
+ {"matrix": [9, 1], "x": 159, "y": 55, "flags": 4},
+ {"matrix": [9, 2], "x": 173, "y": 52, "flags": 4},
+ {"matrix": [9, 4], "x": 188, "y": 52, "flags": 4},
+ {"matrix": [8, 0], "x": 123, "y": 52, "flags": 4},
+ {"matrix": [9, 3], "x": 137, "y": 49, "flags": 4},
+ {"matrix": [8, 1], "x": 152, "y": 43, "flags": 4},
+ {"matrix": [8, 2], "x": 166, "y": 40, "flags": 4},
+ {"matrix": [8, 3], "x": 181, "y": 37, "flags": 4},
+ {"matrix": [8, 4], "x": 195, "y": 40, "flags": 4},
+ {"matrix": [8, 5], "x": 210, "y": 46, "flags": 4},
+ {"matrix": [8, 6], "x": 224, "y": 46, "flags": 4},
+ {"matrix": [7, 1], "x": 152, "y": 30, "flags": 4},
+ {"matrix": [7, 2], "x": 166, "y": 27, "flags": 4},
+ {"matrix": [7, 3], "x": 181, "y": 24, "flags": 4},
+ {"matrix": [7, 4], "x": 195, "y": 27, "flags": 4},
+ {"matrix": [7, 5], "x": 210, "y": 34, "flags": 4},
+ {"matrix": [7, 6], "x": 224, "y": 34, "flags": 4},
+ {"matrix": [6, 1], "x": 152, "y": 18, "flags": 4},
+ {"matrix": [6, 2], "x": 166, "y": 15, "flags": 4},
+ {"matrix": [6, 3], "x": 181, "y": 12, "flags": 4},
+ {"matrix": [6, 4], "x": 195, "y": 15, "flags": 4},
+ {"matrix": [6, 5], "x": 210, "y": 21, "flags": 4},
+ {"matrix": [6, 6], "x": 224, "y": 21, "flags": 4},
+ {"matrix": [5, 1], "x": 152, "y": 6, "flags": 4},
+ {"matrix": [5, 2], "x": 166, "y": 3, "flags": 4},
+ {"matrix": [5, 3], "x": 181, "y": 0, "flags": 4},
+ {"matrix": [5, 4], "x": 195, "y": 3, "flags": 4},
+ {"matrix": [5, 5], "x": 210, "y": 9, "flags": 4},
+ {"matrix": [5, 6], "x": 224, "y": 9, "flags": 4}
+ ],
+ "max_brightness": 128,
+ "sleep": true,
+ "split_count": [37, 37]
+ },
+ "split": {
+ "enabled": true,
+ "handedness": {
+ "pin": "GP23"
+ },
+ "matrix_pins": {
+ "right": {
+ "cols": ["GP10", "GP9", "GP4", "GP25", "GP20", "GP19", "GP24"],
+ "rows": ["GP8", "GP11", "GP7", "GP6", "GP5"]
+ }
+ },
+ "serial": {
+ "driver": "vendor"
+ },
+ "transport": {
+ "sync": {
+ "matrix_state": true
+ }
+ }
+ },
+ "usb": {
+ "pid": "0xA392"
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP3"
+ }
+}
diff --git a/keyboards/splitkb/halcyon/elora/rev2/mcuconf.h b/keyboards/splitkb/halcyon/elora/rev2/mcuconf.h
new file mode 100644
index 0000000000..126697a4a0
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/rev2/mcuconf.h
@@ -0,0 +1,14 @@
+// Copyright 2025 splitkb.com ([email protected])
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next <mcuconf.h>
+
+//// VIK
+
+#undef RP_I2C_USE_I2C0
+#define RP_I2C_USE_I2C0 TRUE
+
+#undef RP_SPI_USE_SPI1
+#define RP_SPI_USE_SPI1 TRUE
diff --git a/keyboards/splitkb/halcyon/elora/rev2/rev2.c b/keyboards/splitkb/halcyon/elora/rev2/rev2.c
new file mode 100644
index 0000000000..e0a64ae9a4
--- /dev/null
+++ b/keyboards/splitkb/halcyon/elora/rev2/rev2.c
@@ -0,0 +1,28 @@
+// Copyright 2025 splitkb.com ([email protected])
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+#ifdef ENCODER_ENABLE
+bool encoder_update_kb(uint8_t index, bool clockwise) {
+ if (!encoder_update_user(index, clockwise)) {
+ return false;
+ }
+ if (index == 0) {
+ // Volume control
+ if (clockwise) {
+ tap_code(KC_VOLU);
+ } else {
+ tap_code(KC_VOLD);
+ }
+ } else if (index == 1) {
+ // Page up/Page down
+ if (clockwise) {
+ tap_code(KC_PGDN);
+ } else {
+ tap_code(KC_PGUP);
+ }
+ }
+ return false;
+}
+#endif