Merge branch 'main' into dev_branch

This commit is contained in:
kien242 2022-01-17 09:35:53 +07:00 committed by GitHub
commit dce5db4d2d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
14 changed files with 99 additions and 83 deletions

View file

@ -2,5 +2,6 @@
"files.associations": {
"*.overlay": "dts",
"*.keymap": "dts"
}
},
"python.formatting.provider": "black"
}

View file

@ -3,5 +3,5 @@
board_runner_args(dfu-util "--pid=0483:df11" "--alt=0" "--dfuse")
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)

View file

@ -29,7 +29,8 @@
ext-power {
compatible = "zmk,ext-power-generic";
label = "EXT_POWER";
control-gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
init-delay-ms = <50>;
};
vbatt {

View file

@ -12,7 +12,7 @@
compatible = "zmk,ext-power-generic";
label = "EXT_POWER";
control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
init-delay-ms = <10>;
init-delay-ms = <50>;
};
vbatt {

View file

@ -28,21 +28,20 @@ echo "Running $testcase:"
west build -d build/$testcase -b native_posix -- -DZMK_CONFIG="$(pwd)/$testcase" > /dev/null 2>&1
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
else
./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
if [ $? -gt 0 ]; then
if [ -f $testcase/pending ]; then
echo "PEND: $testcase" >> ./build/tests/pass-fail.log
exit 0
else
echo "FAIL: $testcase" >> ./build/tests/pass-fail.log
exit 1
fi
else
echo "PASS: $testcase" >> ./build/tests/pass-fail.log
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
if [ $? -gt 0 ]; then
if [ -f $testcase/pending ]; then
echo "PENDING: $testcase" | tee -a ./build/tests/pass-fail.log
exit 0
fi
echo "FAILED: $testcase" | tee -a ./build/tests/pass-fail.log
exit 1
fi
echo "PASS: $testcase" | tee -a ./build/tests/pass-fail.log
exit 0

View file

@ -1,59 +1,64 @@
# Copyright (c) 2021 The ZMK Contributors
# SPDX-License-Identifier: MIT
'''Metadata command for ZMK.'''
"""Metadata command for ZMK."""
from functools import cached_property
import glob
import json
from jsonschema import validate, ValidationError
import os
import jsonschema
import sys
import yaml
from textwrap import dedent # just for nicer code indentation
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):
def __init__(self):
super().__init__(
'metadata', # gets stored as self.name
'ZMK hardware metadata commands', # self.help
# self.description:
dedent('''Operate on the board/shield metadata.'''))
name="metadata",
help="ZMK hardware metadata commands",
description="Operate on the board/shield metadata.",
)
def do_add_parser(self, parser_adder):
parser = parser_adder.add_parser(self.name,
help=self.help,
description=self.description)
parser = parser_adder.add_parser(
self.name, help=self.help, description=self.description
)
parser.add_argument('subcommand', default="check",
help='The subcommand to run. Defaults to "check".', nargs="?")
return parser # gets stored as self.parser
parser.add_argument(
"subcommand",
default="check",
help='The subcommand to run. Defaults to "check".',
nargs="?",
)
return parser # gets stored as self.parser
@cached_property
def schema(self):
return json.load(
open("../schema/hardware-metadata.schema.json", 'r'))
return json.load(open("../schema/hardware-metadata.schema.json", "r"))
def validate_file(self, file):
print("Validating: " + file)
with open(file, 'r') as stream:
with open(file, "r") as stream:
try:
validate(yaml.safe_load(stream), self.schema)
jsonschema.validate(yaml.safe_load(stream), self.schema)
except yaml.YAMLError as exc:
print("Failed loading metadata yaml: " + file)
print(exc)
return False
except ValidationError as vexc:
except jsonschema.ValidationError as vexc:
print("Failed validation of: " + file)
print(vexc)
return False
return True
def do_run(self, args, unknown_args):
status = all([self.validate_file(f) for f in glob.glob(
"boards/**/*.zmk.yml", recursive=True)])
status = all(
[
self.validate_file(f)
for f in glob.glob("boards/**/*.zmk.yml", recursive=True)
]
)
sys.exit(0 if status else 1)

View file

