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

Soft Off (take 3) #2085

Merged
merged 28 commits into from
Mar 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
9dc1df7
feat: Add soft on/off support.
petejohanson Mar 16, 2023
81ef51e
feat(kscan): Add PM support to GPIO kscan drivers.
petejohanson Sep 13, 2023
9bbb8b5
feat(behaviors): Add soft off behavior.
petejohanson Sep 13, 2023
1e45953
feat(shields): Add soft-off to the nrf52840dk ZMK Uno
petejohanson Sep 16, 2023
e5ba05a
refactor: Promote new endpoints API
petejohanson Dec 7, 2023
6c16c90
feat(pm): Clear HID data before soft off.
petejohanson Dec 7, 2023
7aef6c0
fix(bt): Fix BT tests after soft off work.
petejohanson Dec 7, 2023
c4f6b3b
fix(docs): Apply suggestions from code review
petejohanson Dec 9, 2023
257fb0f
refactor: Fixes for soft-off based on review.
petejohanson Dec 21, 2023
14e9476
chore: Various soft-off review fixes
petejohanson Dec 29, 2023
9263b0e
refactor(pm): Remove scanned behavior trigger.
petejohanson Dec 30, 2023
74f00da
feat(kscan): Direct kscan driver can use gpio-keys.
petejohanson Dec 31, 2023
54d66a2
refactor: Add kscan sideband behavior driver
petejohanson Dec 31, 2023
904bf93
refactor(boards): Move ZMK Uno 1P3T slider to sideband
petejohanson Dec 31, 2023
ea58eea
fix: Sleep after clearing endpoints to wait for send.
petejohanson Dec 31, 2023
50ca239
fix(pm): Fix deep sleep with sideband behaviors.
petejohanson Jan 3, 2024
98f935e
fix: Cleanups of sideband and direct kscan from review.
petejohanson Jan 22, 2024
d02d405
refactor: Fixes for review feedback.
petejohanson Jan 26, 2024
e288a33
fix: Adjustments for Zephyr 3.5.
petejohanson Feb 19, 2024
20b382f
feat: Updated soft-off docs.
petejohanson Feb 20, 2024
deb2ede
fix: Fixes for building soft off without deep sleep.
petejohanson Feb 20, 2024
084ae0c
fix(docs): Fix soft off waker prop name, headers.
petejohanson Mar 16, 2024
063cb05
feat(behaviors): More logging in soft off.
petejohanson Mar 16, 2024
33e27e1
refactor: Use kscan directly to wake when we can.
petejohanson Mar 25, 2024
a27db15
fix(pm): Use Zephyr created device slots.
petejohanson Mar 25, 2024
454fc86
fix(pm): Fixes for dedicated on/off on peripherals.
petejohanson Mar 25, 2024
89f564d
fix(shields): Fix for direct use with ZMK Uno split.
petejohanson Mar 25, 2024
be0ada2
fix(docs): Minor soft-off docs tweaks from review.
petejohanson Mar 28, 2024
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
8 changes: 4 additions & 4 deletions app/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,6 @@ set(ZEPHYR_EXTRA_MODULES "${ZMK_EXTRA_MODULES};${CMAKE_CURRENT_SOURCE_DIR}/modul
find_package(Zephyr REQUIRED HINTS ../zephyr)
project(zmk)

if(CONFIG_ZMK_SLEEP)
zephyr_linker_sources(SECTIONS include/linker/zmk-pm-devices.ld)
endif()

zephyr_linker_sources(SECTIONS include/linker/zmk-behaviors.ld)
zephyr_linker_sources(RODATA include/linker/zmk-events.ld)

Expand All @@ -25,11 +21,14 @@ target_sources(app PRIVATE src/stdlib.c)
target_sources(app PRIVATE src/activity.c)
target_sources(app PRIVATE src/behavior.c)
target_sources(app PRIVATE src/kscan.c)
target_sources_ifdef(CONFIG_ZMK_KSCAN_SIDEBAND_BEHAVIORS app PRIVATE src/kscan_sideband_behaviors.c)
target_sources(app PRIVATE src/matrix_transform.c)
target_sources(app PRIVATE src/sensors.c)
target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/wpm.c)
target_sources(app PRIVATE src/event_manager.c)
target_sources_ifdef(CONFIG_ZMK_PM app PRIVATE src/pm.c)
target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/ext_power_generic.c)
target_sources_ifdef(CONFIG_ZMK_GPIO_KEY_WAKEUP_TRIGGER app PRIVATE src/gpio_key_wakeup_trigger.c)
target_sources(app PRIVATE src/events/activity_state_changed.c)
target_sources(app PRIVATE src/events/position_state_changed.c)
target_sources(app PRIVATE src/events/sensor_event.c)
Expand All @@ -38,6 +37,7 @@ target_sources_ifdef(CONFIG_ZMK_WPM app PRIVATE src/events/wpm_state_changed.c)
target_sources_ifdef(CONFIG_USB_DEVICE_STACK app PRIVATE src/events/usb_conn_state_changed.c)
target_sources(app PRIVATE src/behaviors/behavior_reset.c)
target_sources_ifdef(CONFIG_ZMK_EXT_POWER app PRIVATE src/behaviors/behavior_ext_power.c)
target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_SOFT_OFF app PRIVATE src/behaviors/behavior_soft_off.c)
if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL)
target_sources(app PRIVATE src/hid.c)
target_sources_ifdef(CONFIG_ZMK_MOUSE app PRIVATE src/mouse.c)
Expand Down
36 changes: 36 additions & 0 deletions app/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,7 @@ config ZMK_SLEEP
bool "Enable deep sleep support"
depends on HAS_POWEROFF
select POWEROFF
select ZMK_PM_DEVICE_SUSPEND_RESUME
imply USB

