Merge branch 'zmkfirmware:main' into main
This commit is contained in:
commit
3927bcf065
123 changed files with 3118 additions and 163 deletions
2
.github/pull_request_template.md
vendored
2
.github/pull_request_template.md
vendored
|
@ -8,4 +8,6 @@
|
||||||
- [ ] Keymaps do not use deprecated key defines (Check using the [upgrader tool](https://zmk.dev/docs/codes/keymap-upgrader))
|
- [ ] Keymaps do not use deprecated key defines (Check using the [upgrader tool](https://zmk.dev/docs/codes/keymap-upgrader))
|
||||||
- [ ] `&pro_micro` used in favor of `&pro_micro_d/a` if applicable
|
- [ ] `&pro_micro` used in favor of `&pro_micro_d/a` if applicable
|
||||||
- [ ] If split, no name added for the right/peripheral half
|
- [ ] If split, no name added for the right/peripheral half
|
||||||
|
- [ ] Kconfig.defconfig file correctly wraps *all* configuration in conditional on the shield symbol
|
||||||
- [ ] `.conf` file has optional extra features commented out
|
- [ ] `.conf` file has optional extra features commented out
|
||||||
|
- [ ] Keyboard/PCB is part of a shipped group buy or is generally available in stock to purchase (OSH/personal projects without general availability should create a zmk-config repo instead)
|
||||||
|
|
3
.vscode/settings.json
vendored
3
.vscode/settings.json
vendored
|
@ -2,5 +2,6 @@
|
||||||
"files.associations": {
|
"files.associations": {
|
||||||
"*.overlay": "dts",
|
"*.overlay": "dts",
|
||||||
"*.keymap": "dts"
|
"*.keymap": "dts"
|
||||||
}
|
},
|
||||||
|
"python.formatting.provider": "black"
|
||||||
}
|
}
|
|
@ -47,6 +47,7 @@ if ((NOT CONFIG_ZMK_SPLIT) OR CONFIG_ZMK_SPLIT_BLE_ROLE_CENTRAL)
|
||||||
target_sources(app PRIVATE src/behaviors/behavior_reset.c)
|
target_sources(app PRIVATE src/behaviors/behavior_reset.c)
|
||||||
target_sources(app PRIVATE src/behaviors/behavior_hold_tap.c)
|
target_sources(app PRIVATE src/behaviors/behavior_hold_tap.c)
|
||||||
target_sources(app PRIVATE src/behaviors/behavior_sticky_key.c)
|
target_sources(app PRIVATE src/behaviors/behavior_sticky_key.c)
|
||||||
|
target_sources(app PRIVATE src/behaviors/behavior_caps_word.c)
|
||||||
target_sources(app PRIVATE src/behaviors/behavior_momentary_layer.c)
|
target_sources(app PRIVATE src/behaviors/behavior_momentary_layer.c)
|
||||||
target_sources(app PRIVATE src/behaviors/behavior_mod_morph.c)
|
target_sources(app PRIVATE src/behaviors/behavior_mod_morph.c)
|
||||||
target_sources(app PRIVATE src/behaviors/behavior_outputs.c)
|
target_sources(app PRIVATE src/behaviors/behavior_outputs.c)
|
||||||
|
|
8
app/boards/arm/bt60/CMakeLists.txt
Normal file
8
app/boards/arm/bt60/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 0x26000
|
||||||
|
-f 0xADA52840
|
||||||
|
-o ${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.uf2
|
||||||
|
${PROJECT_BINARY_DIR}/${CONFIG_KERNEL_BIN_NAME}.bin
|
||||||
|
)
|
7
app/boards/arm/bt60/Kconfig
Normal file
7
app/boards/arm/bt60/Kconfig
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
config BOARD_ENABLE_DCDC
|
||||||
|
bool "Enable DCDC mode"
|
||||||
|
select SOC_DCDC_NRF52X
|
||||||
|
default y
|
||||||
|
depends on (BOARD_BT60_V1_HS || BOARD_BT60_V1)
|
12
app/boards/arm/bt60/Kconfig.board
Normal file
12
app/boards/arm/bt60/Kconfig.board
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# BT60 board configuration
|
||||||
|
|
||||||
|
# Copyright (c) 2021 Polarity Works
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
config BOARD_BT60_V1
|
||||||
|
bool "bt60"
|
||||||
|
depends on SOC_NRF52840_QIAA
|
||||||
|
|
||||||
|
config BOARD_BT60_V1_HS
|
||||||
|
bool "bt60 hotswap"
|
||||||
|
depends on SOC_NRF52840_QIAA
|
34
app/boards/arm/bt60/Kconfig.defconfig
Normal file
34
app/boards/arm/bt60/Kconfig.defconfig
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
# Copyright (c) 2021 Polarity Works
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
if BOARD_BT60_V1_HS || BOARD_BT60_V1
|
||||||
|
|
||||||
|
config BOARD
|
||||||
|
default "bt60"
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
config ZMK_KEYBOARD_NAME
|
||||||
|
default "BT60"
|
||||||
|
|
||||||
|
endif # BOARD_BT60
|
5
app/boards/arm/bt60/board.cmake
Normal file
5
app/boards/arm/bt60/board.cmake
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
board_runner_args(nrfjprog "--nrf-family=NRF52" "--softreset")
|
||||||
|
include(${ZEPHYR_BASE}/boards/common/blackmagicprobe.board.cmake)
|
||||||
|
include(${ZEPHYR_BASE}/boards/common/nrfjprog.board.cmake)
|
128
app/boards/arm/bt60/bt60.dtsi
Normal file
128
app/boards/arm/bt60/bt60.dtsi
Normal file
|
@ -0,0 +1,128 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 Polarity Works
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
#include <nordic/nrf52840_qiaa.dtsi>
|
||||||
|
#include <dt-bindings/zmk/matrix_transform.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "BT60";
|
||||||
|
compatible = "polarityworks,bt60";
|
||||||
|
|
||||||
|
chosen {
|
||||||
|
zephyr,code-partition = &code_partition;
|
||||||
|
zephyr,sram = &sram0;
|
||||||
|
zephyr,flash = &flash0;
|
||||||
|
zmk,kscan = &kscan0;
|
||||||
|
zmk,matrix_transform = &default_transform;
|
||||||
|
};
|
||||||
|
|
||||||
|
sensors {
|
||||||
|
compatible = "zmk,keymap-sensors";
|
||||||
|
sensors = <&left_encoder>;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
left_encoder: encoder_left {
|
||||||
|
compatible = "alps,ec11";
|
||||||
|
label = "LEFT_ENCODER";
|
||||||
|
a-gpios = <&gpio1 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>;
|
||||||
|
b-gpios = <&gpio1 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>;
|
||||||
|
resolution = <4>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
leds {
|
||||||
|
compatible = "gpio-leds";
|
||||||
|
blue_led: led_0 {
|
||||||
|
gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>;
|
||||||
|
label = "Blue LED";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
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";
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c0 {
|
||||||
|
compatible = "nordic,nrf-twi";
|
||||||
|
sda-pin = <17>;
|
||||||
|
scl-pin = <20>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&uart0 {
|
||||||
|
compatible = "nordic,nrf-uarte";
|
||||||
|
tx-pin = <6>;
|
||||||
|
rx-pin = <8>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&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 = "softdevice";
|
||||||
|
reg = <0x00000000 0x00026000>;
|
||||||
|
};
|
||||||
|
code_partition: partition@26000 {
|
||||||
|
label = "code_partition";
|
||||||
|
reg = <0x00026000 0x000c6000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The flash starting at 0x000ec000 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@ec000 {
|
||||||
|
label = "storage";
|
||||||
|
reg = <0x000ec000 0x00008000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
boot_partition: partition@f4000 {
|
||||||
|
label = "adafruit_boot";
|
||||||
|
reg = <0x000f4000 0x0000c000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
113
app/boards/arm/bt60/bt60_v1.dts
Normal file
113
app/boards/arm/bt60/bt60_v1.dts
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 Polarity Works
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
#include "bt60.dtsi"
|
||||||
|
|
||||||
|
|
||||||
|
/ {
|
||||||
|
chosen {
|
||||||
|
zmk,kscan = &kscan0;
|
||||||
|
zmk,matrix_transform = &ansi_transform;
|
||||||
|
};
|
||||||
|
|
||||||
|
ansi_transform: keymap_transform_0 {
|
||||||
|
compatible = "zmk,matrix-transform";
|
||||||
|
columns = <15>;
|
||||||
|
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,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,11) RC(3,13)
|
||||||
|
RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13) RC(4,14)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
hhkb_transform: keymap_transform_1 {
|
||||||
|
compatible = "zmk,matrix-transform";
|
||||||
|
columns = <15>;
|
||||||
|
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(0,14)
|
||||||
|
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,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,11) RC(3,12) RC(3,14)
|
||||||
|
RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
iso_transform: keymap_transform_2 {
|
||||||
|
compatible = "zmk,matrix-transform";
|
||||||
|
columns = <15>;
|
||||||
|
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(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,12) 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,11) RC(3,12)
|
||||||
|
RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
all_1u_transform: keymap_transform_3 {
|
||||||
|
compatible = "zmk,matrix-transform";
|
||||||
|
columns = <15>;
|
||||||
|
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,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,11) RC(3,12) RC(3,13) RC(3,14)
|
||||||
|
RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13) RC(4,14)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
split_transform: keymap_transform_4 {
|
||||||
|
compatible = "zmk,matrix-transform";
|
||||||
|
columns = <15>;
|
||||||
|
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(0,14)
|
||||||
|
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,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,11) RC(3,12) RC(3,14)
|
||||||
|
RC(4,0) RC(4,1) RC(4,2) RC(4,6) RC(4,10) RC(4,11) RC(4,12) RC(4,13)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
kscan0: kscan_0 {
|
||||||
|
compatible = "zmk,kscan-gpio-matrix";
|
||||||
|
label = "KSCAN";
|
||||||
|
diode-direction = "col2row";
|
||||||
|
|
||||||
|
col-gpios
|
||||||
|
= <&gpio1 13 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio1 10 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio1 11 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio1 15 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 3 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 2 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 28 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 29 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 30 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 31 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 5 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 7 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio1 9 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 12 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 23 GPIO_ACTIVE_HIGH>
|
||||||
|
;
|
||||||
|
|
||||||
|
row-gpios
|
||||||
|
= <&gpio1 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&gpio0 22 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&gpio0 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&gpio0 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&gpio1 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
;
|
||||||
|
};
|
||||||
|
};
|
180
app/boards/arm/bt60/bt60_v1.keymap
Normal file
180
app/boards/arm/bt60/bt60_v1.keymap
Normal file
|
@ -0,0 +1,180 @@
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <dt-bindings/zmk/bt.h>
|
||||||
|
|
||||||
|
#define ANSI true
|
||||||
|
//#define HHKB true
|
||||||
|
//#define ISO true
|
||||||
|
//#define ALL_1U true
|
||||||
|
//#define SPLIT_BKSP_RSHFT true
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/ {
|
||||||
|
chosen {
|
||||||
|
#ifdef ANSI
|
||||||
|
zmk,matrix_transform = &ansi_transform;
|
||||||
|
#elif defined(HHKB)
|
||||||
|
zmk,matrix_transform = &hhkb_transform;
|
||||||
|
#elif defined(ISO)
|
||||||
|
zmk,matrix_transform = &iso_transform;
|
||||||
|
#elif defined(ALL_1U)
|
||||||
|
zmk,matrix_transform = &all_1u_transform;
|
||||||
|
#else
|
||||||
|
zmk,matrix_transform = &split_transform;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
keymap {
|
||||||
|
compatible = "zmk,keymap";
|
||||||
|
#ifdef ANSI
|
||||||
|
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 | 1 | MENU | CTRL |
|
||||||
|
// ------------------------------------------------------------------------------------------
|
||||||
|
bindings = <
|
||||||
|
&kp ESC &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 &mo 1 &kp K_CMENU &kp RCTRL &bt BT_CLR
|
||||||
|
>;
|
||||||
|
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>;
|
||||||
|
};
|
||||||
|
raise {
|
||||||
|
// ------------------------------------------------------------------------------------------
|
||||||
|
// |GRAVE| F1 | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 | DEL |
|
||||||
|
// | TAB | Q | UP | E | R | T | Y | U | INS | O |PSCRN|SLCK |PSEBRK| RESET |
|
||||||
|
// | CAPS |LEFT |DOWN |RIGHT| F | G | H | J | K | L |HOME |PGUP | BOOTLOADER |
|
||||||
|
// | PREV |VOLUP |VOLDN|MUTE | V | B | N | M | , | END | PGDN | NEXT |
|
||||||
|
// | CTL | WIN | ALT | SPACE | ALT | 1 | MENU | BT_CLR |
|
||||||
|
// ------------------------------------------------------------------------------------------
|
||||||
|
bindings = <
|
||||||
|
&kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL
|
||||||
|
&trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &reset
|
||||||
|
&trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader
|
||||||
|
&kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT
|
||||||
|
&bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR &trans
|
||||||
|
>;
|
||||||
|
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>;
|
||||||
|
};
|
||||||
|
#elif defined(HHKB)
|
||||||
|
default_layer {
|
||||||
|
// ------------------------------------------------------------------------------------------
|
||||||
|
// | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = | \ | ` |
|
||||||
|
// | TAB | Q | W | E | R | T | Y | U | I | O | P | [ | ] | BSPC |
|
||||||
|
// | CTRL | A | S | D | F | G | H | J | K | L | ; | ' | ENTER |
|
||||||
|
// | SHIFT | Z | X | C | V | B | N | M | , | . | / | SHIFT | 1 |
|
||||||
|
// | CAPS | ALT | WIN | SPACE | WIN | ALT | CTRL |
|
||||||
|
// ------------------------------------------------------------------------------------------
|
||||||
|
bindings = <
|
||||||
|
&kp ESC &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 BSLH &kp GRAVE
|
||||||
|
&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 BSPC
|
||||||
|
&kp LCTRL &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 &mo 1
|
||||||
|
&kp LCTRL &kp LALT &kp LGUI &kp SPACE &kp RGUI &kp RALT &kp RCTRL
|
||||||
|
>;
|
||||||
|
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>;
|
||||||
|
};
|
||||||
|
raise {
|
||||||
|
bindings = <
|
||||||
|
&trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp INS &kp DEL
|
||||||
|
&kp CLCK &bt BT_PRV &bt BT_NXT &bt BT_CLR &trans &trans &trans &trans &trans &trans &trans &kp UP &trans &reset
|
||||||
|
&trans &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &trans &kp LEFT &kp RIGHT &trans
|
||||||
|
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp DOWN &trans &trans
|
||||||
|
&trans &trans &trans &bootloader &trans &trans &trans
|
||||||
|
>;
|
||||||
|
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>;
|
||||||
|
};
|
||||||
|
#elif defined(ISO)
|
||||||
|
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 | 1 | MENU | CTRL |
|
||||||
|
// ------------------------------------------------------------------------------------------
|
||||||
|
bindings = <
|
||||||
|
&kp ESC &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 CLCK &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp NON_US_HASH &kp RET
|
||||||
|
&kp LSHFT &kp NON_US_BSLH &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 &mo 1 &kp K_CMENU &kp RCTRL
|
||||||
|
>;
|
||||||
|
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>;
|
||||||
|
};
|
||||||
|
raise {
|
||||||
|
bindings = <
|
||||||
|
&kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL
|
||||||
|
&reset &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK
|
||||||
|
&trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &trans &bootloader
|
||||||
|
&kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT
|
||||||
|
&bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR
|
||||||
|
>;
|
||||||
|
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>;
|
||||||
|
};
|
||||||
|
#elif defined(ALL_1U)
|
||||||
|
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 | , | . | / | SHFT | UP | 1 |
|
||||||
|
// | CTL | WIN | ALT | SPACE | ALT | CTRL | LEFT | DOWN | RIGHT |
|
||||||
|
// ------------------------------------------------------------------------------------------
|
||||||
|
bindings = <
|
||||||
|
&kp ESC &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 UP &mo 1
|
||||||
|
&kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT
|
||||||
|
>;
|
||||||
|
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>;
|
||||||
|
};
|
||||||
|
raise {
|
||||||
|
bindings = <
|
||||||
|
&kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp F1
|
||||||
|
&trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &reset
|
||||||
|
&trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader
|
||||||
|
&kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT
|
||||||
|
&bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &trans &bt BT_CLR
|
||||||
|
>;
|
||||||
|
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>;
|
||||||
|
};
|
||||||
|
#else
|
||||||
|
default_layer {
|
||||||
|
// ------------------------------------------------------------------------------------------
|
||||||
|
// | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | - | = |BKSP| DEL |
|
||||||
|
// | 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 | 1 |
|
||||||
|
// | CTL | WIN | ALT | SPACE | ALT | 1 | CTRL |
|
||||||
|
// ------------------------------------------------------------------------------------------
|
||||||
|
bindings = <
|
||||||
|
&kp ESC &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 DEL
|
||||||
|
&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 &mo 1
|
||||||
|
&kp LCTRL &kp LGUI &kp LALT &kp SPACE &kp RALT &kp RGUI &kp C_MENU &kp RCTRL
|
||||||
|
>;
|
||||||
|
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>;
|
||||||
|
};
|
||||||
|
raise {
|
||||||
|
bindings = <
|
||||||
|
&kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL &trans
|
||||||
|
&trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &reset
|
||||||
|
&trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader
|
||||||
|
&kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT &trans
|
||||||
|
&bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR
|
||||||
|
>;
|
||||||
|
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
};
|
15
app/boards/arm/bt60/bt60_v1.yaml
Normal file
15
app/boards/arm/bt60/bt60_v1.yaml
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
identifier: bt60_v1
|
||||||
|
name: BT60 V1 Soldered
|
||||||
|
type: mcu
|
||||||
|
arch: arm
|
||||||
|
toolchain:
|
||||||
|
- zephyr
|
||||||
|
- gnuarmemb
|
||||||
|
- xtools
|
||||||
|
supported:
|
||||||
|
- adc
|
||||||
|
- usb_device
|
||||||
|
- ble
|
||||||
|
- ieee802154
|
||||||
|
- pwm
|
||||||
|
- watchdog
|
12
app/boards/arm/bt60/bt60_v1.zmk.yml
Normal file
12
app/boards/arm/bt60/bt60_v1.zmk.yml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
file_format: "1"
|
||||||
|
id: bt60_v1
|
||||||
|
name: BT60 V1 Soldered
|
||||||
|
type: board
|
||||||
|
arch: arm
|
||||||
|
features:
|
||||||
|
- keys
|
||||||
|
- encoder
|
||||||
|
outputs:
|
||||||
|
- usb
|
||||||
|
- ble
|
||||||
|
url: https://polarityworks.com
|
24
app/boards/arm/bt60/bt60_v1_defconfig
Normal file
24
app/boards/arm/bt60/bt60_v1_defconfig
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
CONFIG_SOC_SERIES_NRF52X=y
|
||||||
|
CONFIG_SOC_NRF52840_QIAA=y
|
||||||
|
CONFIG_BOARD_BT60_V1=y
|
||||||
|
|
||||||
|
# Enable MPU
|
||||||
|
CONFIG_ARM_MPU=y
|
||||||
|
|
||||||
|
# enable GPIO
|
||||||
|
CONFIG_GPIO=y
|
||||||
|
|
||||||
|
# encoder
|
||||||
|
CONFIG_EC11=y
|
||||||
|
CONFIG_EC11_TRIGGER_GLOBAL_THREAD=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
|
61
app/boards/arm/bt60/bt60_v1_hs.dts
Normal file
61
app/boards/arm/bt60/bt60_v1_hs.dts
Normal file
|
@ -0,0 +1,61 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 Polarity Works
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
#include "bt60.dtsi"
|
||||||
|
|
||||||
|
|
||||||
|
/ {
|
||||||
|
chosen {
|
||||||
|
zmk,kscan = &kscan0;
|
||||||
|
zmk,matrix_transform = &default_transform;
|
||||||
|
};
|
||||||
|
|
||||||
|
default_transform: keymap_transform_0 {
|
||||||
|
compatible = "zmk,matrix-transform";
|
||||||
|
columns = <15>;
|
||||||
|
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(2,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,12)
|
||||||
|
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,11)
|
||||||
|
RC(4,0) RC(4,1) RC(4,2) RC(4,5) RC(4,8) RC(4,9) RC(4,10) RC(4,11)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
kscan0: kscan_0 {
|
||||||
|
compatible = "zmk,kscan-gpio-matrix";
|
||||||
|
label = "KSCAN";
|
||||||
|
diode-direction = "col2row";
|
||||||
|
|
||||||
|
col-gpios
|
||||||
|
= <&gpio1 11 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio1 10 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio1 13 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio1 15 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 3 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 2 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 28 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 29 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 30 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 31 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 5 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 7 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio1 9 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 12 GPIO_ACTIVE_HIGH>
|
||||||
|
;
|
||||||
|
|
||||||
|
row-gpios
|
||||||
|
= <&gpio1 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&gpio0 22 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&gpio0 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&gpio0 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&gpio0 23 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
;
|
||||||
|
};
|
||||||
|
};
|
37
app/boards/arm/bt60/bt60_v1_hs.keymap
Normal file
37
app/boards/arm/bt60/bt60_v1_hs.keymap
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/keys.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 | DEL
|
||||||
|
// | 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 | 1 | MENU | CTRL |
|
||||||
|
// ------------------------------------------------------------------------------------------
|
||||||
|
bindings = <
|
||||||
|
&kp ESC &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 &bt BT_CLR
|
||||||
|
&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 &mo 1 &kp K_CMENU &kp RCTRL
|
||||||
|
>;
|
||||||
|
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>;
|
||||||
|
};
|
||||||
|
raise {
|
||||||
|
bindings = <
|
||||||
|
&kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp DEL &trans
|
||||||
|
&trans &trans &kp UP &trans &trans &trans &trans &trans &kp INS &trans &kp PSCRN &kp SLCK &kp PAUSE_BREAK &reset
|
||||||
|
&trans &kp LEFT &kp DOWN &kp RIGHT &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_UP &bootloader
|
||||||
|
&kp C_PREV &kp C_VOL_DN &kp C_VOL_UP &kp C_MUTE &trans &trans &trans &trans &trans &kp END &kp PG_DN &kp C_NEXT
|
||||||
|
&bt BT_PRV &bt BT_NXT &trans &trans &trans &trans &trans &bt BT_CLR
|
||||||
|
>;
|
||||||
|
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
15
app/boards/arm/bt60/bt60_v1_hs.yaml
Normal file
15
app/boards/arm/bt60/bt60_v1_hs.yaml
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
identifier: bt60_v1_hs
|
||||||
|
name: BT60 V1 Hotswap
|
||||||
|
type: mcu
|
||||||
|
arch: arm
|
||||||
|
toolchain:
|
||||||
|
- zephyr
|
||||||
|
- gnuarmemb
|
||||||
|
- xtools
|
||||||
|
supported:
|
||||||
|
- adc
|
||||||
|
- usb_device
|
||||||
|
- ble
|
||||||
|
- ieee802154
|
||||||
|
- pwm
|
||||||
|
- watchdog
|
12
app/boards/arm/bt60/bt60_v1_hs.zmk.yml
Normal file
12
app/boards/arm/bt60/bt60_v1_hs.zmk.yml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
file_format: "1"
|
||||||
|
id: bt60_v1_hs
|
||||||
|
name: BT60 V1 Hotswap
|
||||||
|
type: board
|
||||||
|
arch: arm
|
||||||
|
features:
|
||||||
|
- keys
|
||||||
|
- encoder
|
||||||
|
outputs:
|
||||||
|
- usb
|
||||||
|
- ble
|
||||||
|
url: https://polarityworks.com
|
24
app/boards/arm/bt60/bt60_v1_hs_defconfig
Normal file
24
app/boards/arm/bt60/bt60_v1_hs_defconfig
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
CONFIG_SOC_SERIES_NRF52X=y
|
||||||
|
CONFIG_SOC_NRF52840_QIAA=y
|
||||||
|
CONFIG_BOARD_BT60_V1_HS=y
|
||||||
|
|
||||||
|
# Enable MPU
|
||||||
|
CONFIG_ARM_MPU=y
|
||||||
|
|
||||||
|
# enable GPIO
|
||||||
|
CONFIG_GPIO=y
|
||||||
|
|
||||||
|
# encoder
|
||||||
|
CONFIG_EC11=y
|
||||||
|
CONFIG_EC11_TRIGGER_GLOBAL_THREAD=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
|
|
@ -3,5 +3,5 @@
|
||||||
board_runner_args(dfu-util "--pid=0483:df11" "--alt=0" "--dfuse")
|
board_runner_args(dfu-util "--pid=0483:df11" "--alt=0" "--dfuse")
|
||||||
board_runner_args(jlink "--device=STM32F303CC" "--speed=4000")
|
board_runner_args(jlink "--device=STM32F303CC" "--speed=4000")
|
||||||
|
|
||||||
include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)
|
include(${ZEPHYR_BASE}/boards/common/dfu-util.board.cmake)
|
||||||
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
|
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
|
||||||
|
|
|
@ -29,7 +29,8 @@
|
||||||
ext-power {
|
ext-power {
|
||||||
compatible = "zmk,ext-power-generic";
|
compatible = "zmk,ext-power-generic";
|
||||||
label = "EXT_POWER";
|
label = "EXT_POWER";
|
||||||
control-gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
|
control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
|
||||||
|
init-delay-ms = <50>;
|
||||||
};
|
};
|
||||||
|
|
||||||
vbatt {
|
vbatt {
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
compatible = "zmk,ext-power-generic";
|
compatible = "zmk,ext-power-generic";
|
||||||
label = "EXT_POWER";
|
label = "EXT_POWER";
|
||||||
control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
|
control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
|
||||||
init-delay-ms = <10>;
|
init-delay-ms = <50>;
|
||||||
};
|
};
|
||||||
|
|
||||||
vbatt {
|
vbatt {
|
||||||
|
|
8
app/boards/arm/s40nc/CMakeLists.txt
Normal file
8
app/boards/arm/s40nc/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
|
||||||
|
)
|
6
app/boards/arm/s40nc/Kconfig.board
Normal file
6
app/boards/arm/s40nc/Kconfig.board
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
config BOARD_S40NC
|
||||||
|
bool "S40NC"
|
||||||
|
depends on SOC_NRF52840_QIAA
|
31
app/boards/arm/s40nc/Kconfig.defconfig
Normal file
31
app/boards/arm/s40nc/Kconfig.defconfig
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
if BOARD_S40NC
|
||||||
|
|
||||||
|
config ZMK_KEYBOARD_NAME
|
||||||
|
default "S40NC"
|
||||||
|
|
||||||
|
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_S40NC
|
9
app/boards/arm/s40nc/README.md
Normal file
9
app/boards/arm/s40nc/README.md
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# S40NC
|
||||||
|

|
||||||
|
|
||||||
|
Shorty40NoCordy (S40NC) is a limited run 40% bluetooth keyboard originally made and sold by MechWild.
|
||||||
|
|
||||||
|
## Building S40NC ZMK firmware
|
||||||
|
```
|
||||||
|
west build -p -b s40nc
|
||||||
|
```
|
7
app/boards/arm/s40nc/board.cmake
Normal file
7
app/boards/arm/s40nc/board.cmake
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
|
# 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)
|
139
app/boards/arm/s40nc/s40nc.dts
Normal file
139
app/boards/arm/s40nc/s40nc.dts
Normal file
|
@ -0,0 +1,139 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
#include <nordic/nrf52840_qiaa.dtsi>
|
||||||
|
#include <dt-bindings/zmk/matrix_transform.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "S40NC";
|
||||||
|
compatible = "s40nc";
|
||||||
|
|
||||||
|
chosen {
|
||||||
|
zephyr,code-partition = &code_partition;
|
||||||
|
zephyr,sram = &sram0;
|
||||||
|
zephyr,flash = &flash0;
|
||||||
|
zmk,kscan = &kscan0;
|
||||||
|
zmk,matrix_transform = &default_transform;
|
||||||
|
};
|
||||||
|
|
||||||
|
default_transform: keymap_transform_0 {
|
||||||
|
compatible = "zmk,matrix-transform";
|
||||||
|
columns = <12>;
|
||||||
|
rows = <4>;
|
||||||
|
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(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,11)
|
||||||
|
RC(2,0) 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(3,0) RC(3,1) RC(3,2) RC(3,4) RC(3,6) RC(3,8) RC(3,9) RC(3,10) RC(3,11)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
kscan0: kscan {
|
||||||
|
compatible = "zmk,kscan-gpio-matrix";
|
||||||
|
label = "KSCAN";
|
||||||
|
|
||||||
|
diode-direction = "col2row";
|
||||||
|
row-gpios
|
||||||
|
= <&gpio1 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&gpio1 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&gpio0 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&gpio0 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
;
|
||||||
|
col-gpios
|
||||||
|
= <&gpio1 2 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio1 1 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio1 3 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio1 0 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 22 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio1 15 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 3 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 2 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 28 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 29 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 30 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&gpio0 31 GPIO_ACTIVE_HIGH>
|
||||||
|
;
|
||||||
|
};
|
||||||
|
|
||||||
|
leds {
|
||||||
|
compatible = "gpio-leds";
|
||||||
|
blue_led: led_0 {
|
||||||
|
gpios = <&gpio0 21 GPIO_ACTIVE_HIGH>;
|
||||||
|
label = "Blue LED";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
vbatt {
|
||||||
|
compatible = "zmk,battery-voltage-divider";
|
||||||
|
label = "BATTERY";
|
||||||
|
io-channels = <&adc 2>;
|
||||||
|
output-ohms = <2000000>;
|
||||||
|
full-ohms = <(2000000 + 820000)>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&adc {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpiote {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio1 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&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>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
58
app/boards/arm/s40nc/s40nc.keymap
Normal file
58
app/boards/arm/s40nc/s40nc.keymap
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <dt-bindings/zmk/bt.h>
|
||||||
|
#include <dt-bindings/zmk/outputs.h>
|
||||||
|
|
||||||
|
#define DEFAULT 0
|
||||||
|
#define LOWER 1
|
||||||
|
#define RAISE 2
|
||||||
|
#define CONTROL 3
|
||||||
|
|
||||||
|
/ {
|
||||||
|
keymap {
|
||||||
|
compatible = "zmk,keymap";
|
||||||
|
|
||||||
|
default_layer {
|
||||||
|
bindings = <
|
||||||
|
&kp ESC &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp BSPC
|
||||||
|
&mo LOWER &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp ENTER
|
||||||
|
&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp FSLH &kp UP &kp RSHFT
|
||||||
|
&kp LCTRL &kp LGUI &kp LALT < LOWER SPACE < CONTROL SPACE < RAISE SPACE &kp LEFT &kp DOWN &kp RIGHT
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
lower_layer {
|
||||||
|
bindings = <
|
||||||
|
&kp GRAVE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp DEL
|
||||||
|
&kp PSCRN &kp MINUS &kp EQUAL &trans &trans &trans &trans &kp LBKT &kp RBKT &kp SEMI &kp APOS
|
||||||
|
&trans &trans &trans &trans &trans &trans &trans &kp COMMA &kp DOT &kp PG_UP &kp BSLH
|
||||||
|
&trans &trans &trans &kp TAB &kp TAB &kp TAB &kp HOME &kp PG_DN &kp END
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
raise_layer {
|
||||||
|
bindings = <
|
||||||
|
&kp TILDE &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp STAR &kp LPAR &kp RPAR &trans
|
||||||
|
&kp PSCRN &kp UNDER &kp PLUS &trans &trans &trans &trans &kp LBRC &kp RBRC &kp COLON &kp DQT
|
||||||
|
&trans &trans &trans &trans &trans &trans &trans &kp LT &kp GT &kp PG_UP &kp PIPE
|
||||||
|
&trans &trans &trans &kp TAB &kp TAB &kp TAB &kp HOME &kp PG_DN &kp END
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
control_layer {
|
||||||
|
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 C_PP
|
||||||
|
&bt BT_SEL 0 &kp F11 &kp F12 &trans &trans &trans &trans &trans &trans &trans &kp K_LOCK
|
||||||
|
&bt BT_SEL 1 &out OUT_USB &kp CAPS &kp KP_NUM &kp SLCK &trans &trans &kp COMMA &kp DOT &kp K_VOL_UP &kp K_MUTE
|
||||||
|
&bt BT_SEL 2 &out OUT_BLE &kp PAUSE_BREAK &reset &trans &bootloader &kp C_BRI_DN &kp K_VOL_DN &kp C_BRI_UP
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
14
app/boards/arm/s40nc/s40nc.yaml
Normal file
14
app/boards/arm/s40nc/s40nc.yaml
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
identifier: s40nc
|
||||||
|
name: S40NC
|
||||||
|
type: mcu
|
||||||
|
arch: arm
|
||||||
|
toolchain:
|
||||||
|
- zephyr
|
||||||
|
- gnuarmemb
|
||||||
|
supported:
|
||||||
|
- adc
|
||||||
|
- usb_device
|
||||||
|
- ble
|
||||||
|
- ieee802154
|
||||||
|
- pwm
|
||||||
|
- watchdog
|
11
app/boards/arm/s40nc/s40nc.zmk.yml
Normal file
11
app/boards/arm/s40nc/s40nc.zmk.yml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
file_format: "1"
|
||||||
|
id: s40nc
|
||||||
|
name: S40NC
|
||||||
|
type: board
|
||||||
|
arch: arm
|
||||||
|
features:
|
||||||
|
- keys
|
||||||
|
outputs:
|
||||||
|
- usb
|
||||||
|
- ble
|
||||||
|
url: https://mechwild.com
|
21
app/boards/arm/s40nc/s40nc_defconfig
Normal file
21
app/boards/arm/s40nc/s40nc_defconfig
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
CONFIG_SOC_SERIES_NRF52X=y
|
||||||
|
CONFIG_SOC_NRF52840_QIAA=y
|
||||||
|
CONFIG_BOARD_S40NC=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
|
9
app/boards/shields/boardsource5x12/Kconfig.defconfig
Normal file
9
app/boards/shields/boardsource5x12/Kconfig.defconfig
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
if SHIELD_BOARDSOURCE5X12
|
||||||
|
|
||||||
|
config ZMK_KEYBOARD_NAME
|
||||||
|
default "boardsource5x12"
|
||||||
|
|
||||||
|
endif
|
5
app/boards/shields/boardsource5x12/Kconfig.shield
Normal file
5
app/boards/shields/boardsource5x12/Kconfig.shield
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
config SHIELD_BOARDSOURCE5X12
|
||||||
|
def_bool $(shields_list_contains,boardsource5x12)
|
0
app/boards/shields/boardsource5x12/boardsource5x12.conf
Normal file
0
app/boards/shields/boardsource5x12/boardsource5x12.conf
Normal file
99
app/boards/shields/boardsource5x12/boardsource5x12.keymap
Normal file
99
app/boards/shields/boardsource5x12/boardsource5x12.keymap
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <dt-bindings/zmk/bt.h>
|
||||||
|
#include <dt-bindings/zmk/outputs.h>
|
||||||
|
|
||||||
|
|
||||||
|
/ {
|
||||||
|
keymap {
|
||||||
|
compatible = "zmk,keymap";
|
||||||
|
|
||||||
|
default_layer {
|
||||||
|
// ------------------------------------------------------------------------------------------
|
||||||
|
// | ESC | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | BSPC |
|
||||||
|
// | TAB | Q | W | E | R | T | Y | U | I | O | P | \ |
|
||||||
|
// | SHIFT | A | S | D | F | G | H | J | K | L | ; | ' |
|
||||||
|
// | CTRL | Z | X | C | V | B | N | M | , | . | / | ENTER |
|
||||||
|
// |ADJUST | LCTL | LALT | LGUI | LOWR | SPACE| SPACE | RAIS | LARW | DARW | UARW | RARW |
|
||||||
|
|
||||||
|
|
||||||
|
bindings = <
|
||||||
|
&kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &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 BSLH
|
||||||
|
&kp LSHFT &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT
|
||||||
|
&kp LCTRL &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &kp RET
|
||||||
|
&mo 3 &kp LCTRL &kp LALT &kp LGUI &mo 1 &kp SPACE &kp SPACE &mo 2 &kp LEFT &kp DOWN &kp UP &kp RIGHT
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
lower_layer {
|
||||||
|
// -------------------------------------------------------------------------------------------
|
||||||
|
// | ESC | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
|
||||||
|
// | ~ | ! | @ | # | $ | % | ^ | & | * | ( | ) | DEL |
|
||||||
|
// | | F1 | F2 | F3 | F4 | F5 | F6 | _ | + | { | } | | |
|
||||||
|
// | | F7 | F8 | F9 | F10 | F11 | F12 | LS(#) |LS(|) | | | |
|
||||||
|
// | | | | | | | | | NEXT | Vol- | Vol+ | PLAY |
|
||||||
|
bindings = <
|
||||||
|
&kp ESC &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12
|
||||||
|
&kp TILDE &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &kp DEL
|
||||||
|
&trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE
|
||||||
|
&trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp LS(NON_US_HASH) &kp LS(NON_US_BSLH) &trans &trans &trans
|
||||||
|
&trans &trans &trans &trans &trans &trans &trans &mo 3 &kp C_NEXT &kp C_VOL_DN &kp C_VOL_UP &kp C_PLAY_PAUSE
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
raise_layer {
|
||||||
|
// ------------------------------------------------------------------------------------------
|
||||||
|
// | ESC | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
|
||||||
|
// | ~ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0 | DEL |
|
||||||
|
// | DEL | F1 | F2 | F3 | F4 | F5 | F6 | - | = | [ | ] | \ |
|
||||||
|
// | | F7 | F8 | F9 | F10 | F11 | F12 | # | | | | | |
|
||||||
|
// | | | | | | | | | | | | |
|
||||||
|
bindings = <
|
||||||
|
&kp ESC &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12
|
||||||
|
&kp TILDE &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp DEL
|
||||||
|
&kp DEL &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH
|
||||||
|
&trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &kp NON_US_HASH &kp NON_US_BSLH &trans &trans &trans
|
||||||
|
&trans &trans &trans &trans &mo 3 &trans &trans &trans &trans &trans &trans &trans
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
adjust_layer {
|
||||||
|
// ------------------------------------------------------------------------------------------
|
||||||
|
// |tog(4)| F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | F12 |
|
||||||
|
// | | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |LALT(PRTSN)|
|
||||||
|
// | | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA | PRTSN |
|
||||||
|
// | | NA | NA | NA | NA | NA | NA | NA | NA | NA | NA |LCTRL(DEL) |
|
||||||
|
// | | | | | |BOOTLD|BOOTLD| | | | | |
|
||||||
|
bindings = <
|
||||||
|
&tog 4 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12
|
||||||
|
&trans &none &none &none &none &none &none &none &none &none &none &kp LA(PSCRN)
|
||||||
|
&trans &none &none &none &none &none &none &none &none &none &none &kp PSCRN
|
||||||
|
&trans &none &none &none &none &none &none &none &none &none &none &kp LC(DEL)
|
||||||
|
&trans &trans &trans &trans &trans &bootloader &bootloader &trans &trans &trans &trans &trans
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
flock_layer {
|
||||||
|
// ----------------------------------------------------------------------------------------------
|
||||||
|
// |tog(4) | F2 | F3 | F4 | F5 | F6 | F7 | F8 | F9 | F10 | F11 | |
|
||||||
|
// |out tog|BT_SEL 0|BT_SEL 1|BT_SEL 2|BT_SEL 3|BT_SEL 4|BT_PRV|BT_NXT|BT_CLR| | | |
|
||||||
|
// | | | | | | | | | | | | |
|
||||||
|
// | | | | | | | | | | | | |
|
||||||
|
// | | | | | | | | | | | | |
|
||||||
|
bindings = <
|
||||||
|
&tog 4 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &trans
|
||||||
|
&out OUT_TOG &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &bt BT_PRV &bt BT_NXT &bt BT_CLR &trans &trans &trans
|
||||||
|
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans
|
||||||
|
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans
|
||||||
|
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
42
app/boards/shields/boardsource5x12/boardsource5x12.overlay
Normal file
42
app/boards/shields/boardsource5x12/boardsource5x12.overlay
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <dt-bindings/zmk/matrix_transform.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
chosen {
|
||||||
|
zmk,kscan = &kscan0;
|
||||||
|
};
|
||||||
|
|
||||||
|
kscan0: kscan {
|
||||||
|
compatible = "zmk,kscan-gpio-matrix";
|
||||||
|
label = "KSCAN";
|
||||||
|
diode-direction = "col2row";
|
||||||
|
|
||||||
|
row-gpios
|
||||||
|
= <&pro_micro 0 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 1 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
;
|
||||||
|
|
||||||
|
col-gpios
|
||||||
|
= <&pro_micro 21 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 20 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 19 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 18 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 15 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 14 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 16 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 10 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 9 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 8 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 7 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 6 GPIO_ACTIVE_HIGH>
|
||||||
|
;
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,8 @@
|
||||||
|
file_format: "1"
|
||||||
|
id: boardsource5x12
|
||||||
|
name: Boardsource 5x12
|
||||||
|
type: shield
|
||||||
|
url: https://boardsource.xyz/store/5ecb802c86879c9a0c22db61
|
||||||
|
requires: [pro_micro]
|
||||||
|
features:
|
||||||
|
- keys
|
9
app/boards/shields/chalice/Kconfig.defconfig
Normal file
9
app/boards/shields/chalice/Kconfig.defconfig
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
if SHIELD_CHALICE
|
||||||
|
|
||||||
|
config ZMK_KEYBOARD_NAME
|
||||||
|
default "Chalice"
|
||||||
|
|
||||||
|
endif
|
5
app/boards/shields/chalice/Kconfig.shield
Normal file
5
app/boards/shields/chalice/Kconfig.shield
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
config SHIELD_CHALICE
|
||||||
|
def_bool $(shields_list_contains,chalice)
|
28
app/boards/shields/chalice/boards/nice_nano.overlay
Normal file
28
app/boards/shields/chalice/boards/nice_nano.overlay
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
&spi1 {
|
||||||
|
compatible = "nordic,nrf-spim";
|
||||||
|
status = "okay";
|
||||||
|
mosi-pin = <6>;
|
||||||
|
// Unused pins, needed for SPI definition, but not used by the ws2812 driver itself.
|
||||||
|
sck-pin = <5>;
|
||||||
|
miso-pin = <7>;
|
||||||
|
|
||||||
|
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 = <14>; /* arbitrary; change at will */
|
||||||
|
spi-one-frame = <0x70>;
|
||||||
|
spi-zero-frame = <0x40>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
chosen {
|
||||||
|
zmk,underglow = &led_strip;
|
||||||
|
};
|
||||||
|
};
|
28
app/boards/shields/chalice/boards/nice_nano_v2.overlay
Normal file
28
app/boards/shields/chalice/boards/nice_nano_v2.overlay
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
&spi1 {
|
||||||
|
compatible = "nordic,nrf-spim";
|
||||||
|
status = "okay";
|
||||||
|
mosi-pin = <6>;
|
||||||
|
// Unused pins, needed for SPI definition, but not used by the ws2812 driver itself.
|
||||||
|
sck-pin = <5>;
|
||||||
|
miso-pin = <7>;
|
||||||
|
|
||||||
|
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 = <14>; /* arbitrary; change at will */
|
||||||
|
spi-one-frame = <0x70>;
|
||||||
|
spi-zero-frame = <0x40>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
chosen {
|
||||||
|
zmk,underglow = &led_strip;
|
||||||
|
};
|
||||||
|
};
|
3
app/boards/shields/chalice/chalice.conf
Normal file
3
app/boards/shields/chalice/chalice.conf
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# Uncomment the following lines to enable RGB underglow
|
||||||
|
# CONFIG_ZMK_RGB_UNDERGLOW=y
|
||||||
|
# CONFIG_WS2812_STRIP=y
|
39
app/boards/shields/chalice/chalice.keymap
Normal file
39
app/boards/shields/chalice/chalice.keymap
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <dt-bindings/zmk/bt.h>
|
||||||
|
#include <dt-bindings/zmk/rgb.h>
|
||||||
|
#include <dt-bindings/zmk/outputs.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
keymap {
|
||||||
|
compatible = "zmk,keymap";
|
||||||
|
|
||||||
|
default_layer {
|
||||||
|
|
||||||
|
bindings = <
|
||||||
|
&kp ESC &kp GRAVE &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 INSERT &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 DELETE &kp CAPS &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &kp SQT &kp ENTER
|
||||||
|
&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp B &kp N &kp M &kp COMMA &kp DOT &kp SLASH &kp RSHFT &kp UP
|
||||||
|
&kp LCTRL &kp LALT &kp SPACE &mo 1 &kp SPACE &kp RALT &kp RCTRL &kp LEFT &kp DOWN &kp RIGHT
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
function_layer {
|
||||||
|
|
||||||
|
bindings = <
|
||||||
|
&bootloader &out OUT_TOG &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12 &trans
|
||||||
|
&trans &bt BT_CLR &rgb_ug RGB_TOG &rgb_ug RGB_HUD &rgb_ug RGB_HUI &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans
|
||||||
|
&trans &bt BT_SEL 0 &rgb_ug RGB_EFF &rgb_ug RGB_SAD &rgb_ug RGB_SAI &trans &trans &trans &trans &trans &trans &trans &trans &trans
|
||||||
|
&bt BT_SEL 1 &rgb_ug RGB_EFR &rgb_ug RGB_BRD &rgb_ug RGB_BRI &trans &trans &trans &trans &trans &trans &trans &trans &trans &kp PG_UP
|
||||||
|
&bt BT_SEL 2 &trans &trans &trans &trans &trans &trans &kp HOME &kp PG_DN &kp END
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
73
app/boards/shields/chalice/chalice.overlay
Normal file
73
app/boards/shields/chalice/chalice.overlay
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <dt-bindings/zmk/matrix_transform.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
chosen {
|
||||||
|
zmk,kscan = &kscan0;
|
||||||
|
zmk,matrix_transform = &default_transform;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
default_transform: keymap_transform_0 {
|
||||||
|
compatible = "zmk,matrix-transform";
|
||||||
|
columns = <7>;
|
||||||
|
rows = <10>;
|
||||||
|
|
||||||
|
map = <
|
||||||
|
RC(0,0) RC(1,0) RC(0,1) RC(1,1) RC(0,2) RC(1,2) RC(0,3) RC(1,3) RC(0,4) RC(1,4) RC(0,5) RC(1,5) RC(0,6) RC(1,6) RC(4,6)
|
||||||
|
RC(2,0) RC(3,0) RC(2,1) RC(3,1) RC(2,2) RC(3,2) RC(2,3) RC(3,3) RC(2,4) RC(3,4) RC(2,5) RC(3,5) RC(2,6) RC(3,6) RC(5,6)
|
||||||
|
RC(4,0) RC(5,0) RC(4,1) RC(5,1) RC(4,2) RC(5,2) RC(4,3) RC(5,3) RC(4,4) RC(5,4) RC(4,5) RC(5,5) RC(6,6) RC(7,6)
|
||||||
|
RC(6,0) RC(7,0) RC(6,1) RC(7,1) RC(6,2) RC(7,2) RC(6,3) RC(7,3) RC(6,4) RC(7,4) RC(6,5) RC(7,5) RC(8,6) RC(9,6)
|
||||||
|
RC(8,0) RC(9,1) RC(8,2) RC(9,2) RC(8,3) RC(9,3) RC(8,4) RC(9,4) RC(8,5) RC(9,5)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
splitbs_transform: keymap_transform_1 {
|
||||||
|
compatible = "zmk,matrix-transform";
|
||||||
|
columns = <7>;
|
||||||
|
rows = <10>;
|
||||||
|
|
||||||
|
map = <
|
||||||
|
RC(0,0) RC(1,0) RC(0,1) RC(1,1) RC(0,2) RC(1,2) RC(0,3) RC(1,3) RC(0,4) RC(1,4) RC(0,5) RC(1,5) RC(0,6) RC(1,6) RC(4,6) RC(8,1)
|
||||||
|
RC(2,0) RC(3,0) RC(2,1) RC(3,1) RC(2,2) RC(3,2) RC(2,3) RC(3,3) RC(2,4) RC(3,4) RC(2,5) RC(3,5) RC(2,6) RC(3,6) RC(5,6)
|
||||||
|
RC(4,0) RC(5,0) RC(4,1) RC(5,1) RC(4,2) RC(5,2) RC(4,3) RC(5,3) RC(4,4) RC(5,4) RC(4,5) RC(5,5) RC(6,6) RC(7,6)
|
||||||
|
RC(6,0) RC(7,0) RC(6,1) RC(7,1) RC(6,2) RC(7,2) RC(6,3) RC(7,3) RC(6,4) RC(7,4) RC(6,5) RC(7,5) RC(8,6) RC(9,6)
|
||||||
|
RC(8,0) RC(9,1) RC(8,2) RC(9,2) RC(8,3) RC(9,3) RC(8,4) RC(9,4) RC(8,5) RC(9,5)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
kscan0: kscan_0 {
|
||||||
|
compatible = "zmk,kscan-gpio-matrix";
|
||||||
|
label = "KSCAN";
|
||||||
|
diode-direction = "col2row";
|
||||||
|
|
||||||
|
col-gpios
|
||||||
|
= <&pro_micro 18 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 5 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 15 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 0 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 7 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 14 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 6 GPIO_ACTIVE_HIGH>
|
||||||
|
;
|
||||||
|
|
||||||
|
row-gpios
|
||||||
|
= <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 2 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 10 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
;
|
||||||
|
};
|
||||||
|
};
|
9
app/boards/shields/chalice/chalice.zmk.yml
Normal file
9
app/boards/shields/chalice/chalice.zmk.yml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
file_format: "1"
|
||||||
|
id: chalice
|
||||||
|
name: Chalice
|
||||||
|
type: shield
|
||||||
|
url: https://customkbd.com/products/chalice-pre-order
|
||||||
|
requires: [pro_micro]
|
||||||
|
features:
|
||||||
|
- keys
|
||||||
|
- underglow
|
20
app/boards/shields/fourier/Kconfig.defconfig
Normal file
20
app/boards/shields/fourier/Kconfig.defconfig
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
|
||||||
|
if SHIELD_FOURIER_LEFT
|
||||||
|
|
||||||
|
config ZMK_KEYBOARD_NAME
|
||||||
|
default "Fourier"
|
||||||
|
|
||||||
|
config ZMK_SPLIT_BLE_ROLE_CENTRAL
|
||||||
|
default y
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
if SHIELD_FOURIER_LEFT || SHIELD_FOURIER_RIGHT
|
||||||
|
|
||||||
|
config ZMK_SPLIT
|
||||||
|
default y
|
||||||
|
|
||||||
|
endif
|
9
app/boards/shields/fourier/Kconfig.shield
Normal file
9
app/boards/shields/fourier/Kconfig.shield
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
|
||||||
|
config SHIELD_FOURIER_LEFT
|
||||||
|
def_bool $(shields_list_contains,fourier_left)
|
||||||
|
|
||||||
|
config SHIELD_FOURIER_RIGHT
|
||||||
|
def_bool $(shields_list_contains,fourier_right)
|
43
app/boards/shields/fourier/fourier.dtsi
Normal file
43
app/boards/shields/fourier/fourier.dtsi
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <dt-bindings/zmk/matrix_transform.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
chosen {
|
||||||
|
zmk,kscan = &kscan0;
|
||||||
|
zmk,matrix_transform = &default_transform;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This transform correspondsto the 60% left without macro keypad and 65% right, even this
|
||||||
|
* combination of PCBs can have keys in different locations based on configuration.
|
||||||
|
*/
|
||||||
|
default_transform: keymap_transform_0 {
|
||||||
|
compatible = "zmk,matrix-transform";
|
||||||
|
columns = <13>;
|
||||||
|
rows = <4>;
|
||||||
|
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(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,12)
|
||||||
|
RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) /**/ RC(2,6) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12)
|
||||||
|
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) /**/ RC(3,6) RC(3,9) RC(3,10) RC(3,11) RC(3,12)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
kscan0: kscan {
|
||||||
|
compatible = "zmk,kscan-gpio-matrix";
|
||||||
|
label = "KSCAN";
|
||||||
|
|
||||||
|
diode-direction = "col2row";
|
||||||
|
row-gpios
|
||||||
|
= <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row A
|
||||||
|
, <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row B
|
||||||
|
, <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row C
|
||||||
|
, <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> // Row D
|
||||||
|
;
|
||||||
|
};
|
||||||
|
};
|
64
app/boards/shields/fourier/fourier.keymap
Normal file
64
app/boards/shields/fourier/fourier.keymap
Normal file
|
@ -0,0 +1,64 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/bt.h>
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <dt-bindings/zmk/rgb.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
keymap {
|
||||||
|
compatible = "zmk,keymap";
|
||||||
|
|
||||||
|
// ---------------------------------------------- ----------------------------------------------
|
||||||
|
// | ESC | Q | W | E | R | T | | Y | U | I | O | P | | BKSP |
|
||||||
|
// | TAB | A | S | D | F | G | | H | J | K | L | ' | ENTER |
|
||||||
|
// | SHIFT | Z | X | C | V | B | | N | M | , | . | / | RSHFT |
|
||||||
|
// | LCTRL | LALT| LGUI | SPACE | | SPACE/L1 | L2 | RGUI | RALT |RCTRL|
|
||||||
|
// ------------------------------------------- -----------------------------------------------
|
||||||
|
|
||||||
|
default_layer {
|
||||||
|
bindings = <
|
||||||
|
&kp ESC &kp Q &kp W &kp E &kp R &kp T /**/ &kp Y &kp U &kp I &kp O &kp P &none &kp BACKSPACE
|
||||||
|
&kp TAB &kp A &kp S &kp D &kp F &kp G /**/ &kp H &kp J &kp K &kp L &kp SQT &kp ENTER
|
||||||
|
&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 LALT &kp LGUI &none &kp SPACE /**/ < 1 SPACE &mo 2 &kp RGUI &kp RALT &kp RCTRL
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
// ---------------------------------------------- ----------------------------------------------
|
||||||
|
// | 1 | 2 | 3 | 4 | 5 | 6 | | 7 | 8 | 9 | O | PSCR | | DEL |
|
||||||
|
// | ` | | <- | ^ | -> | Vo+ | | [ | ] | - | = | ; | \ |
|
||||||
|
// | trans | | | | V | Vo- | | | | | | | trans |
|
||||||
|
// | trans | trans| trans | trans | | trans | trans | trans | trans|trans|
|
||||||
|
// ------------------------------------------- -----------------------------------------------
|
||||||
|
|
||||||
|
symbols_layer {
|
||||||
|
bindings = <
|
||||||
|
&kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 /**/ &kp N7 &kp N8 &kp N9 &kp N0 &kp PSCRN &none &kp DEL
|
||||||
|
&kp GRAVE &none &kp LEFT &kp UP &kp RIGHT &kp C_VOL_UP /**/ &kp LBKT &kp RBKT &kp MINUS &kp EQUAL &kp SEMI &kp BACKSLASH
|
||||||
|
&trans &none &none &none &kp DOWN &kp C_VOL_DN /**/ &none &none &none &none &none &trans
|
||||||
|
&trans &trans &trans &none &trans /**/ &trans &trans &trans &trans &trans
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
// ---------------------------------------------- ----------------------------------------------
|
||||||
|
// | F1 | F2 | F3 | F4 | F5 | F6 | | F7 | F8 | F9 | F1O | F11 | | F12 |
|
||||||
|
// | CAP | | home| PgUp | End | | | | | | | | |
|
||||||
|
// | trans | RGB T | RGB M | PgDn | | | BT_NXT | BT_CLR | | | | |trans|
|
||||||
|
// | trans | trans| trans | trans | | trans | trans | trans | trans | trans |
|
||||||
|
// ------------------------------------------- -----------------------------------------------
|
||||||
|
|
||||||
|
fn_layer {
|
||||||
|
bindings = <
|
||||||
|
&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 /**/ &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &none &kp F12
|
||||||
|
&kp CAPS &none &kp HOME &kp PG_UP &kp END &none /**/ &none &none &none &none &none &none
|
||||||
|
&trans &rgb_ug RGB_TOG &rgb_ug RGB_EFF &none &kp PG_DN &none /**/ &bt BT_NXT &bt BT_CLR &none &none &none &trans
|
||||||
|
&trans &trans &trans &none &trans /**/ &trans &trans &trans &trans &trans
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
12
app/boards/shields/fourier/fourier.zmk.yml
Normal file
12
app/boards/shields/fourier/fourier.zmk.yml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
file_format: "1"
|
||||||
|
id: fourier
|
||||||
|
name: Fourier Rev. 1
|
||||||
|
type: shield
|
||||||
|
url: https://github.com/keebio/fourier
|
||||||
|
requires:
|
||||||
|
- pro_micro
|
||||||
|
features:
|
||||||
|
- keys
|
||||||
|
siblings:
|
||||||
|
- fourier_left
|
||||||
|
- fourier_right
|
18
app/boards/shields/fourier/fourier_left.overlay
Normal file
18
app/boards/shields/fourier/fourier_left.overlay
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "fourier.dtsi"
|
||||||
|
|
||||||
|
&kscan0 {
|
||||||
|
col-gpios
|
||||||
|
= <&pro_micro 20 GPIO_ACTIVE_HIGH> // Col1
|
||||||
|
, <&pro_micro 19 GPIO_ACTIVE_HIGH> // Col2
|
||||||
|
, <&pro_micro 18 GPIO_ACTIVE_HIGH> // Col3
|
||||||
|
, <&pro_micro 15 GPIO_ACTIVE_HIGH> // Col4
|
||||||
|
, <&pro_micro 14 GPIO_ACTIVE_HIGH> // Col5
|
||||||
|
, <&pro_micro 16 GPIO_ACTIVE_HIGH> // Col6
|
||||||
|
;
|
||||||
|
};
|
23
app/boards/shields/fourier/fourier_right.overlay
Normal file
23
app/boards/shields/fourier/fourier_right.overlay
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "fourier.dtsi"
|
||||||
|
|
||||||
|
&default_transform {
|
||||||
|
col-offset = <6>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&kscan0 {
|
||||||
|
col-gpios
|
||||||
|
= <&pro_micro 20 GPIO_ACTIVE_HIGH> // Col1
|
||||||
|
, <&pro_micro 19 GPIO_ACTIVE_HIGH> // Col2
|
||||||
|
, <&pro_micro 18 GPIO_ACTIVE_HIGH> // Col3
|
||||||
|
, <&pro_micro 15 GPIO_ACTIVE_HIGH> // Col4
|
||||||
|
, <&pro_micro 14 GPIO_ACTIVE_HIGH> // Col5
|
||||||
|
, <&pro_micro 16 GPIO_ACTIVE_HIGH> // Col6
|
||||||
|
, <&pro_micro 10 GPIO_ACTIVE_HIGH> // Col7
|
||||||
|
;
|
||||||
|
};
|
19
app/boards/shields/jiran/Kconfig.defconfig
Normal file
19
app/boards/shields/jiran/Kconfig.defconfig
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
if SHIELD_JIRAN_LEFT
|
||||||
|
|
||||||
|
config ZMK_KEYBOARD_NAME
|
||||||
|
default "Jiran"
|
||||||
|
|
||||||
|
config ZMK_SPLIT_BLE_ROLE_CENTRAL
|
||||||
|
default y
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
if SHIELD_JIRAN_LEFT || SHIELD_JIRAN_RIGHT
|
||||||
|
|
||||||
|
config ZMK_SPLIT
|
||||||
|
default y
|
||||||
|
|
||||||
|
endif
|
8
app/boards/shields/jiran/Kconfig.shield
Normal file
8
app/boards/shields/jiran/Kconfig.shield
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
config SHIELD_JIRAN_LEFT
|
||||||
|
def_bool $(shields_list_contains,jiran_left)
|
||||||
|
|
||||||
|
config SHIELD_JIRAN_RIGHT
|
||||||
|
def_bool $(shields_list_contains,jiran_right)
|
1
app/boards/shields/jiran/jiran.conf
Normal file
1
app/boards/shields/jiran/jiran.conf
Normal file
|
@ -0,0 +1 @@
|
||||||
|
# CONFIG_ZMK_SLEEP=y
|
82
app/boards/shields/jiran/jiran.dtsi
Normal file
82
app/boards/shields/jiran/jiran.dtsi
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <dt-bindings/zmk/matrix_transform.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
chosen {
|
||||||
|
zmk,kscan = &kscan0;
|
||||||
|
zmk,matrix_transform = &default_transform;
|
||||||
|
};
|
||||||
|
|
||||||
|
default_transform: keymap_transform_0 {
|
||||||
|
compatible = "zmk,matrix-transform";
|
||||||
|
columns = <12>;
|
||||||
|
rows = <5>;
|
||||||
|
|
||||||
|
// | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 |
|
||||||
|
// | SW0 | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | SW0 |
|
||||||
|
// | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 |
|
||||||
|
// | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 |
|
||||||
|
// | SW25 | SW26 | SW27 | | SW27 | SW26 | SW25 |
|
||||||
|
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(4,0) 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(4,11)
|
||||||
|
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(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,11)
|
||||||
|
RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
jian_transform: keymap_transform_1 {
|
||||||
|
compatible = "zmk,matrix-transform";
|
||||||
|
columns = <12>;
|
||||||
|
rows = <5>;
|
||||||
|
|
||||||
|
// | SW0 | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 | SW0 |
|
||||||
|
// | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 |
|
||||||
|
// | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 |
|
||||||
|
// | SW25 | SW26 | SW27 | | SW27 | SW26 | SW25 |
|
||||||
|
map = <
|
||||||
|
RC(4,0) 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(4,11)
|
||||||
|
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(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,11)
|
||||||
|
RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
crkbd_transform: keymap_transform_2 {
|
||||||
|
compatible = "zmk,matrix-transform";
|
||||||
|
columns = <12>;
|
||||||
|
rows = <5>;
|
||||||
|
|
||||||
|
// | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 |
|
||||||
|
// | SW13 | SW14 | SW15 | SW16 | SW17 | SW18 | | SW18 | SW17 | SW16 | SW15 | SW14 | SW13 |
|
||||||
|
// | SW19 | SW20 | SW21 | SW22 | SW23 | SW24 | | SW24 | SW23 | SW22 | SW21 | SW20 | SW19 |
|
||||||
|
// | SW25 | SW26 | SW27 | | SW27 | SW26 | SW25 |
|
||||||
|
map = <
|
||||||
|
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(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(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,11)
|
||||||
|
RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
kscan0: kscan {
|
||||||
|
compatible = "zmk,kscan-gpio-matrix";
|
||||||
|
label = "KSCAN";
|
||||||
|
|
||||||
|
diode-direction = "col2row";
|
||||||
|
row-gpios
|
||||||
|
= <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
;
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
35
app/boards/shields/jiran/jiran.keymap
Normal file
35
app/boards/shields/jiran/jiran.keymap
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <dt-bindings/zmk/bt.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
keymap {
|
||||||
|
compatible = "zmk,keymap";
|
||||||
|
|
||||||
|
default_layer {
|
||||||
|
bindings = <
|
||||||
|
&kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp MINUS
|
||||||
|
&kp LGUI &kp TAB &kp Q &kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O &kp P &kp LBKT &mt RGUI RBKT
|
||||||
|
&kp LSHIFT &kp A &kp S &kp D &kp F &kp G &kp H &kp J &kp K &kp L &kp SEMI &mt RSHIFT SQT
|
||||||
|
&kp LCTRL &kp Z &kp X &kp C &kp V &kp B &kp N &kp M &kp COMMA &kp DOT &kp FSLH &mt RCTRL BSLH
|
||||||
|
&mo 1 &kp SPACE &kp LALT &mt RALT RET &kp BSPC &mo 1
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
lower_layer {
|
||||||
|
bindings = <
|
||||||
|
&kp GRAVE &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp EQUAL
|
||||||
|
&kp F11 &kp TAB &bt BT_CLR &kp HOME &reset &kp PG_UP &kp C_VOL_UP &kp C_VOL_UP &kp PG_UP &reset &kp HOME &kp INS &kp DEL &kp F12
|
||||||
|
&kp LSHIFT &bt BT_NXT &kp LEFT &kp UP &kp RIGHT &kp C_MUTE &kp C_MUTE &kp LEFT &kp UP &kp RIGHT &kp PSCRN &mt RSHIFT SLCK
|
||||||
|
&kp LCTRL &bt BT_PRV &kp END &kp DOWN &kp PG_DN &kp C_VOL_DN &kp C_VOL_DN &kp PG_DN &kp DOWN &kp END &kp PAUSE_BREAK &mt RCTRL KP_NUM
|
||||||
|
&trans &kp SPACE &kp LALT &mt RALT RET &kp BSPC &trans
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
11
app/boards/shields/jiran/jiran.zmk.yml
Normal file
11
app/boards/shields/jiran/jiran.zmk.yml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
file_format: "1"
|
||||||
|
id: jiran
|
||||||
|
name: Jiran
|
||||||
|
type: shield
|
||||||
|
url: https://github.com/Ladniy/jiran
|
||||||
|
requires: [pro_micro]
|
||||||
|
features:
|
||||||
|
- keys
|
||||||
|
siblings:
|
||||||
|
- jiran_left
|
||||||
|
- jiran_right
|
18
app/boards/shields/jiran/jiran_left.overlay
Normal file
18
app/boards/shields/jiran/jiran_left.overlay
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "jiran.dtsi"
|
||||||
|
|
||||||
|
&kscan0 {
|
||||||
|
col-gpios
|
||||||
|
= <&pro_micro 1 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 0 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 4 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 5 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 6 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 7 GPIO_ACTIVE_HIGH>
|
||||||
|
;
|
||||||
|
};
|
22
app/boards/shields/jiran/jiran_right.overlay
Normal file
22
app/boards/shields/jiran/jiran_right.overlay
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "jiran.dtsi"
|
||||||
|
|
||||||
|
&default_transform {
|
||||||
|
col-offset = <6>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&kscan0 {
|
||||||
|
col-gpios
|
||||||
|
= <&pro_micro 7 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 6 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 5 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 4 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 0 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 1 GPIO_ACTIVE_HIGH>
|
||||||
|
;
|
||||||
|
};
|
45
app/boards/shields/murphpad/Kconfig.defconfig
Normal file
45
app/boards/shields/murphpad/Kconfig.defconfig
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
if SHIELD_MURPHPAD
|
||||||
|
|
||||||
|
config ZMK_KEYBOARD_NAME
|
||||||
|
default "MurphPad"
|
||||||
|
|
||||||
|
if ZMK_DISPLAY
|
||||||
|
|
||||||
|
config I2C
|
||||||
|
default y
|
||||||
|
|
||||||
|
config SSD1306
|
||||||
|
default y
|
||||||
|
|
||||||
|
config SSD1306_REVERSE_MODE
|
||||||
|
default y
|
||||||
|
|
||||||
|
endif # ZMK_DISPLAY
|
||||||
|
|
||||||
|
if LVGL
|
||||||
|
|
||||||
|
config LVGL_HOR_RES_MAX
|
||||||
|
default 128
|
||||||
|
|
||||||
|
config LVGL_VER_RES_MAX
|
||||||
|
default 32
|
||||||
|
|
||||||
|
config LVGL_VDB_SIZE
|
||||||
|
default 64
|
||||||
|
|
||||||
|
config LVGL_DPI
|
||||||
|
default 148
|
||||||
|
|
||||||
|
config LVGL_BITS_PER_PIXEL
|
||||||
|
default 1
|
||||||
|
|
||||||
|
choice LVGL_COLOR_DEPTH
|
||||||
|
default LVGL_COLOR_DEPTH_1
|
||||||
|
endchoice
|
||||||
|
|
||||||
|
endif # LVGL
|
||||||
|
|
||||||
|
endif
|
5
app/boards/shields/murphpad/Kconfig.shield
Normal file
5
app/boards/shields/murphpad/Kconfig.shield
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
config SHIELD_MURPHPAD
|
||||||
|
def_bool $(shields_list_contains,murphpad)
|
3
app/boards/shields/murphpad/boards/nice_nano.conf
Normal file
3
app/boards/shields/murphpad/boards/nice_nano.conf
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# Uncomment both to enable underglow
|
||||||
|
CONFIG_ZMK_RGB_UNDERGLOW=y
|
||||||
|
CONFIG_WS2812_STRIP=y
|
34
app/boards/shields/murphpad/boards/nice_nano.overlay
Normal file
34
app/boards/shields/murphpad/boards/nice_nano.overlay
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
&spi1 {
|
||||||
|
compatible = "nordic,nrf-spim";
|
||||||
|
status = "okay";
|
||||||
|
mosi-pin = <31>;
|
||||||
|
// Unused pins, needed for SPI definition, but not used by the ws2812 driver itself.
|
||||||
|
sck-pin = <5>;
|
||||||
|
miso-pin = <7>;
|
||||||
|
|
||||||
|
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 = <8>; /* number of LEDs */
|
||||||
|
spi-one-frame = <0x70>;
|
||||||
|
spi-zero-frame = <0x40>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
chosen {
|
||||||
|
zmk,underglow = &led_strip;
|
||||||
|
};
|
||||||
|
};
|
9
app/boards/shields/murphpad/murphpad.conf
Normal file
9
app/boards/shields/murphpad/murphpad.conf
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# Uncomment to turn on logging, and set ZMK logging to debug output
|
||||||
|
# CONFIG_ZMK_USB_LOGGING=y
|
||||||
|
|
||||||
|
# Uncomment both to enable encoder
|
||||||
|
CONFIG_EC11=y
|
||||||
|
CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y
|
||||||
|
|
||||||
|
# Uncomment to enable OLED
|
||||||
|
CONFIG_ZMK_DISPLAY=y
|
85
app/boards/shields/murphpad/murphpad.keymap
Normal file
85
app/boards/shields/murphpad/murphpad.keymap
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <dt-bindings/zmk/bt.h>
|
||||||
|
#include <dt-bindings/zmk/rgb.h>
|
||||||
|
|
||||||
|
|
||||||
|
#define TIMEOUT 300
|
||||||
|
|
||||||
|
&encoder_1 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&encoder_2 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
combos {
|
||||||
|
compatible = "zmk,combos";
|
||||||
|
combo_btclr {
|
||||||
|
timeout-ms = <TIMEOUT>;
|
||||||
|
key-positions = <1 6>;
|
||||||
|
bindings = <&bt BT_CLR>;
|
||||||
|
};
|
||||||
|
combo_reset {
|
||||||
|
timeout-ms = <TIMEOUT>;
|
||||||
|
key-positions = <1 3>;
|
||||||
|
bindings = <&reset>;
|
||||||
|
};
|
||||||
|
combo_bootloader {
|
||||||
|
timeout-ms = <TIMEOUT>;
|
||||||
|
key-positions = <1 2>;
|
||||||
|
bindings = <&bootloader>;
|
||||||
|
};
|
||||||
|
combo_bt_nxt {
|
||||||
|
timeout-ms = <TIMEOUT>;
|
||||||
|
key-positions = <1 4>;
|
||||||
|
bindings = <&bt BT_NXT>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
sensors {
|
||||||
|
compatible = "zmk,keymap-sensors";
|
||||||
|
sensors = <&encoder_1 &encoder_2>;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
keymap0: keymap {
|
||||||
|
compatible = "zmk,keymap";
|
||||||
|
|
||||||
|
default_layer {
|
||||||
|
label = "default layer";
|
||||||
|
bindings = <
|
||||||
|
&bt BT_CLR &kp TAB &kp F5 &kp LC(LA(C)) &kp LG(D)
|
||||||
|
&rgb_ug RGB_TOG &kp ESC &kp KP_DIVIDE &kp KP_MULTIPLY &kp KP_MINUS
|
||||||
|
&rgb_ug RGB_EFF &kp KP_N7 &kp KP_N8 &kp KP_N9 &kp KP_PLUS
|
||||||
|
&kp C_MUTE &kp KP_N4 &kp KP_N5 &kp KP_N6 &trans
|
||||||
|
&mo 1 &kp KP_N1 &kp KP_N2 &kp KP_N3 &kp KP_ENTER
|
||||||
|
&kp BSPC &kp KP_N0 &trans &kp KP_DOT &trans
|
||||||
|
>;
|
||||||
|
sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
fn_layer {
|
||||||
|
label = "fn layer";
|
||||||
|
bindings = <
|
||||||
|
&trans &trans &trans &trans &trans
|
||||||
|
&trans &kp KP_NUM &trans &trans &trans
|
||||||
|
&trans &trans &trans &trans &trans
|
||||||
|
&bt BT_CLR &trans &trans &trans &trans
|
||||||
|
&trans &trans &trans &trans &trans
|
||||||
|
&kp DEL &trans &trans &trans &trans
|
||||||
|
>;
|
||||||
|
sensor-bindings = <&inc_dec_kp PG_UP PG_DN &inc_dec_kp C_VOL_UP C_VOL_DN>;
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
74
app/boards/shields/murphpad/murphpad.overlay
Normal file
74
app/boards/shields/murphpad/murphpad.overlay
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <dt-bindings/zmk/matrix_transform.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
chosen {
|
||||||
|
zmk,kscan = &kscan0;
|
||||||
|
};
|
||||||
|
|
||||||
|
kscan0: kscan {
|
||||||
|
compatible = "zmk,kscan-gpio-matrix";
|
||||||
|
label = "KSCAN";
|
||||||
|
|
||||||
|
diode-direction = "col2row";
|
||||||
|
row-gpios
|
||||||
|
= <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 16 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
;
|
||||||
|
col-gpios
|
||||||
|
= <&pro_micro 9 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 6 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 5 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 4 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 10 GPIO_ACTIVE_HIGH>
|
||||||
|
;
|
||||||
|
};
|
||||||
|
|
||||||
|
encoder_1: encoder_1 {
|
||||||
|
compatible = "alps,ec11";
|
||||||
|
label = "Encoder 1";
|
||||||
|
a-gpios = <&pro_micro 8 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||||
|
b-gpios = <&pro_micro 7 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||||
|
resolution = <4>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
encoder_2: encoder_2 {
|
||||||
|
compatible = "alps,ec11";
|
||||||
|
label = "Encoder 2";
|
||||||
|
a-gpios = <&pro_micro 1 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||||
|
b-gpios = <&pro_micro 0 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
|
||||||
|
resolution = <4>;
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
&pro_micro_i2c {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
oled: ssd1306@3c {
|
||||||
|
compatible = "solomon,ssd1306fb";
|
||||||
|
reg = <0x3c>;
|
||||||
|
label = "DISPLAY";
|
||||||
|
width = <128>;
|
||||||
|
height = <32>;
|
||||||
|
segment-offset = <0>;
|
||||||
|
page-offset = <0>;
|
||||||
|
display-offset = <0>;
|
||||||
|
multiplex-ratio = <31>;
|
||||||
|
segment-remap;
|
||||||
|
com-invdir;
|
||||||
|
com-sequential;
|
||||||
|
prechargep = <0x22>;
|
||||||
|
};
|
||||||
|
};
|
12
app/boards/shields/murphpad/murphpad.zmk.yml
Normal file
12
app/boards/shields/murphpad/murphpad.zmk.yml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
file_format: "1"
|
||||||
|
id: murphpad
|
||||||
|
name: MurphPad
|
||||||
|
type: shield
|
||||||
|
url: https://mechwild.com/product/murphpad/
|
||||||
|
requires: [pro_micro]
|
||||||
|
exposes: [i2c_oled]
|
||||||
|
features:
|
||||||
|
- keys
|
||||||
|
- display
|
||||||
|
- encoder
|
||||||
|
- underglow
|
9
app/boards/shields/osprette/Kconfig.defconfig
Normal file
9
app/boards/shields/osprette/Kconfig.defconfig
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
if SHIELD_OSPRETTE
|
||||||
|
|
||||||
|
config ZMK_KEYBOARD_NAME
|
||||||
|
default "Osprette"
|
||||||
|
|
||||||
|
endif
|
5
app/boards/shields/osprette/Kconfig.shield
Normal file
5
app/boards/shields/osprette/Kconfig.shield
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
config SHIELD_OSPRETTE
|
||||||
|
def_bool $(shields_list_contains,osprette)
|
0
app/boards/shields/osprette/osprette.conf
Normal file
0
app/boards/shields/osprette/osprette.conf
Normal file
113
app/boards/shields/osprette/osprette.keymap
Normal file
113
app/boards/shields/osprette/osprette.keymap
Normal file
|
@ -0,0 +1,113 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <dt-bindings/zmk/bt.h>
|
||||||
|
|
||||||
|
#define MAIN 0
|
||||||
|
#define SYM 1
|
||||||
|
#define NAV 2
|
||||||
|
#define BT 3
|
||||||
|
|
||||||
|
&mt {
|
||||||
|
flavor = "tap-preferred";
|
||||||
|
tapping_term_ms = <140>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
combos {
|
||||||
|
compatible = "zmk,combos";
|
||||||
|
|
||||||
|
combo_esc {
|
||||||
|
timeout-ms = <100>;
|
||||||
|
key-positions = <21 22>;
|
||||||
|
bindings = <&kp ESC>;
|
||||||
|
};
|
||||||
|
|
||||||
|
combo_tab {
|
||||||
|
timeout-ms = <100>;
|
||||||
|
key-positions = <22 23>;
|
||||||
|
bindings = <&kp TAB>;
|
||||||
|
};
|
||||||
|
|
||||||
|
combo_minus {
|
||||||
|
timeout-ms = <100>;
|
||||||
|
key-positions = <26 27>;
|
||||||
|
bindings = <&kp MINUS>;
|
||||||
|
};
|
||||||
|
|
||||||
|
combo_underscore {
|
||||||
|
timeout-ms = <100>;
|
||||||
|
key-positions = <26 28>;
|
||||||
|
bindings = <&kp UNDERSCORE>;
|
||||||
|
};
|
||||||
|
|
||||||
|
combo_colon {
|
||||||
|
timeout-ms = <100>;
|
||||||
|
key-positions = <7 8>;
|
||||||
|
bindings = <&kp COLON>;
|
||||||
|
};
|
||||||
|
|
||||||
|
combo_semicolon {
|
||||||
|
timeout-ms = <100>;
|
||||||
|
key-positions = <6 8>;
|
||||||
|
bindings = <&kp SEMICOLON>;
|
||||||
|
};
|
||||||
|
|
||||||
|
combo_backslash {
|
||||||
|
timeout-ms = <100>;
|
||||||
|
key-positions = <27 28>;
|
||||||
|
bindings = <&kp BSLH>;
|
||||||
|
};
|
||||||
|
|
||||||
|
combo_grave {
|
||||||
|
timeout-ms = <100>;
|
||||||
|
key-positions = <8 9>;
|
||||||
|
bindings = <&kp GRAVE>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
keymap {
|
||||||
|
compatible = "zmk,keymap";
|
||||||
|
|
||||||
|
MAIN_layer {
|
||||||
|
bindings = <
|
||||||
|
&kp W &kp E &kp R &kp T &kp Y &kp U &kp I &kp O
|
||||||
|
&kp Q &kp A &kp S &kp D < SYM F &kp G &kp H < SYM J &kp K &kp L &kp SQT &kp P
|
||||||
|
&mt LSHFT Z &mt LALT X &mt LCTRL C &mt LGUI V &kp B &kp N &mt RGUI M &mt RCTRL COMMA &mt RALT DOT &mt RSHFT FSLH
|
||||||
|
< BT ENTER < NAV SPACE &sk RSHFT &kp BSPC
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
SYM_layer {
|
||||||
|
bindings = <
|
||||||
|
&kp N7 &kp N8 &kp N9 &kp STAR &kp DLLR &kp LBRC &kp RBRC &kp HASH
|
||||||
|
&kp AMPS &kp EXCL &kp N1 &kp N2 &kp N3 &kp EQUAL &kp LT &kp LPAR &kp RPAR &kp GT &kp PIPE &none
|
||||||
|
&kp CARET &kp N4 &kp N5 &kp N6 &kp PLUS &kp TILDE &kp LBKT &kp RBKT &kp AT &kp PRCNT
|
||||||
|
&kp DOT &kp N0 &trans &none
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
NAV_layer {
|
||||||
|
bindings = <
|
||||||
|
&kp C_VOL_DN &kp C_VOL_UP &kp C_NEXT &kp C_PP &none &kp F7 &kp F8 &kp F9
|
||||||
|
&kp C_PREV &kp LEFT &kp DOWN &kp UP &kp RIGHT &kp LC(TAB) &kp PSCRN &kp F1 &kp F2 &kp F3 &kp F10 &kp F12
|
||||||
|
&kp HOME &kp PG_DN &kp PG_UP &kp END &kp LS(LC(TAB)) &kp CAPS &kp F4 &kp F5 &kp F6 &kp F11
|
||||||
|
&none &none &trans &kp DEL
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
BT_layer {
|
||||||
|
bindings = <
|
||||||
|
&none &none &none &none &none &none &none &none
|
||||||
|
&none &none &none &none &none &none &none &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &none
|
||||||
|
&none &none &none &none &none &none &bt BT_CLR &none &none &none
|
||||||
|
&none &none &none &none
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
52
app/boards/shields/osprette/osprette.overlay
Normal file
52
app/boards/shields/osprette/osprette.overlay
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <dt-bindings/zmk/matrix_transform.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
chosen {
|
||||||
|
zmk,kscan = &kscan0;
|
||||||
|
zmk,matrix_transform = &default_transform;
|
||||||
|
};
|
||||||
|
|
||||||
|
default_transform: keymap_transform_0 {
|
||||||
|
compatible = "zmk,matrix-transform";
|
||||||
|
columns = <10>;
|
||||||
|
rows = <4>;
|
||||||
|
map = <
|
||||||
|
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,0) 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(0,9)
|
||||||
|
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(3,3) RC(3,4) RC(3,5) RC(3,6)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
kscan0: kscan_0 {
|
||||||
|
compatible = "zmk,kscan-gpio-matrix";
|
||||||
|
label = "KSCAN";
|
||||||
|
diode-direction = "row2col";
|
||||||
|
|
||||||
|
col-gpios
|
||||||
|
= <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 3 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
;
|
||||||
|
|
||||||
|
row-gpios
|
||||||
|
= <&pro_micro 16 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 10 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 8 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 9 GPIO_ACTIVE_HIGH>
|
||||||
|
;
|
||||||
|
};
|
||||||
|
};
|
8
app/boards/shields/osprette/osprette.zmk.yml
Normal file
8
app/boards/shields/osprette/osprette.zmk.yml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
file_format: "1"
|
||||||
|
id: osprette
|
||||||
|
name: Osprette
|
||||||
|
type: shield
|
||||||
|
url: https://github.com/smores56/osprette/
|
||||||
|
requires: [pro_micro]
|
||||||
|
features:
|
||||||
|
- keys
|
|
@ -8,5 +8,5 @@ features:
|
||||||
- keys
|
- keys
|
||||||
- encoder
|
- encoder
|
||||||
siblings:
|
siblings:
|
||||||
- quenfrency_left
|
- quefrency_left
|
||||||
- quenfrency_right
|
- quefrency_right
|
||||||
|
|
18
app/boards/shields/redox/Kconfig.defconfig
Normal file
18
app/boards/shields/redox/Kconfig.defconfig
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
if SHIELD_REDOX_LEFT
|
||||||
|
|
||||||
|
config ZMK_KEYBOARD_NAME
|
||||||
|
default "Redox"
|
||||||
|
|
||||||
|
config ZMK_SPLIT_BLE_ROLE_CENTRAL
|
||||||
|
default y
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
if SHIELD_REDOX_LEFT || SHIELD_REDOX_RIGHT
|
||||||
|
|
||||||
|
config ZMK_SPLIT
|
||||||
|
default y
|
||||||
|
|
||||||
|
endif
|
7
app/boards/shields/redox/Kconfig.shield
Normal file
7
app/boards/shields/redox/Kconfig.shield
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
config SHIELD_REDOX_LEFT
|
||||||
|
def_bool $(shields_list_contains,redox_left)
|
||||||
|
|
||||||
|
config SHIELD_REDOX_RIGHT
|
||||||
|
def_bool $(shields_list_contains,redox_right)
|
34
app/boards/shields/redox/boards/nice_nano.overlay
Normal file
34
app/boards/shields/redox/boards/nice_nano.overlay
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
&spi1 {
|
||||||
|
compatible = "nordic,nrf-spim";
|
||||||
|
status = "okay";
|
||||||
|
mosi-pin = <6>;
|
||||||
|
// Unused pins, needed for SPI definition, but not used by the ws2812 driver itself.
|
||||||
|
sck-pin = <5>;
|
||||||
|
miso-pin = <7>;
|
||||||
|
|
||||||
|
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 = <5>; /* number of LEDs */
|
||||||
|
spi-one-frame = <0x70>;
|
||||||
|
spi-zero-frame = <0x40>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/ {
|
||||||
|
chosen {
|
||||||
|
zmk,underglow = &led_strip;
|
||||||
|
};
|
||||||
|
};
|
3
app/boards/shields/redox/redox.conf
Normal file
3
app/boards/shields/redox/redox.conf
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
# Uncomment the following lines to enable the Redox RGB Underglow
|
||||||
|
# CONFIG_ZMK_RGB_UNDERGLOW=y
|
||||||
|
# CONFIG_WS2812_STRIP=y
|
48
app/boards/shields/redox/redox.dtsi
Normal file
48
app/boards/shields/redox/redox.dtsi
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <dt-bindings/zmk/matrix_transform.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
chosen {
|
||||||
|
zmk,kscan = &kscan0;
|
||||||
|
zmk,matrix_transform = &default_transform;
|
||||||
|
};
|
||||||
|
|
||||||
|
default_transform: keymap_transform_0 {
|
||||||
|
compatible = "zmk,matrix-transform";
|
||||||
|
columns = <14>;
|
||||||
|
rows = <5>;
|
||||||
|
// | SW1 | SW2 | SW3 | SW4 | SW5 | SW6 | | SW6 | SW5 | SW4 | SW3 | SW2 | SW1 |
|
||||||
|
// | SW7 | SW8 | SW9 | SW10 | SW11 | SW12 | SW13 | | SW13 | SW12 | SW11 | SW10 | SW9 | SW8 | SW7 |
|
||||||
|
// | SW14 | SW15 | SW16 | SW17 | SW18 | SW19 | SW20 | | SW20 | SW19 | SW18 | SW17 | SW16 | SW15 | SW14 |
|
||||||
|
// | SW21 | SW22 | SW23 | SW24 | SW25 | SW26 | SW27 | SW28 | | SW28 | SW27 | SW26 | SW25 | SW24 | SW23 | SW22 | SW21 |
|
||||||
|
// | SW29 | SW30 | SW31 | SW32 | SW33 | SW34 | SW35 | | SW35 | SW34 | SW33 | SW32 | SW31 | SW30 | SW29 |
|
||||||
|
map = <
|
||||||
|
RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5) 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(0,6) RC(0,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(1,6) RC(1,7) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13)
|
||||||
|
RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5) RC(2,6) RC(3,6) RC(3,7) RC(2,7) RC(3,8) RC(3,9) RC(3,10) RC(3,11) RC(3,12) RC(3,13)
|
||||||
|
RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5) RC(4,6) RC(4,7) RC(4,8) RC(4,9) RC(4,10) RC(4,11) RC(4,12) RC(4,13)
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
kscan0: kscan {
|
||||||
|
compatible = "zmk,kscan-gpio-matrix";
|
||||||
|
label = "KSCAN";
|
||||||
|
|
||||||
|
diode-direction = "col2row";
|
||||||
|
row-gpios
|
||||||
|
= <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 8 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
, <&pro_micro 9 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
|
||||||
|
;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
82
app/boards/shields/redox/redox.keymap
Normal file
82
app/boards/shields/redox/redox.keymap
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <dt-bindings/zmk/bt.h>
|
||||||
|
#include <dt-bindings/zmk/ext_power.h>
|
||||||
|
#include <dt-bindings/zmk/outputs.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 | - |
|
||||||
|
// | CTRL | A | S | D | F | G | [ | --- | ] | H | J | K | L | ; | ' |
|
||||||
|
// | SHIFT | Z | X | C | V | B | PG_UP | PG_DOWN | --- | HOME | END | N | M | , | . | / | SHFT(RET) |
|
||||||
|
// | CRTL | ALT | GUI | LOWER | GUI | LOWER | SPACE | --- | DEL | SPACE | RAISE | LEFT | DOWN | UP | RIGHT |
|
||||||
|
bindings = <
|
||||||
|
&kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp BSPC
|
||||||
|
&kp TAB &kp Q &kp W &kp E &kp R &kp T &kp LPAR &kp RPAR &kp Y &kp U &kp I &kp O &kp P &kp MINUS
|
||||||
|
&kp LCTRL &kp A &kp S &kp D &kp F &kp G &kp LBKT &kp RBKT &kp H &kp J &kp K &kp L &kp SEMI &kp SQT
|
||||||
|
&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp PG_UP &kp PG_DN &kp HOME &kp END &kp N &kp M &kp COMMA &kp DOT &kp FSLH &mt RSHFT RET
|
||||||
|
&kp LCTRL &kp LALT &kp LGUI &mo 3 &kp LGUI &mo 1 &kp SPACE &kp DEL &kp SPACE &mo 2 &kp LEFT &kp DOWN &kp UP &kp RIGHT
|
||||||
|
>;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
lower_layer {
|
||||||
|
// --------------------------------------------------------------------------------------------------------------------------
|
||||||
|
// | ESC | 1 | 2 | 3 | 4 | 5 | --- | 6 | 7 | 8 | 9 | 0 | DEL |
|
||||||
|
// | ESC | 1 | 2 | 3 | 4 | 5 | ( | --- | ) | 6 | 7 | 8 | 9 | 0 | DEL |
|
||||||
|
// | CTRL | - | = | [ | ] | \ | [ | --- | ] | * | 4 | 5 | 6 | + | - |
|
||||||
|
// | SHIFT | ESC | GUI | COPY | PASTE | | PG_UP | PG_DOWN | --- | HOME | END | \ | 1 | 2 | 3 | RET | RET |
|
||||||
|
// | CRTL | ALT | GUI | LOWER | GUI | LOWER | SPACE | --- | DEL | 0 | RAISE | LEFT | DOWN | UP | RIGHT |
|
||||||
|
bindings = <
|
||||||
|
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans
|
||||||
|
&kp ESC &kp N1 &kp N2 &kp N3 &kp N4 &kp N5 &trans &trans &kp N6 &kp N7 &kp N8 &kp N9 &kp N0 &kp DEL
|
||||||
|
&trans &kp MINUS &kp EQUAL &kp LBKT &kp RBKT &kp BSLH &trans &trans &kp KP_MULTIPLY &kp N4 &kp N5 &kp N6 &kp KP_PLUS &kp KP_MINUS
|
||||||
|
&trans &kp ESC &kp LGUI &kp LG(C) &kp LG(V) &kp GRAVE &trans &trans &trans &trans &kp KP_DIVIDE &kp N1 &kp N2 &kp N3 &kp RET &kp RET
|
||||||
|
&trans &trans &trans &trans &trans &trans &trans &trans &kp N0 &mo 3 &trans &trans &trans &trans
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
raise_layer {
|
||||||
|
// ----------------------------------------------------------------------------------------------------------------------------
|
||||||
|
// | ESC | 1 | 2 | 3 | 4 | 5 | --- | 6 | 7 | 8 | 9 | 0 | DEL |
|
||||||
|
// | ESC | ! | @ | # | $ | % | ( | --- | ) | ^ | & | * | ( | ) | DEL |
|
||||||
|
// | CTRL | _ | + | { | } | "|" | [ | --- | ] | HOME | PGUP | PRSC | UP | ` | ~ |
|
||||||
|
// | SHIFT | ESC | GUI | ( | ) | | PG_UP | PG_DOWN | --- | HOME | END | END | PGDN | LEFT | DOWN | RIGHT | RET |
|
||||||
|
// | CRTL | ALT | GUI | LOWER | GUI | LOWER | SPACE | --- | DEL | SPACE | RAISE | LEFT | DOWN | UP | RIGHT |
|
||||||
|
bindings = <
|
||||||
|
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans
|
||||||
|
&kp ESC &kp EXCL &kp AT &kp HASH &kp DLLR &kp PRCNT &trans &trans &kp CARET &kp AMPS &kp ASTRK &kp LPAR &kp RPAR &kp DEL
|
||||||
|
&trans &kp UNDER &kp PLUS &kp LBRC &kp RBRC &kp PIPE &trans &trans &kp HOME &kp PG_UP &kp PSCRN &kp UP &kp GRAVE &kp TILDE
|
||||||
|
&trans &kp ESC &kp LGUI &kp LPAR &kp RPAR &kp TILDE &trans &trans &trans &trans &kp END &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &kp RET
|
||||||
|
&trans &trans &trans &mo 3 &trans &mo 3 &trans &trans &trans &trans &trans &trans &trans &trans
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
|
||||||
|
adjust_layer {
|
||||||
|
// -----------------------------------------------------------------------------------------
|
||||||
|
// | F1 | F2 | F3 | F4 | F5 | F6 | --- | F7 | F8 | F9 | F10 | F11 | F12 |
|
||||||
|
// | TAB | | | | | | BOOTL | --- | ) | BT1 | BT2 | BT3 | BT4 | BT5 | OUTPUT TGL |
|
||||||
|
// | CTRL | MUTE | Vol Dn | Vol Up | Play/Pause | | RESET | --- | ] | F1 | F2 | F3 | F4 | F5 | F6 |
|
||||||
|
// | SHIFT | PSCRN | PSCRN | CAPS | | | PG_UP | PG_DOWN | --- | HOME | END | F7 | F8 | F9 | F10 | F11 | F12 |
|
||||||
|
// | CRTL | ALT | GUI | LOWER | GUI | LOWER | SPACE | --- | DEL | SPACE | RAISE | LEFT | DOWN | UP | RIGHT |
|
||||||
|
bindings = <
|
||||||
|
&kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6 &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12
|
||||||
|
&trans &none &none &none &none &none &bootloader &bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &out OUT_TOG
|
||||||
|
&trans &kp K_MUTE &kp C_VOL_DN &kp C_VOL_UP &kp C_PLAY_PAUSE &none &reset &trans &kp F1 &kp F2 &kp F3 &kp F4 &kp F5 &kp F6
|
||||||
|
&trans &kp PSCRN &kp PSCRN &kp CLCK &none &none &trans &trans &trans &trans &kp F7 &kp F8 &kp F9 &kp F10 &kp F11 &kp F12
|
||||||
|
&trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans &trans
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
12
app/boards/shields/redox/redox.zmk.yml
Normal file
12
app/boards/shields/redox/redox.zmk.yml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
file_format: "1"
|
||||||
|
id: redox
|
||||||
|
name: Redox
|
||||||
|
type: shield
|
||||||
|
url: https://github.com/mattdibi/redox-keyboard
|
||||||
|
requires: [pro_micro]
|
||||||
|
features:
|
||||||
|
- keys
|
||||||
|
- underglow
|
||||||
|
siblings:
|
||||||
|
- redox_left
|
||||||
|
- redox_right
|
19
app/boards/shields/redox/redox_left.overlay
Normal file
19
app/boards/shields/redox/redox_left.overlay
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "redox.dtsi"
|
||||||
|
|
||||||
|
&kscan0 {
|
||||||
|
col-gpios
|
||||||
|
= <&pro_micro 20 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 19 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 18 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 15 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 14 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 16 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 10 GPIO_ACTIVE_HIGH>
|
||||||
|
;
|
||||||
|
};
|
23
app/boards/shields/redox/redox_right.overlay
Normal file
23
app/boards/shields/redox/redox_right.overlay
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "redox.dtsi"
|
||||||
|
|
||||||
|
&default_transform {
|
||||||
|
col-offset = <7>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&kscan0 {
|
||||||
|
col-gpios
|
||||||
|
= <&pro_micro 10 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 16 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 14 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 15 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 18 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 19 GPIO_ACTIVE_HIGH>
|
||||||
|
, <&pro_micro 20 GPIO_ACTIVE_HIGH>
|
||||||
|
;
|
||||||
|
};
|
|
@ -105,8 +105,10 @@ if (ZMK_CONFIG)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# TODO: Board revisions?
|
# TODO: Board revisions?
|
||||||
|
list(APPEND overlay_candidates "${ZMK_CONFIG}/${BOARD_DIR_NAME}.overlay")
|
||||||
list(APPEND overlay_candidates "${ZMK_CONFIG}/${BOARD}.overlay")
|
list(APPEND overlay_candidates "${ZMK_CONFIG}/${BOARD}.overlay")
|
||||||
list(APPEND overlay_candidates "${ZMK_CONFIG}/default.overlay")
|
list(APPEND overlay_candidates "${ZMK_CONFIG}/default.overlay")
|
||||||
|
list(APPEND config_candidates "${ZMK_CONFIG}/${BOARD_DIR_NAME}.conf")
|
||||||
list(APPEND config_candidates "${ZMK_CONFIG}/${BOARD}.conf")
|
list(APPEND config_candidates "${ZMK_CONFIG}/${BOARD}.conf")
|
||||||
list(APPEND config_candidates "${ZMK_CONFIG}/default.conf")
|
list(APPEND config_candidates "${ZMK_CONFIG}/default.conf")
|
||||||
|
|
||||||
|
|
|
@ -14,3 +14,4 @@
|
||||||
#include <behaviors/bluetooth.dtsi>
|
#include <behaviors/bluetooth.dtsi>
|
||||||
#include <behaviors/ext_power.dtsi>
|
#include <behaviors/ext_power.dtsi>
|
||||||
#include <behaviors/outputs.dtsi>
|
#include <behaviors/outputs.dtsi>
|
||||||
|
#include <behaviors/caps_word.dtsi>
|
||||||
|
|
19
app/dts/behaviors/caps_word.dtsi
Normal file
19
app/dts/behaviors/caps_word.dtsi
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
behaviors {
|
||||||
|
/omit-if-no-ref/ caps_word: behavior_caps_word {
|
||||||
|
compatible = "zmk,behavior-caps-word";
|
||||||
|
label = "CAPS_WORD";
|
||||||
|
#binding-cells = <0>;
|
||||||
|
continue-list = <UNDERSCORE>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
15
app/dts/bindings/behaviors/zmk,behavior-caps-word.yaml
Normal file
15
app/dts/bindings/behaviors/zmk,behavior-caps-word.yaml
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
description: Caps word behavior
|
||||||
|
|
||||||
|
compatible: "zmk,behavior-caps-word"
|
||||||
|
|
||||||
|
include: zero_param.yaml
|
||||||
|
|
||||||
|
properties:
|
||||||
|
continue-list:
|
||||||
|
type: array
|
||||||
|
required: true
|
||||||
|
mods:
|
||||||
|
type: int
|
|
@ -13,6 +13,9 @@ properties:
|
||||||
col-offset:
|
col-offset:
|
||||||
type: int
|
type: int
|
||||||
default: 0
|
default: 0
|
||||||
|
row-offset:
|
||||||
|
type: int
|
||||||
|
default: 0
|
||||||
map:
|
map:
|
||||||
type: array
|
type: array
|
||||||
required: true
|
required: true
|
||||||
|
|
|
@ -28,21 +28,20 @@ echo "Running $testcase:"
|
||||||
|
|
||||||
west build -d build/$testcase -b native_posix -- -DZMK_CONFIG="$(pwd)/$testcase" > /dev/null 2>&1
|
west build -d build/$testcase -b native_posix -- -DZMK_CONFIG="$(pwd)/$testcase" > /dev/null 2>&1
|
||||||
if [ $? -gt 0 ]; then
|
if [ $? -gt 0 ]; then
|
||||||
echo "FAIL: $testcase did not build" >> ./build/tests/pass-fail.log
|
echo "FAILED: $testcase did not build" | tee -a ./build/tests/pass-fail.log
|
||||||
exit 1
|
exit 1
|
||||||
else
|
fi
|
||||||
./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | tee build/$testcase/keycode_events_full.log | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log
|
|
||||||
diff -au $testcase/keycode_events.snapshot build/$testcase/keycode_events.log
|
./build/$testcase/zephyr/zmk.exe | sed -e "s/.*> //" | tee build/$testcase/keycode_events_full.log | sed -n -f $testcase/events.patterns > build/$testcase/keycode_events.log
|
||||||
if [ $? -gt 0 ]; then
|
diff -au $testcase/keycode_events.snapshot build/$testcase/keycode_events.log
|
||||||
if [ -f $testcase/pending ]; then
|
if [ $? -gt 0 ]; then
|
||||||
echo "PEND: $testcase" >> ./build/tests/pass-fail.log
|
if [ -f $testcase/pending ]; then
|
||||||
exit 0
|
echo "PENDING: $testcase" | tee -a ./build/tests/pass-fail.log
|
||||||
else
|
|
||||||
echo "FAIL: $testcase" >> ./build/tests/pass-fail.log
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
echo "PASS: $testcase" >> ./build/tests/pass-fail.log
|
|
||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
echo "FAILED: $testcase" | tee -a ./build/tests/pass-fail.log
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "PASS: $testcase" | tee -a ./build/tests/pass-fail.log
|
||||||
|
exit 0
|
||||||
|
|
|
@ -1,59 +1,64 @@
|
||||||
# Copyright (c) 2021 The ZMK Contributors
|
# Copyright (c) 2021 The ZMK Contributors
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
'''Metadata command for ZMK.'''
|
"""Metadata command for ZMK."""
|
||||||
|
|
||||||
from functools import cached_property
|
from functools import cached_property
|
||||||
import glob
|
import glob
|
||||||
import json
|
import json
|
||||||
from jsonschema import validate, ValidationError
|
import jsonschema
|
||||||
import os
|
|
||||||
import sys
|
import sys
|
||||||
import yaml
|
import yaml
|
||||||
from textwrap import dedent # just for nicer code indentation
|
|
||||||
|
|
||||||
from west.commands import WestCommand
|
from west.commands import WestCommand
|
||||||
from west import log # use this for user output
|
from west import log # use this for user output
|
||||||
|
|
||||||
|
|
||||||
class Metadata(WestCommand):
|
class Metadata(WestCommand):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__(
|
super().__init__(
|
||||||
'metadata', # gets stored as self.name
|
name="metadata",
|
||||||
'ZMK hardware metadata commands', # self.help
|
help="ZMK hardware metadata commands",
|
||||||
# self.description:
|
description="Operate on the board/shield metadata.",
|
||||||
dedent('''Operate on the board/shield metadata.'''))
|
)
|
||||||
|
|
||||||
def do_add_parser(self, parser_adder):
|
def do_add_parser(self, parser_adder):
|
||||||
parser = parser_adder.add_parser(self.name,
|
parser = parser_adder.add_parser(
|
||||||
help=self.help,
|
self.name, help=self.help, description=self.description
|
||||||
description=self.description)
|
)
|
||||||
|
|
||||||
parser.add_argument('subcommand', default="check",
|
parser.add_argument(
|
||||||
help='The subcommand to run. Defaults to "check".', nargs="?")
|
"subcommand",
|
||||||
return parser # gets stored as self.parser
|
default="check",
|
||||||
|
help='The subcommand to run. Defaults to "check".',
|
||||||
|
nargs="?",
|
||||||
|
)
|
||||||
|
return parser # gets stored as self.parser
|
||||||
|
|
||||||
@cached_property
|
@cached_property
|
||||||
def schema(self):
|
def schema(self):
|
||||||
return json.load(
|
return json.load(open("../schema/hardware-metadata.schema.json", "r"))
|
||||||
open("../schema/hardware-metadata.schema.json", 'r'))
|
|
||||||
|
|
||||||
def validate_file(self, file):
|
def validate_file(self, file):
|
||||||
print("Validating: " + file)
|
print("Validating: " + file)
|
||||||
with open(file, 'r') as stream:
|
with open(file, "r") as stream:
|
||||||
try:
|
try:
|
||||||
validate(yaml.safe_load(stream), self.schema)
|
jsonschema.validate(yaml.safe_load(stream), self.schema)
|
||||||
except yaml.YAMLError as exc:
|
except yaml.YAMLError as exc:
|
||||||
print("Failed loading metadata yaml: " + file)
|
print("Failed loading metadata yaml: " + file)
|
||||||
print(exc)
|
print(exc)
|
||||||
return False
|
return False
|
||||||
except ValidationError as vexc:
|
except jsonschema.ValidationError as vexc:
|
||||||
print("Failed validation of: " + file)
|
print("Failed validation of: " + file)
|
||||||
print(vexc)
|
print(vexc)
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def do_run(self, args, unknown_args):
|
def do_run(self, args, unknown_args):
|
||||||
status = all([self.validate_file(f) for f in glob.glob(
|
status = all(
|
||||||
"boards/**/*.zmk.yml", recursive=True)])
|
[
|
||||||
|
self.validate_file(f)
|
||||||
|
for f in glob.glob("boards/**/*.zmk.yml", recursive=True)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
sys.exit(0 if status else 1)
|
sys.exit(0 if status else 1)
|
||||||
|
|
|
@ -1,35 +1,41 @@
|
||||||
# Copyright (c) 2020 The ZMK Contributors
|
# Copyright (c) 2020 The ZMK Contributors
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
'''Test runner for ZMK.'''
|
"""Test runner for ZMK."""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
from textwrap import dedent # just for nicer code indentation
|
|
||||||
|
|
||||||
from west.commands import WestCommand
|
from west.commands import WestCommand
|
||||||
from west import log # use this for user output
|
from west import log # use this for user output
|
||||||
|
|
||||||
|
|
||||||
class Test(WestCommand):
|
class Test(WestCommand):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super().__init__(
|
super().__init__(
|
||||||
'test', # gets stored as self.name
|
name="test",
|
||||||
'run ZMK testsuite', # self.help
|
help="run ZMK testsuite",
|
||||||
# self.description:
|
description="Run the ZMK testsuite.",
|
||||||
dedent('''Run the ZMK testsuite.'''))
|
)
|
||||||
|
|
||||||
def do_add_parser(self, parser_adder):
|
def do_add_parser(self, parser_adder):
|
||||||
parser = parser_adder.add_parser(self.name,
|
parser = parser_adder.add_parser(
|
||||||
help=self.help,
|
self.name,
|
||||||
description=self.description)
|
help=self.help,
|
||||||
|
description=self.description,
|
||||||
|
)
|
||||||
|
|
||||||
parser.add_argument('test_path', default="all",
|
parser.add_argument(
|
||||||
help='The path to the test. Defaults to "all".', nargs="?")
|
"test_path",
|
||||||
return parser # gets stored as self.parser
|
default="all",
|
||||||
|
help='The path to the test. Defaults to "all".',
|
||||||
|
nargs="?",
|
||||||
|
)
|
||||||
|
return parser
|
||||||
|
|
||||||
def do_run(self, args, unknown_args):
|
def do_run(self, args, unknown_args):
|
||||||
# the run-test script assumes the app directory is the current dir.
|
# the run-test script assumes the app directory is the current dir.
|
||||||
os.chdir(f'{self.topdir}/app')
|
os.chdir(f"{self.topdir}/app")
|
||||||
completed_process = subprocess.run(
|
completed_process = subprocess.run(
|
||||||
[f'{self.topdir}/app/run-test.sh', args.test_path])
|
[f"{self.topdir}/app/run-test.sh", args.test_path]
|
||||||
|
)
|
||||||
exit(completed_process.returncode)
|
exit(completed_process.returncode)
|
||||||
|
|
186
app/src/behaviors/behavior_caps_word.c
Normal file
186
app/src/behaviors/behavior_caps_word.c
Normal file
|
@ -0,0 +1,186 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2021 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define DT_DRV_COMPAT zmk_behavior_caps_word
|
||||||
|
|
||||||
|
#include <device.h>
|
||||||
|
#include <drivers/behavior.h>
|
||||||
|
#include <logging/log.h>
|
||||||
|
#include <zmk/behavior.h>
|
||||||
|
|
||||||
|
#include <zmk/endpoints.h>
|
||||||
|
#include <zmk/event_manager.h>
|
||||||
|
#include <zmk/events/position_state_changed.h>
|
||||||
|
#include <zmk/events/keycode_state_changed.h>
|
||||||
|
#include <zmk/events/modifiers_state_changed.h>
|
||||||
|
#include <zmk/hid.h>
|
||||||
|
#include <zmk/keymap.h>
|
||||||
|
|
||||||
|
LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
|
||||||
|
|
||||||
|
#if DT_HAS_COMPAT_STATUS_OKAY(DT_DRV_COMPAT)
|
||||||
|
|
||||||
|
struct caps_word_continue_item {
|
||||||
|
uint16_t page;
|
||||||
|
uint32_t id;
|
||||||
|
uint8_t implicit_modifiers;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct behavior_caps_word_config {
|
||||||
|
zmk_mod_flags_t mods;
|
||||||
|
uint8_t index;
|
||||||
|
uint8_t continuations_count;
|
||||||
|
struct caps_word_continue_item continuations[];
|
||||||
|
};
|
||||||
|
|
||||||
|
struct behavior_caps_word_data {
|
||||||
|
bool active;
|
||||||
|
};
|
||||||
|
|
||||||
|
static void activate_caps_word(const struct device *dev) {
|
||||||
|
struct behavior_caps_word_data *data = dev->data;
|
||||||
|
|
||||||
|
data->active = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void deactivate_caps_word(const struct device *dev) {
|
||||||
|
struct behavior_caps_word_data *data = dev->data;
|
||||||
|
|
||||||
|
data->active = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int on_caps_word_binding_pressed(struct zmk_behavior_binding *binding,
|
||||||
|
struct zmk_behavior_binding_event event) {
|
||||||
|
const struct device *dev = device_get_binding(binding->behavior_dev);
|
||||||
|
struct behavior_caps_word_data *data = dev->data;
|
||||||
|
|
||||||
|
if (data->active) {
|
||||||
|
deactivate_caps_word(dev);
|
||||||
|
} else {
|
||||||
|
activate_caps_word(dev);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ZMK_BEHAVIOR_OPAQUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int on_caps_word_binding_released(struct zmk_behavior_binding *binding,
|
||||||
|
struct zmk_behavior_binding_event event) {
|
||||||
|
return ZMK_BEHAVIOR_OPAQUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct behavior_driver_api behavior_caps_word_driver_api = {
|
||||||
|
.binding_pressed = on_caps_word_binding_pressed,
|
||||||
|
.binding_released = on_caps_word_binding_released,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int caps_word_keycode_state_changed_listener(const zmk_event_t *eh);
|
||||||
|
|
||||||
|
ZMK_LISTENER(behavior_caps_word, caps_word_keycode_state_changed_listener);
|
||||||
|
ZMK_SUBSCRIPTION(behavior_caps_word, zmk_keycode_state_changed);
|
||||||
|
|
||||||
|
static const struct device *devs[DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT)];
|
||||||
|
|
||||||
|
static bool caps_word_is_caps_includelist(const struct behavior_caps_word_config *config,
|
||||||
|
uint16_t usage_page, uint8_t usage_id,
|
||||||
|
uint8_t implicit_modifiers) {
|
||||||
|
for (int i = 0; i < config->continuations_count; i++) {
|
||||||
|
const struct caps_word_continue_item *continuation = &config->continuations[i];
|
||||||
|
LOG_DBG("Comparing with 0x%02X - 0x%02X (with implicit mods: 0x%02X)", continuation->page,
|
||||||
|
continuation->id, continuation->implicit_modifiers);
|
||||||
|
|
||||||
|
if (continuation->page == usage_page && continuation->id == usage_id &&
|
||||||
|
continuation->implicit_modifiers == implicit_modifiers) {
|
||||||
|
LOG_DBG("Continuing capsword, found included usage: 0x%02X - 0x%02X", usage_page,
|
||||||
|
usage_id);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool caps_word_is_alpha(uint8_t usage_id) {
|
||||||
|
return (usage_id >= HID_USAGE_KEY_KEYBOARD_A && usage_id <= HID_USAGE_KEY_KEYBOARD_Z);
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool caps_word_is_numeric(uint8_t usage_id) {
|
||||||
|
return (usage_id >= HID_USAGE_KEY_KEYBOARD_1_AND_EXCLAMATION &&
|
||||||
|
usage_id <= HID_USAGE_KEY_KEYBOARD_0_AND_RIGHT_PARENTHESIS);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void caps_word_enhance_usage(const struct behavior_caps_word_config *config,
|
||||||
|
struct zmk_keycode_state_changed *ev) {
|
||||||
|
if (ev->usage_page != HID_USAGE_KEY || !caps_word_is_alpha(ev->keycode)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG_DBG("Enhancing usage 0x%02X with modifiers: 0x%02X", ev->keycode, config->mods);
|
||||||
|
ev->implicit_modifiers |= config->mods;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int caps_word_keycode_state_changed_listener(const zmk_event_t *eh) {
|
||||||
|
struct zmk_keycode_state_changed *ev = as_zmk_keycode_state_changed(eh);
|
||||||
|
if (ev == NULL || !ev->state) {
|
||||||
|
return ZMK_EV_EVENT_BUBBLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT); i++) {
|
||||||
|
const struct device *dev = devs[i];
|
||||||
|
if (dev == NULL) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct behavior_caps_word_data *data = dev->data;
|
||||||
|
if (!data->active) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const struct behavior_caps_word_config *config = dev->config;
|
||||||
|
|
||||||
|
caps_word_enhance_usage(config, ev);
|
||||||
|
|
||||||
|
if (!caps_word_is_alpha(ev->keycode) && !caps_word_is_numeric(ev->keycode) &&
|
||||||
|
!caps_word_is_caps_includelist(config, ev->usage_page, ev->keycode,
|
||||||
|
ev->implicit_modifiers)) {
|
||||||
|
LOG_DBG("Deactivating caps_word for 0x%02X - 0x%02X", ev->usage_page, ev->keycode);
|
||||||
|
deactivate_caps_word(dev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ZMK_EV_EVENT_BUBBLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int behavior_caps_word_init(const struct device *dev) {
|
||||||
|
const struct behavior_caps_word_config *config = dev->config;
|
||||||
|
devs[config->index] = dev;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#define CAPS_WORD_LABEL(i, _n) DT_INST_LABEL(i)
|
||||||
|
|
||||||
|
#define PARSE_BREAK(i) \
|
||||||
|
{.page = (HID_USAGE_PAGE(i) & 0xFF), \
|
||||||
|
.id = HID_USAGE_ID(i), \
|
||||||
|
.implicit_modifiers = SELECT_MODS(i)},
|
||||||
|
|
||||||
|
#define BREAK_ITEM(i, n) PARSE_BREAK(DT_INST_PROP_BY_IDX(n, continue_list, i))
|
||||||
|
|
||||||
|
#define KP_INST(n) \
|
||||||
|
static struct behavior_caps_word_data behavior_caps_word_data_##n = {.active = false}; \
|
||||||
|
static struct behavior_caps_word_config behavior_caps_word_config_##n = { \
|
||||||
|
.index = n, \
|
||||||
|
.mods = DT_INST_PROP_OR(n, mods, MOD_LSFT), \
|
||||||
|
.continuations = {UTIL_LISTIFY(DT_INST_PROP_LEN(n, continue_list), BREAK_ITEM, n)}, \
|
||||||
|
.continuations_count = DT_INST_PROP_LEN(n, continue_list), \
|
||||||
|
}; \
|
||||||
|
DEVICE_DT_INST_DEFINE(n, behavior_caps_word_init, device_pm_control_nop, \
|
||||||
|
&behavior_caps_word_data_##n, &behavior_caps_word_config_##n, \
|
||||||
|
APPLICATION, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, \
|
||||||
|
&behavior_caps_word_driver_api);
|
||||||
|
|
||||||
|
DT_INST_FOREACH_STATUS_OKAY(KP_INST)
|
||||||
|
|
||||||
|
#endif
|
|
@ -26,14 +26,17 @@ static zmk_mod_flags_t explicit_modifiers = 0;
|
||||||
LOG_DBG("Modifiers set to 0x%02X", keyboard_report.body.modifiers); \
|
LOG_DBG("Modifiers set to 0x%02X", keyboard_report.body.modifiers); \
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define GET_MODIFIERS (keyboard_report.body.modifiers)
|
||||||
|
|
||||||
zmk_mod_flags_t zmk_hid_get_explicit_mods() { return explicit_modifiers; }
|
zmk_mod_flags_t zmk_hid_get_explicit_mods() { return explicit_modifiers; }
|
||||||
|
|
||||||
int zmk_hid_register_mod(zmk_mod_t modifier) {
|
int zmk_hid_register_mod(zmk_mod_t modifier) {
|
||||||
explicit_modifier_counts[modifier]++;
|
explicit_modifier_counts[modifier]++;
|
||||||
LOG_DBG("Modifier %d count %d", modifier, explicit_modifier_counts[modifier]);
|
LOG_DBG("Modifier %d count %d", modifier, explicit_modifier_counts[modifier]);
|
||||||
WRITE_BIT(explicit_modifiers, modifier, true);
|
WRITE_BIT(explicit_modifiers, modifier, true);
|
||||||
|
zmk_mod_flags_t current = GET_MODIFIERS;
|
||||||
SET_MODIFIERS(explicit_modifiers);
|
SET_MODIFIERS(explicit_modifiers);
|
||||||
return 0;
|
return current == GET_MODIFIERS ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int zmk_hid_unregister_mod(zmk_mod_t modifier) {
|
int zmk_hid_unregister_mod(zmk_mod_t modifier) {
|
||||||
|
@ -47,26 +50,30 @@ int zmk_hid_unregister_mod(zmk_mod_t modifier) {
|
||||||
LOG_DBG("Modifier %d released", modifier);
|
LOG_DBG("Modifier %d released", modifier);
|
||||||
WRITE_BIT(explicit_modifiers, modifier, false);
|
WRITE_BIT(explicit_modifiers, modifier, false);
|
||||||
}
|
}
|
||||||
|
zmk_mod_flags_t current = GET_MODIFIERS;
|
||||||
SET_MODIFIERS(explicit_modifiers);
|
SET_MODIFIERS(explicit_modifiers);
|
||||||
return 0;
|
return current == GET_MODIFIERS ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int zmk_hid_register_mods(zmk_mod_flags_t modifiers) {
|
int zmk_hid_register_mods(zmk_mod_flags_t modifiers) {
|
||||||
|
int ret = 0;
|
||||||
for (zmk_mod_t i = 0; i < 8; i++) {
|
for (zmk_mod_t i = 0; i < 8; i++) {
|
||||||
if (modifiers & (1 << i)) {
|
if (modifiers & (1 << i)) {
|
||||||
zmk_hid_register_mod(i);
|
ret += zmk_hid_register_mod(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int zmk_hid_unregister_mods(zmk_mod_flags_t modifiers) {
|
int zmk_hid_unregister_mods(zmk_mod_flags_t modifiers) {
|
||||||
|
int ret = 0;
|
||||||
for (zmk_mod_t i = 0; i < 8; i++) {
|
for (zmk_mod_t i = 0; i < 8; i++) {
|
||||||
if (modifiers & (1 << i)) {
|
if (modifiers & (1 << i)) {
|
||||||
zmk_hid_unregister_mod(i);
|
ret += zmk_hid_unregister_mod(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_ZMK_HID_REPORT_TYPE_NKRO)
|
#if IS_ENABLED(CONFIG_ZMK_HID_REPORT_TYPE_NKRO)
|
||||||
|
@ -130,13 +137,15 @@ static inline int deselect_keyboard_usage(zmk_key_t usage) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int zmk_hid_implicit_modifiers_press(zmk_mod_flags_t implicit_modifiers) {
|
int zmk_hid_implicit_modifiers_press(zmk_mod_flags_t implicit_modifiers) {
|
||||||
|
zmk_mod_flags_t current = GET_MODIFIERS;
|
||||||
SET_MODIFIERS(explicit_modifiers | implicit_modifiers);
|
SET_MODIFIERS(explicit_modifiers | implicit_modifiers);
|
||||||
return 0;
|
return current == GET_MODIFIERS ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int zmk_hid_implicit_modifiers_release() {
|
int zmk_hid_implicit_modifiers_release() {
|
||||||
|
zmk_mod_flags_t current = GET_MODIFIERS;
|
||||||
SET_MODIFIERS(explicit_modifiers);
|
SET_MODIFIERS(explicit_modifiers);
|
||||||
return 0;
|
return current == GET_MODIFIERS ? 0 : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int zmk_hid_keyboard_press(zmk_key_t code) {
|
int zmk_hid_keyboard_press(zmk_key_t code) {
|
||||||
|
|
|
@ -17,56 +17,77 @@ LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
|
||||||
#include <zmk/endpoints.h>
|
#include <zmk/endpoints.h>
|
||||||
|
|
||||||
static int hid_listener_keycode_pressed(const struct zmk_keycode_state_changed *ev) {
|
static int hid_listener_keycode_pressed(const struct zmk_keycode_state_changed *ev) {
|
||||||
int err;
|
int err, explicit_mods_changed, implicit_mods_changed;
|
||||||
|
|
||||||
LOG_DBG("usage_page 0x%02X keycode 0x%02X implicit_mods 0x%02X explicit_mods 0x%02X",
|
LOG_DBG("usage_page 0x%02X keycode 0x%02X implicit_mods 0x%02X explicit_mods 0x%02X",
|
||||||
ev->usage_page, ev->keycode, ev->implicit_modifiers, ev->explicit_modifiers);
|
ev->usage_page, ev->keycode, ev->implicit_modifiers, ev->explicit_modifiers);
|
||||||
switch (ev->usage_page) {
|
switch (ev->usage_page) {
|
||||||
case HID_USAGE_KEY:
|
case HID_USAGE_KEY:
|
||||||
err = zmk_hid_keyboard_press(ev->keycode);
|
err = zmk_hid_keyboard_press(ev->keycode);
|
||||||
if (err) {
|
if (err < 0) {
|
||||||
LOG_ERR("Unable to press keycode");
|
LOG_ERR("Unable to press keycode");
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case HID_USAGE_CONSUMER:
|
case HID_USAGE_CONSUMER:
|
||||||
err = zmk_hid_consumer_press(ev->keycode);
|
err = zmk_hid_consumer_press(ev->keycode);
|
||||||
if (err) {
|
if (err < 0) {
|
||||||
LOG_ERR("Unable to press keycode");
|
LOG_ERR("Unable to press keycode");
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
zmk_hid_register_mods(ev->explicit_modifiers);
|
explicit_mods_changed = zmk_hid_register_mods(ev->explicit_modifiers);
|
||||||
zmk_hid_implicit_modifiers_press(ev->implicit_modifiers);
|
implicit_mods_changed = zmk_hid_implicit_modifiers_press(ev->implicit_modifiers);
|
||||||
|
if (ev->usage_page != HID_USAGE_KEY &&
|
||||||
|
(explicit_mods_changed > 0 || implicit_mods_changed > 0)) {
|
||||||
|
err = zmk_endpoints_send_report(HID_USAGE_KEY);
|
||||||
|
if (err < 0) {
|
||||||
|
LOG_ERR("Failed to send key report for changed mofifiers for consumer page event (%d)",
|
||||||
|
err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return zmk_endpoints_send_report(ev->usage_page);
|
return zmk_endpoints_send_report(ev->usage_page);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hid_listener_keycode_released(const struct zmk_keycode_state_changed *ev) {
|
static int hid_listener_keycode_released(const struct zmk_keycode_state_changed *ev) {
|
||||||
int err;
|
int err, explicit_mods_changed, implicit_mods_changed;
|
||||||
|
|
||||||
LOG_DBG("usage_page 0x%02X keycode 0x%02X implicit_mods 0x%02X explicit_mods 0x%02X",
|
LOG_DBG("usage_page 0x%02X keycode 0x%02X implicit_mods 0x%02X explicit_mods 0x%02X",
|
||||||
ev->usage_page, ev->keycode, ev->implicit_modifiers, ev->explicit_modifiers);
|
ev->usage_page, ev->keycode, ev->implicit_modifiers, ev->explicit_modifiers);
|
||||||
switch (ev->usage_page) {
|
switch (ev->usage_page) {
|
||||||
case HID_USAGE_KEY:
|
case HID_USAGE_KEY:
|
||||||
err = zmk_hid_keyboard_release(ev->keycode);
|
err = zmk_hid_keyboard_release(ev->keycode);
|
||||||
if (err) {
|
if (err < 0) {
|
||||||
LOG_ERR("Unable to release keycode");
|
LOG_ERR("Unable to release keycode");
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case HID_USAGE_CONSUMER:
|
case HID_USAGE_CONSUMER:
|
||||||
err = zmk_hid_consumer_release(ev->keycode);
|
err = zmk_hid_consumer_release(ev->keycode);
|
||||||
if (err) {
|
if (err < 0) {
|
||||||
LOG_ERR("Unable to release keycode");
|
LOG_ERR("Unable to release keycode");
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
zmk_hid_unregister_mods(ev->explicit_modifiers);
|
|
||||||
|
explicit_mods_changed = zmk_hid_unregister_mods(ev->explicit_modifiers);
|
||||||
// There is a minor issue with this code.
|
// There is a minor issue with this code.
|
||||||
// If LC(A) is pressed, then LS(B), then LC(A) is released, the shift for B will be released
|
// If LC(A) is pressed, then LS(B), then LC(A) is released, the shift for B will be released
|
||||||
// prematurely. This causes if LS(B) to repeat like Bbbbbbbb when pressed for a long time.
|
// prematurely. This causes if LS(B) to repeat like Bbbbbbbb when pressed for a long time.
|
||||||
// Solving this would require keeping track of which key's implicit modifiers are currently
|
// Solving this would require keeping track of which key's implicit modifiers are currently
|
||||||
// active and only releasing modifiers at that time.
|
// active and only releasing modifiers at that time.
|
||||||
zmk_hid_implicit_modifiers_release();
|
implicit_mods_changed = zmk_hid_implicit_modifiers_release();
|
||||||
|
;
|
||||||
|
if (ev->usage_page != HID_USAGE_KEY &&
|
||||||
|
(explicit_mods_changed > 0 || implicit_mods_changed > 0)) {
|
||||||
|
err = zmk_endpoints_send_report(HID_USAGE_KEY);
|
||||||
|
if (err < 0) {
|
||||||
|
LOG_ERR("Failed to send key report for changed mofifiers for consumer page event (%d)",
|
||||||
|
err);
|
||||||
|
}
|
||||||
|
}
|
||||||
return zmk_endpoints_send_report(ev->usage_page);
|
return zmk_endpoints_send_report(ev->usage_page);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
17
app/tests/caps-word/behavior_keymap.dtsi
Normal file
17
app/tests/caps-word/behavior_keymap.dtsi
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/kscan_mock.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
keymap {
|
||||||
|
compatible = "zmk,keymap";
|
||||||
|
label = "Default keymap";
|
||||||
|
|
||||||
|
default_layer {
|
||||||
|
bindings = <
|
||||||
|
&caps_word &kp A
|
||||||
|
&kp N6 &kp MINUS
|
||||||
|
>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
|
@ -0,0 +1,4 @@
|
||||||
|
s/.*hid_listener_keycode_//p
|
||||||
|
s/.*hid_implicit_modifiers_//p
|
||||||
|
s/.*caps_word_enhance_usage/enhance_usage/p
|
||||||
|
s/.*caps_word_is_caps_includelist/caps_includelist/p
|
|
@ -0,0 +1,17 @@
|
||||||
|
enhance_usage: Enhancing usage 0x04 with modifiers: 0x02
|
||||||
|
pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x02 explicit_mods 0x00
|
||||||
|
press: Modifiers set to 0x02
|
||||||
|
released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00
|
||||||
|
release: Modifiers set to 0x00
|
||||||
|
caps_includelist: Comparing with 0x07 - 0x2d (with implicit mods: 0x02)
|
||||||
|
caps_includelist: Comparing with 0x07 - 0x2d (with implicit mods: 0x00)
|
||||||
|
caps_includelist: Continuing capsword, found included usage: 0x07 - 0x2d
|
||||||
|
pressed: usage_page 0x07 keycode 0x2d implicit_mods 0x00 explicit_mods 0x00
|
||||||
|
press: Modifiers set to 0x00
|
||||||
|
released: usage_page 0x07 keycode 0x2d implicit_mods 0x00 explicit_mods 0x00
|
||||||
|
release: Modifiers set to 0x00
|
||||||
|
enhance_usage: Enhancing usage 0x04 with modifiers: 0x02
|
||||||
|
pressed: usage_page 0x07 keycode 0x04 implicit_mods 0x02 explicit_mods 0x00
|
||||||
|
press: Modifiers set to 0x02
|
||||||
|
released: usage_page 0x07 keycode 0x04 implicit_mods 0x00 explicit_mods 0x00
|
||||||
|
release: Modifiers set to 0x00
|
|
@ -0,0 +1,21 @@
|
||||||
|
#include <dt-bindings/zmk/keys.h>
|
||||||
|
#include <behaviors.dtsi>
|
||||||
|
#include <dt-bindings/zmk/kscan_mock.h>
|
||||||
|
#include "../behavior_keymap.dtsi"
|
||||||
|
|
||||||
|
&caps_word {
|
||||||
|
continue-list = <UNDERSCORE MINUS>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&kscan {
|
||||||
|
events = <
|
||||||
|
ZMK_MOCK_PRESS(0,0,10)
|
||||||
|
ZMK_MOCK_RELEASE(0,0,10)
|
||||||
|
ZMK_MOCK_PRESS(0,1,10)
|
||||||
|
ZMK_MOCK_RELEASE(0,1,10)
|
||||||
|
ZMK_MOCK_PRESS(1,1,10)
|
||||||
|
ZMK_MOCK_RELEASE(1,1,10)
|
||||||
|
ZMK_MOCK_PRESS(0,1,10)
|
||||||
|
ZMK_MOCK_RELEASE(0,1,10)
|
||||||
|
>;
|
||||||
|
};
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue