Skip to content

Commit 2fad527

Browse files
moergo-scchrisandreae
authored andcommitted
Configure Glove80 board definitions for custom features
Additionally adds a board definition for Glove80-v0, an early version of Glove80.
1 parent ab52ae9 commit 2fad527

22 files changed

+833
-5
lines changed

app/boards/arm/glove80/glove80.keymap

+32-3
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,13 @@
1111
#include <dt-bindings/zmk/outputs.h>
1212
#include <dt-bindings/zmk/rgb.h>
1313

14+
#define HYPER LC(LS(LG(LALT)))
15+
1416
// layers
1517
#define DEFAULT 0
1618
#define LOWER 1
1719
#define MAGIC 2
20+
#define FACTORY_TEST 3
1821

1922
/ {
2023
behaviors {
@@ -26,9 +29,24 @@
2629
tapping-term-ms = <200>;
2730
bindings = <&mo LOWER>, <&to LOWER>;
2831
};
32+
33+
magic: magic_hold_tap {
34+
compatible = "zmk,behavior-hold-tap";
35+
#binding-cells = <2>;
36+
flavor = "tap-preferred";
37+
tapping-term-ms = <200>;
38+
bindings = <&mo>, <&rgb_ug_status_macro>;
39+
};
2940
};
3041

3142
macros {
43+
rgb_ug_status_macro: rgb_ug_status_macro_0 {
44+
compatible = "zmk,behavior-macro";
45+
#binding-cells = <0>;
46+
bindings
47+
= <&rgb_ug RGB_STATUS>;
48+
};
49+
3250
bt_0: bt_profile_macro_0 {
3351
compatible = "zmk,behavior-macro";
3452
#binding-cells = <0>;
@@ -80,7 +98,7 @@
8098
&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH
8199
&kp ESC &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT
82100
&kp GRAVE &kp Z &kp X &kp C &kp V &kp B &kp LSHFT &kp LCTRL &layer_td &kp LGUI &kp RCTRL &kp RSHFT &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp PG_UP
83-
&mo MAGIC &kp HOME &kp END &kp LEFT &kp RIGHT &kp BSPC &kp DEL &kp LALT &kp RALT &kp RET &kp SPACE &kp UP &kp DOWN &kp LBKT &kp RBKT &kp PG_DN
101+
&magic MAGIC 0 &kp HOME &kp END &kp LEFT &kp RIGHT &kp BSPC &kp DEL &kp LALT &kp RALT &kp RET &kp SPACE &kp UP &kp DOWN &kp LBKT &kp RBKT &kp PG_DN
84102
>;
85103
};
86104

@@ -97,12 +115,23 @@
97115

98116
magic_layer {
99117
bindings = <
100-
&bt BT_CLR &none &none &none &none &none &none &none &none &none
118+
&bt BT_CLR &none &none &none &none &none &none &none &none &bt BT_CLR_ALL
101119
&none &none &none &none &none &none &none &none &none &none &none &none
102120
&none &rgb_ug RGB_SPI &rgb_ug RGB_SAI &rgb_ug RGB_HUI &rgb_ug RGB_BRI &rgb_ug RGB_TOG &none &none &none &none &none &none
103121
&bootloader &rgb_ug RGB_SPD &rgb_ug RGB_SAD &rgb_ug RGB_HUD &rgb_ug RGB_BRD &rgb_ug RGB_EFF &none &none &none &none &none &bootloader
104122
&sys_reset &none &none &none &none &none &bt_2 &bt_3 &none &none &none &none &none &none &none &none &none &sys_reset
105-
&none &none &none &none &none &bt_0 &bt_1 &out OUT_USB &none &none &none &none &none &none &none &none
123+
&none &none &none &none &none &bt_0 &bt_1 &out OUT_USB &none &none &none &none &none &none &none &to FACTORY_TEST
124+
>;
125+
};
126+
127+
factory_test_layer {
128+
bindings = <
129+
&kp N0 &kp N6 &kp N2 &kp N8 &kp N4 &kp N4 &kp N8 &kp N2 &kp N6 &kp N0
130+
&kp N1 &kp N7 &kp N3 &kp N9 &kp N5 &kp N0 &kp N0 &kp N5 &kp N9 &kp N3 &kp N7 &kp N1
131+
&kp N2 &kp N8 &kp N4 &kp N0 &kp N6 &kp N1 &kp N1 &kp N6 &kp N0 &kp N4 &kp N8 &kp N2
132+
&kp N3 &kp N9 &kp N5 &kp N1 &kp N7 &kp N2 &kp N2 &kp N7 &kp N1 &kp N5 &kp N9 &kp N3
133+
&kp N4 &kp N0 &kp N6 &kp N2 &kp N8 &kp N3 &kp N4 &kp N5 &kp N6 &kp N6 &kp N5 &kp N4 &kp N3 &kp N8 &kp N2 &kp N6 &kp N0 &kp N4
134+
&kp N5 &kp N1 &kp N7 &kp N3 &kp N9 &kp N7 &kp N8 &kp N9 &kp N9 &kp N8 &kp N7 &kp N9 &kp N3 &kp N7 &kp N1 &kp N5
106135
>;
107136
};
108137
};