@ -1,35 +1,41 @@
# Copyright (c) 2020 The ZMK Contributors
# SPDX-License-Identifier: MIT
'''Test runner for ZMK.'''
"""Test runner for ZMK."""
import os
import subprocess
from textwrap import dedent # just for nicer code indentation
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):
def __init__(self):
super().__init__(
'test', # gets stored as self.name
'run ZMK testsuite', # self.help
# self.description:
dedent('''Run the ZMK testsuite.'''))
name="test",
help="run ZMK testsuite",
description="Run the ZMK testsuite.",
)
def do_add_parser(self, parser_adder):
parser = parser_adder.add_parser(self.name,
help=self.help,
description=self.description)
parser = parser_adder.add_parser(
self.name,
help=self.help,
description=self.description,
)
parser.add_argument('test_path', default="all",
help='The path to the test. Defaults to "all".', nargs="?")
return parser # gets stored as self.parser
parser.add_argument(
"test_path",
default="all",
help='The path to the test. Defaults to "all".',
nargs="?",
)
return parser
def do_run(self, args, unknown_args):
# 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(
[f'{self.topdir}/app/run-test.sh', args.test_path])
[f"{self.topdir}/app/run-test.sh", args.test_path]
)
exit(completed_process.returncode)

View file

@ -26,7 +26,7 @@ From here on, building and flashing ZMK should all be done from the `app/` subdi
cd app
```
To build for your particular keyboard, the behaviour varies slightly depending on if you are building for a keyboard with
To build for your particular keyboard, the behavior varies slightly depending on if you are building for a keyboard with
an onboard MCU, or one that uses an MCU board addon.
### Keyboard (Shield) + MCU Board

View file

@ -100,7 +100,7 @@ Boards and shields should document the sets of hardware features found on them u
The `siblings` array is used to identify multiple hardware items designed to be used together as one logical device. Right now, that primarily is used to identify the two halves of a split keyboard, but future enhancements will include more complicated and flexible combinations.
The array should contrain the complete harware IDs of the siblings that combine in the logical device, e.g. with the `corne.zmk.yml` file:
The array should contain the complete hardware IDs of the siblings that combine in the logical device, e.g. with the `corne.zmk.yml` file:
```yaml
id: corne

View file

@ -360,7 +360,7 @@ The two `#include` lines at the top of the keymap are required in order to bring
Further documentation on behaviors and bindings is forthcoming, but a summary of the current behaviors you can bind to key positions is as follows:
- `kp` is the "key press" behavior, and takes a single binding argument of the key code from the 'keyboard/keypad" HID usage table.
- `mo` is the "momentary layer" behaviour, and takes a single binding argument of the numeric ID of the layer to momentarily enable when that key is held.
- `mo` is the "momentary layer" behavior, and takes a single binding argument of the numeric ID of the layer to momentarily enable when that key is held.
- `trans` is the "transparent" behavior, useful to be place in higher layers above `mo` bindings to be sure the key release is handled by the lower layer. No binding arguments are required.
- `mt` is the "mod-tap" behavior, and takes two binding arguments, the modifier to use if held, and the keycode to send if tapped.

View file

