Skip to content

Commit

Permalink
Configure Glove80 board definitions for custom features
Browse files Browse the repository at this point in the history
Additionally adds a board definition for Glove80-v0, an early version of Glove80.
  • Loading branch information
moergo-sc authored and chrisandreae committed Jul 2, 2024
1 parent a75d6aa commit e4f167f
Show file tree
Hide file tree
Showing 22 changed files with 833 additions and 5 deletions.
35 changes: 32 additions & 3 deletions app/boards/arm/glove80/glove80.keymap
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,13 @@
#include <dt-bindings/zmk/outputs.h>
#include <dt-bindings/zmk/rgb.h>

#define HYPER LC(LS(LG(LALT)))

// layers
#define DEFAULT 0
#define LOWER 1
#define MAGIC 2
#define FACTORY_TEST 3

/ {
behaviors {
Expand All @@ -26,9 +29,24 @@
tapping-term-ms = <200>;
bindings = <&mo LOWER>, <&to LOWER>;
};

magic: magic_hold_tap {
compatible = "zmk,behavior-hold-tap";
#binding-cells = <2>;
flavor = "tap-preferred";
tapping-term-ms = <200>;
bindings = <&mo>, <&rgb_ug_status_macro>;
};
};

macros {
rgb_ug_status_macro: rgb_ug_status_macro_0 {
compatible = "zmk,behavior-macro";
#binding-cells = <0>;
bindings
= <&rgb_ug RGB_STATUS>;
};

bt_0: bt_profile_macro_0 {
compatible = "zmk,behavior-macro";
#binding-cells = <0>;
Expand Down Expand Up @@ -80,7 +98,7 @@
&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH
&kp ESC &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT
&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
&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
&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
>;
};

Expand All @@ -97,12 +115,23 @@

magic_layer {
bindings = <
&bt BT_CLR &none &none &none &none &none &none &none &none &none
&bt BT_CLR &none &none &none &none &none &none &none &none &bt BT_CLR_ALL
&none &none &none &none &none &none &none &none &none &none &none &none
&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
&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
&sys_reset &none &none &none &none &none &bt_2 &bt_3 &none &none &none &none &none &none &none &none &none &sys_reset
&none &none &none &none &none &bt_0 &bt_1 &out OUT_USB &none &none &none &none &none &none &none &none
&none &none &none &none &none &bt_0 &bt_1 &out OUT_USB &none &none &none &none &none &none &none &to FACTORY_TEST
>;
};

factory_test_layer {
bindings = <
&kp N0 &kp N6 &kp N2 &kp N8 &kp N4 &kp N4 &kp N8 &kp N2 &kp N6 &kp N0
&kp N1 &kp N7 &kp N3 &kp N9 &kp N5 &kp N0 &kp N0 &kp N5 &kp N9 &kp N3 &kp N7 &kp N1
&kp N2 &kp N8 &kp N4 &kp N0 &kp N6 &kp N1 &kp N1 &kp N6 &kp N0 &kp N4 &kp N8 &kp N2
&kp N3 &kp N9 &kp N5 &kp N1 &kp N7 &kp N2 &kp N2 &kp N7 &kp N1 &kp N5 &kp N9 &kp N3
&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
&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
>;
};
};
Expand Down
27 changes: 27 additions & 0 deletions app/boards/arm/glove80/glove80_lh.dts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
zmk,underglow = &led_strip;
zmk,backlight = &back_led_backlight;
zmk,battery = &vbatt;
zmk,underglow-indicators = &underglow_indicators;
};

back_led_backlight: pwmleds {
Expand All @@ -36,6 +37,32 @@
vbatt: vbatt {
compatible = "zmk,battery-nrf-vddh";
};

/*
MoErgo 40 LEDs

34 28 22 16 10
35 29 23 17 11 6
36 30 24 18 12 7
37 31 25 19 13 8
38 32 26 20 14 9
39 33 27 21 15
0 1 2
3 4 5
*/

underglow_indicators: underglow-indicators {
compatible = "zmk,underglow-indicators";
layer-state = <35 29 23 17 11 6>;
bat-lhs = <36 30 24 18 12 7>;
bat-rhs = <37 31 25 19 13 8>;
capslock = <22>;
numlock = <16>;
scrolllock = <10>;
ble-state = <3 4 0 1>;
usb-state = <5>;
output-fallback = <15>;
};
};