if ZMK_SLEEP
Expand All @@ -423,6 +424,26 @@ config ZMK_EXT_POWER
bool "Enable support to control external power output"
default y

config ZMK_PM
bool

config ZMK_PM_DEVICE_SUSPEND_RESUME
bool
select ZMK_PM

config ZMK_PM_SOFT_OFF
bool "Soft-off support"
depends on HAS_POWEROFF
select ZMK_PM
select PM_DEVICE
select ZMK_PM_DEVICE_SUSPEND_RESUME
select POWEROFF

config ZMK_GPIO_KEY_WAKEUP_TRIGGER
bool "Hardware supported wakeup (GPIO)"
default y
depends on DT_HAS_ZMK_GPIO_KEY_WAKEUP_TRIGGER_ENABLED && ZMK_PM_SOFT_OFF

#Power Management
endmenu

Expand Down Expand Up @@ -499,6 +520,21 @@ config ZMK_KSCAN_EVENT_QUEUE_SIZE

endif # ZMK_KSCAN

config ZMK_KSCAN_SIDEBAND_BEHAVIORS
bool
default y
depends on DT_HAS_ZMK_KSCAN_SIDEBAND_BEHAVIORS_ENABLED
select KSCAN

if ZMK_KSCAN_SIDEBAND_BEHAVIORS

config ZMK_KSCAN_SIDEBAND_BEHAVIORS_INIT_PRIORITY
int "Keyboard scan sideband behaviors driver init priority"
# The default kscan init priority is 90, so be sure we are initialized later.
default 95

endif # ZMK_KSCAN_SIDEBAND_BEHAVIORS

menu "Logging"

config ZMK_LOGGING_MINIMAL
Expand Down
5 changes: 5 additions & 0 deletions app/Kconfig.behaviors
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ config ZMK_BEHAVIOR_MOUSE_KEY_PRESS
depends on DT_HAS_ZMK_BEHAVIOR_MOUSE_KEY_PRESS_ENABLED
imply ZMK_MOUSE

config ZMK_BEHAVIOR_SOFT_OFF
bool
default y
depends on DT_HAS_ZMK_BEHAVIOR_SOFT_OFF_ENABLED && ZMK_PM_SOFT_OFF

config ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON
bool

Expand Down
3 changes: 3 additions & 0 deletions app/boards/shields/zmk_uno/Kconfig.defconfig
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,7 @@ config ZMK_RGB_UNDERGLOW
select WS2812_STRIP
select SPI

config ZMK_PM_SOFT_OFF
default y if BOARD_NRF52840DK_NRF52840

endif
43 changes: 42 additions & 1 deletion app/boards/shields/zmk_uno/boards/nrf52840dk_nrf52840.overlay
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,15 @@
bias-pull-up;
};
};

qdec_sleep: qdec_sleep {
group1 {
psels = <NRF_PSEL(QDEC_A, 1, 11)>,
<NRF_PSEL(QDEC_B, 1, 10)>;
bias-pull-up;
low-power-enable;
};
};
};

// Set up the QDEC hardware based driver and give it the same label as the deleted node.
Expand All @@ -20,6 +29,38 @@ encoder: &qdec0 {
led-pre = <0>;
steps = <80>;
pinctrl-0 = <&qdec_default>;
pinctrl-1 = <&qdec_default>;
pinctrl-1 = <&qdec_sleep>;
pinctrl-names = "default", "sleep";
};

/ {
behaviors {
hw_soft_off: hw_soft_off {
compatible = "zmk,behavior-soft-off";
#binding-cells = <0>;
};
};

soft_off_direct_kscan: soft_off_direct_kscan {
compatible = "zmk,kscan-gpio-direct";
input-keys = <&button0>;
wakeup-source;
};

soft_off_sideband_behaviors {
compatible = "zmk,kscan-sideband-behaviors";
kscan = <&soft_off_direct_kscan>;
soft_off {
row = <0>;
column = <0>;
bindings = <&hw_soft_off>;
};
};

soft_off_wakers {
compatible = "zmk,soft-off-wakeup-sources";
status = "okay";

wakeup-sources = <&soft_off_direct_kscan>;
};
};
38 changes: 3 additions & 35 deletions app/boards/shields/zmk_uno/zmk_uno.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ nice_view_spi: &arduino_spi {

/ {
chosen {
zmk,kscan = &kscan_matrix_comp;
zmk,kscan = &kscan_matrix;
zmk,backlight = &backlight;
zmk,underglow = &led_strip;
zmk,matrix-transform = &matrix_transform;
Expand Down Expand Up @@ -74,7 +74,6 @@ nice_view_spi: &arduino_spi {
map = <
RC(0,0) RC(0,1)
RC(1,0) RC(1,1)
RC(2,0) RC(2,1) RC(2,2)
>;
};

Expand All @@ -86,44 +85,12 @@ nice_view_spi: &arduino_spi {
map = <
RC(0,0) RC(0,1)
RC(0,2) RC(0,3)
RC(1,0) RC(1,1) RC(1,2)
>;
};


kscan_matrix_comp: kscan_matrix_comp {
compatible = "zmk,kscan-composite";
rows = <1>;
columns = <7>;

matrix {
kscan = <&kscan_matrix>;
};

toggle {
kscan = <&kscan_sp3t_toggle>;
row-offset = <2>;
};

};

kscan_direct_comp: kscan_direct_comp {
compatible = "zmk,kscan-composite";
status = "disabled";

matrix {
kscan = <&kscan_direct>;
};

toggle {
kscan = <&kscan_sp3t_toggle>;
row-offset = <1>;
};

};

kscan_matrix: kscan_matrix {
compatible = "zmk,kscan-gpio-matrix";
wakeup-source;

diode-direction = "col2row";

Expand All @@ -141,6 +108,7 @@ nice_view_spi: &arduino_spi {

kscan_direct: kscan_direct {
compatible = "zmk,kscan-gpio-direct";
wakeup-source;
status = "disabled";

input-gpios
Expand Down
41 changes: 9 additions & 32 deletions app/boards/shields/zmk_uno/zmk_uno.keymap
Original file line number Diff line number Diff line change
Expand Up @@ -9,51 +9,28 @@
#include <dt-bindings/zmk/backlight.h>
#include <dt-bindings/zmk/bt.h>
#include <dt-bindings/zmk/ext_power.h>
#include <dt-bindings/zmk/outputs.h>
#include <dt-bindings/zmk/rgb.h>

// Uncomment the following block if using the "Direct Wire" jumper to switch the matrix to a direct wire.
// Uncomment the following lines if using the "Direct Wire" jumper to switch the matrix to a direct wire.

/* :REMOVE ME
// &kscan_direct { status = "okay"; };
// &kscan_matrix { status = "disabled"; };

&kscan_direct_comp { status = "okay"; };
&kscan_direct { status = "okay"; };
&kscan_matrix_comp { status = "disabled"; };
&kscan_matrix { status = "disabled"; };
// / {
// chosen {
// zmk,matrix-transform = &direct_matrix_transform;
// zmk,kscan = &kscan_direct;
// };
// };

/ {
chosen {
zmk,matrix-transform = &direct_matrix_transform;
zmk,kscan = &kscan_direct_comp;
};
};

REMOVE ME: */


/ {
macros {
ZMK_MACRO(ble_zero,
wait-ms = <1>;
tap-ms = <1>;
bindings = <&out OUT_BLE &bt BT_SEL 0>;
)
ZMK_MACRO(ble_one,
wait-ms = <1>;
tap-ms = <1>;
bindings = <&out OUT_BLE &bt BT_SEL 1>;
)
};

keymap {
compatible = "zmk,keymap";

default_layer {
bindings = <
&kp A &bl BL_TOG
&rgb_ug RGB_EFF &bt BT_CLR

&out OUT_USB &ble_zero &ble_one
>;

sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>;
Expand Down
37 changes: 37 additions & 0 deletions app/boards/shields/zmk_uno/zmk_uno.overlay
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@

#include "zmk_uno.dtsi"

#include <behaviors.dtsi>
#include <dt-bindings/zmk/bt.h>
#include <dt-bindings/zmk/outputs.h>

/ {
chosen {
zmk,matrix-transform = &matrix_transform;
Expand All @@ -19,4 +23,37 @@
};
};

macros {
ZMK_MACRO(ble_zero,
wait-ms = <1>;
tap-ms = <1>;
bindings = <&out OUT_BLE &bt BT_SEL 0>;
)
ZMK_MACRO(ble_one,
wait-ms = <1>;
tap-ms = <1>;
bindings = <&out OUT_BLE &bt BT_SEL 1>;
)
};

endpoint_sideband_behaviors {
compatible = "zmk,kscan-sideband-behaviors";
kscan = <&kscan_sp3t_toggle>;

first_toggle_sideband: first_toggle_sideband {
column = <0>;
bindings = <&out OUT_USB>;
};

second_toggle_sideband: second_toggle_sideband {
column = <1>;
bindings = <&ble_zero>;
};

third_toggle_sideband: third_toggle_sideband {
column = <2>;
bindings = <&ble_one>;
};
};

};
10 changes: 4 additions & 6 deletions app/boards/shields/zmk_uno/zmk_uno_split.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,15 @@

split_matrix_transform: split_matrix_transform {
compatible = "zmk,matrix-transform";
rows = <3>;
columns = <4>;
rows = <4>;
columns = <2>;

map = <
RC(0,0) RC(0,1)
RC(1,0) RC(1,1)
RC(2,0) RC(2,1) RC(2,2)

RC(3,0) RC(3,1)
RC(4,0) RC(4,1)
RC(5,0) RC(5,1) RC(5,2)
>;
};

Expand All @@ -38,10 +37,9 @@
map = <
RC(0,0) RC(0,1)
RC(0,2) RC(0,3)
RC(1,0) RC(1,1) RC(1,2)

RC(2,0) RC(2,1)
RC(2,2) RC(2,3)
RC(3,0) RC(3,1) RC(3,2)
>;
};

Expand Down
Loading
Loading