@ -12,7 +12,7 @@ As a best-in-class RTOS, Zephyr™ brings many [benefits](https://www.zephyrproj
- Powerful hardware abstraction and configuration using [DeviceTree](https://docs.zephyrproject.org/latest/guides/dts/index.html) and [Kconfig](https://docs.zephyrproject.org/latest/guides/kconfig/index.html).
- A BLE stack that periodically obtains [qualification](https://docs.zephyrproject.org/latest/guides/bluetooth/bluetooth-qual.html) listings, making it easier for final products to obtain qualification from the Bluetooth® SIG.
- Multi-processor support, which is critical for power efficiency in upcoming MCUs.
- Permissive licencing with its Apache 2.0 open source [license](https://www.apache.org/licenses/LICENSE-2.0).
- Permissive licensing with its Apache 2.0 open source [license](https://www.apache.org/licenses/LICENSE-2.0).
- A buzzing developer [community](https://github.com/zephyrproject-rtos/zephyr) including many leading [embedded technology](https://www.zephyrproject.org/project-members) companies.
- Long term support (LTS) with security updates.
@ -23,7 +23,7 @@ Thats an excellent question! There are already great keyboard firmwares avail
- Zephyr™
- See [Why Zephyr™?](#why-zephyr)
- Licensing
- Just like other open source firmware, ZMK is all about the free and the sharing. However, some other projects use the GPL licence which prevents integration of libraries and drivers whose licenses are not GPL-compatible (such as some embedded BLE drivers). ZMK uses the permissive [MIT](https://github.com/zmkfirmware/zmk/blob/main/LICENSE) license which doesnt have this limitation.
- Just like other open source firmware, ZMK is all about the free and the sharing. However, some other projects use the GPL license which prevents integration of libraries and drivers whose licenses are not GPL-compatible (such as some embedded BLE drivers). ZMK uses the permissive [MIT](https://github.com/zmkfirmware/zmk/blob/main/LICENSE) license which doesnt have this limitation.
- Wireless First
- ZMK is designed for the future, and we believe the future is wireless. So power efficiency plays a critical role in every design decision, just like in Zephyr™.

View file

@ -128,7 +128,7 @@ that defines just one layer for this keymap:
Each layer should have:
1. A `bindings` property this will be a list of behaviour bindings, one for each key position for the keyboard.
1. A `bindings` property this will be a list of behavior bindings, one for each key position for the keyboard.
1. (Optional) A `sensor-bindings` property that will be a list of behavior bindings for each sensor on the keyboard. (Currently, only encoders are supported as sensor hardware, but in the future devices like trackpoints would be supported the same way)
For the full set of possible behaviors, start at the [Key Press](../behaviors/key-press.md) behavior.

View file

@ -143,6 +143,10 @@ GitHub Repo: https://github.com/petejohanson/zmk-config.git
Only the GitHub username is required; if you are happy with the defaults offered in the square brackets, you can simply hit `Enter`.
:::note
If you are using SSH keys for git push, change GitHub Repo field to the SSH scheme, e.g. `git@github.com:petejohanson/zmk-config.git`.
:::
### Confirming Selections
The setup script will confirm all of your selections one last time, before performing the setup:

View file

@ -2664,7 +2664,7 @@ export default [
],
documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=86",
os: {
windows: null,
windows: true,
linux: true,
android: true,
macos: true,
@ -4265,7 +4265,7 @@ export default [
documentation:
"https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07",
os: {
windows: null,
windows: false,
linux: true,
android: true,
macos: false,
@ -4287,7 +4287,7 @@ export default [
documentation:
"https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07",
os: {
windows: null,
windows: false,
linux: true,
android: true,
macos: false,
@ -4309,7 +4309,7 @@ export default [
documentation:
"https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07",
os: {
windows: null,
windows: false,
linux: true,
android: true,
macos: false,
@ -4331,7 +4331,7 @@ export default [
documentation:
"https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07",
os: {
windows: null,
windows: false,
linux: true,
android: true,
macos: false,
@ -4507,7 +4507,7 @@ export default [
documentation:
"https://source.android.com/devices/input/keyboard-devices#hid-keyboard-and-keypad-page-0x07",
os: {
windows: null,
windows: false,
linux: true,
android: true,
macos: false,
@ -5001,7 +5001,7 @@ export default [
],
documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134",
os: {
windows: null,
windows: false,
linux: true,
android: true,
macos: null,
@ -5022,7 +5022,7 @@ export default [
],
documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=134",
os: {
windows: null,
windows: false,
linux: true,
android: null,
macos: null,
@ -5778,7 +5778,7 @@ export default [
],
documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137",
os: {
windows: null,
windows: true,
linux: true,
android: true,
macos: null,
@ -5799,7 +5799,7 @@ export default [
],
documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137",
os: {
windows: null,
windows: true,
linux: true,
android: true,
macos: null,
@ -5820,7 +5820,7 @@ export default [
],
documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137",
os: {
windows: null,
windows: false,
linux: true,
android: true,
macos: null,
@ -5841,7 +5841,7 @@ export default [
],
documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137",
os: {
windows: null,
windows: true,
linux: true,
android: true,
macos: null,
@ -5862,7 +5862,7 @@ export default [
],
documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137",
os: {
windows: null,
windows: true,
linux: true,
android: true,
macos: null,
@ -5883,7 +5883,7 @@ export default [
],
documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137",
os: {
windows: null,
windows: true,
linux: true,
android: true,
macos: true,
@ -5904,7 +5904,7 @@ export default [
],
documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137",
os: {
windows: null,
windows: true,
linux: true,
android: true,
macos: true,
@ -5925,7 +5925,7 @@ export default [
],
documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137",
os: {
windows: null,
windows: false,
linux: true,
android: true,
macos: null,
@ -5967,7 +5967,7 @@ export default [
],
documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137",
os: {
windows: null,
windows: false,
linux: true,
android: false,
macos: null,
@ -5988,7 +5988,7 @@ export default [
],
documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137",
os: {
windows: null,
windows: false,
linux: true,
android: false,
macos: null,
@ -6009,7 +6009,7 @@ export default [
],
documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137",
os: {
windows: null,
windows: false,
linux: true,
android: null,
macos: null,
@ -6051,7 +6051,7 @@ export default [
],
documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=137",
os: {
windows: null,
windows: true,
linux: true,
android: true,
macos: true,
@ -6177,7 +6177,7 @@ export default [
],
documentation: "https://usb.org/sites/default/files/hut1_2.pdf#page=141",
os: {
windows: null,
windows: false,
linux: true,
android: null,
macos: null,