Merge remote-tracking branch 'upstream/main' into split_battery_service
This commit is contained in:
commit
377444ef30
27 changed files with 6117 additions and 29005 deletions
24
.github/workflows/test.yml
vendored
24
.github/workflows/test.yml
vendored
|
@ -13,7 +13,24 @@ on:
|
|||
- "app/src/**"
|
||||
|
||||
jobs:
|
||||
integration_test:
|
||||
collect-tests:
|
||||
outputs:
|
||||
test-dirs: ${{ steps.test-dirs.outputs.test-dirs }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
- name: Find test directories
|
||||
id: test-dirs
|
||||
run: |
|
||||
cd app/tests/
|
||||
export TESTS=$(ls -d * | jq -R -s -c 'split("\n")[:-1]')
|
||||
echo "::set-output name=test-dirs::${TESTS}"
|
||||
run-tests:
|
||||
needs: collect-tests
|
||||
strategy:
|
||||
matrix:
|
||||
test: ${{ fromJSON(needs.collect-tests.outputs.test-dirs) }}
|
||||
runs-on: ubuntu-latest
|
||||
container:
|
||||
image: docker.io/zmkfirmware/zmk-build-arm:3.0
|
||||
|
@ -43,8 +60,9 @@ jobs:
|
|||
run: west update
|
||||
- name: Export Zephyr CMake package (west zephyr-export)
|
||||
run: west zephyr-export
|
||||
- name: Test all
|
||||
run: west test
|
||||
- name: Test ${{ matrix.test }}
|
||||
working-directory: app
|
||||
run: west test tests/${{ matrix.test }}
|
||||
- name: Archive artifacts
|
||||
if: ${{ always() }}
|
||||
uses: actions/upload-artifact@v2
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# keeb.io BDN9 board configuration
|
||||
|
||||
# Copyright (c) 2020 Pete Johanson
|
||||
# Copyright (c) 2020 The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
if BOARD_BDN9
|
||||
|
@ -14,4 +14,8 @@ config ZMK_KEYBOARD_NAME
|
|||
config ZMK_USB
|
||||
default y
|
||||
|
||||
config ZMK_RGB_UNDERGLOW
|
||||
select SPI
|
||||
select WS2812_STRIP
|
||||
|
||||
endif # BOARD_BDN9
|
||||
|
|
5
app/boards/arm/bdn9/bdn9_rev2.conf
Normal file
5
app/boards/arm/bdn9/bdn9_rev2.conf
Normal file
|
@ -0,0 +1,5 @@
|
|||
# Copyright (c) 2022 The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
# Uncomment the line below to enable RGB.
|
||||
# CONFIG_ZMK_RGB_UNDERGLOW=y
|
|
@ -18,9 +18,7 @@
|
|||
zephyr,flash = &flash0;
|
||||
zephyr,console = &cdc_acm_uart;
|
||||
zmk,kscan = &kscan;
|
||||
/* TODO: Enable once the GPIO bitbanging driver supports STM32
|
||||
zmk,underglow = &led_strip;
|
||||
*/
|
||||
};
|
||||
|
||||
kscan: kscan {
|
||||
|
@ -40,17 +38,6 @@
|
|||
;
|
||||
};
|
||||
|
||||
/*
|
||||
led_strip: ws2812 {
|
||||
compatible = "worldsemi,ws2812-gpio";
|
||||
label = "WS2812";
|
||||
|
||||
in-gpios = <&gpiob 15 0>;
|
||||
|
||||
chain-length = <9>;
|
||||
};
|
||||
*/
|
||||
|
||||
left_encoder: encoder_left {
|
||||
compatible = "alps,ec11";
|
||||
label = "LEFT_ENCODER";
|
||||
|
@ -83,6 +70,28 @@
|
|||
};
|
||||
};
|
||||
|
||||
&spi2 {
|
||||
status = "okay";
|
||||
pinctrl-0 = <&spi2_sck_pb13 &spi2_miso_pb14 &spi2_mosi_pb15>;
|
||||
pinctrl-names = "default";
|
||||
|
||||
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 = <9>;
|
||||
spi-one-frame = <0x70>;
|
||||
spi-zero-frame = <0x40>;
|
||||
|
||||
color-mapping = <LED_COLOR_ID_GREEN LED_COLOR_ID_RED LED_COLOR_ID_BLUE>;
|
||||
};
|
||||
};
|
||||
|
||||
&clk_hsi {
|
||||
status = "okay";
|
||||
};
|
||||
|
|
9
app/boards/shields/hummingbird/Kconfig.defconfig
Normal file
9
app/boards/shields/hummingbird/Kconfig.defconfig
Normal file
|
@ -0,0 +1,9 @@
|
|||
# Copyright (c) 2022 The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
if SHIELD_HUMMINGBIRD
|
||||
|
||||
config ZMK_KEYBOARD_NAME
|
||||
default "Hummingbird"
|
||||
|
||||
endif
|
5
app/boards/shields/hummingbird/Kconfig.shield
Normal file
5
app/boards/shields/hummingbird/Kconfig.shield
Normal file
|
@ -0,0 +1,5 @@
|
|||
# Copyright (c) 2022 The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
config SHIELD_HUMMINGBIRD
|
||||
def_bool $(shields_list_contains,hummingbird)
|
0
app/boards/shields/hummingbird/hummingbird.conf
Normal file
0
app/boards/shields/hummingbird/hummingbird.conf
Normal file
98
app/boards/shields/hummingbird/hummingbird.keymap
Normal file
98
app/boards/shields/hummingbird/hummingbird.keymap
Normal file
|
@ -0,0 +1,98 @@
|
|||
/*
|
||||
* Copyright (c) 2022 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include <behaviors.dtsi>
|
||||
#include <dt-bindings/zmk/keys.h>
|
||||
|
||||
#define DEF_L 0
|
||||
#define NAV_L 1
|
||||
#define NUM_L 2
|
||||
#define SYM_L 3
|
||||
|
||||
// Using layer taps on thumbs, having quick tap as well helps w/ repeating space/backspace
|
||||
< { quick_tap_ms = <200>; };
|
||||
|
||||
/ {
|
||||
behaviors {
|
||||
hm: homerow_mods {
|
||||
compatible = "zmk,behavior-hold-tap";
|
||||
label = "homerow mods";
|
||||
#binding-cells = <2>;
|
||||
tapping_term_ms = <225>;
|
||||
flavor = "tap-preferred";
|
||||
bindings = <&kp>, <&kp>;
|
||||
};
|
||||
};
|
||||
|
||||
combos {
|
||||
compatible = "zmk,combos";
|
||||
combo_z {
|
||||
timeout-ms = <50>;
|
||||
key-positions = <20 21>;
|
||||
bindings = <&kp Z>;
|
||||
};
|
||||
combo_b {
|
||||
timeout-ms = <50>;
|
||||
key-positions = <21 22>;
|
||||
bindings = <&kp B>;
|
||||
};
|
||||
|
||||
combo_y {
|
||||
timeout-ms = <50>;
|
||||
key-positions = <23 24>;
|
||||
bindings = <&kp Y>;
|
||||
};
|
||||
|
||||
combo_slash {
|
||||
timeout-ms = <50>;
|
||||
key-positions = <24 25>;
|
||||
bindings = <&kp SLASH>;
|
||||
};
|
||||
};
|
||||
|
||||
keymap {
|
||||
compatible = "zmk,keymap";
|
||||
|
||||
default_layer {
|
||||
bindings = <
|
||||
&kp Q &kp W &kp E &kp R &kp T &kp H &kp U &kp I &kp O &kp P
|
||||
&hm LGUI A &hm LALT S &hm LCTRL D &hm LSHFT F &kp G &kp N &hm RSHFT J &hm RCTRL K &hm LALT L &hm RGUI QUOT
|
||||
&kp X &kp C &kp V &kp M &kp COMMA &kp DOT
|
||||
< NAV_L TAB &kp RET < NUM_L SPACE < SYM_L BKSP
|
||||
>;
|
||||
};
|
||||
|
||||
nav_layer {
|
||||
label = "Nav";
|
||||
bindings = <
|
||||
&trans &trans &trans &trans &trans &trans &kp HOME &kp UARW &kp PG_UP &trans
|
||||
&trans &trans &trans &trans &trans &trans &kp LARW &kp DARW &kp RARW &trans
|
||||
&trans &trans &trans &kp END &trans &kp PG_DN
|
||||
&trans &trans &kp ESC &kp DEL
|
||||
>;
|
||||
};
|
||||
|
||||
num_layer {
|
||||
label = "Num";
|
||||
bindings = <
|
||||
&kp LBKT &kp N7 &kp N8 &kp N9 &kp RBKT &trans &trans &trans &trans &trans
|
||||
&kp SEMI &kp N4 &kp N5 &kp N6 &kp EQUAL &trans &trans &trans &trans &trans
|
||||
&kp N1 &kp N2 &kp N3 &trans &trans &trans
|
||||
&kp N0 &kp MINUS &trans &trans
|
||||
>;
|
||||
};
|
||||
|
||||
sym_layer {
|
||||
label = "Sym";
|
||||
bindings = <
|
||||
&kp LBRC &kp LS(N7) &kp LS(N8) &kp LS(N9) &kp RBRC &trans &trans &trans &trans &trans
|
||||
&kp COLON &kp LS(N4) &kp LS(N5) &kp LS(N6) &kp PLUS &trans &trans &trans &trans &trans
|
||||
&kp LS(N1) &kp LS(N2) &kp LS(N3) &trans &trans &trans
|
||||
&kp LS(N0) &kp UNDER &trans &trans
|
||||
>;
|
||||
};
|
||||
};
|
||||
};
|
57
app/boards/shields/hummingbird/hummingbird.overlay
Normal file
57
app/boards/shields/hummingbird/hummingbird.overlay
Normal file
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
* Copyright (c) 2022 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include <dt-bindings/zmk/matrix_transform.h>
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
zmk,kscan = &kscan0;
|
||||
zmk,matrix_transform = &default_transform;
|
||||
/delete-property/ zephyr,console;
|
||||
/delete-property/ zephyr,shell-uart;
|
||||
};
|
||||
|
||||
default_transform: keymap_transform_0 {
|
||||
compatible = "zmk,matrix-transform";
|
||||
columns = <7>;
|
||||
rows = <6>;
|
||||
map = <
|
||||
RC(0,0) RC(1,0) RC(0,1) RC(1,1) RC(0,2) RC(1,2) RC(0,3) RC(1,3) RC(0,4) RC(1,4)
|
||||
RC(2,0) RC(3,0) RC(2,1) RC(3,1) RC(2,2) RC(3,2) RC(2,3) RC(3,3) RC(2,4) RC(3,4)
|
||||
RC(4,0) RC(5,0) RC(4,1) RC(5,2) RC(4,3) RC(5,3)
|
||||
RC(5,1) RC(4,2) RC(5,4) RC(4,4)
|
||||
>;
|
||||
};
|
||||
|
||||
|
||||
kscan0: kscan_0 {
|
||||
compatible = "zmk,kscan-gpio-matrix";
|
||||
label = "KSCAN";
|
||||
diode-direction = "row2col";
|
||||
|
||||
col-gpios
|
||||
= <&xiao_d 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||
, <&xiao_d 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||
, <&xiao_d 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||
, <&xiao_d 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||
, <&xiao_d 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||
;
|
||||
|
||||
row-gpios
|
||||
= <&xiao_d 0 GPIO_ACTIVE_HIGH>
|
||||
, <&xiao_d 1 GPIO_ACTIVE_HIGH>
|
||||
, <&xiao_d 2 GPIO_ACTIVE_HIGH>
|
||||
, <&xiao_d 3 GPIO_ACTIVE_HIGH>
|
||||
, <&xiao_d 4 GPIO_ACTIVE_HIGH>
|
||||
, <&xiao_d 5 GPIO_ACTIVE_HIGH>
|
||||
;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
&xiao_spi { status = "disabled"; };
|
||||
&xiao_i2c { status = "disabled"; };
|
||||
&xiao_serial { status = "disabled"; };
|
8
app/boards/shields/hummingbird/hummingbird.zmk.yml
Normal file
8
app/boards/shields/hummingbird/hummingbird.zmk.yml
Normal file
|
@ -0,0 +1,8 @@
|
|||
file_format: "1"
|
||||
id: hummingbird
|
||||
name: Hummingbird
|
||||
type: shield
|
||||
url: https://github.com/PJE66/hummingbird
|
||||
requires: [seeed_xiao]
|
||||
features:
|
||||
- keys
|
|
@ -78,9 +78,9 @@ static const uint8_t zmk_hid_report_desc[] = {
|
|||
HID_REPORT_SIZE(0x08),
|
||||
#elif IS_ENABLED(CONFIG_ZMK_HID_CONSUMER_REPORT_USAGES_FULL)
|
||||
HID_LOGICAL_MIN8(0x00),
|
||||
HID_LOGICAL_MAX16(0xFF, 0xFF),
|
||||
HID_LOGICAL_MAX16(0xFF, 0x0F),
|
||||
HID_USAGE_MIN8(0x00),
|
||||
HID_USAGE_MAX16(0xFF, 0xFF),
|
||||
HID_USAGE_MAX16(0xFF, 0x0F),
|
||||
HID_REPORT_SIZE(0x10),
|
||||
#else
|
||||
#error "A proper consumer HID report usage range must be selected"
|
||||
|
|
|
@ -15,7 +15,7 @@ fi
|
|||
|
||||
testcases=$(find $path -name native_posix_64.keymap -exec dirname \{\} \;)
|
||||
num_cases=$(echo "$testcases" | wc -l)
|
||||
if [ $num_cases -gt 1 ]; then
|
||||
if [ $num_cases -gt 1 ] || [ "$testcases" != "$path" ]; then
|
||||
echo "" > ./build/tests/pass-fail.log
|
||||
echo "$testcases" | xargs -L 1 -P ${J:-4} ./run-test.sh
|
||||
err=$?
|
||||
|
|
|
@ -674,9 +674,6 @@ static int behavior_hold_tap_init(const struct device *dev) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
struct behavior_hold_tap_data {};
|
||||
static struct behavior_hold_tap_data behavior_hold_tap_data;
|
||||
|
||||
#define KP_INST(n) \
|
||||
static struct behavior_hold_tap_config behavior_hold_tap_config_##n = { \
|
||||
.tapping_term_ms = DT_INST_PROP(n, tapping_term_ms), \
|
||||
|
@ -688,9 +685,9 @@ static struct behavior_hold_tap_data behavior_hold_tap_data;
|
|||
.hold_trigger_key_positions = DT_INST_PROP(n, hold_trigger_key_positions), \
|
||||
.hold_trigger_key_positions_len = DT_INST_PROP_LEN(n, hold_trigger_key_positions), \
|
||||
}; \
|
||||
DEVICE_DT_INST_DEFINE(n, behavior_hold_tap_init, NULL, &behavior_hold_tap_data, \
|
||||
&behavior_hold_tap_config_##n, APPLICATION, \
|
||||
CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, &behavior_hold_tap_driver_api);
|
||||
DEVICE_DT_INST_DEFINE(n, behavior_hold_tap_init, NULL, NULL, &behavior_hold_tap_config_##n, \
|
||||
APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \
|
||||
&behavior_hold_tap_driver_api);
|
||||
|
||||
DT_INST_FOREACH_STATUS_OKAY(KP_INST)
|
||||
|
||||
|
|
|
@ -50,7 +50,8 @@ static struct k_work_delayable ext_power_save_work;
|
|||
|
||||
int ext_power_save_state() {
|
||||
#if IS_ENABLED(CONFIG_SETTINGS)
|
||||
return k_work_reschedule(&ext_power_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE));
|
||||
int ret = k_work_reschedule(&ext_power_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE));
|
||||
return MIN(ret, 0);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
|
|
|
@ -272,7 +272,8 @@ static int zmk_rgb_underglow_init(const struct device *_arg) {
|
|||
|
||||
int zmk_rgb_underglow_save_state() {
|
||||
#if IS_ENABLED(CONFIG_SETTINGS)
|
||||
return k_work_reschedule(&underglow_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE));
|
||||
int ret = k_work_reschedule(&underglow_save_work, K_MSEC(CONFIG_ZMK_SETTINGS_SAVE_DEBOUNCE));
|
||||
return MIN(ret, 0);
|
||||
#else
|
||||
return 0;
|
||||
#endif
|
||||
|
|
|
@ -4,13 +4,9 @@ manifest:
|
|||
url-base: https://github.com/zephyrproject-rtos
|
||||
- name: zmkfirmware
|
||||
url-base: https://github.com/zmkfirmware
|
||||
- name: petejohanson
|
||||
url-base: https://github.com/petejohanson
|
||||
- name: microsoft
|
||||
url-base: https://github.com/microsoft
|
||||
projects:
|
||||
- name: zephyr
|
||||
remote: petejohanson
|
||||
remote: zmkfirmware
|
||||
revision: v3.0.0+zmk-fixes
|
||||
clone-depth: 1
|
||||
import:
|
||||
|
|
265
docs/blog/2022-04-10-zmk-sotf-5.md
Normal file
265
docs/blog/2022-04-10-zmk-sotf-5.md
Normal file
|
@ -0,0 +1,265 @@
|
|||
---
|
||||
title: "ZMK State Of The Firmware #5"
|
||||
author: Pete Johanson
|
||||
author_title: Project Creator
|
||||
author_url: https://gitlab.com/petejohanson
|
||||
author_image_url: https://www.gravatar.com/avatar/2001ceff7e9dc753cf96fcb2e6f41110
|
||||
tags: [SOTF, keyboards, firmware, oss, ble]
|
||||
---
|
||||
|
||||
Welcome to the fifth ZMK "State Of The Firmware" (SOTF)!
|
||||
|
||||
This update will cover all the major activity since [SOTF #4](/blog/2021/01/27/zmk-sotf-4). That was over a year ago, so lots to cover!
|
||||
|
||||
## Recent Activity
|
||||
|
||||
Here's a summary of the various major changes since last time, broken down by theme:
|
||||
|
||||
### Keymaps/Behaviors
|
||||
|
||||
Since last time, there have been several new powerful keymap features and behaviors added, including several asked for features, such as tap-dance and macros.
|
||||
|
||||
#### Caps Word
|
||||
|
||||
[petejohanson] added the [caps word](/docs/behaviors/caps-word) behavior, i.e. `&caps_word`, in [#823](https://github.com/zmkfirmware/zmk/pull/823) that allows toggling a mode where all all alpha characters are sent
|
||||
to the host capitalized until a non-alpha, non-"continue list" keycode is sent. This can be useful for typing things like `CONFIG_ENABLE_CAPS_WORD` without having to hold down shift. This is similar in spirit to using the caps lock key, but with the added benefit of turning itself off automatically.
|
||||
|
||||
#### Key Repeat
|
||||
|
||||
[petejohanson] added the new [key repeat](/docs/behaviors/key-repeat) behavior in [#1034](https://github.com/zmkfirmware/zmk/pull/1034) to allow repeating the last sent key-press again, including any modifiers that were applied to that key press. It can be added to your keymap using the simple `&key_repeat` reference.
|
||||
|
||||
#### Macros
|
||||
|
||||
[petejohanson], taking heavy inspiration on the initial work from [okke-formsma], added [macro support](/docs/behaviors/macros) in [#1168](https://github.com/zmkfirmware/zmk/pull/1166). Several [common patterns](/docs/behaviors/macros#common-patterns) are documented, but one example, changing the underglow color as you activate/deactivate a layer, looks like:
|
||||
|
||||
```
|
||||
ZMK_MACRO(layer_color_macro,
|
||||
wait-ms = <0>;
|
||||
tap-ms = <0>;
|
||||
bindings
|
||||
= <¯o_press &mo 1>
|
||||
, <¯o_tap &rgb_ug RGB_COLOR_HSB(128,100,100)>
|
||||
, <¯o_pause_for_release>
|
||||
, <¯o_release &mo 1>
|
||||
, <¯o_tap &rgb_ug RGB_COLOR_HSB(300,100,50)>;
|
||||
)
|
||||
```
|
||||
|
||||
#### Tap Dance
|
||||
|
||||
[kurtis-lew] worked diligently to add the [tap-dance behavior](/docs/behaviors/tap-dance) in [#1139](https://github.com/zmkfirmware/zmk/pull/1139), allowing different behaviors to be invoked based on the number of times
|
||||
a user taps a single key in their keymap, e.g.
|
||||
|
||||
```
|
||||
/ {
|
||||
behaviors {
|
||||
td0: tap_dance_0 {
|
||||
compatible = "zmk,behavior-tap-dance";
|
||||
label = "TAP_DANCE_0";
|
||||
#binding-cells = <0>;
|
||||
tapping-term-ms = <200>;
|
||||
bindings = <&kp N1>, <&kp N2>, <&kp N3>;
|
||||
};
|
||||
};
|
||||
|
||||
keymap {
|
||||
compatible = "zmk,keymap";
|
||||
|
||||
default_layer {
|
||||
bindings = <
|
||||
&td0
|
||||
>;
|
||||
};
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
#### Conditional Layers
|
||||
|
||||
[bcat] added [conditional layers](/docs/features/conditional-layers) in [#830](https://github.com/zmkfirmware/zmk/pull/830) as a generalized version of the common "adjust layer" pattern on smaller keyboards.
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
/ {
|
||||
conditional_layers {
|
||||
compatible = "zmk,conditional-layers";
|
||||
tri_layer {
|
||||
if-layers = <1 2>;
|
||||
then-layer = <3>;
|
||||
};
|
||||
};
|
||||
};
|
||||
```
|
||||
|
||||
#### Combos
|
||||
|
||||
[mcrosson] added the [layer specific combos](https://zmk.dev/docs/features/combos#configuration) in [#661](https://github.com/zmkfirmware/zmk/pull/661), so users can make certain combos only triggerable when the layers set for the combo are active.
|
||||
|
||||
This is used by the [ZMK implementation](https://github.com/artseyio/zmk-artsey) of [ARTSEY](https://artsey.io/) extensively.
|
||||
|
||||
#### Sticky Keys
|
||||
|
||||
[okke-formsma] updated [sticky keys](/docs/behaviors/sticky-key) in [#1122](https://github.com/zmkfirmware/zmk/pull/1122) to add the `ignore-modifiers;` property; when set, sticky keys won't release when other modifiers are pressed. This allows you to combine sticky modifiers, which is popularly used with ["callum-style mods"](https://github.com/callum-oakley/qmk_firmware/tree/master/users/callum#oneshot-modifiers).
|
||||
|
||||
#### Hold-Tap Improvements
|
||||
|
||||
[jmding8](https://github.com/jmding8) added an additional [positional hold-tap configuration](https://zmk.dev/docs/behaviors/hold-tap#positional-hold-tap-and-hold-trigger-key-positions) in [#835](https://github.com/zmkfirmware/zmk/pull/835) to help certain sequences produce the expected results.
|
||||
|
||||
[jmding8](https://github.com/jmding8) also added an additional [hold-tap flavor: `tap-unless-interrupted`](https://zmk.dev/docs/behaviors/hold-tap#flavors) in [#1018](https://github.com/zmkfirmware/zmk/pull/1018) which works very well with the new positional hold-tap config.
|
||||
|
||||
[okke-formsma] implemented [`retro-tap` hold-tap property](https://zmk.dev/docs/behaviors/hold-tap#retro-tap) in [#667](https://github.com/zmkfirmware/zmk/pull/667)
|
||||
|
||||
[okke-formsma] _also_ added [`quick-tap-ms` hold-tap property](https://zmk.dev/docs/behaviors/hold-tap#quick-tap-ms) in [#655](https://github.com/zmkfirmware/zmk/pull/655)
|
||||
|
||||
### Apple Device Compatibility Improvements
|
||||
|
||||
#### Pairing
|
||||
|
||||
[petejohanson] did some sleuthing and fixed a long standing problem with inconsistent pairing with macOS in [#946]](https://github.com/zmkfirmware/zmk/pull/946). With the changes, macOS more reliably pairs with ZMK devices.
|
||||
|
||||
#### Consumer (Media) Codes
|
||||
|
||||
Another persistent bug that Apple users experienced was related to crashes and problems with keyboard configurations, that was traced to an issue with ZMK's HID usage that was fixed by [petejohanson] in [#726](https://github.com/zmkfirmware/zmk/pull/726).
|
||||
|
||||
### Debounce Enhancements
|
||||
|
||||
[joelspadin] applied some major enhancements to our [debouncing](/docs/features/debouncing) approach to allow fine grained control of our debouncing in [#888](https://github.com/zmkfirmware/zmk/pull/888), including allowing [eager debouncing](/docs/features/debouncing#eager-debouncing) which can reduce key press latency.
|
||||
|
||||
### Split Improvements
|
||||
|
||||
#### Behavior Locality
|
||||
|
||||
The long awaited locality enhancement was finally merged by [petejohanson] in [#547](https://github.com/zmkfirmware/zmk/pull/547), allowing more fine grained control of where certain behaviors are invoked. Some key improvements thanks to the changes:
|
||||
|
||||
- [RGB Underglow](/docs/features/underglow) behaviors now run globally, so enabling/disabling RGB, changing the color, animation, etc. applies to both sides of a split properly.
|
||||
- [Reset](/docs/behaviors/reset#reset)/[Bootloader](/docs/behaviors/reset#bootloader) behaviors now run wherever the key was pressed. For example, adding a `&bootloader` reference to the peripheral side of a split will now put that side of the split into the bootloader when pressed.
|
||||
|
||||
#### Split Connections
|
||||
|
||||
[petejohanson] also added fixes to improve split re-connection for certain scenarios in [#984](https://github.com/zmkfirmware/zmk/pull/984), helping ensure splits properly connect when one side or the other is reset.
|
||||
|
||||
### Hardware Support
|
||||
|
||||
#### Backlight
|
||||
|
||||
[bortoz](https://github.com/bortoz) added [single color backlight support](/docs/features/backlight) in [#904](https://github.com/zmkfirmware/zmk/pull/904) for those keyboards that have it as an alternative to RGB underglow.
|
||||
|
||||
#### E-Paper Display (EPD) Driver
|
||||
|
||||
[petejohanson] worked with [LOWPROKB](https://github.com/LOWPROKB) to add support for the E-Paper Displays (EPD) in [#895](https://github.com/zmkfirmware/zmk/pull/895) used in keyboards like the Corne-ish Zen.
|
||||
|
||||
#### nRF VDDH Battery Sensing
|
||||
|
||||
[joelspadin] added a new sensor driver to support battery charge calculation by sensing voltage on the VDDH pin on nRF52 chips in [#750](https://github.com/zmkfirmware/zmk/pull/750), which is particularly useful for designs
|
||||
using "high voltage mode" with that SoC.
|
||||
|
||||
### Miscellaneous
|
||||
|
||||
#### Documentation
|
||||
|
||||
[dxmh] and [caksoylar](https://github.com/caksoylar) have joined the ZMK organization to help with documentation, and have been doing an amazing job adding new docs, and leading reviewing docs related PRs to free other contributors up to focus on other areas. It's been an incredible addition to ZMK!
|
||||
|
||||
#### NKRO Support
|
||||
|
||||
[petejohanson]'s work on the HID foundation also included adding support for full NKRO HID in [#726](https://github.com/zmkfirmware/zmk/pull/726) that can be enabled by adding the following to your `.conf` file for your config:
|
||||
|
||||
```
|
||||
CONFIG_ZMK_HID_REPORT_TYPE_NKRO=y
|
||||
```
|
||||
|
||||
#### Power Profiler
|
||||
|
||||
It's been live for a while, but [nicell] added an amazing [power profiler](/power-profiler) in [#312](https://github.com/zmkfirmware/zmk/pull/312) to allow users to estimate their battery life for various hardware configurations.
|
||||
|
||||
#### Min/Max Underglow Brightness
|
||||
|
||||
[malinges](https://github.com/malinges) added support for configuring min/max underglow brightness in [#944](https://github.com/zmkfirmware/zmk/pull/944) by setting the values in your `.conf` file as percentages of full:
|
||||
|
||||
```
|
||||
CONFIG_ZMK_RGB_UNDERGLOW_BRT_MIN=20
|
||||
CONFIG_ZMK_RGB_UNDERGLOW_BRT_MAX=80
|
||||
```
|
||||
|
||||
This can be useful to be sure that lowering brightness doesn't set the brightness to zero, and raising the brightness doesn't consume too much power.
|
||||
|
||||
#### Zephyr 3.0
|
||||
|
||||
[petejohanson] helped prepare and test the upgrade of ZMK to Zephyr 3.0 in [#1143](https://github.com/zmkfirmware/zmk/pull/1143). The updated Zephyr release brings with it some key BLE stability fixes, as well as various other core improvements that improve ZMK. This was a huge undertaking!
|
||||
|
||||
## New Shields
|
||||
|
||||
- Contra in [#633](https://github.com/zmkfirmware/zmk/pull/633) - [iangus](https://github.com/iangus)
|
||||
- Naked60 in [#681](https://github.com/zmkfirmware/zmk/pull/681) - [xiushak](https://github.com/xiushak)
|
||||
- Murphpad in [#806](https://github.com/zmkfirmware/zmk/pull/806) - [kylemccreery](https://github.com/kylemccreery)
|
||||
- A. Dux in [#951](https://github.com/zmkfirmware/zmk/pull/951) - [dxmh]
|
||||
- Bat43 in [#956](https://github.com/zmkfirmware/zmk/pull/956) - [dnaq](https://github.com/dnaq)
|
||||
- Zodiark in [#959](https://github.com/zmkfirmware/zmk/pull/959) - [Aleblazer](https://github.com/Aleblazer)
|
||||
- Osprette in [#974](https://github.com/zmkfirmware/zmk/pull/974) - [smores56](https://github.com/smores56)
|
||||
- Knob Goblin in [#990](https://github.com/zmkfirmware/zmk/pull/990) - [lucasuyezu](https://github.com/lucasuyezu)
|
||||
- Redox in [#1002](https://github.com/zmkfirmware/zmk/pull/1002) - [toddmok](https://github.com/toddmok)
|
||||
- Elephant42 in [#1009](https://github.com/zmkfirmware/zmk/pull/1009) - [filoxo](https://github.com/filoxo)
|
||||
- Chalice in [#1022](https://github.com/zmkfirmware/zmk/pull/1022) - [joshajohnson](https://github.com/joshajohnson)
|
||||
- Boardsource 5x12 in [#1027](https://github.com/zmkfirmware/zmk/pull/1027) - [fsargent](https://github.com/fsargent)
|
||||
- Jiran in [#1048](https://github.com/zmkfirmware/zmk/pull/1048) - [krikun98](https://github.com/krikun98)
|
||||
- keeb.io Fourier in [#1056](https://github.com/zmkfirmware/zmk/pull/1056) - [TheButlah](https://github.com/TheButlah)
|
||||
- Lotus58 in [#1090](https://github.com/zmkfirmware/zmk/pull/1090) - [nettema](https://github.com/nettema)
|
||||
- Clog in [#1092](https://github.com/zmkfirmware/zmk/pull/1092) - [smores56](https://github.com/smores56)
|
||||
- Kyria rev2 in [#1112](https://github.com/zmkfirmware/zmk/pull/1112) - [petejohanson]
|
||||
- Leeloo in [#1165](https://github.com/zmkfirmware/zmk/pull/1165) - [ClicketySplit](https://github.com/ClicketySplit)
|
||||
- 2% Milk in [#1135](https://github.com/zmkfirmware/zmk/pull/1135) - [kurtis-lew]
|
||||
|
||||
## New Boards
|
||||
|
||||
- Ferris rev02 in [#642](https://github.com/zmkfirmware/zmk/pull/642) - [petejohanson]
|
||||
- nice!60 in [#810](https://github.com/zmkfirmware/zmk/pull/810) - [nicell]
|
||||
- nice!nano v2 in [#867](https://github.com/zmkfirmware/zmk/pull/867) - [nicell]
|
||||
- Mikoto 520 in [#985](https://github.com/zmkfirmware/zmk/pull/985) - [mrninhvn](https://github.com/mrninhvn)
|
||||
- S40NC in [#1021](https://github.com/zmkfirmware/zmk/pull/1021) - [kylemccreery](https://github.com/kylemccreery)
|
||||
- BT60 in [#1029](https://github.com/zmkfirmware/zmk/pull/1029) - [ReFil](https://github.com/ReFil)
|
||||
- Seeeduino XIAO BLE (as part of the Zephyr 3.0 work) in [#1143](https://github.com/zmkfirmware/zmk/pull/1143) - [petejohanson]
|
||||
|
||||
## Board/Shield Metadata
|
||||
|
||||
[nicell] and [petejohanson] worked together in [#883](https://github.com/zmkfirmware/zmk/pull/883) to settle on a [metadata format](/docs/development/hardware-metadata-files) that is used to document every board and shield. This now drives automatic generation of our [supported hardware](/docs/hardware) page and our
|
||||
more nuanced GH Actions automation for testing changes to ZMK.
|
||||
|
||||
## Coming Soon!
|
||||
|
||||
Some items listed in the last coming soon section are still under active development.
|
||||
|
||||
- RP2040 support
|
||||
- Peripheral rotary encoder support
|
||||
- Caps/Scroll/Num Lock LED support
|
||||
- Mouse Keys
|
||||
- Wired split support
|
||||
- More modular approach to external boards/shields, custom code, user keymaps, etc.
|
||||
- More shields and boards
|
||||
|
||||
## Statistics
|
||||
|
||||
Some statistics of interest for ZMK:
|
||||
|
||||
- GitHub (lifetime stats)
|
||||
- 105 Contributors
|
||||
- 791 Closed PRs
|
||||
- 849 Stars
|
||||
- 832 Forks
|
||||
- Discord Chat
|
||||
- 3430 total registered
|
||||
- Website (last 30 days)
|
||||
- 35.9K page views
|
||||
- 3.29K new users
|
||||
|
||||
## Thanks!
|
||||
|
||||
As we approach the two year birthday for ZMK, I am reminded of how far we have come in such a short time, in large part thanks to the _amazing_ community that has grown around it. I am so grateful to have so many contributors, testers, and user believing in the project and helping make it a joy to work on.
|
||||
|
||||
[okke-formsma]: https://github.com/okke-formsma
|
||||
[mcrosson]: https://github.com/mcrosson
|
||||
[nicell]: https://github.com/Nicell
|
||||
[petejohanson]: https://github.com/petejohanson
|
||||
[kurtis-lew]: https://github.com/kurtis-lew
|
||||
[joelspadin]: https://github.com/joelspadin
|
||||
[bcat]: https://github.com/bcat
|
||||
[dxmh]: https://github.com/dxmh
|
Binary file not shown.
Before Width: | Height: | Size: 182 KiB |
Binary file not shown.
Before Width: | Height: | Size: 184 KiB |
Binary file not shown.
Before Width: | Height: | Size: 183 KiB |
|
@ -33,11 +33,6 @@ provided by ZMK near the top:
|
|||
|
||||
Doing so makes a set of defines such as `A`, `N1`, etc. available for use with these behaviors
|
||||
|
||||
### Improperly defined keymap - `dtlib.DTError: <board>.dts.pre.tmp:<line number>`
|
||||
|
||||
When compiling firmware from a keymap, it may be common to encounter an error in the form of a`dtlib.DTError: <board>.dts.pre.tmp:<line number>`.
|
||||
For instructions to resolve such an error, click [here](../troubleshooting.md###Improperly-defined-keymap)
|
||||
|
||||
## Key Press
|
||||
|
||||
The "key press" behavior sends standard keycodes on press/release.
|
||||
|
|
|
@ -123,3 +123,8 @@ Example:
|
|||
```
|
||||
|
||||
It is possible to use "toggle layer" to have keys that raise and lower the layers as well.
|
||||
|
||||
## Conditional Layers
|
||||
|
||||
The "conditional layers" feature enables a particular layer when all layers in a specified set are active.
|
||||
For more information, see [conditional layers](../features/conditional-layers.md).
|
||||
|
|
|
@ -70,9 +70,7 @@ sudo apt install -y \
|
|||
```
|
||||
|
||||
:::note
|
||||
Recent LTS releases of Debian and Ubuntu may include outdated CMake versions. If the output of `cmake --version` is older than 3.15, upgrade your distribution (e.g., from Ubuntu 18.04 LTS to Ubuntu 20.04 LTS), or else install CMake version 3.15 or newer manually (e.g, from Debian backports or by building from source).
|
||||
|
||||
There is also a [zephyr bug](https://github.com/zephyrproject-rtos/zephyr/issues/22060) with cmake 3.19.x. You'll need a version _below_ 3.19.
|
||||
Recent LTS releases of Debian and Ubuntu may include outdated CMake versions. If the output of `cmake --version` is older than 3.20, upgrade your distribution (e.g., from Ubuntu 20.04 LTS to Ubuntu 22.04 LTS), or else install CMake version 3.20 or newer manually (e.g, from Debian backports or from PyPI with `pip install --user cmake`).
|
||||
:::
|
||||
</TabItem>
|
||||
<TabItem value="raspberryos">
|
||||
|
|
|
@ -26,28 +26,35 @@ Variations of the warnings shown below occur when flashing the `<firmware>.uf2`
|
|||
An error along the lines of `CMake Error at (zmk directory)/zephyr/cmake/generic_toolchain.cmake:64 (include): include could not find load file:` during firmware compilation indicates that the Zephyr Environment Variables are not properly defined.
|
||||
For more information, click [here](../docs/development/setup.md#environment-variables).
|
||||
|
||||
### dtlib.DTError
|
||||
### West Build Errors
|
||||
|
||||
An error along the lines of `dtlib.DTError: <board>.dts.pre.tmp:<line number>` during firmware compilation indicates an issue within the `<shield>.keymap` file.
|
||||
This can be verified by checking the file in question, found in `mkdir/app/build`.
|
||||
|
||||
|  |
|
||||
| :----------------------------------------------------------------------------------------------------------------: |
|
||||
| An example of the dtlib.DTError when compiling an iris with the nice!nano while the keymap is not properly defined |
|
||||
|
||||
After opening the `<board>.dts.pre.tmp:<line number>` and scrolling down to the referenced line, one can locate errors within their shield's keymap by checking if the referenced keycodes were properly converted into the correct [USB HID Usage ID](https://www.usb.org/document-library/hid-usage-tables-12).
|
||||
West build errors usually indicate syntax problems in the `<keyboard>.keymap` file during the compilation process. The following are some examples and root causes.
|
||||
|
||||
:::note
|
||||
If you are reviewing these errors in the GitHub Actions tab, the contents of `<board>.dts.pre.tmp` is output (with line numbers) in the next step of the build process.
|
||||
If you are reviewing these errors in the GitHub Actions tab, they can be found in the `West Build` step of the build process.
|
||||
:::
|
||||
|
||||
|  |
|
||||
| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|
||||
| An incorrectly defined keymap unable to compile. As shown in red, `&kp SPAC` is not a valid reference to the [USB HID Usage ID](https://www.usb.org/document-library/hid-usage-tables-12) used for "Keyboard Spacebar" |
|
||||
#### devicetree error
|
||||
|
||||
|  |
|
||||
| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|
||||
| A properly defined keymap with successful compilation. As shown in red, the corrected keycode (`&kp SPACE`) references the proper Usage ID defined in the [USB HID Usage Tables](https://www.usb.org/document-library/hid-usage-tables-12) |
|
||||
A `devicetree error` followed by a reference to the line number on `<keyboard>.keymap` refers to an issue at the exact line position in that file. For example, below error message indicates a missing `;` at line 109 of the `cradio.keymap` file:
|
||||
|
||||
```
|
||||
devicetree error: /__w/zmk-config/zmk-config/config/cradio.keymap:109 (column 4): parse error: expected ';' or ','
|
||||
```
|
||||
|
||||
#### devicetree_unfixed.h error
|
||||
|
||||
A `devicetree_unfixed.h` error that follows with an "undeclared here" string indicates a problem with key bindings, like behavior nodes (e.g. `&kp` or `&mt`) with incorrect number of parameters:
|
||||
|
||||
```
|
||||
/__w/zmk-config/zmk-config/build/zephyr/include/generated/devicetree_unfixed.h:3756:145: error: 'DT_N_S_keymap_S_symbol_layer_P_bindings_IDX_12_PH_P_label' undeclared here (not in a function); did you mean 'DT_N_S_keymap_S_symbol_layer_P_bindings_IDX_16_PH'?
|
||||
```
|
||||
|
||||
In this example, the error string `DT_N_S_keymap_S_symbol_layer_P_bindings_IDX_12_PH_P_label` indicates a problem with the key binding in position `12` in the `symbol_layer` of the keymap.
|
||||
|
||||
:::note
|
||||
Key positions are numbered starting from `0` at the top left key on the keymap, incrementing horizontally, row by row.
|
||||
:::
|
||||
|
||||
### Split Keyboard Halves Unable to Pair
|
||||
|
||||
|
|
|
@ -19,10 +19,6 @@ module.exports = {
|
|||
colorMode: {
|
||||
respectPrefersColorScheme: true,
|
||||
},
|
||||
googleAnalytics: {
|
||||
trackingID: "UA-145201102-2",
|
||||
anonymizeIP: true,
|
||||
},
|
||||
// sidebarCollapsible: false,
|
||||
navbar: {
|
||||
title: "ZMK Firmware",
|
||||
|
@ -109,7 +105,8 @@ module.exports = {
|
|||
copyright: `Copyright © ${new Date().getFullYear()} ZMK Project Contributors. <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png" /></a>`,
|
||||
},
|
||||
algolia: {
|
||||
apiKey: "75325855fc90356828fe212d38e5ca34",
|
||||
appId: "USXLDJ14JE",
|
||||
apiKey: "384a3bd2d50136c9dc8c8ddfe1b3a4b2",
|
||||
indexName: "zmkfirmware",
|
||||
},
|
||||
},
|
||||
|
@ -117,7 +114,13 @@ module.exports = {
|
|||
[
|
||||
"@docusaurus/preset-classic",
|
||||
{
|
||||
googleAnalytics: {
|
||||
trackingID: "UA-145201102-2",
|
||||
anonymizeIP: true,
|
||||
},
|
||||
docs: {
|
||||
// Removed (for now) until we have content for each level of the generated breadcrumbs
|
||||
breadcrumbs: false,
|
||||
// It is recommended to set document id as docs home page (`docs/` path).
|
||||
sidebarPath: require.resolve("./sidebars.js"),
|
||||
// Please change this to your repo.
|
||||
|
|
34507
docs/package-lock.json
generated
34507
docs/package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -15,8 +15,8 @@
|
|||
"typecheck": "tsc"
|
||||
},
|
||||
"dependencies": {
|
||||
"@docusaurus/core": "^2.0.0-beta.3",
|
||||
"@docusaurus/preset-classic": "^2.0.0-beta.3",
|
||||
"@docusaurus/core": "^2.0.0-beta.18",
|
||||
"@docusaurus/preset-classic": "^2.0.0-beta.18",
|
||||
"@fortawesome/fontawesome-svg-core": "^1.2.32",
|
||||
"@fortawesome/free-solid-svg-icons": "^5.15.3",
|
||||
"@fortawesome/react-fontawesome": "^0.1.16",
|
||||
|
@ -43,8 +43,8 @@
|
|||
]
|
||||
},
|
||||
"devDependencies": {
|
||||
"@docusaurus/module-type-aliases": "^2.0.0-beta.3",
|
||||
"@docusaurus/types": "^2.0.0-beta.3",
|
||||
"@docusaurus/module-type-aliases": "^2.0.0-beta.18",
|
||||
"@docusaurus/types": "^2.0.0-beta.18",
|
||||
"@tsconfig/docusaurus": "^1.0.2",
|
||||
"@types/js-yaml": "^4.0.5",
|
||||
"@types/react": "^17.0.3",
|
||||
|
@ -60,7 +60,7 @@
|
|||
"prebuild-webpack-plugin": "^1.1.1",
|
||||
"prettier": "2.3.1",
|
||||
"string-replace-loader": "^3.0.3",
|
||||
"typescript": "^4.2.3",
|
||||
"typescript": "^4.6.3",
|
||||
"webpack": "^5.46.0"
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue