-
-
Notifications
You must be signed in to change notification settings - Fork 2.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Support for Keyhive Variant of Sofle RGB #1233
base: main
Are you sure you want to change the base?
Changes from all commits
aaed46b
d035f09
e96f256
1c5588d
cef6332
30bb6af
0ae0fbb
13cc901
0f5ed55
36b81eb
4f0bc70
a941564
ca8d931
2e10592
083abe8
64ef35f
1c4319f
793dbdf
fa088ab
f9f93d3
0d6e271
524aa6e
9ea1687
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
# Copyright (c) 2023 The ZMK Contributors | ||
# SPDX-License-Identifier: MIT | ||
|
||
if SHIELD_SOFLE_RGB_KEYHIVE_LEFT | ||
|
||
config ZMK_KEYBOARD_NAME | ||
default "Sofle Keyhive" | ||
|
||
config ZMK_SPLIT_ROLE_CENTRAL | ||
default y | ||
|
||
endif | ||
|
||
if SHIELD_SOFLE_RGB_KEYHIVE_LEFT || SHIELD_SOFLE_RGB_KEYHIVE_RIGHT | ||
|
||
config ZMK_SPLIT | ||
default y | ||
|
||
if ZMK_DISPLAY | ||
|
||
config I2C | ||
default y | ||
|
||
config SSD1306 | ||
default y | ||
|
||
config SSD1306_REVERSE_MODE | ||
default y | ||
|
||
endif # ZMK_DISPLAY | ||
|
||
if LVGL | ||
|
||
config LVGL_VDB_SIZE | ||
default 64 | ||
|
||
config LVGL_DPI | ||
default 148 | ||
|
||
config LVGL_BITS_PER_PIXEL | ||
default 1 | ||
|
||
choice LVGL_COLOR_DEPTH | ||
default LVGL_COLOR_DEPTH_1 | ||
endchoice | ||
|
||
endif # LVGL | ||
|
||
endif |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
# Copyright (c) 2023 The ZMK Contributors | ||
# SPDX-License-Identifier: MIT | ||
|
||
config SHIELD_SOFLE_RGB_KEYHIVE_LEFT | ||
def_bool $(shields_list_contains,sofle_rgb_keyhive_left) | ||
|
||
config SHIELD_SOFLE_RGB_KEYHIVE_RIGHT | ||
def_bool $(shields_list_contains,sofle_rgb_keyhive_right) |
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,38 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
* Copyright (c) 2023 The ZMK Contributors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
* | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
* SPDX-License-Identifier: MIT | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
*/ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
#include <dt-bindings/led/led.h> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
&spi1 { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
compatible = "nordic,nrf-spim"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
status = "okay"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
mosi-pin = <6>; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
// Unused pins, needed for SPI definition, but not used by the ws2812 driver itself. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
sck-pin = <5>; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
miso-pin = <7>; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+9
to
+15
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Migration to the
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
led_strip: ws2812@0 { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
compatible = "worldsemi,ws2812-spi"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
label = "WS2812"; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
This label has been deprecated. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* SPI */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
reg = <0>; /* ignored, but necessary for SPI bindings */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
spi-max-frequency = <4000000>; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
/* WS2812 */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
chain-length = <37>; /* number of LEDs */ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
spi-one-frame = <0x70>; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
spi-zero-frame = <0x40>; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
color-mapping = <LED_COLOR_ID_GREEN LED_COLOR_ID_RED LED_COLOR_ID_BLUE>; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
/ { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
chosen { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
zmk,underglow = &led_strip; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
# Copyright (c) 2023 The ZMK Contributors | ||
# SPDX-License-Identifier: MIT | ||
|
||
# Uncomment the following line to enable the Sofle OLED Display | ||
# CONFIG_ZMK_DISPLAY=y | ||
|
||
# Uncomment the following two lines to enable the underglow LEDs | ||
# CONFIG_ZMK_RGB_UNDERGLOW=y | ||
# CONFIG_WS2812_STRIP=y | ||
|
||
CONFIG_EC11=y | ||
CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y | ||
JWhitleyWork marked this conversation as resolved.
Show resolved
Hide resolved
|
Original file line number | Diff line number | Diff line change | ||||||
---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,90 @@ | ||||||||
/* | ||||||||
* Copyright (c) 2020-2023 The ZMK Contributors | ||||||||
* | ||||||||
* SPDX-License-Identifier: MIT | ||||||||
*/ | ||||||||
|
||||||||
#include <dt-bindings/zmk/matrix_transform.h> | ||||||||
|
||||||||
/ { | ||||||||
chosen { | ||||||||
zephyr,display = &oled; | ||||||||
zmk,kscan = &kscan0; | ||||||||
zmk,matrix_transform = &default_transform; | ||||||||
}; | ||||||||
|
||||||||
default_transform: keymap_transform_0 { | ||||||||
compatible = "zmk,matrix-transform"; | ||||||||
columns = <12>; | ||||||||
rows = <5>; | ||||||||
// | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | ||||||||
// | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | ||||||||
// | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | ||||||||
// | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 | SW30 | | SW25 | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | | ||||||||
// | SW29 | SW28 | SW27 | SW26 | SW25 | | SW26 | SW27 | SW28 | SW29 | SW30 | | ||||||||
map = < | ||||||||
RC(0,5) RC(0,4) RC(0,3) RC(0,2) RC(0,1) RC(0,0) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) | ||||||||
RC(1,5) RC(1,4) RC(1,3) RC(1,2) RC(1,1) RC(1,0) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) | ||||||||
RC(2,5) RC(2,4) RC(2,3) RC(2,2) RC(2,1) RC(2,0) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) | ||||||||
RC(3,5) RC(3,4) RC(3,3) RC(3,2) RC(3,1) RC(3,0) RC(4,5) RC(4,6) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) | ||||||||
RC(4,4) RC(4,3) RC(4,2) RC(4,1) RC(4,0) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) | ||||||||
>; | ||||||||
}; | ||||||||
|
||||||||
kscan0: kscan { | ||||||||
compatible = "zmk,kscan-gpio-matrix"; | ||||||||
label = "KSCAN"; | ||||||||
|
||||||||
Comment on lines
+36
to
+37
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
This label has been deprecated. |
||||||||
diode-direction = "col2row"; | ||||||||
row-gpios | ||||||||
= <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> | ||||||||
, <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> | ||||||||
, <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> | ||||||||
, <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> | ||||||||
, <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> | ||||||||
; | ||||||||
}; | ||||||||
|
||||||||
left_encoder: encoder_left { | ||||||||
compatible = "alps,ec11"; | ||||||||
label = "LEFT_ENCODER"; | ||||||||
a-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; | ||||||||
b-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; | ||||||||
resolution = <4>; | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
The change from
|
||||||||
status = "okay"; | ||||||||
}; | ||||||||
|
||||||||
right_encoder: encoder_right { | ||||||||
compatible = "alps,ec11"; | ||||||||
label = "RIGHT_ENCODER"; | ||||||||
a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; | ||||||||
b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>; | ||||||||
resolution = <4>; | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
|
||||||||
status = "okay"; | ||||||||
}; | ||||||||
|
||||||||
sensors { | ||||||||
compatible = "zmk,keymap-sensors"; | ||||||||
sensors = <&left_encoder &right_encoder>; | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
See previous comment about the June 2023 encoder refactor. |
||||||||
}; | ||||||||
}; | ||||||||
|
||||||||
&pro_micro_i2c { | ||||||||
status = "okay"; | ||||||||
|
||||||||
oled: ssd1306@3c { | ||||||||
compatible = "solomon,ssd1306fb"; | ||||||||
reg = <0x3c>; | ||||||||
label = "DISPLAY"; | ||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
This label has been deprecated. |
||||||||
width = <128>; | ||||||||
height = <32>; | ||||||||
segment-offset = <0>; | ||||||||
page-offset = <0>; | ||||||||
display-offset = <0>; | ||||||||
multiplex-ratio = <31>; | ||||||||
segment-remap; | ||||||||
com-invdir; | ||||||||
com-sequential; | ||||||||
prechargep = <0x22>; | ||||||||
}; | ||||||||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
/* | ||
* Copyright (c) 2020-2023 The ZMK Contributors | ||
* | ||
* SPDX-License-Identifier: MIT | ||
*/ | ||
|
||
#include <behaviors.dtsi> | ||
#include <dt-bindings/zmk/keys.h> | ||
#include <dt-bindings/zmk/bt.h> | ||
|
||
/ { | ||
keymap { | ||
compatible = "zmk,keymap"; | ||
|
||
default_layer { | ||
// ------------------------------------------------------------------------------------------------------------ | ||
// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | | | ||
// | ESC | Q | W | E | R | T | | Y | U | I | O | P | BKSPC | | ||
// | TAB | A | S | D | F | G | | H | J | K | L | ; | ' | | ||
// | SHIFT | Z | X | C | V | B | MUTE | | | N | M | , | . | / | SHIFT | | ||
// | GUI | ALT | CTRL | LOWER| ENTER | | SPACE | RAISE| CTRL | ALT | GUI | | ||
bindings = < | ||
&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &none | ||
&kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC | ||
&kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT | ||
&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp C_MUTE &none &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT | ||
&kp LGUI &kp LALT &kp LCTRL &mo 1 &kp RET &kp SPACE &mo 2 &kp RCTRL &kp RALT &kp RGUI | ||
>; | ||
|
||
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; | ||
}; | ||
|
||
lower_layer { | ||
// ------------------------------------------------------------------------------------------------------------ | ||
// | | F1 | F2 | F3 | F4 | F5 | | F6 | F7 | F8 | F9 | F10 | F11 | | ||
// | ` | 1 | 2 | 3 | 4 | 5 | | 6 | 7 | 8 | 9 | 0 | F12 | | ||
// | | ! | @ | # | $ | % | | ^ | & | * | ( | ) | | | | ||
// | | = | - | + | { | } | | | | [ | ] | ; | : | \ | | | ||
// | | | | | | | | | | | | | ||
bindings = < | ||
&trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 | ||
&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp F12 | ||
&trans &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR &kp PIPE | ||
&trans &kp EQUAL &kp MINUS &kp KP_PLUS &kp LBRC &kp RBRC &trans &trans &kp LBKT &kp RBKT &kp SEMI &kp COLON &kp BSLH &trans | ||
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans | ||
>; | ||
|
||
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; | ||
}; | ||
|
||
raise_layer { | ||
// ------------------------------------------------------------------------------------------------------------ | ||
// |BTCLR| BT1 | BT2 | BT3 | BT4 | BT5 | | | | | | | | | ||
// | | INS | PSCR | GUI | | | | PGUP | | ^ | | | | | ||
// | | ALT | CTRL | SHIFT | | CAPS | | PGDN | <- | v | -> | DEL | BKSPC | | ||
// | | UNDO | CUT | COPY | PASTE | | | | | | | | | | | | ||
// | | | | | | | | | | | | | ||
bindings = < | ||
&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans | ||
&trans &kp INS &kp PSCRN &kp K_CMENU &trans &trans &kp PG_UP &trans &kp UP &trans &kp N0 &trans | ||
&trans &kp LALT &kp LCTRL &kp LSHFT &trans &kp CLCK &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &kp DEL &kp BSPC | ||
&trans &kp K_UNDO &kp K_CUT &kp K_COPY &kp K_PASTE &trans &trans &trans &trans &trans &trans &trans &trans &trans | ||
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans | ||
>; | ||
|
||
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>; | ||
}; | ||
}; | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
file_format: "1" | ||
id: sofle_rgb_keyhive | ||
name: Sofle RGB Keyhive | ||
type: shield | ||
url: https://keyhive.xyz/shop/sofle | ||
requires: [pro_micro] | ||
exposes: [i2c_oled] | ||
features: | ||
- keys | ||
- display | ||
- encoder | ||
- underglow | ||
siblings: | ||
- sofle_rgb_keyhive_left | ||
- sofle_rgb_keyhive_right |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
/* | ||
* Copyright (c) 2023 The ZMK Contributors | ||
* | ||
* SPDX-License-Identifier: MIT | ||
*/ | ||
|
||
#include "sofle_rgb_keyhive.dtsi" | ||
|
||
&kscan0 { | ||
col-gpios | ||
= <&pro_micro 19 GPIO_ACTIVE_HIGH> | ||
, <&pro_micro 18 GPIO_ACTIVE_HIGH> | ||
, <&pro_micro 15 GPIO_ACTIVE_HIGH> | ||
, <&pro_micro 14 GPIO_ACTIVE_HIGH> | ||
, <&pro_micro 16 GPIO_ACTIVE_HIGH> | ||
, <&pro_micro 10 GPIO_ACTIVE_HIGH> | ||
; | ||
}; | ||
|
||
&left_encoder { | ||
status = "okay"; | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
/* | ||
* Copyright (c) 2023 The ZMK Contributors | ||
* | ||
* SPDX-License-Identifier: MIT | ||
*/ | ||
|
||
#include "sofle_rgb_keyhive.dtsi" | ||
|
||
&default_transform { | ||
col-offset = <6>; | ||
}; | ||
|
||
&kscan0 { | ||
col-gpios | ||
= <&pro_micro 10 GPIO_ACTIVE_HIGH> | ||
, <&pro_micro 16 GPIO_ACTIVE_HIGH> | ||
, <&pro_micro 14 GPIO_ACTIVE_HIGH> | ||
, <&pro_micro 15 GPIO_ACTIVE_HIGH> | ||
, <&pro_micro 18 GPIO_ACTIVE_HIGH> | ||
, <&pro_micro 19 GPIO_ACTIVE_HIGH> | ||
; | ||
}; | ||
|
||
&right_encoder { | ||
status = "okay"; | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Kconfig changes necessitated by the Zephyr 3.2 upgrade.