app/boards/arm/glove80/glove80_lh.dts

+27
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
zmk,underglow = &led_strip;
1818
zmk,backlight = &back_led_backlight;
1919
zmk,battery = &vbatt;
20+
zmk,underglow-indicators = &underglow_indicators;
2021
};
2122

2223
back_led_backlight: pwmleds {
@@ -36,6 +37,32 @@
3637
vbatt: vbatt {
3738
compatible = "zmk,battery-nrf-vddh";
3839
};
40+
41+
/*
42+
MoErgo 40 LEDs
43+
44+
34 28 22 16 10
45+
35 29 23 17 11 6
46+
36 30 24 18 12 7
47+
37 31 25 19 13 8
48+
38 32 26 20 14 9
49+
39 33 27 21 15
50+
0 1 2
51+
3 4 5
52+
*/
53+
54+
underglow_indicators: underglow-indicators {
55+
compatible = "zmk,underglow-indicators";
56+
layer-state = <35 29 23 17 11 6>;
57+
bat-lhs = <36 30 24 18 12 7>;
58+
bat-rhs = <37 31 25 19 13 8>;
59+
capslock = <22>;
60+
numlock = <16>;
61+
scrolllock = <10>;
62+
ble-state = <3 4 0 1>;
63+
usb-state = <5>;
64+
output-fallback = <15>;
65+
};
3966
};
4067

