Skip to content
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

feat(shields): Add MechWild OBE #1713

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions app/boards/shields/obe/Kconfig.defconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Copyright (c) 2023 The ZMK Contributors
# SPDX-License-Identifier: MIT

if SHIELD_OBE

config ZMK_KEYBOARD_NAME
default "OrangeBoyErgo"

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
Comment on lines +8 to +24
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
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

No display on this board.


endif
5 changes: 5 additions & 0 deletions app/boards/shields/obe/Kconfig.shield
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Copyright (c) 2023 The ZMK Contributors
# SPDX-License-Identifier: MIT

config SHIELD_OBE
def_bool $(shields_list_contains,obe)
3 changes: 3 additions & 0 deletions app/boards/shields/obe/boards/blackpill_f401ce.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Necessary to stop double matrix reads on first row
CONFIG_ZMK_KSCAN_MATRIX_WAIT_BEFORE_INPUTS=150
CONFIG_ZMK_KSCAN_MATRIX_WAIT_BETWEEN_OUTPUTS=150
38 changes: 38 additions & 0 deletions app/boards/shields/obe/boards/pillbug.overlay
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 = <25>;
// Unused pins, needed for SPI definition, but not used by the ws2812 driver itself.
sck-pin = <27>;
miso-pin = <28>;
Comment on lines +9 to +15
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
&spi1 {
compatible = "nordic,nrf-spim";
status = "okay";
mosi-pin = <25>;
// Unused pins, needed for SPI definition, but not used by the ws2812 driver itself.
sck-pin = <27>;
miso-pin = <28>;
&pinctrl {
spi3_default: spi3_default {
group1 {
psels = <NRF_PSEL(SPIM_MOSI, 0, 25)>;
};
};
spi3_sleep: spi3_sleep {
group1 {
psels = <NRF_PSEL(SPIM_MOSI, 0, 25)>;
low-power-enable;
};
};
};
&spi3 {
compatible = "nordic,nrf-spim";
status = "okay";
pinctrl-0 = <&spi3_default>;
pinctrl-1 = <&spi3_sleep>;
pinctrl-names = "default", "sleep";


led_strip: ws2812@0 {
compatible = "worldsemi,ws2812-spi";
label = "WS2812";

/* SPI */
reg = <0>; /* ignored, but necessary for SPI bindings */
spi-max-frequency = <4000000>;

/* WS2812 */
chain-length = <10>; /* 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;
};
};
14 changes: 14 additions & 0 deletions app/boards/shields/obe/obe.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Uncomment to turn on logging, and set ZMK logging to debug output
#CONFIG_ZMK_USB_LOGGING=y

# Uncomment both to enable underglow, will not work with blackpill (currently)
#CONFIG_ZMK_RGB_UNDERGLOW=y
#CONFIG_WS2812_STRIP=y

# Uncomment both to enable encoder
#CONFIG_EC11=y
#CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y

# Quality of life settings
#CONFIG_ZMK_IDLE_TIMEOUT=300000
#CONFIG_BT_CTLR_TX_PWR_PLUS_8=y
93 changes: 93 additions & 0 deletions app/boards/shields/obe/obe.keymap
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
/*
* Copyright (c) 2023 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/

#include <behaviors.dtsi>
#include <dt-bindings/zmk/keys.h>
#include <dt-bindings/zmk/bt.h>
#include <dt-bindings/zmk/rgb.h>
#include <dt-bindings/zmk/ext_power.h>

#define TIMEOUT 300

&encoder_1 {
status = "okay";
};

/ {
combos {
compatible = "zmk,combos";
combo_btclr {
timeout-ms = <TIMEOUT>;
key-positions = <1 6>;
bindings = <&bt BT_CLR>;
};
combo_lock {
timeout-ms = <TIMEOUT>;
key-positions = <1 7>;
bindings = <&tog 2>;
};
combo_reset {
timeout-ms = <TIMEOUT>;
key-positions = <1 3>;
bindings = <&reset>;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
bindings = <&reset>;
bindings = <&sys_reset>;

This is part of the Zephyr 3.2 update circa April 2023.

};
combo_bootloader {
timeout-ms = <TIMEOUT>;
key-positions = <1 15>;
bindings = <&bootloader>;
};
combo_bt_nxt {
timeout-ms = <TIMEOUT>;
key-positions = <1 4>;
bindings = <&bt BT_NXT>;
};
};

sensors {
compatible = "zmk,keymap-sensors";
sensors = <&encoder_1>;
};
Comment on lines +48 to +52
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
sensors {
compatible = "zmk,keymap-sensors";
sensors = <&encoder_1>;
};


keymap0: keymap {
compatible = "zmk,keymap";

default_layer {
label = "default layer";
bindings = <
&kp C_MUTE &kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSLH &kp BSPC
&kp PG_UP &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH
&kp PG_DN &mo 1 &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp APOS &kp ENTER
&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp UP &kp RSHFT
&kp LCTRL &kp LGUI &kp LALT &kp SPACE &mo 1 &kp SPACE &kp RALT &mo 1 &kp LEFT &kp DOWN &kp RIGHT
>;
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>;
};
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
};
};


fn_layer {
label = "fn layer";
bindings = <
&tog 2 &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans &kp DEL
&bootloader &trans &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &trans &trans &trans &trans &trans &trans &trans &trans &trans
&bt BT_NXT &kp CAPS &kp KP_NUM &kp SLCK &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans
&trans &trans &bt BT_CLR &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp PG_UP &trans
&trans &trans &rgb_ug RGB_BRD &rgb_ug RGB_EFR &ext_power EP_TOG &rgb_ug RGB_EFF &rgb_ug RGB_BRI &trans &kp HOME &kp PG_DN &kp END
>;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
>;
>;

sensor-bindings = <&inc_dec_kp PG_UP PG_DN>;
};

lock_layer {
label = "fn layer";
bindings = <
&none &none &none &none &none &none &none &none &none &none &none &none &none &none &none &none
&none &none &none &none &none &none &none &none &none &none &none &none &none &none &none
&none &none &none &none &none &none &none &none &none &none &none &none &none &none
&none &none &none &none &none &none &none &none &none &none &none &none &none &none
&none &none &none &none &none &none &none &none &none &none &none
>;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
>;
>;

sensor-bindings = <&inc_dec_kp PG_UP PG_DN>;
};
};
};
63 changes: 63 additions & 0 deletions app/boards/shields/obe/obe.overlay
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/*
* Copyright (c) 2023 The ZMK Contributors
*
* SPDX-License-Identifier: MIT
*/

#include <dt-bindings/zmk/matrix_transform.h>

/ {
chosen {
zmk,kscan = &kscan0;
zmk,matrix_transform = &default_transform;
};

kscan0: kscan {
compatible = "zmk,kscan-gpio-matrix";
label = "KSCAN";
diode-direction = "col2row";
row-gpios
= <&blackpill 29 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
, <&blackpill 28 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
, <&blackpill 27 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
, <&blackpill 26 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
, <&blackpill 25 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
, <&blackpill 38 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
, <&blackpill 39 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
;
col-gpios
= <&blackpill 21 GPIO_ACTIVE_HIGH>
, <&blackpill 19 GPIO_ACTIVE_HIGH>
, <&blackpill 18 GPIO_ACTIVE_HIGH>
, <&blackpill 17 GPIO_ACTIVE_HIGH>
, <&blackpill 16 GPIO_ACTIVE_HIGH>
, <&blackpill 15 GPIO_ACTIVE_HIGH>
, <&blackpill 14 GPIO_ACTIVE_HIGH>
, <&blackpill 13 GPIO_ACTIVE_HIGH>
, <&blackpill 12 GPIO_ACTIVE_HIGH>
, <&blackpill 11 GPIO_ACTIVE_HIGH>
;
};

default_transform: keymap_transform_0 {
compatible = "zmk,matrix-transform";
columns = <12>;
rows = <4>;
map = <
RC(5,5) RC(5,4) RC(5,3) RC(5,2) RC(5,1) RC(5,0) RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9)
RC(6,5) RC(5,9) RC(5,8) RC(5,7) RC(5,6) RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9)
RC(6,4) RC(6,9) RC(6,8) RC(6,3) RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9)
RC(6,2) RC(6,0) RC(6,7) RC(6,6) RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9)
RC(6,1) RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9)
>;
};

encoder_1: encoder_1 {
compatible = "alps,ec11";
label = "Encoder 1";
a-gpios = <&blackpill 40 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
b-gpios = <&blackpill 41 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
resolution = <4>;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
resolution = <4>;
steps = <80>;

status = "disabled";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have it on good authority that the sensors node actually belongs in the overlay and should be referred to from the keymap if necessary.

Suggested change
status = "disabled";
status = "disabled";
sensors {
compatible = "zmk,keymap-sensors";
sensors = <&encoder_1>;
triggers-per-rotation = <20>;
};

};
};
10 changes: 10 additions & 0 deletions app/boards/shields/obe/obe.zmk.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
file_format: "1"
id: obe
name: OrangeBoyErgo
type: shield
url: https://mechwild.com/product/orange-boy-ergo/
requires: [blackpill]
features:
- keys
- encoder
- underglow