Merge branch 'zmkfirmware:main' into murphpad
This commit is contained in:
commit
61a903b9d4
71 changed files with 14888 additions and 19277 deletions
|
@ -60,7 +60,7 @@ representative at an online or offline event.
|
|||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported to the community leaders responsible for enforcement at
|
||||
conduct@zmkfirmware.dev.
|
||||
conduct@zmk.dev.
|
||||
All complaints will be reviewed and investigated promptly and fairly.
|
||||
|
||||
All community leaders are obligated to respect the privacy and security of the
|
||||
|
|
|
@ -7,7 +7,7 @@ you have any questions, please come join us on the
|
|||
## Code of Conduct
|
||||
|
||||
All community members are expected to abide by the [Code of Conduct][code-of-conduct].
|
||||
For any and all conduct inquiries or concerns, please contact conduct@zmkfirmware.dev.
|
||||
For any and all conduct inquiries or concerns, please contact conduct@zmk.dev.
|
||||
|
||||
[code-of-conduct]: https://github.com/zmkfirmware/zmk/blob/main/CODE_OF_CONDUCT.md
|
||||
|
||||
|
@ -35,8 +35,8 @@ ZMK project.
|
|||
|
||||
### Before Submitting a Report
|
||||
|
||||
- Review the [Frequently Asked Questions](https://zmkfirmware.dev/docs/faq).
|
||||
- Check the [Troubleshooting Guide](https://zmkfirmware.dev/docs/troubleshooting) for answers.
|
||||
- Review the [Frequently Asked Questions](https://zmk.dev/docs/faq).
|
||||
- Check the [Troubleshooting Guide](https://zmk.dev/docs/troubleshooting) for answers.
|
||||
- Search the [open issues](https://github.com/zmkfirmware/zmk/issues) for an existing report that
|
||||
matches your problem.
|
||||
|
||||
|
@ -47,10 +47,10 @@ To open a report:
|
|||
- Head to https://github.com/zmkfirmware/zmk/issues/new
|
||||
- Provide an accurate summary of the issue in the title.
|
||||
- Provide as much detail as you can about the issue including:
|
||||
- What [board/shield](https://zmkfirmware.dev/docs/faq#what-is-a-board) you are using.
|
||||
- What [board/shield](https://zmk.dev/docs/faq#what-is-a-board) you are using.
|
||||
- A link to the user repository, if you used it to build your firmware.
|
||||
- Exact steps to reproduce the problem.
|
||||
- Any relevant screenshots or [logs](https://zmkfirmware.dev/docs/dev-guide-usb-logging)
|
||||
- Any relevant screenshots or [logs](https://zmk.dev/docs/dev-guide-usb-logging)
|
||||
|
||||
## Testing
|
||||
|
||||
|
@ -91,7 +91,7 @@ You can setup git to run prettier automatically when you commit by installing th
|
|||
### Development Setup
|
||||
|
||||
To get your development environment setup going, start at the
|
||||
[basic setup](https://zmkfirmware.dev/docs/dev-setup) docs, and make sure you can build and flash
|
||||
[basic setup](https://zmk.dev/docs/dev-setup) docs, and make sure you can build and flash
|
||||
your own locally built firmware.
|
||||
|
||||
### Formatting
|
||||
|
@ -124,4 +124,4 @@ When opening a pull request with your changes, please:
|
|||
- Requested testing by reviewers or testers.
|
||||
- Screenshots or logs that support understanding the change.
|
||||
|
||||
[discord-invite]: https://zmkfirmware.dev/community/discord/invite
|
||||
[discord-invite]: https://zmk.dev/community/discord/invite
|
||||
|
|
10
README.md
10
README.md
|
@ -1,13 +1,13 @@
|
|||
# Zephyr™ Mechanical Keyboard (ZMK) Firmware
|
||||
|
||||
[](https://zmkfirmware.dev/community/discord/invite)
|
||||
[](https://zmk.dev/community/discord/invite)
|
||||
[](https://github.com/zmkfirmware/zmk/actions)
|
||||
[](CODE_OF_CONDUCT.md)
|
||||
|
||||
[ZMK Firmware](https://zmkfirmware.dev/) is an open source (MIT) keyboard firmware built on the [Zephyr™ Project](https://www.zephyrproject.org/) Real Time Operating System (RTOS). ZMK's goal is to provide a modern, wireless, and powerful firmware free of licensing issues.
|
||||
[ZMK Firmware](https://zmk.dev/) is an open source (MIT) keyboard firmware built on the [Zephyr™ Project](https://www.zephyrproject.org/) Real Time Operating System (RTOS). ZMK's goal is to provide a modern, wireless, and powerful firmware free of licensing issues.
|
||||
|
||||
Check out the website to learn more: https://zmkfirmware.dev/
|
||||
Check out the website to learn more: https://zmk.dev/
|
||||
|
||||
You can also come join our [ZMK Discord Server](https://zmkfirmware.dev/community/discord/invite)
|
||||
You can also come join our [ZMK Discord Server](https://zmk.dev/community/discord/invite)
|
||||
|
||||
To review features, check out the [feature overview](https://zmkfirmware.dev/docs/). ZMK is under active development, and new features are listed with the [enhancement label](https://github.com/zmkfirmware/zmk/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement) in GitHub. Please feel free to add 👍 to the issue description of any requests to upvote the feature.
|
||||
To review features, check out the [feature overview](https://zmk.dev/docs/). ZMK is under active development, and new features are listed with the [enhancement label](https://github.com/zmkfirmware/zmk/issues?q=is%3Aissue+is%3Aopen+label%3Aenhancement) in GitHub. Please feel free to add 👍 to the issue description of any requests to upvote the feature.
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
leds {
|
||||
compatible = "gpio-leds";
|
||||
blue_led: led_0 {
|
||||
gpios = <&gpio0 42 GPIO_ACTIVE_HIGH>;
|
||||
gpios = <&gpio1 10 GPIO_ACTIVE_HIGH>;
|
||||
label = "Blue LED";
|
||||
};
|
||||
};
|
||||
|
@ -29,6 +29,7 @@
|
|||
ext-power {
|
||||
compatible = "zmk,ext-power-generic";
|
||||
label = "EXT_POWER";
|
||||
init-delay-ms = <20>;
|
||||
control-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
|
||||
};
|
||||
|
||||
|
|
8
app/boards/arm/nice60/CMakeLists.txt
Normal file
8
app/boards/arm/nice60/CMakeLists.txt
Normal file
|
@ -0,0 +1,8 @@
|
|||
set_property(GLOBAL APPEND PROPERTY extra_post_build_commands
|
||||
COMMAND ${PYTHON_EXECUTABLE} ${ZEPHYR_BASE}/../tools/uf2/utils/uf2conv.py
|
||||
-c
|
||||
-b 0x1000
|
||||
-f 0xADA52840
|
||||
-o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2
|
||||
${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin
|
||||
)
|
8
app/boards/arm/nice60/Kconfig
Normal file
8
app/boards/arm/nice60/Kconfig
Normal file
|
@ -0,0 +1,8 @@
|
|||
# Copyright (c) 2021 Nick Winans
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
config BOARD_ENABLE_DCDC
|
||||
bool "Enable DCDC mode"
|
||||
select SOC_DCDC_NRF52X
|
||||
default y
|
||||
depends on BOARD_NICE60
|
6
app/boards/arm/nice60/Kconfig.board
Normal file
6
app/boards/arm/nice60/Kconfig.board
Normal file
|
@ -0,0 +1,6 @@
|
|||
# Copyright (c) 2021 Nick Winans
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
config BOARD_NICE60
|
||||
bool "nice!60"
|
||||
depends on SOC_NRF52840_QIAA
|
31
app/boards/arm/nice60/Kconfig.defconfig
Normal file
31
app/boards/arm/nice60/Kconfig.defconfig
Normal file
|
@ -0,0 +1,31 @@
|
|||
# Copyright (c) 2021 Nick Winans
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
if BOARD_NICE60
|
||||
|
||||
config ZMK_KEYBOARD_NAME
|
||||
default "nice!60"
|
||||
|
||||
if USB
|
||||
|
||||
config USB_NRFX
|
||||
default y
|
||||
|
||||
config USB_DEVICE_STACK
|
||||
default y
|
||||
|
||||
endif # USB
|
||||
|
||||
config BT_CTLR
|
||||
default BT
|
||||
|
||||
config ZMK_BLE
|
||||
default y
|
||||
|
||||
config ZMK_USB
|
||||
default y
|
||||
|
||||
config ZMK_BATTERY_VOLTAGE_DIVIDER
|
||||
default y
|
||||
|
||||
endif # BOARD_NICE60
|
9
app/boards/arm/nice60/README.md
Normal file
9
app/boards/arm/nice60/README.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
# nice!60
|
||||

|
||||
|
||||
The nice!60 is a hotswap 60% made by Nice Keyboards. https://nicekeyboards.com/nice-60
|
||||
|
||||
## Building nice!60 ZMK firmware
|
||||
```
|
||||
west build -p -b nice60
|
||||
```
|
7
app/boards/arm/nice60/board.cmake
Normal file
7
app/boards/arm/nice60/board.cmake
Normal file
|
@ -0,0 +1,7 @@
|
|||
# Copyright (c) 2021 Nick Winans
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
set(OPENOCD_NRF5_SUBFAMILY nrf52)
|
||||
board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset")
|
||||
include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake)
|
||||
include(${ZEPHYR_BASE}/boards/common/openocd-nrf5.board.cmake)
|
172
app/boards/arm/nice60/nice60.dts
Normal file
172
app/boards/arm/nice60/nice60.dts
Normal file
|
@ -0,0 +1,172 @@
|
|||
/*
|
||||
* Copyright (c) 2021 Nick Winans
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
/dts-v1/;
|
||||
#include <nordic/nrf52840_qiaa.dtsi>
|
||||
#include <dt-bindings/zmk/matrix_transform.h>
|
||||
|
||||
/ {
|
||||
model = "nice!60";
|
||||
compatible = "nice,60";
|
||||
|
||||
chosen {
|
||||
zephyr,code-partition = &code_partition;
|
||||
zephyr,sram = &sram0;
|
||||
zephyr,flash = &flash0;
|
||||
zmk,kscan = &kscan0;
|
||||
zmk,matrix_transform = &default_transform;
|
||||
zmk,underglow = &led_strip;
|
||||
};
|
||||
|
||||
default_transform: keymap_transform_0 {
|
||||
compatible = "zmk,matrix-transform";
|
||||
columns = <14>;
|
||||
rows = <5>;
|
||||
map = <
|
||||
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) RC(0,6) RC(0,7) RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13)
|
||||
RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5) RC(1,6) RC(1,7) RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13)
|
||||
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(2,6) RC(2,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,13)
|
||||
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(3,6) RC(3,7) RC(3,8) RC(3,9) RC(3,10) RC(3,13)
|
||||
RC(4,0) RC(4,1) RC(4,2) RC(4,5) RC(4,9) RC(4,10) RC(4,11) RC(4,13)
|
||||
>;
|
||||
};
|
||||
|
||||
kscan0: kscan {
|
||||
compatible = "zmk,kscan-gpio-matrix";
|
||||
label = "KSCAN";
|
||||
|
||||
diode-direction = "col2row";
|
||||
row-gpios
|
||||
= <&gpio1 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||
, <&gpio1 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||
, <&gpio1 12 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||
, <&gpio1 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||
, <&gpio1 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||
;
|
||||
col-gpios
|
||||
= <&gpio1 15 GPIO_ACTIVE_HIGH>
|
||||
, <&gpio0 29 GPIO_ACTIVE_HIGH>
|
||||
, <&gpio0 31 GPIO_ACTIVE_HIGH>
|
||||
, <&gpio0 30 GPIO_ACTIVE_HIGH>
|
||||
, <&gpio0 28 GPIO_ACTIVE_HIGH>
|
||||
, <&gpio0 2 GPIO_ACTIVE_HIGH>
|
||||
, <&gpio0 3 GPIO_ACTIVE_HIGH>
|
||||
, <&gpio1 3 GPIO_ACTIVE_HIGH>
|
||||
, <&gpio1 7 GPIO_ACTIVE_HIGH>
|
||||
, <&gpio1 4 GPIO_ACTIVE_HIGH>
|
||||
, <&gpio1 6 GPIO_ACTIVE_HIGH>
|
||||
, <&gpio1 5 GPIO_ACTIVE_HIGH>
|
||||
, <&gpio1 1 GPIO_ACTIVE_HIGH>
|
||||
, <&gpio1 2 GPIO_ACTIVE_HIGH>
|
||||
;
|
||||
};
|
||||
|
||||
leds {
|
||||
compatible = "gpio-leds";
|
||||
blue_led: led_0 {
|
||||
gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>;
|
||||
label = "Blue LED";
|
||||
};
|
||||
};
|
||||
|
||||
ext-power {
|
||||
compatible = "zmk,ext-power-generic";
|
||||
label = "EXT_POWER";
|
||||
control-gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
vbatt {
|
||||
compatible = "zmk,battery-voltage-divider";
|
||||
label = "BATTERY";
|
||||
io-channels = <&adc 2>;
|
||||
output-ohms = <2000000>;
|
||||
full-ohms = <(2000000 + 806000)>;
|
||||
};
|
||||
};
|
||||
|
||||
&adc {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gpiote {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gpio0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&gpio1 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&spi0 {
|
||||
compatible = "nordic,nrf-spim";
|
||||
/* Cannot be used together with i2c0. */
|
||||
status = "okay";
|
||||
sck-pin = <12>;
|
||||
mosi-pin = <27>;
|
||||
miso-pin = <13>;
|
||||
|
||||
led_strip: ws2812@0 {
|
||||
compatible = "worldsemi,ws2812-spi";
|
||||
label = "WS2812";
|
||||
|
||||
/* SPI */
|
||||
reg = <0>; /* ignored, but necessary for SPI bindings */
|
||||
spi-max-frequency = <4000000>;
|
||||
|
||||
/* WS2812 */
|
||||
chain-length = <12>; /* LED strip length */
|
||||
spi-one-frame = <0x70>;
|
||||
spi-zero-frame = <0x40>;
|
||||
};
|
||||
};
|
||||
|
||||
&usbd {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&flash0 {
|
||||
/*
|
||||
* For more information, see:
|
||||
* http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html
|
||||
*/
|
||||
partitions {
|
||||
compatible = "fixed-partitions";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
sd_partition: partition@0 {
|
||||
label = "mbr";
|
||||
reg = <0x00000000 0x00001000>;
|
||||
};
|
||||
|
||||
code_partition: partition@1000 {
|
||||
label = "code_partition";
|
||||
reg = <0x00001000 0x000d3000>;
|
||||
};
|
||||
|
||||
/*
|
||||
* The flash starting at 0x000d4000 and ending at
|
||||
* 0x000f3fff is reserved for use by the application.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Storage partition will be used by FCB/LittleFS/NVS
|
||||
* if enabled.
|
||||
*/
|
||||
storage_partition: partition@d4000 {
|
||||
label = "storage";
|
||||
reg = <0x000d4000 0x00020000>;
|
||||
};
|
||||
|
||||
boot_partition: partition@f4000 {
|
||||
label = "adafruit_boot";
|
||||
reg = <0x000f4000 0x0000c000>;
|
||||
};
|
||||
};
|
||||
};
|
50
app/boards/arm/nice60/nice60.keymap
Normal file
50
app/boards/arm/nice60/nice60.keymap
Normal file
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Copyright (c) 2021 Nick Winans
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*/
|
||||
|
||||
#include <behaviors.dtsi>
|
||||
#include <dt-bindings/zmk/keys.h>
|
||||
#include <dt-bindings/zmk/rgb.h>
|
||||
#include <dt-bindings/zmk/bt.h>
|
||||
|
||||
/ {
|
||||
keymap {
|
||||
compatible = "zmk,keymap";
|
||||
|
||||
default_layer {
|
||||
// ------------------------------------------------------------------------------------------
|
||||
// | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | BKSP |
|
||||
// | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | "|" |
|
||||
// | CAPS | A | S | D | F | G | H | J | K | L | ; | ' | ENTER |
|
||||
// | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT |
|
||||
// | CTL | WIN | ALT | SPACE | ALT | WIN | MO(1) | CTL |
|
||||
// ------------------------------------------------------------------------------------------
|
||||
bindings = <
|
||||
&gresc &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS &kp EQUAL &kp BSPC
|
||||
&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &kp RBKT &kp BSLH
|
||||
&kp CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp RET
|
||||
&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RSHFT
|
||||
&kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &kp RGUI &mo 1 &kp RCTRL
|
||||
>;
|
||||
};
|
||||
|
||||
rgb_layer {
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
// | BT CLR | F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | EFFECT REV |
|
||||
// | BT 1 | | UP | | HUEUP | SATUP | BRIUP | SPDUP | | | | | | |
|
||||
// | BT 2 | LT | DN | RT | HUEDN | SATDN | BRIDN | SPDDN | | | | | EFFECT FORW |
|
||||
// | BT 3 | | | | | | | | | | | |
|
||||
// | BT 4 | | | TOG RGB | PRT SCR | | | DEL |
|
||||
// ------------------------------------------------------------------------------------------------
|
||||
bindings = <
|
||||
&bt BT_CLR &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &rgb_ug RGB_EFR
|
||||
&bt BT_SEL 0 &trans &kp UP &trans &rgb_ug RGB_HUI &rgb_ug RGB_SAI &rgb_ug RGB_BRI &rgb_ug RGB_SPI &trans &trans &trans &trans &trans &trans
|
||||
&bt BT_SEL 1 &kp LEFT &kp DOWN &kp RIGHT &rgb_ug RGB_HUD &rgb_ug RGB_SAD &rgb_ug RGB_BRD &rgb_ug RGB_SPD &trans &trans &trans &trans &rgb_ug RGB_EFF
|
||||
&bt BT_SEL 2 &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans
|
||||
&bt BT_SEL 3 &trans &trans &rgb_ug RGB_TOG &kp PSCRN &trans &trans &kp DEL
|
||||
>;
|
||||
};
|
||||
};
|
||||
};
|
14
app/boards/arm/nice60/nice60.yaml
Normal file
14
app/boards/arm/nice60/nice60.yaml
Normal file
|
@ -0,0 +1,14 @@
|
|||
identifier: nice60
|
||||
name: nice!60
|
||||
type: mcu
|
||||
arch: arm
|
||||
toolchain:
|
||||
- zephyr
|
||||
- gnuarmemb
|
||||
supported:
|
||||
- adc
|
||||
- usb_device
|
||||
- ble
|
||||
- ieee802154
|
||||
- pwm
|
||||
- watchdog
|
27
app/boards/arm/nice60/nice60_defconfig
Normal file
27
app/boards/arm/nice60/nice60_defconfig
Normal file
|
@ -0,0 +1,27 @@
|
|||
# Copyright (c) 2021 Nick Winans
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
CONFIG_SOC_SERIES_NRF52X=y
|
||||
CONFIG_SOC_NRF52840_QIAA=y
|
||||
CONFIG_BOARD_NICE60=y
|
||||
|
||||
# Enable MPU
|
||||
CONFIG_ARM_MPU=y
|
||||
|
||||
# enable GPIO
|
||||
CONFIG_GPIO=y
|
||||
|
||||
CONFIG_USE_DT_CODE_PARTITION=y
|
||||
|
||||
CONFIG_MPU_ALLOW_FLASH_WRITE=y
|
||||
CONFIG_NVS=y
|
||||
CONFIG_SETTINGS_NVS=y
|
||||
CONFIG_FLASH=y
|
||||
CONFIG_FLASH_PAGE_LAYOUT=y
|
||||
CONFIG_FLASH_MAP=y
|
||||
|
||||
CONFIG_ZMK_RGB_UNDERGLOW=y
|
||||
CONFIG_WS2812_STRIP=y
|
||||
|
||||
CONFIG_ZMK_RGB_UNDERGLOW_HUE_START=160
|
||||
CONFIG_ZMK_RGB_UNDERGLOW_EFF_START=3
|
|
@ -6,3 +6,5 @@ CONFIG_ZMK_BLE=n
|
|||
CONFIG_LOG=y
|
||||
CONFIG_LOG_BACKEND_SHOW_COLOR=n
|
||||
CONFIG_ZMK_LOG_LEVEL_DBG=y
|
||||
CONFIG_DEBUG=y
|
||||
CONFIG_SYS_CLOCK_TICKS_PER_SEC=1000
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
if SHIELD_CRADIO_LEFT
|
||||
|
||||
config ZMK_KEYBOARD_NAME
|
||||
default "cradio left"
|
||||
default "Cradio"
|
||||
|
||||
config ZMK_SPLIT_BLE_ROLE_CENTRAL
|
||||
default y
|
||||
|
@ -14,11 +14,11 @@ endif
|
|||
if SHIELD_CRADIO_RIGHT
|
||||
|
||||
config ZMK_KEYBOARD_NAME
|
||||
default "cradio right"
|
||||
default "Cradio_Right"
|
||||
|
||||
endif
|
||||
|
||||
if SHIELD_CRADIO_LEFT || SHIELD_CRADIO_RIGHT
|
||||
if SHIELD_CRADIO_RIGHT || SHIELD_CRADIO_LEFT
|
||||
|
||||
config ZMK_SPLIT
|
||||
default y
|
||||
|
|
1
app/boards/shields/cradio/README.md
Normal file
1
app/boards/shields/cradio/README.md
Normal file
|
@ -0,0 +1 @@
|
|||
Cradio is a firmware for a few 34 key keyboards, including Cradio, Hypergolic and Sweep.
|
0
app/boards/shields/cradio/cradio.conf
Normal file
0
app/boards/shields/cradio/cradio.conf
Normal file
|
@ -7,9 +7,10 @@
|
|||
#include <dt-bindings/zmk/matrix_transform.h>
|
||||
|
||||
/ {
|
||||
|
||||
chosen {
|
||||
zmk,kscan = &kscan0;
|
||||
//zmk,matrix_transform = &default_transform;
|
||||
zmk,matrix_transform = &default_transform;
|
||||
};
|
||||
|
||||
default_transform: keymap_transform_0 {
|
||||
|
@ -22,6 +23,7 @@
|
|||
RC(0,10) RC(0,11) RC(0,12) RC(0,13) RC(0,14) RC(0,31) RC(0,30) RC(0,29) RC(0,28) RC(0,27)
|
||||
RC(0,15) RC(0,16) RC(0,33) RC(0,32)
|
||||
>;
|
||||
};
|
||||
|
||||
kscan0: kscan {
|
||||
compatible = "zmk,kscan-gpio-direct";
|
||||
|
@ -46,5 +48,5 @@
|
|||
, <&pro_micro_d 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>
|
||||
;
|
||||
};
|
||||
};
|
||||
|
||||
};
|
||||
|
|
|
@ -9,33 +9,92 @@
|
|||
#include <dt-bindings/zmk/bt.h>
|
||||
|
||||
|
||||
&mt {
|
||||
// flavor = "tap-preferred";
|
||||
// tapping_term_ms = <200>;
|
||||
};
|
||||
|
||||
/ {
|
||||
|
||||
combos {
|
||||
compatible = "zmk,combos";
|
||||
combo_esc {
|
||||
timeout-ms = <50>;
|
||||
key-positions = <0 1>;
|
||||
bindings = <&kp ESC>;
|
||||
};
|
||||
|
||||
combo_tab {
|
||||
timeout-ms = <50>;
|
||||
key-positions = <10 11>;
|
||||
bindings = <&kp TAB>;
|
||||
};
|
||||
|
||||
combo_ralt {
|
||||
timeout-ms = <50>;
|
||||
key-positions = <17 16>;
|
||||
bindings = <&kp RALT>;
|
||||
};
|
||||
|
||||
combo_lalt {
|
||||
timeout-ms = <50>;
|
||||
key-positions = <11 12>;
|
||||
bindings = <&kp LALT>;
|
||||
};
|
||||
|
||||
combo_lgui {
|
||||
timeout-ms = <50>;
|
||||
key-positions = <12 13>;
|
||||
bindings = <&kp LGUI>;
|
||||
};
|
||||
|
||||
|
||||
combo_rgui {
|
||||
timeout-ms = <50>;
|
||||
key-positions = <17 18>;
|
||||
bindings = <&kp RGUI>;
|
||||
};
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
keymap {
|
||||
compatible = "zmk,keymap";
|
||||
|
||||
default_layer {
|
||||
bindings = <
|
||||
&kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P
|
||||
&kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI
|
||||
&kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH
|
||||
&mo 1 &kp LCTRL &kp SPACE &mo 2
|
||||
>;
|
||||
};
|
||||
upper_layer {
|
||||
bindings = <
|
||||
&kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0
|
||||
&bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &kp H &kp J &kp K &kp L &kp SEMI
|
||||
&kp LSHFT &trans &trans &trans &trans &trans &trans &trans &trans &trans
|
||||
&mo 1 &kp LCTRL &kp SPACE &mo 2
|
||||
&kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp QUOT
|
||||
&mt LSFT Z &kp X &kp C &kp V &kp B &kp N &kp M &kp CMMA &kp DOT &mt LSFT RET
|
||||
&mo 1 &kp LCTL &kp SPC &mo 2
|
||||
>;
|
||||
};
|
||||
|
||||
lower_layer {
|
||||
left_layer {
|
||||
bindings = <
|
||||
&kp EXCL &kp AT &kp HASH &kp DOLLAR &kp PRCNT &kp CARET &kp AMPS &kp KP_MULTIPLY &kp LPAR &kp RPAR
|
||||
&trans &trans &trans &trans &trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp PIPE
|
||||
&trans &trans &trans &trans &trans &trans &trans &trans &kp BSLH &kp TILDE
|
||||
&mo 1 &kp LCTRL &kp SPACE &mo 2
|
||||
&kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &kp NUM_6 &kp NUM_7 &kp NUM_8 &kp NUM_9 &kp NUM_0
|
||||
&kp TAB &kp LC(S) &kp DQT &kp PIPE2 &kp HASH &kp MINUS &kp EQL &kp LBKT &kp RBKT &kp DEL
|
||||
&kp ESC &kp TILDE &kp NON_US_BSLH &kp NON_US_HASH &kp TILDE2 &kp MINUS &kp GRAVE &kp LBKT &kp RBKT &kp DEL
|
||||
&mo 1 &kp LGUI &kp RGUI &mo 2
|
||||
>;
|
||||
};
|
||||
|
||||
right_layer {
|
||||
bindings = <
|
||||
&kp BANG &kp ATSN &kp HASH &kp DLLR &kp PRCT &kp CRRT &kp AMPS &kp KMLT &kp LPRN &kp RPRN
|
||||
&kp HASH &kp QMARK &kp FSLH &kp COLN &kp SCLN &kp MINUS &kp KP_EQUAL &kp LBRC &kp RBRC &kp BKSP
|
||||
&kp LSFT &kp KPLS &kp LBKT &kp RBKT &kp BSLH &kp UNDER &kp LEFT &kp DOWN &kp UP &kp RIGHT
|
||||
&mo 3 &kp LCTL &kp SPC &mo 2
|
||||
>;
|
||||
};
|
||||
|
||||
tri_layer {
|
||||
bindings = <
|
||||
&kp NUM_1 &kp NUM_2 &kp NUM_3 &kp NUM_4 &kp NUM_5 &trans &trans &trans &trans &trans
|
||||
&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &trans &kp PG_UP &kp K_VOL_UP &kp K_MUTE &trans
|
||||
&bt BT_CLR &bt BT_NXT &bt BT_PRV &kp F6 &kp F7 &trans &kp PG_DN &kp K_VOL_DN &trans &trans
|
||||
&trans &trans &trans &trans
|
||||
>;
|
||||
};
|
||||
|
||||
|
|
|
@ -1,3 +1,2 @@
|
|||
# Copyright (c) 2020 The ZMK Contributors
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
|
|
|
@ -13,6 +13,9 @@
|
|||
#define RSE 2
|
||||
#define ADJ 3
|
||||
|
||||
< { quick_tap_ms = <200>; };
|
||||
&mt { quick_tap_ms = <200>; };
|
||||
|
||||
/ {
|
||||
keymap {
|
||||
compatible = "zmk,keymap";
|
||||
|
@ -26,7 +29,7 @@
|
|||
bindings = <
|
||||
&kp LWIN &kp GRAVE &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &mt RWIN RBKT
|
||||
&kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &mt RCTRL SQT
|
||||
&kp LALT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp BSLH
|
||||
&kp LALT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &mt RALT BSLH
|
||||
< RSE TAB &mt LSHFT SPACE < LWR RET < LWR ESC &mt RSHFT BSPC < RSE DEL
|
||||
>;
|
||||
};
|
||||
|
|
|
@ -113,6 +113,8 @@ struct kscan_gpio_item_config {
|
|||
&kscan_gpio_output_configs_##n(dev)[bit]; \
|
||||
gpio_pin_set(out_dev, out_cfg->pin, state); \
|
||||
} \
|
||||
/* Let the col settle before reading the rows */ \
|
||||
k_usleep(1); \
|
||||
\
|
||||
for (int i = 0; i < INST_MATRIX_INPUTS(n); i++) { \
|
||||
/* Get the input device (port) */ \
|
||||
|
|
|
@ -768,6 +768,7 @@
|
|||
|
||||
/* Keyboard Left Shift */
|
||||
#define LEFT_SHIFT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_LEFTSHIFT))
|
||||
#define LSHIFT (LEFT_SHIFT)
|
||||
#define LSHFT (LEFT_SHIFT)
|
||||
#define LSFT (LEFT_SHIFT) // WARNING: DEPRECATED (DO NOT USE)
|
||||
|
||||
|
@ -792,6 +793,7 @@
|
|||
|
||||
/* Keyboard Right Shift */
|
||||
#define RIGHT_SHIFT (HID_USAGE(HID_USAGE_KEY, HID_USAGE_KEY_KEYBOARD_RIGHTSHIFT))
|
||||
#define RSHIFT (RIGHT_SHIFT)
|
||||
#define RSHFT (RIGHT_SHIFT)
|
||||
#define RSFT (RIGHT_SHIFT) // WARNING: DEPRECATED (DO NOT USE)
|
||||
|
||||
|
|
|
@ -449,11 +449,7 @@ static int on_hold_tap_binding_pressed(struct zmk_behavior_binding *binding,
|
|||
// if this behavior was queued we have to adjust the timer to only
|
||||
// wait for the remaining time.
|
||||
int32_t tapping_term_ms_left = (hold_tap->timestamp + cfg->tapping_term_ms) - k_uptime_get();
|
||||
if (tapping_term_ms_left > 0) {
|
||||
k_delayed_work_submit(&hold_tap->work, K_MSEC(tapping_term_ms_left));
|
||||
} else {
|
||||
decide_hold_tap(hold_tap, HT_TIMER_EVENT);
|
||||
}
|
||||
|
||||
return ZMK_BEHAVIOR_OPAQUE;
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
#include <device.h>
|
||||
#include <init.h>
|
||||
|
||||
#include <errno.h>
|
||||
#include <math.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
@ -250,6 +251,10 @@ static int ble_save_profile() {
|
|||
}
|
||||
|
||||
int zmk_ble_prof_select(uint8_t index) {
|
||||
if (index >= PROFILE_COUNT) {
|
||||
return -ERANGE;
|
||||
}
|
||||
|
||||
LOG_DBG("profile %d", index);
|
||||
if (active_profile == index) {
|
||||
return 0;
|
||||
|
|
|
@ -188,8 +188,15 @@ static int64_t first_candidate_timeout() {
|
|||
static inline bool candidate_is_completely_pressed(struct combo_cfg *candidate) {
|
||||
// this code assumes set(pressed_keys) <= set(candidate->key_positions)
|
||||
// this invariant is enforced by filter_candidates
|
||||
// the only thing we need to do is check if len(pressed_keys) == len(combo->key_positions)
|
||||
return pressed_keys[candidate->key_position_len - 1] != NULL;
|
||||
// since events may have been reraised after clearing one or more slots at
|
||||
// the start of pressed_keys (see: release_pressed_keys), we have to check
|
||||
// that each key needed to trigger the combo was pressed, not just the last.
|
||||
for (int i = 0; i < candidate->key_position_len; i++) {
|
||||
if (pressed_keys[i] == NULL) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static int cleanup();
|
||||
|
|
|
@ -0,0 +1,2 @@
|
|||
pressed: usage_page 0x07 keycode 0x1d implicit_mods 0x00 explicit_mods 0x00
|
||||
released: usage_page 0x07 keycode 0x1d implicit_mods 0x00 explicit_mods 0x00
|
|
@ -0,0 +1,39 @@
|
|||
#include <dt-bindings/zmk/keys.h>
|
||||
#include <behaviors.dtsi>
|
||||
#include <dt-bindings/zmk/kscan-mock.h>
|
||||
|
||||
/ {
|
||||
combos {
|
||||
compatible = "zmk,combos";
|
||||
combo_one {
|
||||
timeout-ms = <80>;
|
||||
key-positions = <0 1 2 3>;
|
||||
bindings = <&kp Z>;
|
||||
};
|
||||
};
|
||||
|
||||
keymap {
|
||||
compatible = "zmk,keymap";
|
||||
label ="Default keymap";
|
||||
|
||||
default_layer {
|
||||
bindings = <
|
||||
&kp A &kp B
|
||||
&kp C &kp D
|
||||
>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&kscan {
|
||||
events = <
|
||||
ZMK_MOCK_PRESS(1,1,10)
|
||||
ZMK_MOCK_PRESS(0,1,10)
|
||||
ZMK_MOCK_PRESS(1,0,10)
|
||||
ZMK_MOCK_PRESS(0,0,10)
|
||||
ZMK_MOCK_RELEASE(0,0,100)
|
||||
ZMK_MOCK_RELEASE(1,0,100)
|
||||
ZMK_MOCK_RELEASE(0,1,100)
|
||||
ZMK_MOCK_RELEASE(1,1,100)
|
||||
>;
|
||||
};
|
|
@ -0,0 +1 @@
|
|||
s/.*hid_listener_keycode_//p
|
|
@ -0,0 +1 @@
|
|||
s/.*hid_listener_keycode_//p
|
|
@ -0,0 +1,6 @@
|
|||
pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00
|
||||
pressed: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00
|
||||
pressed: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00
|
||||
released: usage_page 0x07 keycode 0x07 implicit_mods 0x00 explicit_mods 0x00
|
||||
released: usage_page 0x07 keycode 0x05 implicit_mods 0x00 explicit_mods 0x00
|
||||
released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00
|
|
@ -0,0 +1,37 @@
|
|||
#include <dt-bindings/zmk/keys.h>
|
||||
#include <behaviors.dtsi>
|
||||
#include <dt-bindings/zmk/kscan-mock.h>
|
||||
|
||||
/ {
|
||||
combos {
|
||||
compatible = "zmk,combos";
|
||||
combo_one {
|
||||
timeout-ms = <80>;
|
||||
key-positions = <0 1 2>;
|
||||
bindings = <&kp Z>;
|
||||
};
|
||||
};
|
||||
|
||||
keymap {
|
||||
compatible = "zmk,keymap";
|
||||
label ="Default keymap";
|
||||
|
||||
default_layer {
|
||||
bindings = <
|
||||
&kp A &kp B
|
||||
&kp C &kp D
|
||||
>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&kscan {
|
||||
events = <
|
||||
ZMK_MOCK_PRESS(0,0,10)
|
||||
ZMK_MOCK_PRESS(0,1,10)
|
||||
ZMK_MOCK_PRESS(1,1,10)
|
||||
ZMK_MOCK_RELEASE(1,1,100)
|
||||
ZMK_MOCK_RELEASE(0,1,100)
|
||||
ZMK_MOCK_RELEASE(0,0,100)
|
||||
>;
|
||||
};
|
|
@ -0,0 +1,4 @@
|
|||
s/.*hid_listener_keycode/kp/p
|
||||
s/.*mo_keymap_binding/mo/p
|
||||
s/.*on_hold_tap_binding/ht_binding/p
|
||||
s/.*decide_hold_tap/ht_decide/p
|
|
@ -0,0 +1,10 @@
|
|||
ht_binding_pressed: 0 new undecided hold_tap
|
||||
ht_decide: 0 decided hold-timer (tap-preferred decision moment timer)
|
||||
kp_pressed: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00
|
||||
ht_binding_pressed: 1 new undecided hold_tap
|
||||
ht_decide: 1 decided tap (tap-preferred decision moment key-up)
|
||||
kp_pressed: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00
|
||||
kp_released: usage_page 0x07 keycode 0x0d implicit_mods 0x00 explicit_mods 0x00
|
||||
ht_binding_released: 1 cleaning up hold-tap
|
||||
kp_released: usage_page 0x07 keycode 0xe1 implicit_mods 0x00 explicit_mods 0x00
|
||||
ht_binding_released: 0 cleaning up hold-tap
|
|
@ -0,0 +1,53 @@
|
|||
#include <dt-bindings/zmk/keys.h>
|
||||
#include <behaviors.dtsi>
|
||||
#include <dt-bindings/zmk/kscan_mock.h>
|
||||
|
||||
/*
|
||||
* A hold-tap with long tapping term is pressed first.
|
||||
* A hold-tap with short tapping term is quickly tapped.
|
||||
* The short tapping term hold-tap should 'tap', not 'hold'.
|
||||
*/
|
||||
|
||||
/ {
|
||||
behaviors {
|
||||
tp_short: short_tap {
|
||||
compatible = "zmk,behavior-hold-tap";
|
||||
label = "MOD_TAP_SHORT";
|
||||
#binding-cells = <2>;
|
||||
flavor = "tap-preferred";
|
||||
tapping-term-ms = <100>;
|
||||
quick-tap-ms = <200>;
|
||||
bindings = <&kp>, <&kp>;
|
||||
};
|
||||
tp_long: long_tap {
|
||||
compatible = "zmk,behavior-hold-tap";
|
||||
label = "MOD_TAP_LONG";
|
||||
#binding-cells = <2>;
|
||||
flavor = "tap-preferred";
|
||||
tapping-term-ms = <200>;
|
||||
quick-tap-ms = <200>;
|
||||
bindings = <&kp>, <&kp>;
|
||||
};
|
||||
};
|
||||
|
||||
keymap {
|
||||
compatible = "zmk,keymap";
|
||||
label ="Default keymap";
|
||||
|
||||
default_layer {
|
||||
bindings = <
|
||||
&tp_long LEFT_SHIFT F &tp_short LEFT_CONTROL J
|
||||
&kp D &kp RIGHT_CONTROL>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
&kscan {
|
||||
events = <
|
||||
ZMK_MOCK_PRESS(0,0,20)
|
||||
ZMK_MOCK_PRESS(0,1,20)
|
||||
ZMK_MOCK_RELEASE(0,1,200)
|
||||
ZMK_MOCK_RELEASE(0,0,10)
|
||||
>;
|
||||
};
|
|
@ -16,16 +16,16 @@ Hacktoberfest activity, and a current open call for community feedback on a ZMK
|
|||
|
||||
So much going on in ZMK!
|
||||
|
||||
- Added a new generic [Hold Tap behavior](https://zmkfirmware.dev/docs/behaviors/hold-tap)
|
||||
- Added a new generic [Hold Tap behavior](https://zmk.dev/docs/behaviors/hold-tap)
|
||||
in [#146](https://github.com/zmkfirmware/zmk/pull/146) which now powers mod-tap, layer-tap, etc. - [okke-formsma]
|
||||
- [BLE profile/connection management](https://zmkfirmware.dev/docs/behaviors/bluetooth)
|
||||
- [BLE profile/connection management](https://zmk.dev/docs/behaviors/bluetooth)
|
||||
in [#133](https://github.com/zmkfirmware/zmk/pull/133) - [petejohanson]
|
||||
- Integration tests were added to automate testing of behaviors in [#131](https://github.com/zmkfirmware/zmk/pull/131) by [BrainWart] & [petejohanson]
|
||||
- [Toggle layer behavior](https://zmkfirmware.dev/docs/behaviors/layers#toggle-layer), e.g. `&tog LOWER`, in
|
||||
- [Toggle layer behavior](https://zmk.dev/docs/behaviors/layers#toggle-layer), e.g. `&tog LOWER`, in
|
||||
[#98](https://github.com/zmkfirmware/zmk/pull/98) - [BrainWart]
|
||||
- Key fix for dropped press/release over HID [#93](https://github.com/zmkfirmware/zmk/pull/93)/[#96](https://github.com/zmkfirmware/zmk/pull/96) - [careyk007](https://github.com/careyk007) & [petejohanson]
|
||||
- Code formatting standardized using `clang-format` in [#183](https://github.com/zmkfirmware/zmk/pull/183) - [petejohanson]
|
||||
- [Bootloader reset behavior](https://zmkfirmware.dev/docs/behaviors/reset#bootloader-reset), e.g. `&bootloader`, in [#116](https://github.com/zmkfirmware/zmk/pull/116) - [petejohanson]
|
||||
- [Bootloader reset behavior](https://zmk.dev/docs/behaviors/reset#bootloader-reset), e.g. `&bootloader`, in [#116](https://github.com/zmkfirmware/zmk/pull/116) - [petejohanson]
|
||||
- Various bug fixes and documentation
|
||||
|
||||
## New Shields
|
||||
|
|
|
@ -85,7 +85,7 @@ This example configures a hold-tap that works well for homerow mods:
|
|||
|
||||
default_layer {
|
||||
bindings = <
|
||||
&hm LCTRL A &hm LGUI S &hm LALT D &hm LSHFT F
|
||||
&hm LCTRL A &hm LGUI S &hm LALT D &hm LSHIFT F
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
|
|
@ -19,13 +19,13 @@ The Mod-Tap behavior either acts as a held modifier, or as a tapped keycode.
|
|||
### Behavior Binding
|
||||
|
||||
- Reference: `&mt`
|
||||
- Parameter #1: The keycode to be sent when activating as a modifier, e.g. `LSHFT`
|
||||
- Parameter #1: The keycode to be sent when activating as a modifier, e.g. `LSHIFT`
|
||||
- Parameter #2: The keycode to sent when used as a tap, e.g. `A`, `B`.
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
&mt LSHFT A
|
||||
&mt LSHIFT A
|
||||
```
|
||||
|
||||
### Configuration
|
||||
|
|
|
@ -12,12 +12,12 @@ By default, sticky keys stay pressed for a second if you don't press any other k
|
|||
### Behavior Binding
|
||||
|
||||
- Reference: `&sk`
|
||||
- Parameter #1: The keycode , e.g. `LSHFT`
|
||||
- Parameter #1: The keycode , e.g. `LSHIFT`
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
&sk LSHFT
|
||||
&sk LSHIFT
|
||||
```
|
||||
|
||||
You can use any keycode that works for `&kp` as parameter to `&sk`:
|
||||
|
@ -44,7 +44,7 @@ You can configure a different `release-after-ms` in your keymap:
|
|||
|
||||
### Advanced usage
|
||||
|
||||
Sticky keys can be combined; if you tap `&sk LCTRL` and then `&sk LSHFT` and then `&kp A`, the output will be ctrl+shift+a.
|
||||
Sticky keys can be combined; if you tap `&sk LCTRL` and then `&sk LSHIFT` and then `&kp A`, the output will be ctrl+shift+a.
|
||||
|
||||
### Comparison to QMK
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ You can configure a different `release-after-ms` in your keymap:
|
|||
|
||||
### Advanced usage
|
||||
|
||||
Sticky layers behave slightly different from sticky keys. They are configured to `quick-release`. This means that the layer is released immediately when another key is pressed. "Normal" sticky keys are not `quick-release`; they are released when the next key is released. This makes it possible to combine sticky layers and sticky keys as such: tap `&sl 1`, tap `&sk LSHFT` on layer 1, tap `&kp A` on base layer to output shift+A.
|
||||
Sticky layers behave slightly different from sticky keys. They are configured to `quick-release`. This means that the layer is released immediately when another key is pressed. "Normal" sticky keys are not `quick-release`; they are released when the next key is released. This makes it possible to combine sticky layers and sticky keys as such: tap `&sl 1`, tap `&sk LSHIFT` on layer 1, tap `&kp A` on base layer to output shift+A.
|
||||
|
||||
### Comparison to QMK
|
||||
|
||||
|
|
|
@ -6,9 +6,9 @@ hide_title: true
|
|||
|
||||
import OsLegend from "@site/src/components/codes/OsLegend";
|
||||
import ToastyContainer from "@site/src/components/codes/ToastyContainer";
|
||||
import Content, { rightToc as contentToc } from "./_applications.mdx";
|
||||
import Content, { toc as contentToc } from "./_applications.mdx";
|
||||
|
||||
export const rightToc = contentToc;
|
||||
export const toc = contentToc;
|
||||
|
||||
<OsLegend />
|
||||
<ToastyContainer />
|
||||
|
|
|
@ -6,9 +6,9 @@ hide_title: true
|
|||
|
||||
import OsLegend from "@site/src/components/codes/OsLegend";
|
||||
import ToastyContainer from "@site/src/components/codes/ToastyContainer";
|
||||
import Content, { rightToc as contentToc } from "./_editing.mdx";
|
||||
import Content, { toc as contentToc } from "./_editing.mdx";
|
||||
|
||||
export const rightToc = contentToc;
|
||||
export const toc = contentToc;
|
||||
|
||||
<OsLegend />
|
||||
<ToastyContainer />
|
||||
|
|
|
@ -7,14 +7,14 @@ slug: ./
|
|||
|
||||
import OsLegend from "@site/src/components/codes/OsLegend";
|
||||
import ToastyContainer from "@site/src/components/codes/ToastyContainer";
|
||||
import Key, { rightToc as keyToc } from "./_keyboard-keypad.mdx";
|
||||
import Editing, { rightToc as editingToc } from "./_editing.mdx";
|
||||
import Media, { rightToc as mediaToc } from "./_media.mdx";
|
||||
import Applications, { rightToc as applicationsToc } from "./_applications.mdx";
|
||||
import InputAssist, { rightToc as inputAssistToc } from "./_input-assist.mdx";
|
||||
import Power, { rightToc as powerToc } from "./_power.mdx";
|
||||
import Key, { toc as keyToc } from "./_keyboard-keypad.mdx";
|
||||
import Editing, { toc as editingToc } from "./_editing.mdx";
|
||||
import Media, { toc as mediaToc } from "./_media.mdx";
|
||||
import Applications, { toc as applicationsToc } from "./_applications.mdx";
|
||||
import InputAssist, { toc as inputAssistToc } from "./_input-assist.mdx";
|
||||
import Power, { toc as powerToc } from "./_power.mdx";
|
||||
|
||||
export const rightToc = [
|
||||
export const toc = [
|
||||
...keyToc,
|
||||
...editingToc,
|
||||
...mediaToc,
|
||||
|
|
|
@ -6,9 +6,9 @@ hide_title: true
|
|||
|
||||
import OsLegend from "@site/src/components/codes/OsLegend";
|
||||
import ToastyContainer from "@site/src/components/codes/ToastyContainer";
|
||||
import Content, { rightToc as contentToc } from "./_input-assist.mdx";
|
||||
import Content, { toc as contentToc } from "./_input-assist.mdx";
|
||||
|
||||
export const rightToc = contentToc;
|
||||
export const toc = contentToc;
|
||||
|
||||
<OsLegend />
|
||||
<ToastyContainer />
|
||||
|
|
|
@ -6,9 +6,9 @@ hide_title: true
|
|||
|
||||
import OsLegend from "@site/src/components/codes/OsLegend";
|
||||
import ToastyContainer from "@site/src/components/codes/ToastyContainer";
|
||||
import Content, { rightToc as contentToc } from "./_keyboard-keypad.mdx";
|
||||
import Content, { toc as contentToc } from "./_keyboard-keypad.mdx";
|
||||
|
||||
export const rightToc = contentToc;
|
||||
export const toc = contentToc;
|
||||
|
||||
<OsLegend />
|
||||
<ToastyContainer />
|
||||
|
|
|
@ -6,9 +6,9 @@ hide_title: true
|
|||
|
||||
import OsLegend from "@site/src/components/codes/OsLegend";
|
||||
import ToastyContainer from "@site/src/components/codes/ToastyContainer";
|
||||
import Content, { rightToc as contentToc } from "./_media.mdx";
|
||||
import Content, { toc as contentToc } from "./_media.mdx";
|
||||
|
||||
export const rightToc = contentToc;
|
||||
export const toc = contentToc;
|
||||
|
||||
<OsLegend />
|
||||
<ToastyContainer />
|
||||
|
|
|
@ -6,9 +6,9 @@ hide_title: true
|
|||
|
||||
import OsLegend from "@site/src/components/codes/OsLegend";
|
||||
import ToastyContainer from "@site/src/components/codes/ToastyContainer";
|
||||
import Content, { rightToc as contentToc } from "./_power.mdx";
|
||||
import Content, { toc as contentToc } from "./_power.mdx";
|
||||
|
||||
export const rightToc = contentToc;
|
||||
export const toc = contentToc;
|
||||
|
||||
<OsLegend />
|
||||
<ToastyContainer />
|
||||
|
|
|
@ -318,7 +318,7 @@ To build firmwares for the ARM architecture (all supported MCUs/keyboards at thi
|
|||
export ZSDK_VERSION=0.11.4
|
||||
wget -q "https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v${ZSDK_VERSION}/zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" && \
|
||||
sh "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run" --quiet -- -d ~/.local/zephyr-sdk-${ZSDK_VERSION} && \
|
||||
rm "zephyr-toolchain-arm-\${ZSDK_VERSION}-setup.run"
|
||||
rm "zephyr-toolchain-arm-${ZSDK_VERSION}-setup.run"
|
||||
```
|
||||
|
||||
The installation will prompt with several questions about installation location, and creating a default `~/.zephyrrc` for you with various variables. The defaults should normally work as expected.
|
||||
|
@ -337,6 +337,12 @@ Since the Zephyr™ SDK is not available for Windows, we recommending following
|
|||
|
||||
Since the Zephyr™ SDK is not available for macOS, we recommending following the steps to install the [GNU ARM Embedded](https://docs.zephyrproject.org/2.3.0/getting_started/toolchain_3rd_party_x_compilers.html#gnu-arm-embedded).
|
||||
|
||||
The install command is:
|
||||
|
||||
```
|
||||
brew install --cask gcc-arm-embedded
|
||||
```
|
||||
|
||||
:::warning Security Controls Workaround
|
||||
|
||||
Please be sure to read the [additional setup instructions](https://docs.zephyrproject.org/2.3.0/getting_started/installation_mac.html#mac-gatekeeper) needed to address security controls found in macOS 10.15 Catalina and newer
|
||||
|
|
|
@ -82,7 +82,7 @@ Currently, ZMK only supports wireless split, but wired split is possible and we
|
|||
|
||||
### What bootloader does ZMK use?
|
||||
|
||||
ZMK isn’t designed for any particular bootloader, and supports flashing different boards with different flash utilities (e.g. OpenOCD, nrfjprog, etc.). So if you have any difficulties, please let us know on [Discord](https://zmkfirmware.dev/community/discord/invite)!
|
||||
ZMK isn’t designed for any particular bootloader, and supports flashing different boards with different flash utilities (e.g. OpenOCD, nrfjprog, etc.). So if you have any difficulties, please let us know on [Discord](https://zmk.dev/community/discord/invite)!
|
||||
|
||||
### Can I contribute?
|
||||
|
||||
|
@ -90,11 +90,11 @@ Of course! Please use the developer [documentation](/docs) to get started!
|
|||
|
||||
### I have an idea! What should I do?
|
||||
|
||||
Please join us on [Discord](https://zmkfirmware.dev/community/discord/invite) and discuss it with us!
|
||||
Please join us on [Discord](https://zmk.dev/community/discord/invite) and discuss it with us!
|
||||
|
||||
### I want to add a new keyboard! What should I do?
|
||||
|
||||
The exact process for the management of all the possible hardware is still being finalized, but any developer looking to contribute new keyboard definitions should chat with us on [Discord](https://zmkfirmware.dev/community/discord/invite) to get started.
|
||||
The exact process for the management of all the possible hardware is still being finalized, but any developer looking to contribute new keyboard definitions should chat with us on [Discord](https://zmk.dev/community/discord/invite) to get started.
|
||||
|
||||
### Does ZMK have a Code of Conduct?
|
||||
|
||||
|
|
|
@ -70,7 +70,7 @@ In this case, the `A` is actually a define for the raw HID keycode, to make keym
|
|||
For example of a binding that uses two parameters, you can see how "mod-tap" (`mt`) is bound:
|
||||
|
||||
```
|
||||
&mt LSHFT D
|
||||
&mt LSHIFT D
|
||||
```
|
||||
|
||||
Here, the first parameter is the set of modifiers that should be used for the "hold" behavior, and the second
|
||||
|
@ -94,7 +94,7 @@ The top two lines of most keymaps should include:
|
|||
|
||||
The first defines the nodes for all the available behaviors in ZMK, which will be referenced in the behavior bindings. This is how bindings like `&kp` can reference the key press behavior defined with an anchor name of `kp`.
|
||||
|
||||
The second include brings in the defines for all the keycodes (e.g. `A`, `N1`, `C_PLAY`) and the modifiers (e.g. `LSHFT`) used for various behavior bindings.
|
||||
The second include brings in the defines for all the keycodes (e.g. `A`, `N1`, `C_PLAY`) and the modifiers (e.g. `LSHIFT`) used for various behavior bindings.
|
||||
|
||||
### Root devicetree Node
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ In addition to the basic keyboard functionality, there is some initial support f
|
|||
- OLEDs
|
||||
- RGB Underglow
|
||||
|
||||
Until detailed documentation is available, feel free to ask questions about how these are supported in the [Discord server](https://zmkfirmware.dev/community/discord/invite).
|
||||
Until detailed documentation is available, feel free to ask questions about how these are supported in the [Discord server](https://zmk.dev/community/discord/invite).
|
||||
|
||||
## Contributing
|
||||
|
||||
|
|
|
@ -11,6 +11,9 @@ firmware built on the [Zephyr™ Project](https://zephyrproject.org/) Real Time
|
|||
|
||||
ZMK is currently missing some features found in other popular firmware. This table compares the features supported by ZMK, BlueMicro and QMK:
|
||||
|
||||
| Legend: | ✅ Supported | 🚧 Under Development | 💡 Planned |
|
||||
| :------ | :----------- | :------------------- | :--------- |
|
||||
|
||||
| **Feature** | ZMK | BlueMicro | QMK |
|
||||
| ------------------------------------------------------------------------------------------------------------------------- | :-: | :-------: | :-: |
|
||||
| Low Latency BLE Support | ✅ | ✅ | |
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
bindings = <
|
||||
&kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH
|
||||
&kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp QUOTE
|
||||
&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LC(A) &kp LC(C) &kp LC(V) &kp LC(X) &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL
|
||||
&kp LSHIFT &kp Z &kp X &kp C &kp V &kp B &kp LC(A) &kp LC(C) &kp LC(V) &kp LC(X) &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL
|
||||
&kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT
|
||||
>;
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
bindings = <
|
||||
&kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSLH
|
||||
&kp TAB &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp QUOTE
|
||||
&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LC(A) &kp LC(C) &kp LC(V) &kp LC(X) &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL
|
||||
&kp LSHIFT &kp Z &kp X &kp C &kp V &kp B &kp LC(A) &kp LC(C) &kp LC(V) &kp LC(X) &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RCTRL
|
||||
&kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC &kp RET &kp SPACE &kp TAB &kp BSPC &kp RALT
|
||||
>;
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ sidebar_title: Troubleshooting
|
|||
|
||||
### Summary
|
||||
|
||||
The following page provides suggestions for common errors that may occur during firmware compilation. If the information provided is insufficient to resolve the issue, feel free to seek out help from the [ZMK Discord](https://zmkfirmware.dev/community/discord/invite).
|
||||
The following page provides suggestions for common errors that may occur during firmware compilation. If the information provided is insufficient to resolve the issue, feel free to seek out help from the [ZMK Discord](https://zmk.dev/community/discord/invite).
|
||||
|
||||
### File Transfer Error
|
||||
|
||||
|
|
|
@ -68,21 +68,21 @@ values={[
|
|||
<TabItem value="curl">
|
||||
|
||||
```
|
||||
bash -c "$(curl -fsSL https://zmkfirmware.dev/setup.sh)"
|
||||
bash -c "$(curl -fsSL https://zmk.dev/setup.sh)"
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="wget">
|
||||
|
||||
```
|
||||
bash -c "$(wget https://zmkfirmware.dev/setup.sh -O -)" '' --wget
|
||||
bash -c "$(wget https://zmk.dev/setup.sh -O -)" '' --wget
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
<TabItem value="PowerShell">
|
||||
|
||||
```
|
||||
iex ((New-Object System.Net.WebClient).DownloadString('https://zmkfirmware.dev/setup.ps1'))
|
||||
iex ((New-Object System.Net.WebClient).DownloadString('https://zmk.dev/setup.ps1'))
|
||||
```
|
||||
|
||||
</TabItem>
|
||||
|
|
|
@ -3,7 +3,7 @@ const path = require("path");
|
|||
module.exports = {
|
||||
title: "ZMK Firmware",
|
||||
tagline: "Modern, open source keyboard firmware",
|
||||
url: "https://zmkfirmware.dev",
|
||||
url: "https://zmk.dev",
|
||||
baseUrl: "/",
|
||||
favicon: "img/favicon.ico",
|
||||
organizationName: "zmkfirmware", // Usually your GitHub org/user name.
|
||||
|
@ -70,7 +70,7 @@ module.exports = {
|
|||
{
|
||||
label: "Discord",
|
||||
href:
|
||||
(process.env.URL || "https://zmkfirmware.dev") +
|
||||
(process.env.URL || "https://zmk.dev") +
|
||||
"/community/discord/invite",
|
||||
},
|
||||
{
|
||||
|
|
|
@ -2,3 +2,13 @@
|
|||
from = "/community/discord/invite"
|
||||
to = "https://discord.gg/sycytVQ"
|
||||
status = 302
|
||||
|
||||
[[redirects]]
|
||||
from = "https://zmkfirmware.dev/*"
|
||||
to = "https://zmk.dev/:splat"
|
||||
force = true
|
||||
|
||||
[[redirects]]
|
||||
from = "https://www.zmkfirmware.dev/*"
|
||||
to = "https://www.zmk.dev/:splat"
|
||||
force = true
|
33130
docs/package-lock.json
generated
33130
docs/package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -14,17 +14,17 @@
|
|||
"prettier:format": "prettier --write ."
|
||||
},
|
||||
"dependencies": {
|
||||
"@docusaurus/core": "^2.0.0-alpha.66",
|
||||
"@docusaurus/preset-classic": "^2.0.0-alpha.66",
|
||||
"@docusaurus/core": "^2.0.0-beta.1",
|
||||
"@docusaurus/preset-classic": "^2.0.0-beta.1",
|
||||
"@fortawesome/fontawesome-svg-core": "^1.2.32",
|
||||
"@fortawesome/free-solid-svg-icons": "^5.15.3",
|
||||
"@fortawesome/react-fontawesome": "^0.1.14",
|
||||
"classnames": "^2.2.6",
|
||||
"react": "^16.14.0",
|
||||
"react": "^17.0.2",
|
||||
"react-async": "^10.0.1",
|
||||
"react-copy-to-clipboard": "^5.0.2",
|
||||
"react-dom": "^16.14.0",
|
||||
"react-toastify": "^6.0.9",
|
||||
"react-copy-to-clipboard": "^5.0.3",
|
||||
"react-dom": "^17.0.2",
|
||||
"react-toastify": "^7.0.4",
|
||||
"web-tree-sitter": "^0.17.1"
|
||||
},
|
||||
"browserslist": {
|
||||
|
@ -40,12 +40,12 @@
|
|||
]
|
||||
},
|
||||
"devDependencies": {
|
||||
"eslint": "^7.25.0",
|
||||
"eslint": "^7.29.0",
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"eslint-plugin-mdx": "^1.13.0",
|
||||
"eslint-plugin-react": "^7.23.2",
|
||||
"null-loader": "^3.0.0",
|
||||
"prettier": "2.1.2",
|
||||
"string-replace-loader": "2.3"
|
||||
"null-loader": "^4.0.0",
|
||||
"prettier": "2.3.1",
|
||||
"string-replace-loader": "^3.0.0"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
import React from "react";
|
||||
import PropTypes from "prop-types";
|
||||
|
||||
const specialCharactersRegex = /(?:^|\s)((?:&(?:(?:\w+)|(?:#\d+));)|[_]|[^\w\s])(?:\s*\[([^[\]]+?)\])/g;
|
||||
const specialCharactersRegex =
|
||||
/(?:^|\s)((?:&(?:(?:\w+)|(?:#\d+));)|[_]|[^\w\s])(?:\s*\[([^[\]]+?)\])/g;
|
||||
|
||||
function renderSpecialCharacters(description) {
|
||||
const matches = Array.from(description.matchAll(specialCharactersRegex));
|
||||
|
|
|
@ -4085,7 +4085,7 @@ export default [
|
|||
footnotes: {},
|
||||
},
|
||||
{
|
||||
names: ["LEFT_SHIFT", "LSHFT", "LS(code)"],
|
||||
names: ["LEFT_SHIFT", "LSHIFT", "LSHFT", "LS(code)"],
|
||||
description: "Left Shift ⇧",
|
||||
context: "Keyboard",
|
||||
clarify: false,
|
||||
|
@ -4179,7 +4179,7 @@ export default [
|
|||
footnotes: {},
|
||||
},
|
||||
{
|
||||
names: ["RIGHT_SHIFT", "RSHFT", "RS(code)"],
|
||||
names: ["RIGHT_SHIFT", "RSHIFT", "RSHFT", "RS(code)"],
|
||||
description: "Right Shift ⇧",
|
||||
context: "Keyboard",
|
||||
clarify: false,
|
||||
|
|
|
@ -56,9 +56,9 @@ export const Codes = {
|
|||
ATSN: "AT",
|
||||
BANG: "EXCL",
|
||||
LCTL: "LCTRL",
|
||||
LSFT: "LSHFT",
|
||||
LSFT: "LSHIFT",
|
||||
RCTL: "RCTRL",
|
||||
RSFT: "RSHFT",
|
||||
RSFT: "RSHIFT",
|
||||
M_NEXT: "C_NEXT",
|
||||
M_PREV: "C_PREV",
|
||||
M_STOP: "C_STOP",
|
||||
|
@ -69,11 +69,11 @@ export const Codes = {
|
|||
M_VOLD: "C_VOL_DN",
|
||||
GUI: "K_CMENU",
|
||||
MOD_LCTL: "LCTRL",
|
||||
MOD_LSFT: "LSHFT",
|
||||
MOD_LSFT: "LSHIFT",
|
||||
MOD_LALT: "LALT",
|
||||
MOD_LGUI: "LGUI",
|
||||
MOD_RCTL: "RCTRL",
|
||||
MOD_RSFT: "RSHFT",
|
||||
MOD_RSFT: "RSHIFT",
|
||||
MOD_RALT: "RALT",
|
||||
MOD_RGUI: "RGUI",
|
||||
};
|
||||
|
|
|
@ -29,8 +29,11 @@ module.exports = function () {
|
|||
return {
|
||||
// web-tree-sitter tries to import "fs", which can be ignored.
|
||||
// https://github.com/tree-sitter/tree-sitter/issues/466
|
||||
node: {
|
||||
fs: "empty",
|
||||
resolve: {
|
||||
fallback: {
|
||||
fs: false,
|
||||
path: false,
|
||||
},
|
||||
},
|
||||
module: { rules },
|
||||
};
|
||||
|
|
|
@ -30,10 +30,8 @@ function PowerProfiler() {
|
|||
const { value: psuType, bind: bindPsuType } = useInput("");
|
||||
const { value: outputV, bind: bindOutputV } = useInput(3.3);
|
||||
const { value: quiescentMicroA, bind: bindQuiescentMicroA } = useInput(55);
|
||||
const {
|
||||
value: otherQuiescentMicroA,
|
||||
bind: bindOtherQuiescentMicroA,
|
||||
} = useInput(0);
|
||||
const { value: otherQuiescentMicroA, bind: bindOtherQuiescentMicroA } =
|
||||
useInput(0);
|
||||
const { value: efficiency, bind: bindEfficiency } = useInput(0.9);
|
||||
|
||||
const { value: bondedQty, bind: bindBondedQty } = useInput(1);
|
||||
|
|
Loading…
Add table
Reference in a new issue