-
-
Notifications
You must be signed in to change notification settings - Fork 2.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #211 from petejohanson/core/keymap-port-event-expl…
…oration Use PORT events for kscan matrix interrupts, add option for deep sleep.
- Loading branch information
Showing
6 changed files
with
133 additions
and
33 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -31,6 +31,10 @@ | |
|
||
}; | ||
|
||
&gpiote { | ||
status = "okay"; | ||
}; | ||
|
||
&gpio0 { | ||
status = "okay"; | ||
}; | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
/* | ||
* Copyright (c) 2020 The ZMK Contributors | ||
* | ||
* SPDX-License-Identifier: MIT | ||
*/ | ||
|
||
#include <zephyr.h> | ||
#include <kernel.h> | ||
#include <power/power.h> | ||
|
||
#include <logging/log.h> | ||
|
||
LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL); | ||
|
||
#include <zmk/usb.h> | ||
#include <zmk/event-manager.h> | ||
#include <zmk/events/position-state-changed.h> | ||
#include <zmk/events/sensor-event.h> | ||
|
||
static u32_t power_last_uptime; | ||
|
||
#define MAX_IDLE_MS CONFIG_ZMK_IDLE_SLEEP_TIMEOUT | ||
|
||
bool is_usb_power_present() { | ||
#ifdef CONFIG_USB | ||
enum usb_dc_status_code usb_status = zmk_usb_get_status(); | ||
switch (usb_status) { | ||
case USB_DC_DISCONNECTED: | ||
case USB_DC_UNKNOWN: | ||
return false; | ||
default: | ||
return true; | ||
} | ||
#else | ||
return false; | ||
#endif /* CONFIG_USB */ | ||
} | ||
|
||
enum power_states sys_pm_policy_next_state(s32_t ticks) { | ||
#ifdef CONFIG_SYS_POWER_DEEP_SLEEP_STATES | ||
#ifdef CONFIG_HAS_SYS_POWER_STATE_DEEP_SLEEP_1 | ||
s32_t current = k_uptime_get(); | ||
if (power_last_uptime > 0 && !is_usb_power_present() && | ||
current - power_last_uptime > MAX_IDLE_MS) { | ||
return SYS_POWER_STATE_DEEP_SLEEP_1; | ||
} | ||
#endif /* CONFIG_HAS_SYS_POWER_STATE_DEEP_SLEEP_1 */ | ||
#endif /* CONFIG_SYS_POWER_DEEP_SLEEP_STATES */ | ||
|
||
return SYS_POWER_STATE_ACTIVE; | ||
} | ||
|
||
int power_event_listener(const struct zmk_event_header *eh) { | ||
power_last_uptime = k_uptime_get(); | ||
|
||
return 0; | ||
} | ||
|
||
int power_init() { | ||
power_last_uptime = k_uptime_get(); | ||
|
||
return 0; | ||
} | ||
|
||
ZMK_LISTENER(power, power_event_listener); | ||
ZMK_SUBSCRIPTION(power, position_state_changed); | ||
ZMK_SUBSCRIPTION(power, sensor_event); | ||
|
||
SYS_INIT(power_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY); |