&spi3 {
Expand Down
21 changes: 21 additions & 0 deletions app/boards/arm/glove80/glove80_lh_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,25 @@ CONFIG_BT_DIS_PNP_VID=0x16c0
CONFIG_BT_DIS_MANUF="MoErgo"
CONFIG_BT_DIS_MODEL="Glove80"

### Bluetooth configuration workarounds

# Use higher radio transmit power
CONFIG_BT_CTLR_TX_PWR_PLUS_8=y

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

# Allow unauthenticated re-pairing for already paired hosts. This would permit
# an attacker that can spoof the host's peer address to "steal" the keyboard
# pairing by overwriting it, but without access to the previous keys it can't
# establish a MITM, and the sudden loss of the keyboard would be very obvious to
# the previously-connected host.
CONFIG_BT_SMP_ALLOW_UNAUTH_OVERWRITE=y
CONFIG_ZMK_BLE_PASSKEY_ENTRY=n

# Fetch peripheral battery level for status display reporting
CONFIG_ZMK_SPLIT_BLE_CENTRAL_BATTERY_LEVEL_FETCHING=y

# Enable MPU
CONFIG_ARM_MPU=y

Expand All @@ -53,6 +67,9 @@ CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y
# Enable RGB underglow
CONFIG_ZMK_RGB_UNDERGLOW=y

# disable EXT_POWER until underglow gets turned on
CONFIG_ZMK_EXT_POWER_START=n

CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER=y
CONFIG_ZMK_RGB_UNDERGLOW_ON_START=n
CONFIG_ZMK_RGB_UNDERGLOW_BRT_STEP=4
Expand Down Expand Up @@ -81,6 +98,10 @@ CONFIG_ZMK_BACKLIGHT_AUTO_OFF_USB=y
# space.
CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_BASIC=y

# Enable USB boot protocol support
CONFIG_ZMK_USB_BOOT=y
CONFIG_ZMK_HID_INDICATORS=y

# Turn on debugging to disable optimization. Debug messages can result in larger
# stacks, so enable stack protection and particularly a larger BLE peripheral stack.
# CONFIG_DEBUG=y
Expand Down
10 changes: 8 additions & 2 deletions app/boards/arm/glove80/glove80_rh_defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ CONFIG_SOC_SERIES_NRF52X=y
CONFIG_SOC_NRF52840_QIAA=y
CONFIG_BOARD_GLOVE80_RH=y

# Enable both USB and BLE
CONFIG_ZMK_USB=y
# Enable BLE for split peripheral
CONFIG_ZMK_USB=n
CONFIG_ZMK_BLE=y

# Keyboard IDs
Expand All @@ -21,6 +21,9 @@ CONFIG_BT_DIS_PNP_VID=0x16c0
CONFIG_BT_DIS_MANUF="MoErgo"
CONFIG_BT_DIS_MODEL="Glove80 Right"

### Bluetooth configuration workarounds

# Use higher radio transmit power
CONFIG_BT_CTLR_TX_PWR_PLUS_8=y

# Enable MPU
Expand Down Expand Up @@ -48,6 +51,9 @@ CONFIG_CLOCK_CONTROL_NRF_K32SRC_XTAL=y
# Enable RGB underglow
CONFIG_ZMK_RGB_UNDERGLOW=y

# disable EXT_POWER until underglow gets turned on
CONFIG_ZMK_EXT_POWER_START=n

CONFIG_ZMK_RGB_UNDERGLOW_EXT_POWER=y
CONFIG_ZMK_RGB_UNDERGLOW_ON_START=n
CONFIG_ZMK_RGB_UNDERGLOW_BRT_STEP=4
Expand Down
7 changes: 7 additions & 0 deletions app/boards/arm/glove80_v0/Kconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# SPDX-License-Identifier: MIT

config BOARD_ENABLE_DCDC
bool "Enable DCDC mode"
select SOC_DCDC_NRF52X
default y
depends on (BOARD_GLOVE80_V0_LH || BOARD_GLOVE80_V0_RH)
12 changes: 12 additions & 0 deletions app/boards/arm/glove80_v0/Kconfig.board
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# nice!nano board configuration

# Copyright (c) 2020 Pete Johanson
# SPDX-License-Identifier: MIT

config BOARD_GLOVE80_V0_LH
bool "Glove80 v0 LH"
depends on SOC_NRF52840_QIAA

config BOARD_GLOVE80_V0_RH
bool "Glove80 v0 RH"
depends on SOC_NRF52840_QIAA
66 changes: 66 additions & 0 deletions app/boards/arm/glove80_v0/Kconfig.defconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Copyright (c) 2021 The ZMK Contributors
# SPDX-License-Identifier: MIT

if BOARD_GLOVE80_V0_LH
config BOARD
default "glove80 v0 lh"

config ZMK_SPLIT_BLE_ROLE_CENTRAL
default y

config ZMK_KEYBOARD_NAME
default "Glove80 V0 Left"
endif # BOARD_GLOVE80_V0_LH

if BOARD_GLOVE80_V0_RH
config BOARD
default "glove80 v0 rh"

config ZMK_KEYBOARD_NAME
default "Glove80 V0 Right"
endif # BOARD_GLOVE80_V0_RH

if BOARD_GLOVE80_V0_LH || BOARD_GLOVE80_V0_RH

config ZMK_SPLIT
default y

config BT_CTLR
default BT

config ZMK_BLE
default y

config ZMK_USB
default y

config ZMK_BATTERY_VOLTAGE_DIVIDER
default y

config ZMK_BATTERY_NRF_VDDH
default y

config PINCTRL
default y

if USB

config USB_NRFX
default y

config USB_DEVICE_STACK
default y

endif # USB

if ZMK_BACKLIGHT

config PWM
default y

config LED_PWM
default y

endif # ZMK_BACKLIGHT

endif # BOARD_GLOVE80_V0_LH || BOARD_GLOVE80_V0_RH
5 changes: 5 additions & 0 deletions app/boards/arm/glove80_v0/board.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# SPDX-License-Identifier: MIT

board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset")
include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake)
include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake)
100 changes: 100 additions & 0 deletions app/boards/arm/glove80_v0/glove80_v0.dtsi
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
/*
* Copyright (c) 2020 Pete Johanson
*
* SPDX-License-Identifier: MIT
*/

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