4168
&spi3 {

app/boards/arm/glove80/glove80_lh_defconfig

+21
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,25 @@ CONFIG_BT_DIS_PNP_VID=0x16c0
2323
CONFIG_BT_DIS_MANUF="MoErgo"
2424
CONFIG_BT_DIS_MODEL="Glove80"
2525

26+
### Bluetooth configuration workarounds
27+
28+
# Use higher radio transmit power
2629
CONFIG_BT_CTLR_TX_PWR_PLUS_8=y
2730

2831
# Work-around for Windows bug with battery notifications
2932
CONFIG_BT_GATT_ENFORCE_SUBSCRIPTION=n
3033

34+
# Allow unauthenticated re-pairing for already paired hosts. This would permit
35+
# an attacker that can spoof the host's peer address to "steal" the keyboard
36+
# pairing by overwriting it, but without access to the previous keys it can't
37+
# establish a MITM, and the sudden loss of the keyboard would be very obvious to
38+
# the previously-connected host.
39+
CONFIG_BT_SMP_ALLOW_UNAUTH_OVERWRITE=y
40+
CONFIG_ZMK_BLE_PASSKEY_ENTRY=n
41+
42+
# Fetch peripheral battery level for status display reporting
43+
CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING=y
44+
3145
# Enable MPU
3246
CONFIG_ARM_MPU=y
3347

@@ -53,6 +67,9 @@ CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y
5367
# Enable RGB underglow
5468
CONFIG_ZMK_RGB_UNDERGLOW=y
5569

70+
# disable EXT_POWER until underglow gets turned on
71+
CONFIG_ZMK_EXT_POWER_START=n
72+
5673
CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER=y
5774
CONFIG_ZMK_RGB_UNDERGLOW_ON_START=n
5875
CONFIG_ZMK_RGB_UNDERGLOW_BRT_STEP=4
@@ -81,6 +98,10 @@ CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB=y
8198
# space.
8299
CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_BASIC=y
83100

101+
# Enable USB boot protocol support
102+
CONFIG_ZMK_USB_BOOT=y
103+
CONFIG_ZMK_HID_INDICATORS=y
104+
84105
# Turn on debugging to disable optimization. Debug messages can result in larger
85106
# stacks, so enable stack protection and particularly a larger BLE peripheral stack.
86107
# CONFIG_DEBUG=y

app/boards/arm/glove80/glove80_rh_defconfig

+8-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ CONFIG_SOC_SERIES_NRF52X=y
55
CONFIG_SOC_NRF52840_QIAA=y
66
CONFIG_BOARD_GLOVE80_RH=y
77

8-
# Enable both USB and BLE
9-
CONFIG_ZMK_USB=y
8+
# Enable BLE for split peripheral
9+
CONFIG_ZMK_USB=n
1010
CONFIG_ZMK_BLE=y
1111

1212
# Keyboard IDs
@@ -21,6 +21,9 @@ CONFIG_BT_DIS_PNP_VID=0x16c0
2121
CONFIG_BT_DIS_MANUF="MoErgo"
2222
CONFIG_BT_DIS_MODEL="Glove80 Right"
2323

24+
### Bluetooth configuration workarounds
25+
26+
# Use higher radio transmit power
2427
CONFIG_BT_CTLR_TX_PWR_PLUS_8=y
2528

2629
# Enable MPU
@@ -48,6 +51,9 @@ CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y
4851
# Enable RGB underglow
4952
CONFIG_ZMK_RGB_UNDERGLOW=y
5053

54+
# disable EXT_POWER until underglow gets turned on
55+
CONFIG_ZMK_EXT_POWER_START=n
56+
5157
CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER=y
5258
CONFIG_ZMK_RGB_UNDERGLOW_ON_START=n
5359
CONFIG_ZMK_RGB_UNDERGLOW_BRT_STEP=4

app/boards/arm/glove80_v0/Kconfig

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# SPDX-License-Identifier: MIT
2+
3+
config BOARD_ENABLE_DCDC
4+
bool "Enable DCDC mode"
5+
select SOC_DCDC_NRF52X
6+
default y
7+
depends on (BOARD_GLOVE80_V0_LH || BOARD_GLOVE80_V0_RH)
+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# nice!nano board configuration
2+
3+
# Copyright (c) 2020 Pete Johanson
4+
# SPDX-License-Identifier: MIT
5+
6+
config BOARD_GLOVE80_V0_LH
7+
bool "Glove80 v0 LH"
8+
depends on SOC_NRF52840_QIAA
9+
10+
config BOARD_GLOVE80_V0_RH
11+
bool "Glove80 v0 RH"
12+
depends on SOC_NRF52840_QIAA
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# Copyright (c) 2021 The ZMK Contributors
2+
# SPDX-License-Identifier: MIT
3+
4+
if BOARD_GLOVE80_V0_LH
5+
config BOARD
6+
default "glove80 v0 lh"
7+
8+
config ZMK_SPLIT_BLE_ROLE_CENTRAL
9+
default y
10+
11+
config ZMK_KEYBOARD_NAME
12+
default "Glove80 V0 Left"
13+
endif # BOARD_GLOVE80_V0_LH
14+
15+
if BOARD_GLOVE80_V0_RH
16+
config BOARD
17+
default "glove80 v0 rh"
18+
19+
config ZMK_KEYBOARD_NAME
20+
default "Glove80 V0 Right"
21+
endif # BOARD_GLOVE80_V0_RH
22+
23+
if BOARD_GLOVE80_V0_LH || BOARD_GLOVE80_V0_RH
24+
25+
config ZMK_SPLIT
26+
default y
27+
28+
config BT_CTLR
29+
default BT
30+
31+
config ZMK_BLE
32+
default y
33+
34+
config ZMK_USB
35+
default y
36+
37+
config ZMK_BATTERY_VOLTAGE_DIVIDER
38+
default y
39+
40+
config ZMK_BATTERY_NRF_VDDH
41+
default y
42+
43+
config PINCTRL
44+
default y
45+
46+
if USB
47+
48+
config USB_NRFX
49+
default y
50+
51+
config USB_DEVICE_STACK
52+
default y
53+
54+
endif # USB
55+
56+
if ZMK_BACKLIGHT
57+
58+
config PWM
59+
default y
60+
61+
config LED_PWM
62+
default y
63+
64+
endif # ZMK_BACKLIGHT
65+
66+
endif # BOARD_GLOVE80_V0_LH || BOARD_GLOVE80_V0_RH

app/boards/arm/glove80_v0/board.cmake

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# SPDX-License-Identifier: MIT
2+
3+
board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset")
4+
include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake)
5+
include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake)
+100
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/*
2+
* Copyright (c) 2020 Pete Johanson
3+
*
4+
* SPDX-License-Identifier: MIT
5+
*/
6+
7+
#include <dt-bindings/zmk/matrix_transform.h>
8+
9+
/ {
10+
chosen {
11+
zmk,kscan = &kscan0;
12+
zmk,matrix-transform = &default_transform;
13+
zephyr,code-partition = &code_partition;
14+
zephyr,sram = &sram0;
15+
zephyr,flash = &flash0;
16+
zephyr,console = &cdc_acm_uart;
17+
};
18+
19+
default_transform: keymap_transform_0 {
20+
compatible = "zmk,matrix-transform";
21+
columns = <14>;
22+
rows = <6>;
23+
map = <
24+
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13)
25+
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13)
26+
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13)
27+
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,13)
28+
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(0,6) RC(1,6) RC(2,6) RC(2,7) RC(1,7) RC(0,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,13)
29+
RC(5,0) RC(5,1) RC(5,2) RC(5,3) RC(5,4) RC(3,6) RC(4,6) RC(5,6) RC(5,7) RC(4,7) RC(3,7) RC(5,9) RC(5,10) RC(5,11) RC(5,12) RC(5,13)
30+
>;
31+
};
32+
33+
kscan0: kscan {
34+
compatible = "zmk,kscan-gpio-matrix";
35+
36+
diode-direction = "row2col";
37+
debounce-press-ms = <1>;
38+
debounce-release-ms = <25>;
39+
};
40+
41+
};
42+
43+
&adc {
44+
status = "okay";
45+
};
46+
47+
&gpiote {
48+
status = "okay";
49+
};
50+
51+
&gpio0 {
52+
status = "okay";
53+
};
54+
55+
&gpio1 {
56+
status = "okay";
57+
};
58+
59+
&usbd {
60+
status = "okay";
61+
cdc_acm_uart: cdc_acm_uart {
62+
compatible = "zephyr,cdc-acm-uart";
63+
};
64+
};
65+
66+
&flash0 {
67+
/*
68+
* For more information, see:
69+
* http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html
70+
*/
71+
partitions {
72+
compatible = "fixed-partitions";
73+
#address-cells = <1>;
74+
#size-cells = <1>;
75+
76+
sd_partition: partition@0 {
77+
reg = <0x00000000 0x00026000>;
78+
};
79+
code_partition: partition@26000 {
80+
reg = <0x00026000 0x000c6000>;
81+
};
82+
83+
/*
84+
* The flash starting at 0x000ec000 and ending at
85+
* 0x000f3fff is reserved for use by the application.
86+
*/
87+
88+
/*
89+
* Storage partition will be used by FCB/LittleFS/NVS
90+
* if enabled.
91+
*/
92+
storage_partition: partition@ec000 {
93+
reg = <0x000ec000 0x00008000>;
94+
};
95+
96+
boot_partition: partition@f4000 {
97+
reg = <0x000f4000 0x0000c000>;
98+
};
99+
};
100+
};

0 commit comments

Comments
 (0)