mirror of
https://github.com/zmkfirmware/zmk.git
synced 2026-03-20 04:55:20 -05:00
Compare commits
63 Commits
v0.1-branc
...
v0.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
241ff39556 | ||
|
|
f20e6ea759 | ||
|
|
fadafc7759 | ||
|
|
1e3e62c13d | ||
|
|
21f54e7238 | ||
|
|
7186528f77 | ||
|
|
9406d39d14 | ||
|
|
82216be635 | ||
|
|
ea267b0f35 | ||
|
|
2fe55c4c41 | ||
|
|
d2eb6de7ad | ||
|
|
209085da73 | ||
|
|
18d0d2f476 | ||
|
|
8575fc8a9d | ||
|
|
9d234cbb10 | ||
|
|
e8ec9b65f8 | ||
|
|
d0d313409b | ||
|
|
5926269ea5 | ||
|
|
eeb8a00778 | ||
|
|
aa3e5dd70f | ||
|
|
627e6dbec9 | ||
|
|
424e53210e | ||
|
|
4b4a8a35f3 | ||
|
|
0f7c11248a | ||
|
|
8e065d55b9 | ||
|
|
425256bc0d | ||
|
|
72b00b3f58 | ||
|
|
e4885d5d4c | ||
|
|
4f72e7cb25 | ||
|
|
4882a62c40 | ||
|
|
40e9e5c5fa | ||
|
|
40ea92d201 | ||
|
|
db2fc2bffd | ||
|
|
e4f1454e0b | ||
|
|
c367d8f636 | ||
|
|
6941abc2af | ||
|
|
700e9b264f | ||
|
|
8dddb1d9d7 | ||
|
|
022603ec16 | ||
|
|
b93bf6d3fd | ||
|
|
d0ee30bfaa | ||
|
|
3377ed02a8 | ||
|
|
36508c27fd | ||
|
|
e6343f44ce | ||
|
|
bc6bb90414 | ||
|
|
05abd677c5 | ||
|
|
f0a77b888a | ||
|
|
85aba16eec | ||
|
|
3f6841c95f | ||
|
|
2f172f63c2 | ||
|
|
bb486619a1 | ||
|
|
cb867f92db | ||
|
|
d0016b34f8 | ||
|
|
ec6b770947 | ||
|
|
4ef231f4bb | ||
|
|
7013158a67 | ||
|
|
a8f5ab67b5 | ||
|
|
84baf929c9 | ||
|
|
6b40bfda53 | ||
|
|
7e8c542c94 | ||
|
|
0820991901 | ||
|
|
b26058b6c7 | ||
|
|
40925d48e6 |
1
.github/pull_request_template.md
vendored
1
.github/pull_request_template.md
vendored
@@ -6,3 +6,4 @@
|
||||
- [ ] Additional tests are included, if changing behaviors/core code that is testable.
|
||||
- [ ] Proper Copyright + License headers added to applicable files (Generally, we stick to "The ZMK Contributors" for copyrights to help avoid churn when files get edited)
|
||||
- [ ] [Pre-commit](https://zmk.dev/docs/development/local-toolchain/pre-commit) used to check formatting of files, commit messages, etc.
|
||||
- [ ] Includes any necessary [documentation changes](https://zmk.dev/docs/development/contributing/documentation).
|
||||
|
||||
2
.github/workflows/test.yml
vendored
2
.github/workflows/test.yml
vendored
@@ -4,12 +4,14 @@ on:
|
||||
push:
|
||||
paths:
|
||||
- ".github/workflows/test.yml"
|
||||
- "app/run-test.sh"
|
||||
- "app/tests/**"
|
||||
- "app/src/**"
|
||||
- "app/include/**"
|
||||
pull_request:
|
||||
paths:
|
||||
- ".github/workflows/test.yml"
|
||||
- "app/run-test.sh"
|
||||
- "app/tests/**"
|
||||
- "app/src/**"
|
||||
- "app/include/**"
|
||||
|
||||
@@ -1 +1 @@
|
||||
{".":"0.1.0"}
|
||||
{".":"0.2.1"}
|
||||
|
||||
47
CHANGELOG.md
47
CHANGELOG.md
@@ -1,5 +1,52 @@
|
||||
# Changelog
|
||||
|
||||
## [0.2.1](https://github.com/zmkfirmware/zmk/compare/v0.2.0...v0.2.1) (2025-03-02)
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* **behaviors:** Proper comma separated device list ([#2850](https://github.com/zmkfirmware/zmk/issues/2850)) ([f20e6ea](https://github.com/zmkfirmware/zmk/commit/f20e6ea7594b49eef1e3acc017529073a0409962))
|
||||
|
||||
## [0.2.0](https://github.com/zmkfirmware/zmk/compare/v0.1.0...v0.2.0) (2025-03-01)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* Added `toggle-mode`, allowing toggle-on and toggle-off ([#2555](https://github.com/zmkfirmware/zmk/issues/2555)) ([4ef231f](https://github.com/zmkfirmware/zmk/commit/4ef231f4bba87151acfbd1cf3babd83b69813e45))
|
||||
* added toggle mode to key and layer toggles ([4ef231f](https://github.com/zmkfirmware/zmk/commit/4ef231f4bba87151acfbd1cf3babd83b69813e45))
|
||||
* **boards:** Update for mikoto board definition ([#1946](https://github.com/zmkfirmware/zmk/issues/1946)) ([b26058b](https://github.com/zmkfirmware/zmk/commit/b26058b6c7c83f8d1f095d2f9c6c3998b391a61b))
|
||||
* **core:** Make physical layout key rotation optional ([#2770](https://github.com/zmkfirmware/zmk/issues/2770)) ([c367d8f](https://github.com/zmkfirmware/zmk/commit/c367d8f636f0842b414c2b58df6101761cdd676d))
|
||||
* **display:** Add ability to set display on/off pin. ([#2814](https://github.com/zmkfirmware/zmk/issues/2814)) ([627e6db](https://github.com/zmkfirmware/zmk/commit/627e6dbec99211b3d7cce55904fb1c824ed87bf3))
|
||||
* **display:** Add config for display update period ([#2819](https://github.com/zmkfirmware/zmk/issues/2819)) ([aa3e5dd](https://github.com/zmkfirmware/zmk/commit/aa3e5dd70fdd1b364fa9ad26f14425be613d180c))
|
||||
* input processor behavior invocation ([#2714](https://github.com/zmkfirmware/zmk/issues/2714)) ([cb867f9](https://github.com/zmkfirmware/zmk/commit/cb867f92dbe4e32675c2137fc6aa914a44ecc8dc))
|
||||
* **Kconfig:** Allow overriding ZMK Kconfig defaults ([#2537](https://github.com/zmkfirmware/zmk/issues/2537)) ([40925d4](https://github.com/zmkfirmware/zmk/commit/40925d48e67b3eeaeb3e848a2287ed628de9f674))
|
||||
* **mouse:** Add mouse move and scroll support ([#2477](https://github.com/zmkfirmware/zmk/issues/2477)) ([6b40bfd](https://github.com/zmkfirmware/zmk/commit/6b40bfda53571f7a960ccc448aa87f29da7496ac))
|
||||
* **pointing:** Add behavior input processor ([cb867f9](https://github.com/zmkfirmware/zmk/commit/cb867f92dbe4e32675c2137fc6aa914a44ecc8dc))
|
||||
* **pointing:** Add pre-defined scroll scaler ([0f7c112](https://github.com/zmkfirmware/zmk/commit/0f7c11248a1ddb7c6559064c2a1e7a3c446d5d55))
|
||||
* **pointing:** Add pre-defined scroll scaler and mouse scroll tests ([#2759](https://github.com/zmkfirmware/zmk/issues/2759)) ([0f7c112](https://github.com/zmkfirmware/zmk/commit/0f7c11248a1ddb7c6559064c2a1e7a3c446d5d55))
|
||||
* **shields:** Add physical layout for Lotus58 ([#2753](https://github.com/zmkfirmware/zmk/issues/2753)) ([424e532](https://github.com/zmkfirmware/zmk/commit/424e53210ea16c2287abaf770ebf45be432d841a))
|
||||
* **studio:** Add ortho_4x10 grid layout ([#2651](https://github.com/zmkfirmware/zmk/issues/2651)) ([7e8c542](https://github.com/zmkfirmware/zmk/commit/7e8c542c94908ac011ec7272a5f8ab10d2102632))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* allow kscan-composite to wake up device. ([#2682](https://github.com/zmkfirmware/zmk/issues/2682)) ([a8f5ab6](https://github.com/zmkfirmware/zmk/commit/a8f5ab67b5d449a2624e2de7ddfb264da778ea6c))
|
||||
* **behaviors:** Make multiple sticky keys work on same key position ([7186528](https://github.com/zmkfirmware/zmk/commit/7186528f77bf077173927c1c8506b4d434e5c371))
|
||||
* **behaviors:** Make multiple sticky keys work on same key position ([#2758](https://github.com/zmkfirmware/zmk/issues/2758)) ([7186528](https://github.com/zmkfirmware/zmk/commit/7186528f77bf077173927c1c8506b4d434e5c371))
|
||||
* **ble:** enforce maximum length for dynamic device name ([#2784](https://github.com/zmkfirmware/zmk/issues/2784)) ([ea267b0](https://github.com/zmkfirmware/zmk/commit/ea267b0f35f862b882ac568dde6365c3a0c85099))
|
||||
* **combos:** Properly report combos len with emply block ([#2739](https://github.com/zmkfirmware/zmk/issues/2739)) ([f0a77b8](https://github.com/zmkfirmware/zmk/commit/f0a77b888ac482a863386ced08e04660ddacb026))
|
||||
* **display:** Only default mono theme when 1bpp ([#2804](https://github.com/zmkfirmware/zmk/issues/2804)) ([425256b](https://github.com/zmkfirmware/zmk/commit/425256bc0de7ed08802533b170abba78ee90f546))
|
||||
* **display:** POSIX lvgl fixes ([#2812](https://github.com/zmkfirmware/zmk/issues/2812)) ([4b4a8a3](https://github.com/zmkfirmware/zmk/commit/4b4a8a35f3f90f1af75cdf5d9c26b47d4b8dcabb))
|
||||
* **drivers:** Proper static/const for data/config ([#2769](https://github.com/zmkfirmware/zmk/issues/2769)) ([6941abc](https://github.com/zmkfirmware/zmk/commit/6941abc2afab16502cff9c5149d8dc0fcd5112c9))
|
||||
* Fix warnings in nanopb encoding code ([#2643](https://github.com/zmkfirmware/zmk/issues/2643)) ([7013158](https://github.com/zmkfirmware/zmk/commit/7013158a6715d94b34e8c471ce25bb5005f3bb49))
|
||||
* Kconfig refactor now works correctly with external modules ([#2711](https://github.com/zmkfirmware/zmk/issues/2711)) ([bb48661](https://github.com/zmkfirmware/zmk/commit/bb486619a183f6df7fbb4620c80164555a22da0b))
|
||||
* **Kconfig:** Added a name to EC11's trigger mode choice ([40925d4](https://github.com/zmkfirmware/zmk/commit/40925d48e67b3eeaeb3e848a2287ed628de9f674))
|
||||
* **kscan:** Remove warning when keyboard is built without CONFIG_PM_DEVICE ([#2808](https://github.com/zmkfirmware/zmk/issues/2808)) ([8e065d5](https://github.com/zmkfirmware/zmk/commit/8e065d55b916481ef06ce37cddedb84cf1d15d99))
|
||||
* **pointing:** Complete header rename missed in refactor ([#2702](https://github.com/zmkfirmware/zmk/issues/2702)) ([84baf92](https://github.com/zmkfirmware/zmk/commit/84baf929c9bb95f255d4bafd0e57f2ec47455fca))
|
||||
* **pointing:** Temp layer threading protection. ([#2729](https://github.com/zmkfirmware/zmk/issues/2729)) ([1e3e62c](https://github.com/zmkfirmware/zmk/commit/1e3e62c13d0666d98831ee302ae2fb17e68196c9))
|
||||
* **studio:** Allow adding layers after a layer move ([#2748](https://github.com/zmkfirmware/zmk/issues/2748)) ([36508c2](https://github.com/zmkfirmware/zmk/commit/36508c27fddfb84d912e0122e313ad3904ceb946))
|
||||
* **studio:** Properly return complete keymap from RPC ([#2696](https://github.com/zmkfirmware/zmk/issues/2696)) ([0820991](https://github.com/zmkfirmware/zmk/commit/0820991901a95ab7a0eb1f1cc608a631d514e26c))
|
||||
|
||||
## 0.1.0 (2024-11-29)
|
||||
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.13.1)
|
||||
|
||||
set(CONFIG_APPLICATION_DEFINED_SYSCALL true)
|
||||
|
||||
set(ZEPHYR_BOARD_ALIASES "boards/aliases.cmake")
|
||||
set(ZEPHYR_EXTRA_MODULES "${ZMK_EXTRA_MODULES};${CMAKE_CURRENT_SOURCE_DIR}/module;${CMAKE_CURRENT_SOURCE_DIR}/keymap-module")
|
||||
|
||||
# Find Zephyr. This also loads Zephyr's build system.
|
||||
@@ -16,6 +17,7 @@ if(CONFIG_ZMK_BEHAVIOR_LOCAL_IDS)
|
||||
endif()
|
||||
|
||||
zephyr_syscall_header(${APPLICATION_SOURCE_DIR}/include/drivers/behavior.h)
|
||||
zephyr_syscall_header(${APPLICATION_SOURCE_DIR}/include/drivers/input_processor.h)
|
||||
zephyr_syscall_header(${APPLICATION_SOURCE_DIR}/include/drivers/ext_power.h)
|
||||
|
||||
# Add your source file to the "app" target. This must come after
|
||||
@@ -36,15 +38,14 @@ target_sources_ifdef(CONFIG_ZMK_GPIO_KEY_WAKEUP_TRIGGER app PRIVATE src/gpio_key
|
||||
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)
|
||||
target_sources(app PRIVATE src/events/mouse_button_state_changed.c)
|
||||
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)
|
||||
add_subdirectory_ifdef(CONFIG_ZMK_POINTING src/pointing/)
|
||||
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)
|
||||
target_sources(app PRIVATE src/behaviors/behavior_key_press.c)
|
||||
target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_KEY_TOGGLE app PRIVATE src/behaviors/behavior_key_toggle.c)
|
||||
target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_HOLD_TAP app PRIVATE src/behaviors/behavior_hold_tap.c)
|
||||
@@ -64,8 +65,9 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_ROLE_CENTRAL)
|
||||
target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON app PRIVATE src/behaviors/behavior_sensor_rotate_common.c)
|
||||
target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_MOUSE_KEY_PRESS app PRIVATE src/behaviors/behavior_mouse_key_press.c)
|
||||
target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_STUDIO_UNLOCK app PRIVATE src/behaviors/behavior_studio_unlock.c)
|
||||
target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_INPUT_TWO_AXIS app PRIVATE src/behaviors/behavior_input_two_axis.c)
|
||||
target_sources(app PRIVATE src/combo.c)
|
||||
target_sources(app PRIVATE src/behaviors/behavior_tap_dance.c)
|
||||
target_sources_ifdef(CONFIG_ZMK_BEHAVIOR_TAP_DANCE app PRIVATE src/behaviors/behavior_tap_dance.c)
|
||||
target_sources(app PRIVATE src/behavior_queue.c)
|
||||
target_sources(app PRIVATE src/conditional_layer.c)
|
||||
target_sources(app PRIVATE src/endpoints.c)
|
||||
|
||||
136
app/Kconfig
136
app/Kconfig
@@ -46,7 +46,7 @@ config NRF_STORE_REBOOT_TYPE_GPREGRET
|
||||
bool
|
||||
default y
|
||||
|
||||
endif
|
||||
endif # SOC_SERIES_NRF52X
|
||||
|
||||
menu "HID"
|
||||
|
||||
@@ -81,14 +81,11 @@ if ZMK_HID_REPORT_TYPE_HKRO
|
||||
|
||||
config ZMK_HID_KEYBOARD_REPORT_SIZE
|
||||
int "# Keyboard Keys Reportable"
|
||||
default 6
|
||||
|
||||
endif
|
||||
endif # ZMK_HID_REPORT_TYPE_HKRO
|
||||
|
||||
config ZMK_HID_CONSUMER_REPORT_SIZE
|
||||
int "# Consumer Keys Reportable"
|
||||
default 6
|
||||
|
||||
|
||||
choice ZMK_HID_CONSUMER_REPORT_USAGES
|
||||
prompt "HID Report Type"
|
||||
@@ -142,8 +139,7 @@ config USB_NUMOF_EP_WRITE_RETRIES
|
||||
config USB_HID_POLL_INTERVAL_MS
|
||||
default 1
|
||||
|
||||
#ZMK_USB
|
||||
endif
|
||||
endif # ZMK_USB
|
||||
|
||||
menuconfig ZMK_BLE
|
||||
bool "BLE (HID over GATT)"
|
||||
@@ -163,17 +159,14 @@ if ZMK_BLE
|
||||
config ZMK_BLE_EXPERIMENTAL_CONN
|
||||
bool "Experimental BLE connection changes"
|
||||
help
|
||||
Enables a combination of settings that are planned to be default in future versions of ZMK
|
||||
to improve connection stability. This includes changes to timing on BLE pairing initiation,
|
||||
restores use of the updated/new LLCP implementation, and disables 2M PHY support.
|
||||
Enables settings that are planned to be default in future versions of ZMK
|
||||
to improve connection stability.
|
||||
|
||||
config ZMK_BLE_EXPERIMENTAL_SEC
|
||||
bool "Experimental BLE security changes"
|
||||
imply BT_SMP_ALLOW_UNAUTH_OVERWRITE
|
||||
help
|
||||
Enables a combination of settings that are planned to be officially supported in the future.
|
||||
This includes enabling BT Secure Connection passkey entry, and allows overwrite of keys from
|
||||
previously paired hosts.
|
||||
Enables security settings that are planned to be officially supported in the future.
|
||||
|
||||
config ZMK_BLE_EXPERIMENTAL_FEATURES
|
||||
bool "Experimental BLE connection and security settings/features"
|
||||
@@ -245,19 +238,20 @@ config BT_PERIPHERAL_PREF_LATENCY
|
||||
config BT_PERIPHERAL_PREF_TIMEOUT
|
||||
default 400
|
||||
|
||||
#ZMK_BLE
|
||||
endif
|
||||
# The device name should be 16 characters or less so it fits within the
|
||||
# advertising data.
|
||||
config BT_DEVICE_NAME_MAX
|
||||
default 16
|
||||
|
||||
#Output Types
|
||||
endmenu
|
||||
endif # ZMK_BLE
|
||||
|
||||
# HID
|
||||
endmenu
|
||||
endmenu # Output Types
|
||||
|
||||
endmenu # HID
|
||||
|
||||
rsource "src/split/Kconfig"
|
||||
|
||||
#Basic Keyboard Setup
|
||||
endmenu
|
||||
endmenu # Basic Keyboard Setup
|
||||
|
||||
menu "Keymaps"
|
||||
|
||||
@@ -275,7 +269,7 @@ config ZMK_KEYMAP_LAYER_NAME_MAX_LEN
|
||||
int "Max Layer Name Length"
|
||||
default 20
|
||||
|
||||
endif
|
||||
endif # ZMK_KEYMAP_SETTINGS_STORAGE
|
||||
|
||||
endmenu # Keymaps
|
||||
|
||||
@@ -292,67 +286,51 @@ menuconfig ZMK_RGB_UNDERGLOW
|
||||
|
||||
if ZMK_RGB_UNDERGLOW
|
||||
|
||||
# This default value cuts down on tons of excess .conf files, if you're using GPIO, manually disable this
|
||||
config SPI
|
||||
default y
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_EXT_POWER
|
||||
bool "RGB underglow toggling also controls external power"
|
||||
default y
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_BRT_MIN
|
||||
int "RGB underglow minimum brightness in percent"
|
||||
range 0 100
|
||||
default 0
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_BRT_MAX
|
||||
int "RGB underglow maximum brightness in percent"
|
||||
range ZMK_RGB_UNDERGLOW_BRT_MIN 100
|
||||
default 100
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_HUE_STEP
|
||||
int "RGB underglow hue step in degrees"
|
||||
range 0 359
|
||||
default 10
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_SAT_STEP
|
||||
int "RGB underglow saturation step in percent"
|
||||
range 0 100
|
||||
default 10
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_BRT_STEP
|
||||
int "RGB underglow brightness step in percent"
|
||||
range 0 100
|
||||
default 10
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_HUE_START
|
||||
int "RGB underglow start hue value in degrees"
|
||||
range 0 359
|
||||
default 0
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_SAT_START
|
||||
int "RGB underglow start saturations value in percent"
|
||||
range 0 100
|
||||
default 100
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_BRT_START
|
||||
int "RGB underglow start brightness value in percent"
|
||||
range ZMK_RGB_UNDERGLOW_BRT_MIN ZMK_RGB_UNDERGLOW_BRT_MAX
|
||||
default ZMK_RGB_UNDERGLOW_BRT_MAX
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_SPD_START
|
||||
int "RGB underglow start animation speed value"
|
||||
range 1 5
|
||||
default 3
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_EFF_START
|
||||
int "RGB underglow start effect int value related to the effect enum list"
|
||||
range 0 3
|
||||
default 0
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_ON_START
|
||||
bool "RGB underglow starts on by default"
|
||||
default y
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_AUTO_OFF_IDLE
|
||||
bool "Turn off RGB underglow when keyboard goes into idle state"
|
||||
@@ -361,8 +339,7 @@ config ZMK_RGB_UNDERGLOW_AUTO_OFF_USB
|
||||
bool "Turn off RGB underglow when USB is disconnected"
|
||||
depends on USB_DEVICE_STACK
|
||||
|
||||
#ZMK_RGB_UNDERGLOW
|
||||
endif
|
||||
endif # ZMK_RGB_UNDERGLOW
|
||||
|
||||
menuconfig ZMK_BACKLIGHT
|
||||
bool "LED backlight"
|
||||
@@ -373,16 +350,13 @@ if ZMK_BACKLIGHT
|
||||
config ZMK_BACKLIGHT_BRT_STEP
|
||||
int "Brightness step in percent"
|
||||
range 1 100
|
||||
default 20
|
||||
|
||||
config ZMK_BACKLIGHT_BRT_START
|
||||
int "Default brightness in percent"
|
||||
range 1 100
|
||||
default 40
|
||||
|
||||
config ZMK_BACKLIGHT_ON_START
|
||||
bool "Default backlight state"
|
||||
default y
|
||||
|
||||
config ZMK_BACKLIGHT_AUTO_OFF_IDLE
|
||||
bool "Turn off backlight when keyboard goes into idle state"
|
||||
@@ -390,19 +364,11 @@ config ZMK_BACKLIGHT_AUTO_OFF_IDLE
|
||||
config ZMK_BACKLIGHT_AUTO_OFF_USB
|
||||
bool "Turn off backlight when USB is disconnected"
|
||||
|
||||
#ZMK_BACKLIGHT
|
||||
endif
|
||||
endif # ZMK_BACKLIGHT
|
||||
|
||||
#Display/LED Options
|
||||
endmenu
|
||||
endmenu # Display/LED Options
|
||||
|
||||
menu "Mouse Options"
|
||||
|
||||
config ZMK_MOUSE
|
||||
bool "Enable ZMK mouse emulation"
|
||||
|
||||
#Mouse Options
|
||||
endmenu
|
||||
rsource "src/pointing/Kconfig"
|
||||
|
||||
menu "Power Management"
|
||||
|
||||
@@ -424,7 +390,8 @@ config ZMK_BATTERY_REPORTING_FETCH_MODE_LITHIUM_VOLTAGE
|
||||
bool "Lithium Voltage"
|
||||
|
||||
endchoice
|
||||
endif
|
||||
|
||||
endif # ZMK_BATTERY_REPORTING
|
||||
|
||||
config ZMK_IDLE_TIMEOUT
|
||||
int "Milliseconds of inactivity before entering idle state (OLED shutoff, etc)"
|
||||
@@ -446,12 +413,10 @@ config ZMK_IDLE_SLEEP_TIMEOUT
|
||||
int "Milliseconds of inactivity before entering deep sleep"
|
||||
default 900000
|
||||
|
||||
#ZMK_SLEEP
|
||||
endif
|
||||
endif # ZMK_SLEEP
|
||||
|
||||
config ZMK_EXT_POWER
|
||||
bool "Enable support to control external power output"
|
||||
default y
|
||||
|
||||
config ZMK_PM
|
||||
bool
|
||||
@@ -473,7 +438,7 @@ config ZMK_GPIO_KEY_WAKEUP_TRIGGER
|
||||
default y
|
||||
depends on DT_HAS_ZMK_GPIO_KEY_WAKEUP_TRIGGER_ENABLED && ZMK_PM_SOFT_OFF
|
||||
|
||||
#Power Management
|
||||
# Power Management
|
||||
endmenu
|
||||
|
||||
menu "Combo options"
|
||||
@@ -490,7 +455,7 @@ config ZMK_COMBO_MAX_KEYS_PER_COMBO
|
||||
int "Maximum number of keys per combo"
|
||||
default 4
|
||||
|
||||
#Combo options
|
||||
# Combo options
|
||||
endmenu
|
||||
|
||||
menu "Behavior Options"
|
||||
@@ -525,8 +490,7 @@ config ZMK_USB_HID_INIT_PRIORITY
|
||||
int "USB HID Init Priority"
|
||||
default 95
|
||||
|
||||
#USB
|
||||
endif
|
||||
endif # USB
|
||||
|
||||
if ZMK_BLE || ZMK_SPLIT_BLE
|
||||
|
||||
@@ -534,11 +498,13 @@ config ZMK_BLE_INIT_PRIORITY
|
||||
int "BLE Init Priority"
|
||||
default 50
|
||||
|
||||
#ZMK_BLE || ZMK_SPLIT_BLE
|
||||
endif
|
||||
endif # ZMK_BLE || ZMK_SPLIT_BLE
|
||||
|
||||
#Initialization Priorities
|
||||
endmenu
|
||||
endmenu # Initialization Priorities
|
||||
|
||||
config ZMK_PHYSICAL_LAYOUT_KEY_ROTATION
|
||||
bool "Support rotation of keys in physical layouts"
|
||||
default y
|
||||
|
||||
menuconfig ZMK_KSCAN
|
||||
bool "ZMK KScan Integration"
|
||||
@@ -612,8 +578,7 @@ config USB_CDC_ACM_RINGBUF_SIZE
|
||||
config LOG_PROCESS_THREAD_STARTUP_DELAY_MS
|
||||
default 1000
|
||||
|
||||
#ZMK_USB_LOGGING
|
||||
endif
|
||||
endif # ZMK_USB_LOGGING
|
||||
|
||||
config ZMK_RTT_LOGGING
|
||||
bool "Enable RTT logging to help debug"
|
||||
@@ -629,8 +594,7 @@ if ZMK_RTT_LOGGING
|
||||
config SEGGER_RTT_BUFFER_SIZE_UP
|
||||
default 8192
|
||||
|
||||
#ZMK_RTT_LOGGING
|
||||
endif
|
||||
endif # ZMK_RTT_LOGGING
|
||||
|
||||
if ZMK_USB_LOGGING || ZMK_RTT_LOGGING
|
||||
|
||||
@@ -640,11 +604,9 @@ config LOG_BUFFER_SIZE
|
||||
config LOG_PROCESS_THREAD_SLEEP_MS
|
||||
default 100
|
||||
|
||||
#ZMK_USB_LOGGING || ZMK_RTT_LOGGING
|
||||
endif
|
||||
endif # ZMK_USB_LOGGING || ZMK_RTT_LOGGING
|
||||
|
||||
#Logging
|
||||
endmenu
|
||||
endmenu # Logging
|
||||
|
||||
if SETTINGS
|
||||
|
||||
@@ -660,21 +622,17 @@ config ZMK_SETTINGS_RESET_ON_START_INIT_PRIORITY
|
||||
Initialization priority for the settings reset on start. Must be lower priority/
|
||||
higher value than FLASH_INIT_PRIORITY if using the NVS/Flash settings backend.
|
||||
|
||||
|
||||
endif
|
||||
|
||||
endif # ZMK_SETTINGS_RESET_ON_START
|
||||
|
||||
config ZMK_SETTINGS_SAVE_DEBOUNCE
|
||||
int "Milliseconds to debounce settings saves"
|
||||
default 60000
|
||||
|
||||
#SETTINGS
|
||||
endif
|
||||
endif # SETTINGS
|
||||
|
||||
config ZMK_BATTERY_REPORT_INTERVAL
|
||||
depends on ZMK_BATTERY_REPORTING
|
||||
int "Battery level report interval in seconds"
|
||||
default 60
|
||||
|
||||
config ZMK_LOW_PRIORITY_WORK_QUEUE
|
||||
bool "Work queue for low priority items"
|
||||
@@ -689,13 +647,11 @@ config ZMK_LOW_PRIORITY_THREAD_PRIORITY
|
||||
int "Low priority thread priority"
|
||||
default 10
|
||||
|
||||
endif
|
||||
endif # ZMK_LOW_PRIORITY_WORK_QUEUE
|
||||
|
||||
#Advanced
|
||||
endmenu
|
||||
endmenu # Advanced
|
||||
|
||||
#ZMK
|
||||
endmenu
|
||||
endmenu # ZMK
|
||||
|
||||
config KERNEL_BIN_NAME
|
||||
default "zmk"
|
||||
@@ -740,12 +696,22 @@ module = ZMK
|
||||
module-str = zmk
|
||||
source "subsys/logging/Kconfig.template.log_config"
|
||||
|
||||
# This loads ZMK's internal board and shield Kconfigs
|
||||
rsource "boards/Kconfig"
|
||||
rsource "boards/shields/*/Kconfig.defconfig"
|
||||
rsource "boards/shields/*/Kconfig.shield"
|
||||
|
||||
# This loads custom shields defconfigs (from BOARD_ROOT)
|
||||
# Duplicated from Kconfig.zephyr
|
||||
osource "$(KCONFIG_BINARY_DIR)/Kconfig.shield.defconfig"
|
||||
|
||||
source "$(BOARD_DIR)/Kconfig.defconfig"
|
||||
|
||||
# This loads board and shield Kconfigs found under zmk-config/config/
|
||||
osource "$(ZMK_CONFIG)/boards/shields/*/Kconfig.defconfig"
|
||||
osource "$(ZMK_CONFIG)/boards/shields/*/Kconfig.shield"
|
||||
|
||||
# This loads ZMK's sensible defaults
|
||||
rsource "Kconfig.defaults"
|
||||
|
||||
source "Kconfig.zephyr"
|
||||
|
||||
@@ -51,13 +51,11 @@ if ZMK_BEHAVIOR_HOLD_TAP
|
||||
|
||||
config ZMK_BEHAVIOR_HOLD_TAP_MAX_HELD
|
||||
int "Hold Tap Max Held"
|
||||
default 10
|
||||
help
|
||||
Max number of simultaneously held hold-taps
|
||||
|
||||
config ZMK_BEHAVIOR_HOLD_TAP_MAX_CAPTURED_EVENTS
|
||||
int "Hold Tap Max Captured Events"
|
||||
default 40
|
||||
help
|
||||
Max number of captured system events while waiting to resolve hold taps
|
||||
|
||||
@@ -71,8 +69,7 @@ config ZMK_BEHAVIOR_KEY_TOGGLE
|
||||
config ZMK_BEHAVIOR_MOUSE_KEY_PRESS
|
||||
bool
|
||||
default y
|
||||
depends on DT_HAS_ZMK_BEHAVIOR_MOUSE_KEY_PRESS_ENABLED
|
||||
imply ZMK_MOUSE
|
||||
depends on DT_HAS_ZMK_BEHAVIOR_MOUSE_KEY_PRESS_ENABLED && ZMK_POINTING
|
||||
|
||||
config ZMK_BEHAVIOR_STICKY_KEY
|
||||
bool
|
||||
@@ -83,7 +80,6 @@ if ZMK_BEHAVIOR_STICKY_KEY
|
||||
|
||||
config ZMK_BEHAVIOR_STICKY_KEY_MAX_HELD
|
||||
int "Sticky Key Max Held"
|
||||
default 10
|
||||
help
|
||||
Max number of simultaneously held sticky keys
|
||||
|
||||
@@ -94,6 +90,26 @@ config ZMK_BEHAVIOR_SOFT_OFF
|
||||
default y
|
||||
depends on DT_HAS_ZMK_BEHAVIOR_SOFT_OFF_ENABLED && ZMK_PM_SOFT_OFF
|
||||
|
||||
|
||||
config ZMK_BEHAVIOR_TAP_DANCE
|
||||
bool
|
||||
default y
|
||||
depends on DT_HAS_ZMK_BEHAVIOR_TAP_DANCE_ENABLED
|
||||
|
||||
if ZMK_BEHAVIOR_TAP_DANCE
|
||||
|
||||
config ZMK_BEHAVIOR_TAP_DANCE_MAX_HELD
|
||||
int "Tap-Dance Max Held"
|
||||
help
|
||||
Max number of simultaneously held taps-dances
|
||||
|
||||
endif
|
||||
|
||||
config ZMK_BEHAVIOR_INPUT_TWO_AXIS
|
||||
bool
|
||||
default y
|
||||
depends on DT_HAS_ZMK_BEHAVIOR_INPUT_TWO_AXIS_ENABLED && ZMK_POINTING
|
||||
|
||||
config ZMK_BEHAVIOR_SENSOR_ROTATE_COMMON
|
||||
bool
|
||||
|
||||
|
||||
109
app/Kconfig.defaults
Normal file
109
app/Kconfig.defaults
Normal file
@@ -0,0 +1,109 @@
|
||||
# Copyright (c) 2024 The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
# HID
|
||||
if ZMK_HID_REPORT_TYPE_HKRO
|
||||
|
||||
config ZMK_HID_KEYBOARD_REPORT_SIZE
|
||||
default 6
|
||||
|
||||
endif
|
||||
|
||||
config ZMK_HID_CONSUMER_REPORT_SIZE
|
||||
default 6
|
||||
|
||||
# Behaviors
|
||||
|
||||
if ZMK_BEHAVIOR_HOLD_TAP
|
||||
|
||||
config ZMK_BEHAVIOR_HOLD_TAP_MAX_HELD
|
||||
default 10
|
||||
|
||||
config ZMK_BEHAVIOR_HOLD_TAP_MAX_CAPTURED_EVENTS
|
||||
default 40
|
||||
|
||||
endif
|
||||
|
||||
if ZMK_BEHAVIOR_STICKY_KEY
|
||||
|
||||
config ZMK_BEHAVIOR_STICKY_KEY_MAX_HELD
|
||||
default 10
|
||||
|
||||
endif
|
||||
|
||||
if ZMK_BEHAVIOR_TAP_DANCE
|
||||
|
||||
config ZMK_BEHAVIOR_TAP_DANCE_MAX_HELD
|
||||
default 10
|
||||
|
||||
endif
|
||||
|
||||
# Underglow
|
||||
if ZMK_RGB_UNDERGLOW
|
||||
|
||||
# This default value cuts down on tons of excess .conf files, if you're using GPIO, manually disable this
|
||||
config SPI
|
||||
default y
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_EXT_POWER
|
||||
default y
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_BRT_MIN
|
||||
default 0
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_BRT_MAX
|
||||
default 100
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_HUE_STEP
|
||||
default 10
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_SAT_STEP
|
||||
default 10
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_BRT_STEP
|
||||
default 10
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_HUE_START
|
||||
default 0
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_SAT_START
|
||||
default 100
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_BRT_START
|
||||
default ZMK_RGB_UNDERGLOW_BRT_MAX
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_SPD_START
|
||||
default 3
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_EFF_START
|
||||
default 0
|
||||
|
||||
config ZMK_RGB_UNDERGLOW_ON_START
|
||||
default y
|
||||
|
||||
endif # ZMK_RGB_UNDERGLOW
|
||||
|
||||
# Backlight
|
||||
if ZMK_BACKLIGHT
|
||||
|
||||
config ZMK_BACKLIGHT_BRT_STEP
|
||||
default 20
|
||||
|
||||
config ZMK_BACKLIGHT_BRT_START
|
||||
default 40
|
||||
|
||||
config ZMK_BACKLIGHT_ON_START
|
||||
default y
|
||||
|
||||
endif # ZMK_BACKLIGHT
|
||||
|
||||
# Ext_power
|
||||
config ZMK_EXT_POWER
|
||||
default y
|
||||
|
||||
# Battery
|
||||
config ZMK_BATTERY_REPORT_INTERVAL
|
||||
default 60
|
||||
|
||||
# Imports
|
||||
rsource "src/split/Kconfig.defaults"
|
||||
@@ -3,11 +3,11 @@ VERSION_MAJOR = 0
|
||||
# x-release-please-end
|
||||
|
||||
# x-release-please-start-minor
|
||||
VERSION_MINOR = 1
|
||||
VERSION_MINOR = 2
|
||||
# x-release-please-end
|
||||
|
||||
# x-release-please-start-patch
|
||||
PATCHLEVEL = 0
|
||||
PATCHLEVEL = 1
|
||||
# x-release-please-end
|
||||
|
||||
VERSION_TWEAK = 0
|
||||
2
app/boards/aliases.cmake
Normal file
2
app/boards/aliases.cmake
Normal file
@@ -0,0 +1,2 @@
|
||||
# defines board aliases for shorter names (or for renaming boards)
|
||||
set(mikoto_520_BOARD_ALIAS "mikoto")
|
||||
@@ -2,17 +2,17 @@ config BOARD_ENABLE_DCDC
|
||||
bool "Enable DCDC mode"
|
||||
select SOC_DCDC_NRF52X
|
||||
default y
|
||||
depends on (BOARD_MIKOTO_520)
|
||||
depends on (BOARD_MIKOTO)
|
||||
|
||||
config BOARD_ENABLE_DCDC_HV
|
||||
bool "High voltage DCDC converter"
|
||||
select SOC_DCDC_NRF52X_HV
|
||||
default y
|
||||
depends on (BOARD_MIKOTO_520)
|
||||
depends on (BOARD_MIKOTO)
|
||||
|
||||
choice BOARD_MIKOTO_CHARGER_CURRENT
|
||||
prompt "Charge current to supply to attached batteries"
|
||||
depends on (BOARD_MIKOTO_520)
|
||||
depends on (BOARD_MIKOTO)
|
||||
|
||||
config BOARD_MIKOTO_CHARGER_CURRENT_40MA
|
||||
bool "40mA charge current, for battery capacity 40mAh or higher"
|
||||
@@ -32,4 +32,4 @@ config BOARD_MIKOTO_CHARGER_CURRENT_350MA
|
||||
config BOARD_MIKOTO_CHARGER_CURRENT_NONE
|
||||
bool "Disable charge current"
|
||||
|
||||
endchoice
|
||||
endchoice
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
# Copyright (c) 2020 The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
config BOARD_MIKOTO_520
|
||||
bool "mikoto_520"
|
||||
config BOARD_MIKOTO
|
||||
bool "mikoto"
|
||||
depends on SOC_NRF52840_QIAA
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
# Copyright (c) 2020 The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
if BOARD_MIKOTO_520
|
||||
if BOARD_MIKOTO
|
||||
|
||||
config BOARD
|
||||
default "mikoto"
|
||||
@@ -25,4 +25,4 @@ choice BOARD_MIKOTO_CHARGER_CURRENT
|
||||
default BOARD_MIKOTO_CHARGER_CURRENT_100MA
|
||||
endchoice
|
||||
|
||||
endif # BOARD_MIKOTO_520
|
||||
endif # BOARD_MIKOTO
|
||||
|
||||
59
app/boards/arm/mikoto/arduino_pro_micro_pins_v6.dtsi
Normal file
59
app/boards/arm/mikoto/arduino_pro_micro_pins_v6.dtsi
Normal file
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (c) 2020 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
|
||||
/ {
|
||||
pro_micro: connector {
|
||||
compatible = "arduino-pro-micro";
|
||||
#gpio-cells = <2>;
|
||||
gpio-map-mask = <0xffffffff 0xffffffc0>;
|
||||
gpio-map-pass-thru = <0 0x3f>;
|
||||
gpio-map
|
||||
= <0 0 &gpio0 4 0> /* D0 */
|
||||
, <1 0 &gpio0 8 0> /* D1 */
|
||||
, <2 0 &gpio0 17 0> /* D2 */
|
||||
, <3 0 &gpio0 20 0> /* D3 */
|
||||
, <4 0 &gpio0 22 0> /* D4/A6 */
|
||||
, <5 0 &gpio0 24 0> /* D5 */
|
||||
, <6 0 &gpio1 8 0> /* D6/A7 */
|
||||
, <7 0 &gpio1 2 0> /* D7 */
|
||||
, <8 0 &gpio1 4 0> /* D8/A8 */
|
||||
, <9 0 &gpio1 6 0> /* D9/A9 */
|
||||
, <10 0 &gpio0 9 0> /* D10/A10 */
|
||||
, <16 0 &gpio0 10 0> /* D16 */
|
||||
, <14 0 &gpio1 13 0> /* D14 */
|
||||
, <15 0 &gpio0 2 0> /* D15 */
|
||||
, <18 0 &gpio0 29 0> /* D18/A0 */
|
||||
, <19 0 &gpio0 31 0> /* D19/A1 */
|
||||
, <20 0 &gpio0 25 0> /* D20/A2 */
|
||||
, <21 0 &gpio0 11 0> /* D21/A3 */
|
||||
;
|
||||
};
|
||||
|
||||
pro_micro_a: connector_a {
|
||||
compatible = "arduino-pro-micro";
|
||||
#gpio-cells = <2>;
|
||||
gpio-map-mask = <0xffffffff 0xffffffc0>;
|
||||
gpio-map-pass-thru = <0 0x3f>;
|
||||
gpio-map
|
||||
= <0 0 &gpio0 29 0> /* D18/A0 */
|
||||
, <1 0 &gpio0 31 0> /* D19/A1 */
|
||||
, <2 0 &gpio0 25 0> /* D20/A2 */
|
||||
, <3 0 &gpio0 11 0> /* D21/A3 */
|
||||
, <6 0 &gpio0 22 0> /* D4/A6 */
|
||||
, <7 0 &gpio1 8 0> /* D6/A7 */
|
||||
, <8 0 &gpio1 4 0> /* D8/A8 */
|
||||
, <9 0 &gpio1 6 0> /* D9/A9 */
|
||||
, <10 0 &gpio0 9 0> /* D10/A10 */
|
||||
;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
pro_micro_d: &pro_micro {};
|
||||
pro_micro_i2c: &i2c0 {};
|
||||
pro_micro_spi: &spi0 {};
|
||||
pro_micro_serial: &uart0 {};
|
||||
@@ -17,7 +17,7 @@
|
||||
uart0_sleep: uart0_sleep {
|
||||
group1 {
|
||||
psels = <NRF_PSEL(UART_RX, 0, 4)>,
|
||||
<NRF_PSEL(UART_TX, 0, 8)>;
|
||||
<NRF_PSEL(UART_TX, 0, 8)>;
|
||||
low-power-enable;
|
||||
};
|
||||
};
|
||||
@@ -25,14 +25,14 @@
|
||||
i2c0_default: i2c0_default {
|
||||
group1 {
|
||||
psels = <NRF_PSEL(TWIM_SDA, 0, 17)>,
|
||||
<NRF_PSEL(TWIM_SCL, 0, 20)>;
|
||||
<NRF_PSEL(TWIM_SCL, 0, 20)>;
|
||||
};
|
||||
};
|
||||
|
||||
i2c0_sleep: i2c0_sleep {
|
||||
group1 {
|
||||
psels = <NRF_PSEL(TWIM_SDA, 0, 17)>,
|
||||
<NRF_PSEL(TWIM_SCL, 0, 20)>;
|
||||
<NRF_PSEL(TWIM_SCL, 0, 20)>;
|
||||
low-power-enable;
|
||||
};
|
||||
};
|
||||
@@ -6,8 +6,6 @@
|
||||
|
||||
/dts-v1/;
|
||||
#include <nordic/nrf52840_qiaa.dtsi>
|
||||
#include "arduino_pro_micro_pins.dtsi"
|
||||
#include "mikoto_520-pinctrl.dtsi"
|
||||
|
||||
/ {
|
||||
model = "mikoto";
|
||||
@@ -1,5 +1,5 @@
|
||||
identifier: mikoto_520
|
||||
name: mikoto_520
|
||||
identifier: mikoto
|
||||
name: mikoto
|
||||
type: mcu
|
||||
arch: arm
|
||||
toolchain:
|
||||
@@ -1,6 +1,6 @@
|
||||
file_format: "1"
|
||||
id: mikoto_520
|
||||
name: Mikoto 5.20
|
||||
id: mikoto
|
||||
name: Mikoto
|
||||
type: board
|
||||
arch: arm
|
||||
outputs:
|
||||
@@ -8,3 +8,9 @@ outputs:
|
||||
- ble
|
||||
url: https://github.com/zhiayang/mikoto
|
||||
exposes: [pro_micro]
|
||||
revisions:
|
||||
- "5.20"
|
||||
- "6.1"
|
||||
- "6.3"
|
||||
- "7.2"
|
||||
default_revision: "5.20"
|
||||
8
app/boards/arm/mikoto/mikoto_5_20_0.overlay
Normal file
8
app/boards/arm/mikoto/mikoto_5_20_0.overlay
Normal file
@@ -0,0 +1,8 @@
|
||||
/*
|
||||
* Copyright (c) 2023 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "mikoto-pinctrl.dtsi"
|
||||
#include "arduino_pro_micro_pins_v5.dtsi"
|
||||
8
app/boards/arm/mikoto/mikoto_6_1_0.overlay
Normal file
8
app/boards/arm/mikoto/mikoto_6_1_0.overlay
Normal file
@@ -0,0 +1,8 @@
|
||||
/*
|
||||
* Copyright (c) 2023 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "mikoto-pinctrl.dtsi"
|
||||
#include "arduino_pro_micro_pins_v6.dtsi"
|
||||
2
app/boards/arm/mikoto/mikoto_7_2_0.conf
Normal file
2
app/boards/arm/mikoto/mikoto_7_2_0.conf
Normal file
@@ -0,0 +1,2 @@
|
||||
CONFIG_I2C=y
|
||||
CONFIG_ZMK_MAX17048=y
|
||||
47
app/boards/arm/mikoto/mikoto_7_2_0.overlay
Normal file
47
app/boards/arm/mikoto/mikoto_7_2_0.overlay
Normal file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (c) 2023 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "mikoto-pinctrl.dtsi"
|
||||
#include "arduino_pro_micro_pins_v6.dtsi"
|
||||
|
||||
&pinctrl {
|
||||
i2c1_default: i2c1_default {
|
||||
group1 {
|
||||
psels = <NRF_PSEL(TWIM_SDA, 0, 23)>,
|
||||
<NRF_PSEL(TWIM_SCL, 0, 19)>;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
|
||||
i2c1_sleep: i2c1_sleep {
|
||||
group1 {
|
||||
psels = <NRF_PSEL(TWIM_SDA, 0, 23)>,
|
||||
<NRF_PSEL(TWIM_SCL, 0, 19)>;
|
||||
low-power-enable;
|
||||
bias-pull-up;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c1 {
|
||||
status = "okay";
|
||||
compatible = "nordic,nrf-twi";
|
||||
pinctrl-0 = <&i2c1_default>;
|
||||
pinctrl-1 = <&i2c1_sleep>;
|
||||
pinctrl-names = "default", "sleep";
|
||||
|
||||
builtin_fuel_gauge: max17048@36 {
|
||||
compatible = "zmk,maxim-max17048";
|
||||
status = "okay";
|
||||
reg = <0x36>;
|
||||
};
|
||||
};
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
zmk,battery = &builtin_fuel_gauge;
|
||||
};
|
||||
};
|
||||
@@ -2,11 +2,10 @@
|
||||
|
||||
CONFIG_SOC_SERIES_NRF52X=y
|
||||
CONFIG_SOC_NRF52840_QIAA=y
|
||||
CONFIG_BOARD_MIKOTO_520=y
|
||||
CONFIG_BOARD_MIKOTO=y
|
||||
|
||||
# Enable MPU
|
||||
CONFIG_ARM_MPU=y
|
||||
|
||||
CONFIG_PINCTRL=y
|
||||
|
||||
# enable GPIO
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
static int pinmux_mikoto_init(void) {
|
||||
|
||||
#if CONFIG_BOARD_MIKOTO_520
|
||||
#if CONFIG_BOARD_MIKOTO
|
||||
const struct device *p0 = DEVICE_DT_GET(DT_NODELABEL(gpio0));
|
||||
const struct device *p1 = DEVICE_DT_GET(DT_NODELABEL(gpio1));
|
||||
#if CONFIG_BOARD_MIKOTO_CHARGER_CURRENT_40MA
|
||||
|
||||
7
app/boards/arm/mikoto/revision.cmake
Normal file
7
app/boards/arm/mikoto/revision.cmake
Normal file
@@ -0,0 +1,7 @@
|
||||
board_check_revision(FORMAT MAJOR.MINOR.PATCH
|
||||
DEFAULT_REVISION 5.20.0
|
||||
VALID_REVISIONS
|
||||
5.20.0 # first public release
|
||||
6.1.0 6.3.0 # incompatible pinout change from v5+
|
||||
7.2.0 # addition of MAX17048; compatible pinout with v6+
|
||||
)
|
||||
71
app/boards/shields/lotus58/lotus58-layouts.dtsi
Normal file
71
app/boards/shields/lotus58/lotus58-layouts.dtsi
Normal file
@@ -0,0 +1,71 @@
|
||||
#include <physical_layouts.dtsi>
|
||||
|
||||
/ {
|
||||
physical_layout0: physical_layout_0 {
|
||||
compatible = "zmk,physical-layout";
|
||||
display-name = "Default";
|
||||
|
||||
keys // w h x y rot rx ry
|
||||
= <&key_physical_attrs 100 100 0 50 0 0 0>
|
||||
, <&key_physical_attrs 100 100 100 37 0 0 0>
|
||||
, <&key_physical_attrs 100 100 200 12 0 0 0>
|
||||
, <&key_physical_attrs 100 100 300 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 400 12 0 0 0>
|
||||
, <&key_physical_attrs 100 100 500 25 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1050 25 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1150 12 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1250 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1350 12 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1450 37 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1550 50 0 0 0>
|
||||
, <&key_physical_attrs 100 100 0 150 0 0 0>
|
||||
, <&key_physical_attrs 100 100 100 137 0 0 0>
|
||||
, <&key_physical_attrs 100 100 200 112 0 0 0>
|
||||
, <&key_physical_attrs 100 100 300 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 400 112 0 0 0>
|
||||
, <&key_physical_attrs 100 100 500 125 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1050 125 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1150 112 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1250 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1350 112 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1450 137 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1550 150 0 0 0>
|
||||
, <&key_physical_attrs 100 100 0 250 0 0 0>
|
||||
, <&key_physical_attrs 100 100 100 237 0 0 0>
|
||||
, <&key_physical_attrs 100 100 200 212 0 0 0>
|
||||
, <&key_physical_attrs 100 100 300 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 400 212 0 0 0>
|
||||
, <&key_physical_attrs 100 100 500 225 0 0 0>
|
||||
, <&key_physical_attrs 100 100 625 75 0 0 0>
|
||||
, <&key_physical_attrs 100 100 925 75 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1050 225 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1150 212 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1250 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1350 212 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1450 237 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1550 250 0 0 0>
|
||||
, <&key_physical_attrs 100 100 0 350 0 0 0>
|
||||
, <&key_physical_attrs 100 100 100 337 0 0 0>
|
||||
, <&key_physical_attrs 100 100 200 312 0 0 0>
|
||||
, <&key_physical_attrs 100 100 300 300 0 0 0>
|
||||
, <&key_physical_attrs 100 100 400 312 0 0 0>
|
||||
, <&key_physical_attrs 100 100 500 325 0 0 0>
|
||||
, <&key_physical_attrs 100 100 625 275 0 0 0>
|
||||
, <&key_physical_attrs 100 100 925 275 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1050 325 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1150 312 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1250 300 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1350 312 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1450 337 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1550 350 0 0 0>
|
||||
, <&key_physical_attrs 100 100 250 412 0 0 0>
|
||||
, <&key_physical_attrs 100 100 350 415 0 0 0>
|
||||
, <&key_physical_attrs 100 100 450 425 0 0 0>
|
||||
, <&key_physical_attrs 100 150 575 400 3000 625 475>
|
||||
, <&key_physical_attrs 100 150 975 400 (-3000) 1025 475>
|
||||
, <&key_physical_attrs 100 100 1100 425 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1200 415 0 0 0>
|
||||
, <&key_physical_attrs 100 100 1300 415 0 0 0>
|
||||
;
|
||||
};
|
||||
};
|
||||
@@ -6,17 +6,19 @@
|
||||
|
||||
#include <dt-bindings/zmk/matrix_transform.h>
|
||||
|
||||
#include "lotus58-layouts.dtsi"
|
||||
|
||||
/ {
|
||||
chosen {
|
||||
zephyr,display = &oled;
|
||||
zmk,kscan = &kscan0;
|
||||
zmk,matrix-transform = &default_transform;
|
||||
zmk,physical-layout = &physical_layout0;
|
||||
};
|
||||
|
||||
default_transform: keymap_transform_0 {
|
||||
compatible = "zmk,matrix-transform";
|
||||
columns = <16>;
|
||||
rows = <4>;
|
||||
rows = <5>;
|
||||
// | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 | | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 |
|
||||
// | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 |
|
||||
// | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 | SW30 | | SW30 | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 |
|
||||
@@ -68,6 +70,10 @@ RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(4,5) RC(4,6) RC(3,6) RC(3,7
|
||||
};
|
||||
};
|
||||
|
||||
&physical_layout0 {
|
||||
transform = <&default_transform>;
|
||||
};
|
||||
|
||||
&pro_micro_i2c {
|
||||
status = "okay";
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ features:
|
||||
- keys
|
||||
- display
|
||||
- encoder
|
||||
- studio
|
||||
siblings:
|
||||
- lotus58_left
|
||||
- lotus58_right
|
||||
|
||||
@@ -24,7 +24,7 @@ include:
|
||||
nickname: "display"
|
||||
- board: nice_nano_v2
|
||||
shield: kyria_left
|
||||
cmake-args: "-DCONFIG_ZMK_MOUSE=y"
|
||||
cmake-args: "-DCONFIG_ZMK_POINTING=y"
|
||||
nickname: "mouse"
|
||||
- board: sparkfun_pro_micro_rp2040
|
||||
shield: reviung41
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* Copyright (c) 2024 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include <behaviors/key_press.dtsi>
|
||||
#include <behaviors/key_toggle.dtsi>
|
||||
#include <behaviors/transparent.dtsi>
|
||||
@@ -19,6 +25,6 @@
|
||||
#include <behaviors/key_repeat.dtsi>
|
||||
#include <behaviors/backlight.dtsi>
|
||||
#include <behaviors/macros.dtsi>
|
||||
#include <behaviors/mouse_key_press.dtsi>
|
||||
#include <behaviors/soft_off.dtsi>
|
||||
#include <behaviors/studio_unlock.dtsi>
|
||||
#include <behaviors/mouse_keys.dtsi>
|
||||
|
||||
@@ -16,4 +16,9 @@
|
||||
#binding-cells = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
mkp_input_listener: mkp_input_listener {
|
||||
compatible = "zmk,input-listener";
|
||||
device = <&mkp>;
|
||||
};
|
||||
};
|
||||
|
||||
9
app/dts/behaviors/mouse_keys.dtsi
Normal file
9
app/dts/behaviors/mouse_keys.dtsi
Normal file
@@ -0,0 +1,9 @@
|
||||
/*
|
||||
* Copyright (c) 2024 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include "mouse_key_press.dtsi"
|
||||
#include "mouse_move.dtsi"
|
||||
#include "mouse_scroll.dtsi"
|
||||
25
app/dts/behaviors/mouse_move.dtsi
Normal file
25
app/dts/behaviors/mouse_move.dtsi
Normal file
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright (c) 2024 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include <zephyr/dt-bindings/input/input-event-codes.h>
|
||||
|
||||
/ {
|
||||
behaviors {
|
||||
/omit-if-no-ref/ mmv: mouse_move {
|
||||
compatible = "zmk,behavior-input-two-axis";
|
||||
#binding-cells = <1>;
|
||||
x-input-code = <INPUT_REL_X>;
|
||||
y-input-code = <INPUT_REL_Y>;
|
||||
time-to-max-speed-ms = <300>;
|
||||
acceleration-exponent = <1>;
|
||||
};
|
||||
};
|
||||
|
||||
mmv_input_listener: mmv_input_listener {
|
||||
compatible = "zmk,input-listener";
|
||||
device = <&mmv>;
|
||||
};
|
||||
};
|
||||
26
app/dts/behaviors/mouse_scroll.dtsi
Normal file
26
app/dts/behaviors/mouse_scroll.dtsi
Normal file
@@ -0,0 +1,26 @@
|
||||
|
||||
/*
|
||||
* Copyright (c) 2024 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include <zephyr/dt-bindings/input/input-event-codes.h>
|
||||
|
||||
/ {
|
||||
behaviors {
|
||||
/omit-if-no-ref/ msc: mouse_scroll {
|
||||
compatible = "zmk,behavior-input-two-axis";
|
||||
#binding-cells = <1>;
|
||||
x-input-code = <INPUT_REL_HWHEEL>;
|
||||
y-input-code = <INPUT_REL_WHEEL>;
|
||||
time-to-max-speed-ms = <300>;
|
||||
acceleration-exponent = <0>;
|
||||
};
|
||||
};
|
||||
|
||||
msc_input_listener: msc_input_listener {
|
||||
compatible = "zmk,input-listener";
|
||||
device = <&msc>;
|
||||
};
|
||||
};
|
||||
28
app/dts/bindings/behaviors/zmk,behavior-input-two-axis.yaml
Normal file
28
app/dts/bindings/behaviors/zmk,behavior-input-two-axis.yaml
Normal file
@@ -0,0 +1,28 @@
|
||||
# Copyright (c) 2024 The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
description: Two axis input behavior
|
||||
|
||||
compatible: "zmk,behavior-input-two-axis"
|
||||
|
||||
include: one_param.yaml
|
||||
|
||||
properties:
|
||||
x-input-code:
|
||||
type: int
|
||||
required: true
|
||||
y-input-code:
|
||||
type: int
|
||||
required: true
|
||||
trigger-period-ms:
|
||||
type: int
|
||||
default: 16
|
||||
description: The time (in ms) between generated inputs when an input has non-zero speed.
|
||||
delay-ms:
|
||||
type: int
|
||||
time-to-max-speed-ms:
|
||||
type: int
|
||||
required: true
|
||||
acceleration-exponent:
|
||||
type: int
|
||||
default: 1
|
||||
@@ -6,3 +6,13 @@ description: Key toggle behavior
|
||||
compatible: "zmk,behavior-key-toggle"
|
||||
|
||||
include: one_param.yaml
|
||||
|
||||
properties:
|
||||
toggle-mode:
|
||||
type: string
|
||||
required: false
|
||||
default: "flip"
|
||||
enum:
|
||||
- "on"
|
||||
- "off"
|
||||
- "flip"
|
||||
|
||||
@@ -6,3 +6,13 @@ description: Toggle Layer
|
||||
compatible: "zmk,behavior-toggle-layer"
|
||||
|
||||
include: one_param.yaml
|
||||
|
||||
properties:
|
||||
toggle-mode:
|
||||
type: string
|
||||
required: false
|
||||
default: "flip"
|
||||
enum:
|
||||
- "on"
|
||||
- "off"
|
||||
- "flip"
|
||||
|
||||
6
app/dts/bindings/input_processors/ip_common.yaml
Normal file
6
app/dts/bindings/input_processors/ip_common.yaml
Normal file
@@ -0,0 +1,6 @@
|
||||
# Copyright (c) 2024 The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
properties:
|
||||
track-remainders:
|
||||
type: boolean
|
||||
13
app/dts/bindings/input_processors/ip_one_param.yaml
Normal file
13
app/dts/bindings/input_processors/ip_one_param.yaml
Normal file
@@ -0,0 +1,13 @@
|
||||
# Copyright (c) 2024 The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
include: ip_common.yaml
|
||||
|
||||
properties:
|
||||
"#input-processor-cells":
|
||||
type: int
|
||||
required: true
|
||||
const: 1
|
||||
|
||||
input-processor-cells:
|
||||
- param1
|
||||
14
app/dts/bindings/input_processors/ip_two_param.yaml
Normal file
14
app/dts/bindings/input_processors/ip_two_param.yaml
Normal file
@@ -0,0 +1,14 @@
|
||||
# Copyright (c) 2024 The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
include: ip_common.yaml
|
||||
|
||||
properties:
|
||||
"#input-processor-cells":
|
||||
type: int
|
||||
required: true
|
||||
const: 2
|
||||
|
||||
input-processor-cells:
|
||||
- param1
|
||||
- param2
|
||||
10
app/dts/bindings/input_processors/ip_zero_param.yaml
Normal file
10
app/dts/bindings/input_processors/ip_zero_param.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# Copyright (c) 2024 The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
include: ip_common.yaml
|
||||
|
||||
properties:
|
||||
"#input-processor-cells":
|
||||
type: int
|
||||
required: true
|
||||
const: 0
|
||||
@@ -0,0 +1,18 @@
|
||||
# Copyright (c) 2024, The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
description: Input Processor for invoking behaviors on certain events
|
||||
|
||||
compatible: "zmk,input-processor-behaviors"
|
||||
|
||||
include: ip_zero_param.yaml
|
||||
|
||||
properties:
|
||||
type:
|
||||
type: int
|
||||
codes:
|
||||
type: array
|
||||
required: true
|
||||
bindings:
|
||||
type: phandle-array
|
||||
required: true
|
||||
@@ -0,0 +1,16 @@
|
||||
# Copyright (c) 2024, The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
description: Input Processor for remapping certain input codes to other codes
|
||||
|
||||
compatible: "zmk,input-processor-code-mapper"
|
||||
|
||||
include: ip_zero_param.yaml
|
||||
|
||||
properties:
|
||||
type:
|
||||
type: int
|
||||
required: true
|
||||
map:
|
||||
type: array
|
||||
required: true
|
||||
@@ -0,0 +1,16 @@
|
||||
# Copyright (c) 2024, The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
description: Input Processor for scaling values
|
||||
|
||||
compatible: "zmk,input-processor-scaler"
|
||||
|
||||
include: ip_two_param.yaml
|
||||
|
||||
properties:
|
||||
type:
|
||||
type: int
|
||||
required: true
|
||||
codes:
|
||||
type: array
|
||||
required: true
|
||||
@@ -0,0 +1,21 @@
|
||||
# Copyright (c) 2024, The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
description: Input Processor for temporarily enabling a layer after input events
|
||||
|
||||
compatible: "zmk,input-processor-temp-layer"
|
||||
|
||||
include: ip_two_param.yaml
|
||||
|
||||
properties:
|
||||
require-prior-idle-ms:
|
||||
type: int
|
||||
required: false
|
||||
default: 0
|
||||
description: Time in milliseconds that must pass after the last keystroke before the layer can be toggled
|
||||
|
||||
excluded-positions:
|
||||
type: array
|
||||
required: false
|
||||
default: []
|
||||
description: Array of key positions that will NOT trigger layer deactivation when pressed
|
||||
@@ -0,0 +1,18 @@
|
||||
# Copyright (c) 2024, The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
description: Input Processor for transforming values in various ways
|
||||
|
||||
compatible: "zmk,input-processor-transform"
|
||||
|
||||
include: ip_one_param.yaml
|
||||
|
||||
properties:
|
||||
type:
|
||||
type: int
|
||||
x-codes:
|
||||
type: array
|
||||
required: true
|
||||
y-codes:
|
||||
type: array
|
||||
required: true
|
||||
26
app/dts/bindings/zmk,input-listener.yaml
Normal file
26
app/dts/bindings/zmk,input-listener.yaml
Normal file
@@ -0,0 +1,26 @@
|
||||
# Copyright (c) 2024 The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
description: |
|
||||
Listener to subscribe to input events and send HID updates after processing
|
||||
|
||||
compatible: "zmk,input-listener"
|
||||
|
||||
properties:
|
||||
device:
|
||||
type: phandle
|
||||
required: true
|
||||
input-processors:
|
||||
type: phandle-array
|
||||
|
||||
child-binding:
|
||||
description: "Listener overrides for certain layers"
|
||||
|
||||
properties:
|
||||
layers:
|
||||
type: array
|
||||
required: true
|
||||
process-next:
|
||||
type: boolean
|
||||
input-processors:
|
||||
type: phandle-array
|
||||
18
app/dts/bindings/zmk,input-split.yaml
Normal file
18
app/dts/bindings/zmk,input-split.yaml
Normal file
@@ -0,0 +1,18 @@
|
||||
# Copyright (c) 2024 The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
include: [base.yaml]
|
||||
|
||||
compatible: "zmk,input-split"
|
||||
|
||||
description: Device to wire up an input device for split use.
|
||||
|
||||
properties:
|
||||
reg:
|
||||
required: true
|
||||
|
||||
device:
|
||||
type: phandle
|
||||
|
||||
input-processors:
|
||||
type: phandle-array
|
||||
@@ -3,6 +3,8 @@ description: |
|
||||
|
||||
compatible: "zmk,kscan-composite"
|
||||
|
||||
include: kscan.yaml
|
||||
|
||||
properties:
|
||||
label:
|
||||
type: string
|
||||
|
||||
11
app/dts/input/processors.dtsi
Normal file
11
app/dts/input/processors.dtsi
Normal file
@@ -0,0 +1,11 @@
|
||||
/*
|
||||
* Copyright (c) 2024 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include <input/processors/scaler.dtsi>
|
||||
#include <input/processors/code_mapper.dtsi>
|
||||
#include <input/processors/transform.dtsi>
|
||||
#include <input/processors/temp_layer.dtsi>
|
||||
#include <input/processors/behaviors.dtsi>
|
||||
16
app/dts/input/processors/behaviors.dtsi
Normal file
16
app/dts/input/processors/behaviors.dtsi
Normal file
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Copyright (c) 2024 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include <zephyr/dt-bindings/input/input-event-codes.h>
|
||||
|
||||
/ {
|
||||
zip_button_behaviors: zip_button_behaviors {
|
||||
compatible = "zmk,input-processor-behaviors";
|
||||
#input-processor-cells = <0>;
|
||||
codes = <INPUT_BTN_0 INPUT_BTN_1 INPUT_BTN_2>;
|
||||
bindings = <&none &none &none>;
|
||||
};
|
||||
};
|
||||
29
app/dts/input/processors/code_mapper.dtsi
Normal file
29
app/dts/input/processors/code_mapper.dtsi
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (c) 2024 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include <zephyr/dt-bindings/input/input-event-codes.h>
|
||||
|
||||
/ {
|
||||
/omit-if-no-ref/ zip_xy_swap_mapper: zip_xy_swap_mapper {
|
||||
compatible = "zmk,input-processor-code-mapper";
|
||||
#input-processor-cells = <0>;
|
||||
type = <INPUT_EV_REL>;
|
||||
map
|
||||
= <INPUT_REL_Y INPUT_REL_X>
|
||||
, <INPUT_REL_X INPUT_REL_Y>
|
||||
;
|
||||
};
|
||||
|
||||
/omit-if-no-ref/ zip_xy_to_scroll_mapper: zip_xy_to_scroll_mapper {
|
||||
compatible = "zmk,input-processor-code-mapper";
|
||||
#input-processor-cells = <0>;
|
||||
type = <INPUT_EV_REL>;
|
||||
map
|
||||
= <INPUT_REL_Y INPUT_REL_WHEEL>
|
||||
, <INPUT_REL_X INPUT_REL_HWHEEL>
|
||||
;
|
||||
};
|
||||
};
|
||||
41
app/dts/input/processors/scaler.dtsi
Normal file
41
app/dts/input/processors/scaler.dtsi
Normal file
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (c) 2024 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include <zephyr/dt-bindings/input/input-event-codes.h>
|
||||
|
||||
/ {
|
||||
/omit-if-no-ref/ zip_x_scaler: zip_x_scaler {
|
||||
compatible = "zmk,input-processor-scaler";
|
||||
#input-processor-cells = <2>;
|
||||
type = <INPUT_EV_REL>;
|
||||
codes = <INPUT_REL_X>;
|
||||
track-remainders;
|
||||
};
|
||||
|
||||
/omit-if-no-ref/ zip_y_scaler: zip_y_scaler {
|
||||
compatible = "zmk,input-processor-scaler";
|
||||
#input-processor-cells = <2>;
|
||||
type = <INPUT_EV_REL>;
|
||||
codes = <INPUT_REL_Y>;
|
||||
track-remainders;
|
||||
};
|
||||
|
||||
/omit-if-no-ref/ zip_xy_scaler: zip_xy_scaler {
|
||||
compatible = "zmk,input-processor-scaler";
|
||||
#input-processor-cells = <2>;
|
||||
type = <INPUT_EV_REL>;
|
||||
codes = <INPUT_REL_X INPUT_REL_Y>;
|
||||
track-remainders;
|
||||
};
|
||||
|
||||
/omit-if-no-ref/ zip_scroll_scaler: zip_scroll_scaler {
|
||||
compatible = "zmk,input-processor-scaler";
|
||||
#input-processor-cells = <2>;
|
||||
type = <INPUT_EV_REL>;
|
||||
codes = <INPUT_REL_WHEEL INPUT_REL_HWHEEL>;
|
||||
track-remainders;
|
||||
};
|
||||
};
|
||||
14
app/dts/input/processors/temp_layer.dtsi
Normal file
14
app/dts/input/processors/temp_layer.dtsi
Normal file
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* Copyright (c) 2024 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include <zephyr/dt-bindings/input/input-event-codes.h>
|
||||
|
||||
/ {
|
||||
/omit-if-no-ref/ zip_temp_layer: zip_temp_layer {
|
||||
compatible = "zmk,input-processor-temp-layer";
|
||||
#input-processor-cells = <2>;
|
||||
};
|
||||
};
|
||||
25
app/dts/input/processors/transform.dtsi
Normal file
25
app/dts/input/processors/transform.dtsi
Normal file
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright (c) 2024 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include <zephyr/dt-bindings/input/input-event-codes.h>
|
||||
|
||||
/ {
|
||||
/omit-if-no-ref/ zip_xy_transform: zip_xy_transform {
|
||||
compatible = "zmk,input-processor-transform";
|
||||
#input-processor-cells = <1>;
|
||||
type = <INPUT_EV_REL>;
|
||||
y-codes = <INPUT_REL_Y>;
|
||||
x-codes = <INPUT_REL_X>;
|
||||
};
|
||||
|
||||
/omit-if-no-ref/ zip_scroll_transform: zip_scroll_transform {
|
||||
compatible = "zmk,input-processor-transform";
|
||||
#input-processor-cells = <1>;
|
||||
type = <INPUT_EV_REL>;
|
||||
y-codes = <INPUT_REL_WHEEL>;
|
||||
x-codes = <INPUT_REL_HWHEEL>;
|
||||
};
|
||||
};
|
||||
64
app/dts/layouts/common/ortho_4x10/1x2u.dtsi
Normal file
64
app/dts/layouts/common/ortho_4x10/1x2u.dtsi
Normal file
@@ -0,0 +1,64 @@
|
||||
#include <layouts/common/ortho_4x10/position_map.dtsi>
|
||||
#include <physical_layouts.dtsi>
|
||||
|
||||
/ {
|
||||
layout_ortho_4x10_1x2u: layout_ortho_4x10_1x2u {
|
||||
compatible = "zmk,physical-layout";
|
||||
display-name = "1x2U Space";
|
||||
|
||||
keys // w h x y rot rx ry
|
||||
= <&key_physical_attrs 100 100 0 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 100 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 200 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 300 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 400 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 500 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 600 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 700 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 800 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 900 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 0 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 100 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 200 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 300 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 400 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 500 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 600 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 700 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 800 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 900 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 0 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 100 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 200 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 300 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 400 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 500 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 600 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 700 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 800 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 900 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 0 300 0 0 0>
|
||||
, <&key_physical_attrs 100 100 100 300 0 0 0>
|
||||
, <&key_physical_attrs 100 100 200 300 0 0 0>
|
||||
, <&key_physical_attrs 100 100 300 300 0 0 0>
|
||||
, <&key_physical_attrs 200 100 400 300 0 0 0>
|
||||
, <&key_physical_attrs 100 100 600 300 0 0 0>
|
||||
, <&key_physical_attrs 100 100 700 300 0 0 0>
|
||||
, <&key_physical_attrs 100 100 800 300 0 0 0>
|
||||
, <&key_physical_attrs 100 100 900 300 0 0 0>
|
||||
;
|
||||
};
|
||||
};
|
||||
|
||||
&layouts_common_ortho_4x10_position_map {
|
||||
layout_ortho_4x10_1x2u_posmap: layout_ortho_4x10_1x2u {
|
||||
physical-layout = <&layout_ortho_4x10_1x2u>;
|
||||
positions
|
||||
= < 0 1 2 3 4 5 6 7 8 9>
|
||||
, <10 11 12 13 14 15 16 17 18 19>
|
||||
, <20 21 22 23 24 25 26 27 28 29>
|
||||
, <30 31 32 33 34 39 35 36 37 38>
|
||||
;
|
||||
};
|
||||
};
|
||||
|
||||
64
app/dts/layouts/common/ortho_4x10/all1u.dtsi
Normal file
64
app/dts/layouts/common/ortho_4x10/all1u.dtsi
Normal file
@@ -0,0 +1,64 @@
|
||||
#include <layouts/common/ortho_4x10/position_map.dtsi>
|
||||
#include <physical_layouts.dtsi>
|
||||
|
||||
/ {
|
||||
layout_ortho_4x10_all1u: layout_ortho_4x10_all1u {
|
||||
compatible = "zmk,physical-layout";
|
||||
display-name = "All 1U/Grid";
|
||||
|
||||
keys // w h x y rot rx ry
|
||||
= <&key_physical_attrs 100 100 0 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 100 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 200 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 300 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 400 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 500 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 600 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 700 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 800 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 900 0 0 0 0>
|
||||
, <&key_physical_attrs 100 100 0 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 100 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 200 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 300 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 400 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 500 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 600 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 700 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 800 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 900 100 0 0 0>
|
||||
, <&key_physical_attrs 100 100 0 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 100 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 200 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 300 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 400 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 500 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 600 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 700 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 800 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 900 200 0 0 0>
|
||||
, <&key_physical_attrs 100 100 0 300 0 0 0>
|
||||
, <&key_physical_attrs 100 100 100 300 0 0 0>
|
||||
, <&key_physical_attrs 100 100 200 300 0 0 0>
|
||||
, <&key_physical_attrs 100 100 300 300 0 0 0>
|
||||
, <&key_physical_attrs 100 100 400 300 0 0 0>
|
||||
, <&key_physical_attrs 100 100 500 300 0 0 0>
|
||||
, <&key_physical_attrs 100 100 600 300 0 0 0>
|
||||
, <&key_physical_attrs 100 100 700 300 0 0 0>
|
||||
, <&key_physical_attrs 100 100 800 300 0 0 0>
|
||||
, <&key_physical_attrs 100 100 900 300 0 0 0>
|
||||
;
|
||||
};
|
||||
};
|
||||
|
||||
&layouts_common_ortho_4x10_position_map {
|
||||
layout_ortho_4x10_all1u_posmap: layout_ortho_4x10_all1u {
|
||||
physical-layout = <&layout_ortho_4x10_all1u>;
|
||||
positions
|
||||
= < 0 1 2 3 4 5 6 7 8 9>
|
||||
, <10 11 12 13 14 15 16 17 18 19>
|
||||
, <20 21 22 23 24 25 26 27 28 29>
|
||||
, <30 31 32 33 34 35 36 37 38 39>
|
||||
;
|
||||
};
|
||||
};
|
||||
7
app/dts/layouts/common/ortho_4x10/position_map.dtsi
Normal file
7
app/dts/layouts/common/ortho_4x10/position_map.dtsi
Normal file
@@ -0,0 +1,7 @@
|
||||
/ {
|
||||
layouts_common_ortho_4x10_position_map: layouts_common_ortho_4x10_position_map {
|
||||
compatible = "zmk,physical-layout-position-map";
|
||||
|
||||
complete;
|
||||
};
|
||||
};
|
||||
71
app/include/drivers/input_processor.h
Normal file
71
app/include/drivers/input_processor.h
Normal file
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Copyright (c) 2024 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <zephyr/types.h>
|
||||
#include <stddef.h>
|
||||
#include <zephyr/sys/util.h>
|
||||
#include <string.h>
|
||||
#include <zephyr/device.h>
|
||||
#include <zephyr/input/input.h>
|
||||
|
||||
#define ZMK_INPUT_PROC_CONTINUE 0
|
||||
#define ZMK_INPUT_PROC_STOP 1
|
||||
|
||||
struct zmk_input_processor_entry {
|
||||
const struct device *dev;
|
||||
uint32_t param1;
|
||||
uint32_t param2;
|
||||
bool track_remainders;
|
||||
};
|
||||
|
||||
#define ZMK_INPUT_PROCESSOR_ENTRY_AT_IDX(idx, n) \
|
||||
{ \
|
||||
.dev = DEVICE_DT_GET(DT_PHANDLE_BY_IDX(n, input_processors, idx)), \
|
||||
.param1 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(n, input_processors, idx, param1), (0), \
|
||||
(DT_PHA_BY_IDX(n, input_processors, idx, param1))), \
|
||||
.param2 = COND_CODE_0(DT_PHA_HAS_CELL_AT_IDX(n, input_processors, idx, param2), (0), \
|
||||
(DT_PHA_BY_IDX(n, input_processors, idx, param2))), \
|
||||
.track_remainders = \
|
||||
COND_CODE_1(DT_PROP(DT_PHANDLE_BY_IDX(n, input_processors, idx), track_remainders), \
|
||||
(true), (false)), \
|
||||
}
|
||||
|
||||
struct zmk_input_processor_state {
|
||||
uint8_t input_device_index;
|
||||
int16_t *remainder;
|
||||
};
|
||||
|
||||
// TODO: Need the ability to store remainders? Some data passed in?
|
||||
typedef int (*zmk_input_processor_handle_event_callback_t)(const struct device *dev,
|
||||
struct input_event *event,
|
||||
uint32_t param1, uint32_t param2,
|
||||
struct zmk_input_processor_state *state);
|
||||
|
||||
__subsystem struct zmk_input_processor_driver_api {
|
||||
zmk_input_processor_handle_event_callback_t handle_event;
|
||||
};
|
||||
|
||||
__syscall int zmk_input_processor_handle_event(const struct device *dev, struct input_event *event,
|
||||
uint32_t param1, uint32_t param2,
|
||||
struct zmk_input_processor_state *state);
|
||||
|
||||
static inline int z_impl_zmk_input_processor_handle_event(const struct device *dev,
|
||||
struct input_event *event,
|
||||
uint32_t param1, uint32_t param2,
|
||||
struct zmk_input_processor_state *state) {
|
||||
const struct zmk_input_processor_driver_api *api =
|
||||
(const struct zmk_input_processor_driver_api *)dev->api;
|
||||
|
||||
if (api->handle_event == NULL) {
|
||||
return -ENOTSUP;
|
||||
}
|
||||
|
||||
return api->handle_event(dev, event, param1, param2, state);
|
||||
}
|
||||
|
||||
#include <syscalls/input_processor.h>
|
||||
12
app/include/dt-bindings/input.h
Normal file
12
app/include/dt-bindings/input.h
Normal file
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
* Copyright (c) 2024 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define ZMK_INPUT_EXPLICIT_CODE(type, code) ((type << 16) & code)
|
||||
|
||||
#define ZMK_INPUT_EXPLICIT_CODE_TYPE(val) ((val >> 16) & 0xFF)
|
||||
#define ZMK_INPUT_EXPLICIT_CODE_CODE(val) (val & 0xFFFF)
|
||||
11
app/include/dt-bindings/zmk/input_transform.h
Normal file
11
app/include/dt-bindings/zmk/input_transform.h
Normal file
@@ -0,0 +1,11 @@
|
||||
/*
|
||||
* Copyright (c) 2024 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include <zephyr/dt-bindings/dt-util.h>
|
||||
|
||||
#define INPUT_TRANSFORM_XY_SWAP BIT(0)
|
||||
#define INPUT_TRANSFORM_X_INVERT BIT(1)
|
||||
#define INPUT_TRANSFORM_Y_INVERT BIT(2)
|
||||
@@ -1,24 +1,9 @@
|
||||
|
||||
/*
|
||||
* Copyright (c) 2020 The ZMK Contributors
|
||||
* Copyright (c) 2024 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <zephyr/dt-bindings/dt-util.h>
|
||||
|
||||
/* Mouse press behavior */
|
||||
/* Left click */
|
||||
#define MB1 BIT(0)
|
||||
#define LCLK (MB1)
|
||||
|
||||
/* Right click */
|
||||
#define MB2 BIT(1)
|
||||
#define RCLK (MB2)
|
||||
|
||||
/* Middle click */
|
||||
#define MB3 BIT(2)
|
||||
#define MCLK (MB3)
|
||||
|
||||
#define MB4 BIT(3)
|
||||
#define MB5 BIT(4)
|
||||
#include "pointing.h"
|
||||
50
app/include/dt-bindings/zmk/pointing.h
Normal file
50
app/include/dt-bindings/zmk/pointing.h
Normal file
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright (c) 2023 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#include <zephyr/dt-bindings/dt-util.h>
|
||||
|
||||
/* Mouse press behavior */
|
||||
/* Left click */
|
||||
#define MB1 BIT(0)
|
||||
#define LCLK (MB1)
|
||||
|
||||
/* Right click */
|
||||
#define MB2 BIT(1)
|
||||
#define RCLK (MB2)
|
||||
|
||||
/* Middle click */
|
||||
#define MB3 BIT(2)
|
||||
#define MCLK (MB3)
|
||||
|
||||
#define MB4 BIT(3)
|
||||
#define MB5 BIT(4)
|
||||
|
||||
#ifndef ZMK_POINTING_DEFAULT_MOVE_VAL
|
||||
#define ZMK_POINTING_DEFAULT_MOVE_VAL 600
|
||||
#endif
|
||||
|
||||
#ifndef ZMK_POINTING_DEFAULT_SCRL_VAL
|
||||
#define ZMK_POINTING_DEFAULT_SCRL_VAL 10
|
||||
#endif
|
||||
|
||||
/* Mouse move behavior */
|
||||
#define MOVE_Y(vert) ((vert) & 0xFFFF)
|
||||
#define MOVE_Y_DECODE(encoded) (int16_t)((encoded) & 0x0000FFFF)
|
||||
#define MOVE_X(hor) (((hor) & 0xFFFF) << 16)
|
||||
#define MOVE_X_DECODE(encoded) (int16_t)(((encoded) & 0xFFFF0000) >> 16)
|
||||
|
||||
#define MOVE(hor, vert) (MOVE_X(hor) + MOVE_Y(vert))
|
||||
|
||||
#define MOVE_UP MOVE_Y(-ZMK_POINTING_DEFAULT_MOVE_VAL)
|
||||
#define MOVE_DOWN MOVE_Y(ZMK_POINTING_DEFAULT_MOVE_VAL)
|
||||
#define MOVE_LEFT MOVE_X(-ZMK_POINTING_DEFAULT_MOVE_VAL)
|
||||
#define MOVE_RIGHT MOVE_X(ZMK_POINTING_DEFAULT_MOVE_VAL)
|
||||
|
||||
#define SCRL_UP MOVE_Y(ZMK_POINTING_DEFAULT_SCRL_VAL)
|
||||
#define SCRL_DOWN MOVE_Y(-ZMK_POINTING_DEFAULT_SCRL_VAL)
|
||||
#define SCRL_LEFT MOVE_X(-ZMK_POINTING_DEFAULT_SCRL_VAL)
|
||||
#define SCRL_RIGHT MOVE_X(ZMK_POINTING_DEFAULT_SCRL_VAL)
|
||||
16
app/include/zmk/combos.h
Normal file
16
app/include/zmk/combos.h
Normal file
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Copyright (c) 2020 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <zephyr/devicetree.h>
|
||||
|
||||
#define ZMK_COMBOS_UTIL_ONE(n) +1
|
||||
|
||||
#define ZMK_COMBOS_LEN \
|
||||
COND_CODE_1(DT_HAS_COMPAT_STATUS_OKAY(zmk_combos), \
|
||||
(0 DT_FOREACH_CHILD_STATUS_OKAY(DT_INST(0, zmk_combos), ZMK_COMBOS_UTIL_ONE)), \
|
||||
(0))
|
||||
@@ -70,8 +70,8 @@ struct zmk_endpoint_instance zmk_endpoints_selected(void);
|
||||
|
||||
int zmk_endpoints_send_report(uint16_t usage_page);
|
||||
|
||||
#if IS_ENABLED(CONFIG_ZMK_MOUSE)
|
||||
#if IS_ENABLED(CONFIG_ZMK_POINTING)
|
||||
int zmk_endpoints_send_mouse_report();
|
||||
#endif // IS_ENABLE(CONFIG_ZMK_MOUSE)
|
||||
#endif // IS_ENABLED(CONFIG_ZMK_POINTING)
|
||||
|
||||
void zmk_endpoints_clear_current(void);
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
|
||||
#include <zmk/hid.h>
|
||||
#include <zmk/event_manager.h>
|
||||
#include <zmk/mouse.h>
|
||||
#include <zmk/pointing.h>
|
||||
|
||||
struct zmk_mouse_button_state_changed {
|
||||
zmk_mouse_button_t buttons;
|
||||
|
||||
@@ -12,9 +12,9 @@
|
||||
#include <zephyr/usb/class/usb_hid.h>
|
||||
|
||||
#include <zmk/keys.h>
|
||||
#if IS_ENABLED(CONFIG_ZMK_MOUSE)
|
||||
#include <zmk/mouse.h>
|
||||
#endif // IS_ENABLED(CONFIG_ZMK_MOUSE)
|
||||
#if IS_ENABLED(CONFIG_ZMK_POINTING)
|
||||
#include <zmk/pointing.h>
|
||||
#endif // IS_ENABLED(CONFIG_ZMK_POINTING)
|
||||
|
||||
#include <dt-bindings/zmk/hid_usage.h>
|
||||
#include <dt-bindings/zmk/hid_usage_pages.h>
|
||||
@@ -77,6 +77,30 @@
|
||||
#define ZMK_HID_REPORT_ID_CONSUMER 0x02
|
||||
#define ZMK_HID_REPORT_ID_MOUSE 0x03
|
||||
|
||||
#ifndef HID_ITEM_TAG_PUSH
|
||||
#define HID_ITEM_TAG_PUSH 0xA
|
||||
#endif
|
||||
|
||||
#ifndef HID_ITEM_TAG_POP
|
||||
#define HID_ITEM_TAG_POP 0xB
|
||||
#endif
|
||||
|
||||
#define HID_PUSH HID_ITEM(HID_ITEM_TAG_PUSH, HID_ITEM_TYPE_GLOBAL, 0)
|
||||
|
||||
#define HID_POP HID_ITEM(HID_ITEM_TAG_POP, HID_ITEM_TYPE_GLOBAL, 0)
|
||||
|
||||
#ifndef HID_PHYSICAL_MIN8
|
||||
#define HID_PHYSICAL_MIN8(a) HID_ITEM(HID_ITEM_TAG_PHYSICAL_MIN, HID_ITEM_TYPE_GLOBAL, 1), a
|
||||
#endif
|
||||
|
||||
#ifndef HID_PHYSICAL_MAX8
|
||||
#define HID_PHYSICAL_MAX8(a) HID_ITEM(HID_ITEM_TAG_PHYSICAL_MAX, HID_ITEM_TYPE_GLOBAL, 1), a
|
||||
#endif
|
||||
|
||||
#define HID_USAGE16(a, b) HID_ITEM(HID_ITEM_TAG_USAGE, HID_ITEM_TYPE_LOCAL, 2), a, b
|
||||
|
||||
#define HID_USAGE16_SINGLE(a) HID_USAGE16((a & 0xFF), ((a >> 8) & 0xFF))
|
||||
|
||||
static const uint8_t zmk_hid_report_desc[] = {
|
||||
HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP),
|
||||
HID_USAGE(HID_USAGE_GD_KEYBOARD),
|
||||
@@ -161,7 +185,7 @@ static const uint8_t zmk_hid_report_desc[] = {
|
||||
HID_INPUT(ZMK_HID_MAIN_VAL_DATA | ZMK_HID_MAIN_VAL_ARRAY | ZMK_HID_MAIN_VAL_ABS),
|
||||
HID_END_COLLECTION,
|
||||
|
||||
#if IS_ENABLED(CONFIG_ZMK_MOUSE)
|
||||
#if IS_ENABLED(CONFIG_ZMK_POINTING)
|
||||
HID_USAGE_PAGE(HID_USAGE_GD),
|
||||
HID_USAGE(HID_USAGE_GD_MOUSE),
|
||||
HID_COLLECTION(HID_COLLECTION_APPLICATION),
|
||||
@@ -184,15 +208,51 @@ static const uint8_t zmk_hid_report_desc[] = {
|
||||
HID_USAGE_PAGE(HID_USAGE_GEN_DESKTOP),
|
||||
HID_USAGE(HID_USAGE_GD_X),
|
||||
HID_USAGE(HID_USAGE_GD_Y),
|
||||
HID_LOGICAL_MIN16(0xFF, -0x7F),
|
||||
HID_LOGICAL_MAX16(0xFF, 0x7F),
|
||||
HID_REPORT_SIZE(0x10),
|
||||
HID_REPORT_COUNT(0x02),
|
||||
HID_INPUT(ZMK_HID_MAIN_VAL_DATA | ZMK_HID_MAIN_VAL_VAR | ZMK_HID_MAIN_VAL_REL),
|
||||
HID_COLLECTION(HID_COLLECTION_LOGICAL),
|
||||
#if IS_ENABLED(CONFIG_ZMK_POINTING_SMOOTH_SCROLLING)
|
||||
HID_USAGE(HID_USAGE_GD_RESOLUTION_MULTIPLIER),
|
||||
HID_LOGICAL_MIN8(0x00),
|
||||
HID_LOGICAL_MAX8(0x0F),
|
||||
HID_PHYSICAL_MIN8(0x01),
|
||||
HID_PHYSICAL_MAX8(0x10),
|
||||
HID_REPORT_SIZE(0x04),
|
||||
HID_REPORT_COUNT(0x01),
|
||||
HID_PUSH,
|
||||
HID_FEATURE(ZMK_HID_MAIN_VAL_DATA | ZMK_HID_MAIN_VAL_VAR | ZMK_HID_MAIN_VAL_ABS),
|
||||
#endif // IS_ENABLED(CONFIG_ZMK_POINTING_SMOOTH_SCROLLING)
|
||||
HID_USAGE(HID_USAGE_GD_WHEEL),
|
||||
HID_LOGICAL_MIN8(-0x7F),
|
||||
HID_LOGICAL_MAX8(0x7F),
|
||||
HID_REPORT_SIZE(0x08),
|
||||
HID_REPORT_COUNT(0x03),
|
||||
HID_LOGICAL_MIN16(0xFF, -0x7F),
|
||||
HID_LOGICAL_MAX16(0xFF, 0x7F),
|
||||
HID_PHYSICAL_MIN8(0x00),
|
||||
HID_PHYSICAL_MAX8(0x00),
|
||||
HID_REPORT_SIZE(0x10),
|
||||
HID_REPORT_COUNT(0x01),
|
||||
HID_INPUT(ZMK_HID_MAIN_VAL_DATA | ZMK_HID_MAIN_VAL_VAR | ZMK_HID_MAIN_VAL_REL),
|
||||
HID_END_COLLECTION,
|
||||
HID_COLLECTION(HID_COLLECTION_LOGICAL),
|
||||
#if IS_ENABLED(CONFIG_ZMK_POINTING_SMOOTH_SCROLLING)
|
||||
HID_USAGE(HID_USAGE_GD_RESOLUTION_MULTIPLIER),
|
||||
HID_POP,
|
||||
HID_FEATURE(ZMK_HID_MAIN_VAL_DATA | ZMK_HID_MAIN_VAL_VAR | ZMK_HID_MAIN_VAL_ABS),
|
||||
#endif // IS_ENABLED(CONFIG_ZMK_POINTING_SMOOTH_SCROLLING)
|
||||
HID_USAGE_PAGE(HID_USAGE_CONSUMER),
|
||||
HID_USAGE16_SINGLE(HID_USAGE_CONSUMER_AC_PAN),
|
||||
HID_LOGICAL_MIN16(0xFF, -0x7F),
|
||||
HID_LOGICAL_MAX16(0xFF, 0x7F),
|
||||
HID_PHYSICAL_MIN8(0x00),
|
||||
HID_PHYSICAL_MAX8(0x00),
|
||||
HID_REPORT_SIZE(0x10),
|
||||
HID_REPORT_COUNT(0x01),
|
||||
HID_INPUT(ZMK_HID_MAIN_VAL_DATA | ZMK_HID_MAIN_VAL_VAR | ZMK_HID_MAIN_VAL_REL),
|
||||
HID_END_COLLECTION,
|
||||
HID_END_COLLECTION,
|
||||
#endif // IS_ENABLED(CONFIG_ZMK_MOUSE)
|
||||
HID_END_COLLECTION,
|
||||
#endif // IS_ENABLED(CONFIG_ZMK_POINTING)
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_ZMK_USB_BOOT)
|
||||
@@ -255,12 +315,13 @@ struct zmk_hid_consumer_report {
|
||||
struct zmk_hid_consumer_report_body body;
|
||||
} __packed;
|
||||
|
||||
#if IS_ENABLED(CONFIG_ZMK_MOUSE)
|
||||
#if IS_ENABLED(CONFIG_ZMK_POINTING)
|
||||
struct zmk_hid_mouse_report_body {
|
||||
zmk_mouse_button_flags_t buttons;
|
||||
int8_t d_x;
|
||||
int8_t d_y;
|
||||
int8_t d_wheel;
|
||||
int16_t d_x;
|
||||
int16_t d_y;
|
||||
int16_t d_scroll_y;
|
||||
int16_t d_scroll_x;
|
||||
} __packed;
|
||||
|
||||
struct zmk_hid_mouse_report {
|
||||
@@ -268,7 +329,21 @@ struct zmk_hid_mouse_report {
|
||||
struct zmk_hid_mouse_report_body body;
|
||||
} __packed;
|
||||
|
||||
#endif // IS_ENABLED(CONFIG_ZMK_MOUSE)
|
||||
#if IS_ENABLED(CONFIG_ZMK_POINTING_SMOOTH_SCROLLING)
|
||||
|
||||
struct zmk_hid_mouse_resolution_feature_report_body {
|
||||
uint8_t wheel_res : 4;
|
||||
uint8_t hwheel_res : 4;
|
||||
} __packed;
|
||||
|
||||
struct zmk_hid_mouse_resolution_feature_report {
|
||||
uint8_t report_id;
|
||||
struct zmk_hid_mouse_resolution_feature_report_body body;
|
||||
} __packed;
|
||||
|
||||
#endif // IS_ENABLED(CONFIG_ZMK_POINTING_SMOOTH_SCROLLING)
|
||||
|
||||
#endif // IS_ENABLED(CONFIG_ZMK_POINTING)
|
||||
|
||||
zmk_mod_flags_t zmk_hid_get_explicit_mods(void);
|
||||
int zmk_hid_register_mod(zmk_mod_t modifier);
|
||||
@@ -296,13 +371,18 @@ int zmk_hid_press(uint32_t usage);
|
||||
int zmk_hid_release(uint32_t usage);
|
||||
bool zmk_hid_is_pressed(uint32_t usage);
|
||||
|
||||
#if IS_ENABLED(CONFIG_ZMK_MOUSE)
|
||||
#if IS_ENABLED(CONFIG_ZMK_POINTING)
|
||||
int zmk_hid_mouse_button_press(zmk_mouse_button_t button);
|
||||
int zmk_hid_mouse_button_release(zmk_mouse_button_t button);
|
||||
int zmk_hid_mouse_buttons_press(zmk_mouse_button_flags_t buttons);
|
||||
int zmk_hid_mouse_buttons_release(zmk_mouse_button_flags_t buttons);
|
||||
void zmk_hid_mouse_movement_set(int16_t x, int16_t y);
|
||||
void zmk_hid_mouse_scroll_set(int8_t x, int8_t y);
|
||||
void zmk_hid_mouse_movement_update(int16_t x, int16_t y);
|
||||
void zmk_hid_mouse_scroll_update(int8_t x, int8_t y);
|
||||
void zmk_hid_mouse_clear(void);
|
||||
#endif // IS_ENABLED(CONFIG_ZMK_MOUSE)
|
||||
|
||||
#endif // IS_ENABLED(CONFIG_ZMK_POINTING)
|
||||
|
||||
struct zmk_hid_keyboard_report *zmk_hid_get_keyboard_report(void);
|
||||
struct zmk_hid_consumer_report *zmk_hid_get_consumer_report(void);
|
||||
@@ -311,6 +391,6 @@ struct zmk_hid_consumer_report *zmk_hid_get_consumer_report(void);
|
||||
zmk_hid_boot_report_t *zmk_hid_get_boot_report();
|
||||
#endif
|
||||
|
||||
#if IS_ENABLED(CONFIG_ZMK_MOUSE)
|
||||
#if IS_ENABLED(CONFIG_ZMK_POINTING)
|
||||
struct zmk_hid_mouse_report *zmk_hid_get_mouse_report();
|
||||
#endif // IS_ENABLED(CONFIG_ZMK_MOUSE)
|
||||
#endif // IS_ENABLED(CONFIG_ZMK_POINTING)
|
||||
|
||||
@@ -12,6 +12,6 @@
|
||||
int zmk_hog_send_keyboard_report(struct zmk_hid_keyboard_report_body *body);
|
||||
int zmk_hog_send_consumer_report(struct zmk_hid_consumer_report_body *body);
|
||||
|
||||
#if IS_ENABLED(CONFIG_ZMK_MOUSE)
|
||||
#if IS_ENABLED(CONFIG_ZMK_POINTING)
|
||||
int zmk_hog_send_mouse_report(struct zmk_hid_mouse_report_body *body);
|
||||
#endif // IS_ENABLED(CONFIG_ZMK_MOUSE)
|
||||
#endif // IS_ENABLED(CONFIG_ZMK_POINTING)
|
||||
|
||||
14
app/include/zmk/input.h
Normal file
14
app/include/zmk/input.h
Normal file
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* Copyright (c) 2024 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <dt-bindings/zmk/input.h>
|
||||
|
||||
struct zmk_input_explicit_code {
|
||||
uint8_t type;
|
||||
uint16_t code;
|
||||
};
|
||||
14
app/include/zmk/input_listeners.h
Normal file
14
app/include/zmk/input_listeners.h
Normal file
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* Copyright (c) 2020 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <zephyr/devicetree.h>
|
||||
|
||||
#define ZMK_INPUT_LISTENERS_UTIL_ONE(n) 1 +
|
||||
|
||||
#define ZMK_INPUT_LISTENERS_LEN \
|
||||
(DT_FOREACH_STATUS_OKAY(zmk_input_listener, ZMK_INPUT_LISTENERS_UTIL_ONE) 0)
|
||||
@@ -10,7 +10,10 @@
|
||||
|
||||
#define ZMK_LAYER_CHILD_LEN_PLUS_ONE(node) 1 +
|
||||
#define ZMK_KEYMAP_LAYERS_LEN \
|
||||
(DT_FOREACH_CHILD(DT_INST(0, zmk_keymap), ZMK_LAYER_CHILD_LEN_PLUS_ONE) 0)
|
||||
(COND_CODE_1( \
|
||||
IS_ENABLED(CONFIG_ZMK_STUDIO), \
|
||||
(DT_FOREACH_CHILD(DT_INST(0, zmk_keymap), ZMK_LAYER_CHILD_LEN_PLUS_ONE)), \
|
||||
(DT_FOREACH_CHILD_STATUS_OKAY(DT_INST(0, zmk_keymap), ZMK_LAYER_CHILD_LEN_PLUS_ONE))) 0)
|
||||
|
||||
/**
|
||||
* @brief A layer ID is a stable identifier to refer to a layer, regardless of ordering.
|
||||
|
||||
@@ -21,9 +21,11 @@ struct zmk_key_physical_attrs {
|
||||
int16_t height;
|
||||
int16_t x;
|
||||
int16_t y;
|
||||
#if IS_ENABLED(CONFIG_ZMK_PHYSICAL_LAYOUT_KEY_ROTATION)
|
||||
int16_t rx;
|
||||
int16_t ry;
|
||||
int16_t r;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct zmk_physical_layout {
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
/*
|
||||
* Copyright (c) 2021 The ZMK Contributors
|
||||
* Copyright (c) 2023 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <dt-bindings/zmk/mouse.h>
|
||||
#include <dt-bindings/zmk/pointing.h>
|
||||
|
||||
typedef uint8_t zmk_mouse_button_flags_t;
|
||||
typedef uint16_t zmk_mouse_button_t;
|
||||
10
app/include/zmk/pointing/input_split.h
Normal file
10
app/include/zmk/pointing/input_split.h
Normal file
@@ -0,0 +1,10 @@
|
||||
/*
|
||||
* Copyright (c) 2024 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
int zmk_input_split_report_peripheral_event(uint8_t reg, uint8_t type, uint16_t code, int32_t value,
|
||||
bool sync);
|
||||
26
app/include/zmk/pointing/resolution_multipliers.h
Normal file
26
app/include/zmk/pointing/resolution_multipliers.h
Normal file
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) 2024 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <zmk/hid.h>
|
||||
#include <zmk/endpoints.h>
|
||||
|
||||
struct zmk_pointing_resolution_multipliers {
|
||||
uint8_t wheel;
|
||||
uint8_t hor_wheel;
|
||||
};
|
||||
|
||||
struct zmk_pointing_resolution_multipliers
|
||||
zmk_pointing_resolution_multipliers_get_current_profile(void);
|
||||
struct zmk_pointing_resolution_multipliers
|
||||
zmk_pointing_resolution_multipliers_get_profile(struct zmk_endpoint_instance endpoint);
|
||||
void zmk_pointing_resolution_multipliers_set_profile(
|
||||
struct zmk_pointing_resolution_multipliers multipliers, struct zmk_endpoint_instance endpoint);
|
||||
|
||||
void zmk_pointing_resolution_multipliers_process_report(
|
||||
struct zmk_hid_mouse_resolution_feature_report_body *report,
|
||||
struct zmk_endpoint_instance endpoint);
|
||||
@@ -31,8 +31,17 @@ struct zmk_split_run_behavior_payload {
|
||||
char behavior_dev[ZMK_SPLIT_RUN_BEHAVIOR_DEV_LEN];
|
||||
} __packed;
|
||||
|
||||
struct zmk_split_input_event_payload {
|
||||
uint8_t type;
|
||||
uint16_t code;
|
||||
uint32_t value;
|
||||
uint8_t sync;
|
||||
} __packed;
|
||||
|
||||
int zmk_split_bt_position_pressed(uint8_t position);
|
||||
int zmk_split_bt_position_released(uint8_t position);
|
||||
int zmk_split_bt_sensor_triggered(uint8_t sensor_index,
|
||||
const struct zmk_sensor_channel_data channel_data[],
|
||||
size_t channel_data_size);
|
||||
|
||||
int zmk_split_bt_report_input(uint8_t reg, uint8_t type, uint16_t code, int32_t value, bool sync);
|
||||
|
||||
@@ -19,3 +19,4 @@
|
||||
#define ZMK_SPLIT_BT_CHAR_SENSOR_STATE_UUID ZMK_BT_SPLIT_UUID(0x00000003)
|
||||
#define ZMK_SPLIT_BT_UPDATE_HID_INDICATORS_UUID ZMK_BT_SPLIT_UUID(0x00000004)
|
||||
#define ZMK_SPLIT_BT_SELECT_PHYS_LAYOUT_UUID ZMK_BT_SPLIT_UUID(0x00000005)
|
||||
#define ZMK_SPLIT_BT_INPUT_EVENT_UUID ZMK_BT_SPLIT_UUID(0x00000006)
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
int zmk_usb_hid_send_keyboard_report(void);
|
||||
int zmk_usb_hid_send_consumer_report(void);
|
||||
#if IS_ENABLED(CONFIG_ZMK_MOUSE)
|
||||
#if IS_ENABLED(CONFIG_ZMK_POINTING)
|
||||
int zmk_usb_hid_send_mouse_report(void);
|
||||
#endif // IS_ENABLED(CONFIG_ZMK_MOUSE)
|
||||
#endif // IS_ENABLED(CONFIG_ZMK_POINTING)
|
||||
void zmk_usb_hid_set_protocol(uint8_t protocol);
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
#pragma once
|
||||
|
||||
#include <zmk/matrix.h>
|
||||
#include <zmk/combos.h>
|
||||
#include <zmk/input_listeners.h>
|
||||
#include <zmk/sensors.h>
|
||||
|
||||
/**
|
||||
@@ -22,4 +24,9 @@
|
||||
/**
|
||||
* Gets the virtual key position to use for the combo with the given index.
|
||||
*/
|
||||
#define ZMK_VIRTUAL_KEY_POSITION_COMBO(index) (ZMK_KEYMAP_LEN + ZMK_KEYMAP_SENSORS_LEN + (index))
|
||||
#define ZMK_VIRTUAL_KEY_POSITION_COMBO(index) \
|
||||
(ZMK_VIRTUAL_KEY_POSITION_SENSOR(ZMK_KEYMAP_SENSORS_LEN) + (index))
|
||||
|
||||
#define ZMK_VIRTUAL_KEY_POSITION_BEHAVIOR_INPUT_PROCESSOR(listener_index, processor_index) \
|
||||
(ZMK_VIRTUAL_KEY_POSITION_COMBO(ZMK_COMBOS_LEN) + \
|
||||
(ZMK_INPUT_LISTENERS_LEN * (processor_index)) + (listener_index))
|
||||
|
||||
@@ -50,10 +50,12 @@ if (ZMK_CONFIG)
|
||||
set(ENV{ZMK_CONFIG} "${ZMK_CONFIG}")
|
||||
if(EXISTS ${ZMK_CONFIG}/boards)
|
||||
message(STATUS "Adding ZMK config directory as board root: ${ZMK_CONFIG}")
|
||||
message(DEPRECATION "The `config/boards` folder is deprecated. Please use a module instead. See https://zmk.dev/docs/development/hardware-integration/new-shield and https://zmk.dev/docs/development/module-creation for more information.")
|
||||
list(APPEND BOARD_ROOT ${ZMK_CONFIG})
|
||||
endif()
|
||||
if(EXISTS ${ZMK_CONFIG}/dts)
|
||||
message(STATUS "Adding ZMK config directory as DTS root: ${ZMK_CONFIG}")
|
||||
message(DEPRECATION "The `config/dts` folder is deprecated. Please use a module instead. See https://zmk.dev/docs/development/hardware-integration/new-shield and https://zmk.dev/docs/development/module-creation for more information.")
|
||||
list(APPEND DTS_ROOT ${ZMK_CONFIG})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -5,3 +5,4 @@ add_subdirectory_ifdef(CONFIG_GPIO gpio)
|
||||
add_subdirectory_ifdef(CONFIG_KSCAN kscan)
|
||||
add_subdirectory_ifdef(CONFIG_SENSOR sensor)
|
||||
add_subdirectory_ifdef(CONFIG_DISPLAY display)
|
||||
add_subdirectory_ifdef(CONFIG_INPUT input)
|
||||
|
||||
@@ -5,3 +5,4 @@ rsource "gpio/Kconfig"
|
||||
rsource "kscan/Kconfig"
|
||||
rsource "sensor/Kconfig"
|
||||
rsource "display/Kconfig"
|
||||
rsource "input/Kconfig"
|
||||
|
||||
@@ -371,14 +371,14 @@ static int il0323_init(const struct device *dev) {
|
||||
return il0323_controller_init(dev);
|
||||
}
|
||||
|
||||
static struct il0323_cfg il0323_config = {
|
||||
static const struct il0323_cfg il0323_config = {
|
||||
.spi = SPI_DT_SPEC_INST_GET(0, SPI_OP_MODE_MASTER | SPI_WORD_SET(8), 0),
|
||||
.reset = GPIO_DT_SPEC_INST_GET(0, reset_gpios),
|
||||
.busy = GPIO_DT_SPEC_INST_GET(0, busy_gpios),
|
||||
.dc = GPIO_DT_SPEC_INST_GET(0, dc_gpios),
|
||||
};
|
||||
|
||||
static struct display_driver_api il0323_driver_api = {
|
||||
static const struct display_driver_api il0323_driver_api = {
|
||||
.blanking_on = il0323_blanking_on,
|
||||
.blanking_off = il0323_blanking_off,
|
||||
.write = il0323_write,
|
||||
|
||||
@@ -202,7 +202,7 @@ static int reg_595_init(const struct device *dev) {
|
||||
GPIO_PORT_PIN_MASK_FROM_NGPIOS(DT_INST_PROP(inst, ngpios))
|
||||
|
||||
#define REG_595_INIT(n) \
|
||||
static struct reg_595_config reg_595_##n##_config = { \
|
||||
static const struct reg_595_config reg_595_##n##_config = { \
|
||||
.common = \
|
||||
{ \
|
||||
.port_pin_mask = GPIO_PORT_PIN_MASK_FROM_DT_INST(n), \
|
||||
|
||||
@@ -322,7 +322,7 @@ static int max7318_init(const struct device *dev) {
|
||||
GPIO_PORT_PIN_MASK_FROM_NGPIOS(DT_INST_PROP(inst, ngpios))
|
||||
|
||||
#define MAX7318_INIT(inst) \
|
||||
static struct max7318_config max7318_##inst##_config = { \
|
||||
static const struct max7318_config max7318_##inst##_config = { \
|
||||
.common = {.port_pin_mask = GPIO_PORT_PIN_MASK_FROM_DT_INST(inst)}, \
|
||||
.i2c_bus = I2C_DT_SPEC_INST_GET(inst)}; \
|
||||
\
|
||||
|
||||
6
app/module/drivers/input/CMakeLists.txt
Normal file
6
app/module/drivers/input/CMakeLists.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
# Copyright (c) 2020-2023 The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
zephyr_library_amend()
|
||||
|
||||
zephyr_library_sources_ifdef(CONFIG_ZMK_INPUT_MOCK input_mock.c)
|
||||
9
app/module/drivers/input/Kconfig
Normal file
9
app/module/drivers/input/Kconfig
Normal file
@@ -0,0 +1,9 @@
|
||||
|
||||
if INPUT
|
||||
|
||||
config ZMK_INPUT_MOCK
|
||||
bool "Input Mock"
|
||||
default y
|
||||
depends on DT_HAS_ZMK_INPUT_MOCK_ENABLED
|
||||
|
||||
endif
|
||||
84
app/module/drivers/input/input_mock.c
Normal file
84
app/module/drivers/input/input_mock.c
Normal file
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
* Copyright (c) 2024 The ZMK Contributors
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#define DT_DRV_COMPAT zmk_input_mock
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <zephyr/device.h>
|
||||
#include <zephyr/input/input.h>
|
||||
#include <zephyr/kernel.h>
|
||||
#include <zephyr/logging/log.h>
|
||||
|
||||
LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
|
||||
|
||||
struct input_mock_config {
|
||||
uint16_t startup_delay;
|
||||
uint16_t event_period;
|
||||
bool exit_after;
|
||||
const uint32_t *events;
|
||||
size_t events_len;
|
||||
};
|
||||
|
||||
struct input_mock_data {
|
||||
size_t event_index;
|
||||
struct k_work_delayable work;
|
||||
const struct device *dev;
|
||||
};
|
||||
|
||||
static void input_mock_work_cb(struct k_work *work) {
|
||||
struct k_work_delayable *dwork = CONTAINER_OF(work, struct k_work_delayable, work);
|
||||
struct input_mock_data *data = CONTAINER_OF(dwork, struct input_mock_data, work);
|
||||
|
||||
const struct device *dev = data->dev;
|
||||
|
||||
const struct input_mock_config *cfg = dev->config;
|
||||
|
||||
data->event_index++;
|
||||
|
||||
size_t base_idx = data->event_index * 4;
|
||||
|
||||
if (base_idx >= cfg->events_len) {
|
||||
if (cfg->exit_after) {
|
||||
exit(0);
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
input_report(dev, cfg->events[base_idx], cfg->events[base_idx + 1], cfg->events[base_idx + 2],
|
||||
cfg->events[base_idx + 3], K_NO_WAIT);
|
||||
|
||||
k_work_schedule(&data->work, K_MSEC(cfg->event_period));
|
||||
}
|
||||
|
||||
int input_mock_init(const struct device *dev) {
|
||||
struct input_mock_data *drv_data = dev->data;
|
||||
const struct input_mock_config *drv_cfg = dev->config;
|
||||
|
||||
drv_data->dev = dev;
|
||||
drv_data->event_index = -1;
|
||||
|
||||
k_work_init_delayable(&drv_data->work, input_mock_work_cb);
|
||||
|
||||
k_work_schedule(&drv_data->work, K_MSEC(drv_cfg->startup_delay));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#define INPUT_MOCK_INST(n) \
|
||||
static struct input_mock_data input_mock_data_##n = {}; \
|
||||
static const uint32_t mock_data_##n[] = DT_INST_PROP(n, events); \
|
||||
static const struct input_mock_config input_mock_cfg_##n = { \
|
||||
.events = mock_data_##n, \
|
||||
.events_len = DT_INST_PROP_LEN(n, events), \
|
||||
.startup_delay = DT_INST_PROP(n, event_startup_delay), \
|
||||
.event_period = DT_INST_PROP(n, event_period), \
|
||||
.exit_after = DT_INST_PROP(n, exit_after), \
|
||||
}; \
|
||||
DEVICE_DT_INST_DEFINE(n, input_mock_init, NULL, &input_mock_data_##n, &input_mock_cfg_##n, \
|
||||
POST_KERNEL, CONFIG_INPUT_INIT_PRIORITY, NULL);
|
||||
|
||||
DT_INST_FOREACH_STATUS_OKAY(INPUT_MOCK_INST)
|
||||
@@ -44,6 +44,13 @@ static int kscan_composite_enable_callback(const struct device *dev) {
|
||||
for (int i = 0; i < cfg->children_len; i++) {
|
||||
const struct kscan_composite_child_config *child_cfg = &cfg->children[i];
|
||||
|
||||
#if IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME) || IS_ENABLED(CONFIG_PM_DEVICE)
|
||||
if (pm_device_wakeup_is_enabled(dev) && pm_device_wakeup_is_capable(child_cfg->child) &&
|
||||
!pm_device_wakeup_enable(child_cfg->child, true)) {
|
||||
LOG_ERR("Failed to enable wakeup for %s", child_cfg->child->name);
|
||||
}
|
||||
#endif // IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME) || IS_ENABLED(CONFIG_PM_DEVICE)
|
||||
|
||||
#if IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME)
|
||||
if (!pm_device_runtime_is_enabled(dev) && pm_device_runtime_is_enabled(child_cfg->child)) {
|
||||
pm_device_runtime_get(child_cfg->child);
|
||||
@@ -62,6 +69,14 @@ static int kscan_composite_disable_callback(const struct device *dev) {
|
||||
for (int i = 0; i < cfg->children_len; i++) {
|
||||
const struct kscan_composite_child_config *child_cfg = &cfg->children[i];
|
||||
|
||||
#if IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME) || IS_ENABLED(CONFIG_PM_DEVICE)
|
||||
if (pm_device_wakeup_is_capable(child_cfg->child) &&
|
||||
pm_device_wakeup_is_enabled(child_cfg->child) &&
|
||||
!pm_device_wakeup_enable(child_cfg->child, false)) {
|
||||
LOG_ERR("Failed to disable wakeup for %s", child_cfg->child->name);
|
||||
}
|
||||
#endif // IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME) || IS_ENABLED(CONFIG_PM_DEVICE)
|
||||
|
||||
kscan_disable_callback(child_cfg->child);
|
||||
|
||||
#if IS_ENABLED(CONFIG_PM_DEVICE_RUNTIME)
|
||||
|
||||
@@ -168,6 +168,8 @@ static int kscan_charlieplex_set_all_outputs(const struct device *dev, const int
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_PM_DEVICE)
|
||||
|
||||
static int kscan_charlieplex_disconnect_all(const struct device *dev) {
|
||||
const struct kscan_charlieplex_config *config = dev->config;
|
||||
|
||||
@@ -183,6 +185,8 @@ static int kscan_charlieplex_disconnect_all(const struct device *dev) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static int kscan_charlieplex_interrupt_configure(const struct device *dev,
|
||||
const gpio_flags_t flags) {
|
||||
const struct kscan_charlieplex_config *config = dev->config;
|
||||
@@ -445,7 +449,7 @@ static const struct kscan_driver_api kscan_charlieplex_api = {
|
||||
.charlieplex_state = kscan_charlieplex_state_##n, \
|
||||
}; \
|
||||
\
|
||||
static struct kscan_charlieplex_config kscan_charlieplex_config_##n = { \
|
||||
static const struct kscan_charlieplex_config kscan_charlieplex_config_##n = { \
|
||||
.cells = KSCAN_GPIO_LIST(kscan_charlieplex_cells_##n), \
|
||||
.debounce_config = \
|
||||
{ \
|
||||
|
||||
@@ -397,7 +397,7 @@ static const struct kscan_driver_api kscan_direct_api = {
|
||||
.pin_state = kscan_direct_state_##n, \
|
||||
COND_INTERRUPTS((.irqs = kscan_direct_irqs_##n, ))}; \
|
||||
\
|
||||
static struct kscan_direct_config kscan_direct_config_##n = { \
|
||||
static const struct kscan_direct_config kscan_direct_config_##n = { \
|
||||
.debounce_config = \
|
||||
{ \
|
||||
.debounce_press_ms = INST_DEBOUNCE_PRESS_MS(n), \
|
||||
|
||||
@@ -515,7 +515,7 @@ static const struct kscan_driver_api kscan_matrix_api = {
|
||||
.matrix_state = kscan_matrix_state_##n, \
|
||||
COND_INTERRUPTS((.irqs = kscan_matrix_irqs_##n, ))}; \
|
||||
\
|
||||
static struct kscan_matrix_config kscan_matrix_config_##n = { \
|
||||
static const struct kscan_matrix_config kscan_matrix_config_##n = { \
|
||||
.rows = ARRAY_SIZE(kscan_matrix_rows_##n), \
|
||||
.cols = ARRAY_SIZE(kscan_matrix_cols_##n), \
|
||||
.outputs = \
|
||||
|
||||
@@ -65,6 +65,12 @@ static int kscan_mock_configure(const struct device *dev, kscan_callback_t callb
|
||||
struct k_work_delayable *d_work = k_work_delayable_from_work(work); \
|
||||
struct kscan_mock_data *data = CONTAINER_OF(d_work, struct kscan_mock_data, work); \
|
||||
const struct kscan_mock_config_##n *cfg = data->dev->config; \
|
||||
if (data->event_index >= DT_INST_PROP_LEN(n, events)) { \
|
||||
if (cfg->exit_after) \
|
||||
exit(0); \
|
||||
else \
|
||||
return; \
|
||||
} \
|
||||
uint32_t ev = cfg->events[data->event_index]; \
|
||||
LOG_DBG("ev %u row %d column %d state %d\n", ev, ZMK_MOCK_ROW(ev), ZMK_MOCK_COL(ev), \
|
||||
ZMK_MOCK_IS_PRESS(ev)); \
|
||||
|
||||
@@ -4,3 +4,5 @@
|
||||
add_subdirectory_ifdef(CONFIG_ZMK_BATTERY battery)
|
||||
add_subdirectory_ifdef(CONFIG_EC11 ec11)
|
||||
add_subdirectory_ifdef(CONFIG_ZMK_MAX17048 max17048)
|
||||
|
||||
add_subdirectory_ifdef(CONFIG_ZMK_SENSOR_ENCODER_MOCK encoder_mock)
|
||||
|
||||
@@ -7,4 +7,6 @@ rsource "battery/Kconfig"
|
||||
rsource "ec11/Kconfig"
|
||||
rsource "max17048/Kconfig"
|
||||
|
||||
rsource "encoder_mock/Kconfig"
|
||||
|
||||
endif # SENSOR
|
||||
|
||||
@@ -11,7 +11,7 @@ menuconfig EC11
|
||||
|
||||
if EC11
|
||||
|
||||
choice
|
||||
choice EC11_TRIGGER_MODE
|
||||
prompt "Trigger mode"
|
||||
default EC11_TRIGGER_NONE
|
||||
help
|
||||
|
||||
@@ -148,8 +148,8 @@ int ec11_init(const struct device *dev) {
|
||||
}
|
||||
|
||||
#define EC11_INST(n) \
|
||||
struct ec11_data ec11_data_##n; \
|
||||
const struct ec11_config ec11_cfg_##n = { \
|
||||
static struct ec11_data ec11_data_##n; \
|
||||
static const struct ec11_config ec11_cfg_##n = { \
|
||||
.a = GPIO_DT_SPEC_INST_GET(n, a_gpios), \
|
||||
.b = GPIO_DT_SPEC_INST_GET(n, b_gpios), \
|
||||
.resolution = DT_INST_PROP_OR(n, resolution, 1), \
|
||||
|
||||
8
app/module/drivers/sensor/encoder_mock/CMakeLists.txt
Normal file
8
app/module/drivers/sensor/encoder_mock/CMakeLists.txt
Normal file
@@ -0,0 +1,8 @@
|
||||
# Copyright (c) 2024 The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
zephyr_include_directories(.)
|
||||
|
||||
zephyr_library()
|
||||
|
||||
zephyr_library_sources(encoder_mock.c)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user