/ {
chosen {
zmk,kscan = &kscan0;
zmk,matrix-transform = &default_transform;
zephyr,code-partition = &code_partition;
zephyr,sram = &sram0;
zephyr,flash = &flash0;
zephyr,console = &cdc_acm_uart;
};

default_transform: keymap_transform_0 {
compatible = "zmk,matrix-transform";
columns = <14>;
rows = <6>;
map = <
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)
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)
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)
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)
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)
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)
>;
};

kscan0: kscan {
compatible = "zmk,kscan-gpio-matrix";

diode-direction = "row2col";
debounce-press-ms = <1>;
debounce-release-ms = <25>;
};

};

&adc {
status = "okay";
};

&gpiote {
status = "okay";
};

&gpio0 {
status = "okay";
};

&gpio1 {
status = "okay";
};

&usbd {
status = "okay";
cdc_acm_uart: cdc_acm_uart {
compatible = "zephyr,cdc-acm-uart";
};
};

&flash0 {
/*
* For more information, see:
* http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html
*/
partitions {
compatible = "fixed-partitions";
#address-cells = <1>;
#size-cells = <1>;

sd_partition: partition@0 {
reg = <0x00000000 0x00026000>;
};
code_partition: partition@26000 {
reg = <0x00026000 0x000c6000>;
};

/*
* The flash starting at 0x000ec000 and ending at
* 0x000f3fff is reserved for use by the application.
*/

/*
* Storage partition will be used by FCB/LittleFS/NVS
* if enabled.
*/
storage_partition: partition@ec000 {
reg = <0x000ec000 0x00008000>;
};

boot_partition: partition@f4000 {
reg = <0x000f4000 0x0000c000>;
};
};
};
Loading

0 comments on commit e4f167f

Please sign in to comment.