Compare commits
2 commits
main
...
docs/prede
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bc577ffbbd | ||
|
|
a05f5699dd |
164 changed files with 2279 additions and 3584 deletions
8
.github/workflows/ble-test.yml
vendored
8
.github/workflows/ble-test.yml
vendored
|
|
@ -21,7 +21,7 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v7
|
uses: actions/checkout@v4
|
||||||
- name: Find test directories
|
- name: Find test directories
|
||||||
id: test-dirs
|
id: test-dirs
|
||||||
run: |
|
run: |
|
||||||
|
|
@ -38,9 +38,9 @@ jobs:
|
||||||
image: docker.io/zmkfirmware/zmk-build-arm:4.1
|
image: docker.io/zmkfirmware/zmk-build-arm:4.1
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v7
|
uses: actions/checkout@v4
|
||||||
- name: Cache west modules
|
- name: Cache west modules
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v4
|
||||||
env:
|
env:
|
||||||
cache-name: cache-zephyr-modules
|
cache-name: cache-zephyr-modules
|
||||||
with:
|
with:
|
||||||
|
|
@ -72,7 +72,7 @@ jobs:
|
||||||
run: BSIM_COMPONENTS_PATH="${GITHUB_WORKSPACE}/tools/bsim/components" BSIM_OUT_PATH="${GITHUB_WORKSPACE}/tools/bsim" ./run-ble-test.sh tests/ble/${{ matrix.test }}
|
run: BSIM_COMPONENTS_PATH="${GITHUB_WORKSPACE}/tools/bsim/components" BSIM_OUT_PATH="${GITHUB_WORKSPACE}/tools/bsim" ./run-ble-test.sh tests/ble/${{ matrix.test }}
|
||||||
- name: Archive artifacts
|
- name: Archive artifacts
|
||||||
if: ${{ always() }}
|
if: ${{ always() }}
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: "${{ matrix.test }}-log-files"
|
name: "${{ matrix.test }}-log-files"
|
||||||
path: app/build/**/*.log
|
path: app/build/**/*.log
|
||||||
|
|
|
||||||
49
.github/workflows/build-user-config.yml
vendored
49
.github/workflows/build-user-config.yml
vendored
|
|
@ -30,28 +30,17 @@ jobs:
|
||||||
name: Fetch Build Keyboards
|
name: Fetch Build Keyboards
|
||||||
outputs:
|
outputs:
|
||||||
build_matrix: ${{ env.build_matrix }}
|
build_matrix: ${{ env.build_matrix }}
|
||||||
has_valid_build_matrix: ${{ steps.fetch.outputs.has_valid_build_matrix }}
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v7
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Fetch Build Matrix
|
- name: Fetch Build Matrix
|
||||||
id: fetch
|
|
||||||
run: |
|
run: |
|
||||||
matrix_content=$(yq -oj -I0 '${{ inputs.build_matrix_path }}')
|
echo "build_matrix=$(yq -oj -I0 '${{ inputs.build_matrix_path }}')" >> $GITHUB_ENV
|
||||||
|
yq -oj "${{ inputs.build_matrix_path }}"
|
||||||
if [ -z "$matrix_content" ] || [ "$matrix_content" = "null" ]; then
|
|
||||||
echo "::notice file=${{inputs.build_matrix_path}},title=Empty build matrix file::To add a keyboard to the build, see https://zmk.dev/docs/user-setup#add-a-keyboard."
|
|
||||||
echo "has_valid_build_matrix=false" >> $GITHUB_OUTPUT
|
|
||||||
else
|
|
||||||
echo "build_matrix=$matrix_content" >> $GITHUB_ENV
|
|
||||||
echo "has_valid_build_matrix=true" >> $GITHUB_OUTPUT
|
|
||||||
echo "$matrix_content"
|
|
||||||
fi
|
|
||||||
|
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: needs.matrix.outputs.has_valid_build_matrix == 'true'
|
|
||||||
container:
|
container:
|
||||||
image: zmkfirmware/zmk-build-arm:stable
|
image: zmkfirmware/zmk-build-arm:stable
|
||||||
needs: matrix
|
needs: matrix
|
||||||
|
|
@ -67,7 +56,7 @@ jobs:
|
||||||
curl -fsSL https://deb.nodesource.com/setup_22.x | bash && apt install -y nodejs
|
curl -fsSL https://deb.nodesource.com/setup_22.x | bash && apt install -y nodejs
|
||||||
|
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v7
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Create build directory
|
- name: Create build directory
|
||||||
run: |
|
run: |
|
||||||
|
|
@ -108,7 +97,7 @@ jobs:
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Cache west modules
|
- name: Cache west modules
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v4
|
||||||
continue-on-error: true
|
continue-on-error: true
|
||||||
env:
|
env:
|
||||||
cache_name: cache-zephyr-${{ env.zephyr_version }}-modules
|
cache_name: cache-zephyr-${{ env.zephyr_version }}-modules
|
||||||
|
|
@ -158,29 +147,6 @@ jobs:
|
||||||
echo "See also the [list of released versions](https://github.com/zmkfirmware/zmk/releases)." >> $GITHUB_STEP_SUMMARY
|
echo "See also the [list of released versions](https://github.com/zmkfirmware/zmk/releases)." >> $GITHUB_STEP_SUMMARY
|
||||||
echo "If you wish to stay on main, check the most recent pending release PR for breaking changes. [Our blog](https://zmk.dev/blog) may have upgrade information if breaking changes are significant." >> $GITHUB_STEP_SUMMARY
|
echo "If you wish to stay on main, check the most recent pending release PR for breaking changes. [Our blog](https://zmk.dev/blog) may have upgrade information if breaking changes are significant." >> $GITHUB_STEP_SUMMARY
|
||||||
|
|
||||||
- name: Check if building a board without explicit ZMK compat
|
|
||||||
if: always()
|
|
||||||
working-directory: "${{ env.base_dir }}/${{ inputs.config_path }}"
|
|
||||||
run: |
|
|
||||||
if ! (grep "CONFIG_ZMK_BOARD_COMPAT=y" "${{ env.build_dir }}/zephyr/.config" > /dev/null)
|
|
||||||
then
|
|
||||||
original_board=$(echo "${{ matrix.board }}" | sed -e 's$/.*$$')
|
|
||||||
west_board=$(west boards --board-root ${{ env.base_dir }}/zmk/app/module --board-root ${{ env.base_dir }}/zmk/app --board "${original_board}")
|
|
||||||
if [ -z "$west_board" ]; then
|
|
||||||
echo "Not found the board listed with west boards. Skipping further checking."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
west boards --board-root ${{ env.base_dir }}/zmk/app/module --board-root ${{ env.base_dir }}/zmk/app --board "${original_board}" --format "{qualifiers}" | grep "zmk" > /dev/null
|
|
||||||
if [ $? -ne 0 ]
|
|
||||||
then
|
|
||||||
echo "::warning file=build/zephyr/.config,title=Missing ZMK Compat::The selected board does not report explicit ZMK compat. Please verify you've selected the correct board and ZMK variant if one exists"
|
|
||||||
else
|
|
||||||
echo "::error file=build/zephyr/.config,title=Missing ZMK Compat::The selected board is not set up for ZMK and there is a ZMK variant available. See https://zmk.dev/blog/2025/12/09/zephyr-4-1#zmk-board-variant."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: ${{ env.display_name }} Kconfig file
|
- name: ${{ env.display_name }} Kconfig file
|
||||||
run: |
|
run: |
|
||||||
if [ -f "${{ env.build_dir }}/zephyr/.config" ]
|
if [ -f "${{ env.build_dir }}/zephyr/.config" ]
|
||||||
|
|
@ -217,19 +183,18 @@ jobs:
|
||||||
fi
|
fi
|
||||||
|
|
||||||
- name: Archive (${{ env.display_name }})
|
- name: Archive (${{ env.display_name }})
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: artifact-${{ env.artifact_name }}
|
name: artifact-${{ env.artifact_name }}
|
||||||
path: ${{ env.build_dir }}/artifacts
|
path: ${{ env.build_dir }}/artifacts
|
||||||
|
|
||||||
merge:
|
merge:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
if: needs.matrix.outputs.has_valid_build_matrix == 'true'
|
|
||||||
needs: build
|
needs: build
|
||||||
name: Merge Output Artifacts
|
name: Merge Output Artifacts
|
||||||
steps:
|
steps:
|
||||||
- name: Merge Artifacts
|
- name: Merge Artifacts
|
||||||
uses: actions/upload-artifact/merge@v7
|
uses: actions/upload-artifact/merge@v4
|
||||||
with:
|
with:
|
||||||
name: ${{ inputs.archive_name }}
|
name: ${{ inputs.archive_name }}
|
||||||
pattern: artifact-*
|
pattern: artifact-*
|
||||||
|
|
|
||||||
40
.github/workflows/build.yml
vendored
40
.github/workflows/build.yml
vendored
|
|
@ -30,11 +30,11 @@ jobs:
|
||||||
include: ${{ fromJSON(needs.compile-matrix.outputs.include-list) }}
|
include: ${{ fromJSON(needs.compile-matrix.outputs.include-list) }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v7
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Cache west modules
|
- name: Cache west modules
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v4
|
||||||
env:
|
env:
|
||||||
cache-name: cache-zephyr-modules
|
cache-name: cache-zephyr-modules
|
||||||
with:
|
with:
|
||||||
|
|
@ -57,13 +57,13 @@ jobs:
|
||||||
- name: Export Zephyr CMake package (west zephyr-export)
|
- name: Export Zephyr CMake package (west zephyr-export)
|
||||||
run: west zephyr-export
|
run: west zephyr-export
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v6
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: "14.x"
|
node-version: "14.x"
|
||||||
- name: Install @actions/artifact
|
- name: Install @actions/artifact
|
||||||
run: npm install @actions/artifact@5.0.3
|
run: npm install @actions/artifact@5.0.3
|
||||||
- name: Build
|
- name: Build
|
||||||
uses: actions/github-script@v9
|
uses: actions/github-script@v7
|
||||||
id: boards-list
|
id: boards-list
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
|
|
@ -95,7 +95,7 @@ jobs:
|
||||||
throw new Error('Failed to build one or more configurations');
|
throw new Error('Failed to build one or more configurations');
|
||||||
}
|
}
|
||||||
- name: Upload artifacts
|
- name: Upload artifacts
|
||||||
uses: actions/github-script@v9
|
uses: actions/github-script@v7
|
||||||
continue-on-error: ${{ github.event_name == 'pull_request' }}
|
continue-on-error: ${{ github.event_name == 'pull_request' }}
|
||||||
id: boards-upload
|
id: boards-upload
|
||||||
with:
|
with:
|
||||||
|
|
@ -146,7 +146,7 @@ jobs:
|
||||||
include-list: ${{ steps.compile-list.outputs.result }}
|
include-list: ${{ steps.compile-list.outputs.result }}
|
||||||
steps:
|
steps:
|
||||||
- name: Join build lists
|
- name: Join build lists
|
||||||
uses: actions/github-script@v9
|
uses: actions/github-script@v7
|
||||||
id: compile-list
|
id: compile-list
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
|
|
@ -187,16 +187,16 @@ jobs:
|
||||||
core-include: ${{ steps.core-list.outputs.result }}
|
core-include: ${{ steps.core-list.outputs.result }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v7
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v6
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: "14.x"
|
node-version: "14.x"
|
||||||
- name: Install js-yaml
|
- name: Install js-yaml
|
||||||
run: npm install js-yaml
|
run: npm install js-yaml
|
||||||
- uses: actions/github-script@v9
|
- uses: actions/github-script@v7
|
||||||
id: core-list
|
id: core-list
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
|
|
@ -218,14 +218,14 @@ jobs:
|
||||||
boards-include: ${{ steps.boards-list.outputs.result }}
|
boards-include: ${{ steps.boards-list.outputs.result }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v7
|
uses: actions/checkout@v4
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v6
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: "14.x"
|
node-version: "14.x"
|
||||||
- name: Install js-yaml
|
- name: Install js-yaml
|
||||||
run: npm install js-yaml
|
run: npm install js-yaml
|
||||||
- uses: actions/github-script@v9
|
- uses: actions/github-script@v7
|
||||||
id: boards-list
|
id: boards-list
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
|
|
@ -303,7 +303,7 @@ jobs:
|
||||||
nightly-include: ${{ steps.nightly-list.outputs.result }}
|
nightly-include: ${{ steps.nightly-list.outputs.result }}
|
||||||
steps:
|
steps:
|
||||||
- name: Create nightly list
|
- name: Create nightly list
|
||||||
uses: actions/github-script@v9
|
uses: actions/github-script@v7
|
||||||
id: nightly-list
|
id: nightly-list
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
|
|
@ -346,17 +346,17 @@ jobs:
|
||||||
organized-metadata: ${{ steps.organize-metadata.outputs.result }}
|
organized-metadata: ${{ steps.organize-metadata.outputs.result }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v7
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Use Node.js
|
- name: Use Node.js
|
||||||
uses: actions/setup-node@v6
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version: "14.x"
|
node-version: "14.x"
|
||||||
- name: Install js-yaml
|
- name: Install js-yaml
|
||||||
run: npm install js-yaml
|
run: npm install js-yaml
|
||||||
- name: Aggregate Metadata
|
- name: Aggregate Metadata
|
||||||
uses: actions/github-script@v9
|
uses: actions/github-script@v7
|
||||||
id: aggregate-metadata
|
id: aggregate-metadata
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
|
|
@ -374,7 +374,7 @@ jobs:
|
||||||
result-encoding: string
|
result-encoding: string
|
||||||
|
|
||||||
- name: Organize Metadata
|
- name: Organize Metadata
|
||||||
uses: actions/github-script@v9
|
uses: actions/github-script@v7
|
||||||
id: organize-metadata
|
id: organize-metadata
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
|
|
@ -428,7 +428,7 @@ jobs:
|
||||||
core-changes: ${{ steps.core-changes.outputs.result }}
|
core-changes: ${{ steps.core-changes.outputs.result }}
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v7
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- uses: tj-actions/changed-files@9200e69727eb73eb060652b19946b8a2fdfb654b # pin to v45.0.8 due to https://github.com/tj-actions/changed-files/issues/2463 https://www.stepsecurity.io/blog/harden-runner-detection-tj-actions-changed-files-action-is-compromised
|
- uses: tj-actions/changed-files@9200e69727eb73eb060652b19946b8a2fdfb654b # pin to v45.0.8 due to https://github.com/tj-actions/changed-files/issues/2463 https://www.stepsecurity.io/blog/harden-runner-detection-tj-actions-changed-files-action-is-compromised
|
||||||
|
|
@ -436,7 +436,7 @@ jobs:
|
||||||
with:
|
with:
|
||||||
json: true
|
json: true
|
||||||
escape_json: false
|
escape_json: false
|
||||||
- uses: actions/github-script@v9
|
- uses: actions/github-script@v7
|
||||||
id: board-changes
|
id: board-changes
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
|
|
@ -444,7 +444,7 @@ jobs:
|
||||||
const boardChanges = changedFiles.filter(f => f.startsWith('app/boards'));
|
const boardChanges = changedFiles.filter(f => f.startsWith('app/boards'));
|
||||||
return boardChanges.length ? 'true' : 'false';
|
return boardChanges.length ? 'true' : 'false';
|
||||||
result-encoding: string
|
result-encoding: string
|
||||||
- uses: actions/github-script@v9
|
- uses: actions/github-script@v7
|
||||||
id: core-changes
|
id: core-changes
|
||||||
with:
|
with:
|
||||||
script: |
|
script: |
|
||||||
|
|
|
||||||
4
.github/workflows/doc-checks.yml
vendored
4
.github/workflows/doc-checks.yml
vendored
|
|
@ -14,7 +14,7 @@ jobs:
|
||||||
lint:
|
lint:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@v4
|
||||||
- uses: bahmutov/npm-install@v1
|
- uses: bahmutov/npm-install@v1
|
||||||
with:
|
with:
|
||||||
working-directory: docs
|
working-directory: docs
|
||||||
|
|
@ -24,7 +24,7 @@ jobs:
|
||||||
typecheck:
|
typecheck:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@v4
|
||||||
- uses: bahmutov/npm-install@v1
|
- uses: bahmutov/npm-install@v1
|
||||||
with:
|
with:
|
||||||
working-directory: docs
|
working-directory: docs
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ jobs:
|
||||||
container:
|
container:
|
||||||
image: docker.io/zmkfirmware/zmk-dev-arm:4.1
|
image: docker.io/zmkfirmware/zmk-dev-arm:4.1
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@v4
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: pip install --break-system-packages -r app/scripts/requirements.txt
|
run: pip install --break-system-packages -r app/scripts/requirements.txt
|
||||||
- name: West init
|
- name: West init
|
||||||
|
|
|
||||||
4
.github/workflows/pre-commit.yml
vendored
4
.github/workflows/pre-commit.yml
vendored
|
|
@ -8,8 +8,8 @@ jobs:
|
||||||
pre-commit:
|
pre-commit:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@v4
|
||||||
- uses: actions/setup-python@v6
|
- uses: actions/setup-python@v5
|
||||||
with:
|
with:
|
||||||
python-version: 3.x
|
python-version: 3.x
|
||||||
- uses: pre-commit/action@v3.0.1
|
- uses: pre-commit/action@v3.0.1
|
||||||
|
|
|
||||||
4
.github/workflows/release-please.yml
vendored
4
.github/workflows/release-please.yml
vendored
|
|
@ -20,7 +20,7 @@ jobs:
|
||||||
minor: ${{ steps.release.outputs.minor }}
|
minor: ${{ steps.release.outputs.minor }}
|
||||||
patch: ${{ steps.release.outputs.patch }}
|
patch: ${{ steps.release.outputs.patch }}
|
||||||
steps:
|
steps:
|
||||||
- uses: googleapis/release-please-action@v5
|
- uses: googleapis/release-please-action@v4
|
||||||
id: release
|
id: release
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.ZMK_RELEASE_PLEASE_TOKEN }}
|
token: ${{ secrets.ZMK_RELEASE_PLEASE_TOKEN }}
|
||||||
|
|
@ -35,7 +35,7 @@ jobs:
|
||||||
ZMK_RELEASE_PLEASE_TOKEN: ${{ secrets.ZMK_RELEASE_PLEASE_TOKEN }}
|
ZMK_RELEASE_PLEASE_TOKEN: ${{ secrets.ZMK_RELEASE_PLEASE_TOKEN }}
|
||||||
VERSION: v${{ needs.handle-commit.outputs.major }}.${{ needs.handle-commit.outputs.minor }}
|
VERSION: v${{ needs.handle-commit.outputs.major }}.${{ needs.handle-commit.outputs.minor }}
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v7
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Create major.minor branch
|
- name: Create major.minor branch
|
||||||
if: ${{ needs.handle-commit.outputs.patch == '0' }}
|
if: ${{ needs.handle-commit.outputs.patch == '0' }}
|
||||||
|
|
|
||||||
2
.github/workflows/stale.yml
vendored
2
.github/workflows/stale.yml
vendored
|
|
@ -7,7 +7,7 @@ jobs:
|
||||||
stale:
|
stale:
|
||||||
runs-on: ubuntu-24.04
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/stale@v10.3.0
|
- uses: actions/stale@v9.1.0
|
||||||
with:
|
with:
|
||||||
days-before-pr-stale: 300 # ~10 months
|
days-before-pr-stale: 300 # ~10 months
|
||||||
stale-pr-label: "stale"
|
stale-pr-label: "stale"
|
||||||
|
|
|
||||||
8
.github/workflows/test.yml
vendored
8
.github/workflows/test.yml
vendored
|
|
@ -23,7 +23,7 @@ jobs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v7
|
uses: actions/checkout@v4
|
||||||
- name: Find test directories
|
- name: Find test directories
|
||||||
id: test-dirs
|
id: test-dirs
|
||||||
run: |
|
run: |
|
||||||
|
|
@ -40,9 +40,9 @@ jobs:
|
||||||
image: docker.io/zmkfirmware/zmk-build-arm:4.1
|
image: docker.io/zmkfirmware/zmk-build-arm:4.1
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v7
|
uses: actions/checkout@v4
|
||||||
- name: Cache west modules
|
- name: Cache west modules
|
||||||
uses: actions/cache@v5
|
uses: actions/cache@v4
|
||||||
env:
|
env:
|
||||||
cache-name: cache-zephyr-modules
|
cache-name: cache-zephyr-modules
|
||||||
with:
|
with:
|
||||||
|
|
@ -69,7 +69,7 @@ jobs:
|
||||||
run: ZMK_TESTS_VERBOSE=1 west test tests/${{ matrix.test }}
|
run: ZMK_TESTS_VERBOSE=1 west test tests/${{ matrix.test }}
|
||||||
- name: Archive artifacts
|
- name: Archive artifacts
|
||||||
if: ${{ always() }}
|
if: ${{ always() }}
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: "${{ matrix.test }}-log-files"
|
name: "${{ matrix.test }}-log-files"
|
||||||
path: app/build/**/*.log
|
path: app/build/**/*.log
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,6 @@ target_sources_ifdef(CONFIG_ZMK_BATTERY_REPORTING app PRIVATE src/events/battery
|
||||||
target_sources_ifdef(CONFIG_ZMK_BATTERY_REPORTING app PRIVATE src/battery.c)
|
target_sources_ifdef(CONFIG_ZMK_BATTERY_REPORTING app PRIVATE src/battery.c)
|
||||||
|
|
||||||
target_sources_ifdef(CONFIG_ZMK_HID_INDICATORS app PRIVATE src/events/hid_indicators_changed.c)
|
target_sources_ifdef(CONFIG_ZMK_HID_INDICATORS app PRIVATE src/events/hid_indicators_changed.c)
|
||||||
add_subdirectory_ifdef(CONFIG_ZMK_HID_INDICATORS src/indicators)
|
|
||||||
|
|
||||||
target_sources_ifdef(CONFIG_ZMK_SPLIT app PRIVATE src/events/split_peripheral_status_changed.c)
|
target_sources_ifdef(CONFIG_ZMK_SPLIT app PRIVATE src/events/split_peripheral_status_changed.c)
|
||||||
add_subdirectory_ifdef(CONFIG_ZMK_SPLIT src/split)
|
add_subdirectory_ifdef(CONFIG_ZMK_SPLIT src/split)
|
||||||
|
|
|
||||||
13
app/Kconfig
13
app/Kconfig
|
|
@ -5,17 +5,6 @@ mainmenu "ZMK Firmware"
|
||||||
|
|
||||||
menu "ZMK"
|
menu "ZMK"
|
||||||
|
|
||||||
config ZMK_BOARD_COMPAT
|
|
||||||
bool
|
|
||||||
help
|
|
||||||
Hidden symbol used to hint that a board has been specifically
|
|
||||||
set up with various ZMK requirements in mind, e.g. settings
|
|
||||||
storage, bootloader integration, etc.
|
|
||||||
|
|
||||||
Failure to set this will warn users they may want to verify they
|
|
||||||
used a ZMK variant of an upstream board, or are using a board
|
|
||||||
properly migrated to a newer ZMK version.
|
|
||||||
|
|
||||||
menu "Basic Keyboard Setup"
|
menu "Basic Keyboard Setup"
|
||||||
|
|
||||||
config ZMK_KEYBOARD_NAME
|
config ZMK_KEYBOARD_NAME
|
||||||
|
|
@ -121,8 +110,6 @@ config ZMK_HID_INDICATORS
|
||||||
Enable HID indicators, used for detecting state of Caps/Scroll/Num Lock,
|
Enable HID indicators, used for detecting state of Caps/Scroll/Num Lock,
|
||||||
Kata, and Compose.
|
Kata, and Compose.
|
||||||
|
|
||||||
rsource "src/indicators/Kconfig"
|
|
||||||
|
|
||||||
config ZMK_HID_SEPARATE_MOD_RELEASE_REPORT
|
config ZMK_HID_SEPARATE_MOD_RELEASE_REPORT
|
||||||
bool "Release Modifiers Separately"
|
bool "Release Modifiers Separately"
|
||||||
help
|
help
|
||||||
|
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
# Copyright (c) 2026 The ZMK Contributors
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
config BOARD_ADAFRUIT_KB2040
|
|
||||||
select ZMK_BOARD_COMPAT if BOARD_ADAFRUIT_KB2040_RP2040_ZMK
|
|
||||||
imply RETAINED_MEM if BOARD_ADAFRUIT_KB2040_RP2040_ZMK
|
|
||||||
imply RETENTION if BOARD_ADAFRUIT_KB2040_RP2040_ZMK
|
|
||||||
imply RETENTION_BOOT_MODE if BOARD_ADAFRUIT_KB2040_RP2040_ZMK
|
|
||||||
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
# Copyright (c) 2026 The ZMK Contributors
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
config BOARD_ADAFRUIT_QT_PY_RP2040
|
|
||||||
select ZMK_BOARD_COMPAT if BOARD_ADAFRUIT_QT_PY_RP2040_RP2040_ZMK
|
|
||||||
imply RETAINED_MEM if BOARD_ADAFRUIT_QT_PY_RP2040_RP2040_ZMK
|
|
||||||
imply RETENTION if BOARD_ADAFRUIT_QT_PY_RP2040_RP2040_ZMK
|
|
||||||
imply RETENTION_BOOT_MODE if BOARD_ADAFRUIT_QT_PY_RP2040_RP2040_ZMK
|
|
||||||
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
# Copyright (c) 2026 Pete Johanson
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
config BOARD_BOARDSOURCE_BLOK
|
|
||||||
select ZMK_BOARD_COMPAT if BOARD_BOARDSOURCE_BLOK_RP2040_ZMK
|
|
||||||
imply RETAINED_MEM if BOARD_BOARDSOURCE_BLOK_RP2040_ZMK
|
|
||||||
imply RETENTION if BOARD_BOARDSOURCE_BLOK_RP2040_ZMK
|
|
||||||
imply RETENTION_BOOT_MODE if BOARD_BOARDSOURCE_BLOK_RP2040_ZMK
|
|
||||||
|
|
||||||
|
|
@ -9,6 +9,10 @@ description: |
|
||||||
natural extension, once there were many shields designed for it, many other *boards* began to be developed
|
natural extension, once there were many shields designed for it, many other *boards* began to be developed
|
||||||
that were compatible to leverage the extensive available shields. Today, many dev kits come with Uno
|
that were compatible to leverage the extensive available shields. Today, many dev kits come with Uno
|
||||||
headers to make it easy to work with them.
|
headers to make it easy to work with them.
|
||||||
|
|
||||||
|
Note: ZMK doesn't support boards with AVR 8-bit processors, such as the ATmega32U4, because Zephyr™ only
|
||||||
|
supports 32-bit and 64-bit platforms. As a result, boards like the original Arduino Uno Rev3 itself are
|
||||||
|
*not* supported by ZMK.
|
||||||
node_labels:
|
node_labels:
|
||||||
gpio: arduino_header
|
gpio: arduino_header
|
||||||
i2c: arduino_i2c
|
i2c: arduino_i2c
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,12 @@ url: https://www.sparkfun.com/products/12640
|
||||||
manufacturer: SparkFun
|
manufacturer: SparkFun
|
||||||
description: |
|
description: |
|
||||||
The SparkFun Pro Micro grew popular as a low cost ATmega32U4 board with sufficient GPIO and peripherals
|
The SparkFun Pro Micro grew popular as a low cost ATmega32U4 board with sufficient GPIO and peripherals
|
||||||
to work for many keyboard needs. Since the original Pro Micro, many pin compatible boards have appeared
|
to work for many keyboard needs. Since the original Pro Micro, many pin compatible boards have appeared,
|
||||||
with various changes or improvements.
|
with various changes or improvements, such as the Elite-C w/ USB-C, nice!nano with nRF52840 wireless.
|
||||||
|
|
||||||
|
Note: ZMK doesn't support boards with AVR 8-bit processors, such as the ATmega32U4, because Zephyr™ only
|
||||||
|
supports 32-bit and 64-bit platforms. As a result, controllers like the SparkFun Pro Micro and the Elite-C
|
||||||
|
are *not* supported by ZMK.
|
||||||
node_labels:
|
node_labels:
|
||||||
gpio: pro_micro
|
gpio: pro_micro
|
||||||
i2c: pro_micro_i2c
|
i2c: pro_micro_i2c
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,6 @@ config BOARD_NRFMICRO
|
||||||
select SOC_NRF52840_QIAA if BOARD_NRFMICRO_NRF52840_ZMK
|
select SOC_NRF52840_QIAA if BOARD_NRFMICRO_NRF52840_ZMK
|
||||||
select SOC_NRF52840_QIAA if BOARD_NRFMICRO_NRF52840_FLIPPED_ZMK
|
select SOC_NRF52840_QIAA if BOARD_NRFMICRO_NRF52840_FLIPPED_ZMK
|
||||||
select SOC_NRF52833_QIAA if BOARD_NRFMICRO_NRF52833_ZMK
|
select SOC_NRF52833_QIAA if BOARD_NRFMICRO_NRF52833_ZMK
|
||||||
select ZMK_BOARD_COMPAT if BOARD_NRFMICRO_NRF52840_ZMK || BOARD_NRFMICRO_NRF52840_FLIPPED_ZMK || BOARD_NRFMICRO_NRF52833_ZMK
|
|
||||||
imply RETAINED_MEM if BOARD_NRFMICRO_NRF52840_ZMK || BOARD_NRFMICRO_NRF52840_FLIPPED_ZMK || BOARD_NRFMICRO_NRF52833_ZMK
|
imply RETAINED_MEM if BOARD_NRFMICRO_NRF52840_ZMK || BOARD_NRFMICRO_NRF52840_FLIPPED_ZMK || BOARD_NRFMICRO_NRF52833_ZMK
|
||||||
imply RETENTION if BOARD_NRFMICRO_NRF52840_ZMK || BOARD_NRFMICRO_NRF52840_FLIPPED_ZMK || BOARD_NRFMICRO_NRF52833_ZMK
|
imply RETENTION if BOARD_NRFMICRO_NRF52840_ZMK || BOARD_NRFMICRO_NRF52840_FLIPPED_ZMK || BOARD_NRFMICRO_NRF52833_ZMK
|
||||||
imply RETENTION_BOOT_MODE if BOARD_NRFMICRO_NRF52840_ZMK || BOARD_NRFMICRO_NRF52840_FLIPPED_ZMK || BOARD_NRFMICRO_NRF52833_ZMK
|
imply RETENTION_BOOT_MODE if BOARD_NRFMICRO_NRF52840_ZMK || BOARD_NRFMICRO_NRF52840_FLIPPED_ZMK || BOARD_NRFMICRO_NRF52833_ZMK
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
config BOARD_BLUEMICRO840
|
config BOARD_BLUEMICRO840
|
||||||
select SOC_NRF52840_QIAA
|
select SOC_NRF52840_QIAA
|
||||||
select ZMK_BOARD_COMPAT if BOARD_BLUEMICRO840_NRF52840_ZMK
|
|
||||||
imply RETAINED_MEM if BOARD_BLUEMICRO840_NRF52840_ZMK
|
imply RETAINED_MEM if BOARD_BLUEMICRO840_NRF52840_ZMK
|
||||||
imply RETENTION if BOARD_BLUEMICRO840_NRF52840_ZMK
|
imply RETENTION if BOARD_BLUEMICRO840_NRF52840_ZMK
|
||||||
imply RETENTION_BOOT_MODE if BOARD_BLUEMICRO840_NRF52840_ZMK
|
imply RETENTION_BOOT_MODE if BOARD_BLUEMICRO840_NRF52840_ZMK
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
config BOARD_TOFU65
|
config BOARD_TOFU65
|
||||||
select SOC_RP2040
|
select SOC_RP2040
|
||||||
select ZMK_BOARD_COMPAT
|
|
||||||
imply RETAINED_MEM
|
imply RETAINED_MEM
|
||||||
imply RETENTION
|
imply RETENTION
|
||||||
imply RETENTION_BOOT_MODE
|
imply RETENTION_BOOT_MODE
|
||||||
|
|
|
||||||
|
|
@ -3,4 +3,3 @@
|
||||||
|
|
||||||
config BOARD_BDN9
|
config BOARD_BDN9
|
||||||
select SOC_STM32F072XB
|
select SOC_STM32F072XB
|
||||||
select ZMK_BOARD_COMPAT
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@
|
||||||
|
|
||||||
config BOARD_PUCHI_BLE
|
config BOARD_PUCHI_BLE
|
||||||
select SOC_NRF52840_QIAA
|
select SOC_NRF52840_QIAA
|
||||||
select ZMK_BOARD_COMPAT if BOARD_PUCHI_BLE_NRF52840_ZMK
|
|
||||||
imply RETAINED_MEM if BOARD_PUCHI_BLE_NRF52840_ZMK
|
imply RETAINED_MEM if BOARD_PUCHI_BLE_NRF52840_ZMK
|
||||||
imply RETENTION if BOARD_PUCHI_BLE_NRF52840_ZMK
|
imply RETENTION if BOARD_PUCHI_BLE_NRF52840_ZMK
|
||||||
imply RETENTION_BOOT_MODE if BOARD_PUCHI_BLE_NRF52840_ZMK
|
imply RETENTION_BOOT_MODE if BOARD_PUCHI_BLE_NRF52840_ZMK
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@
|
||||||
|
|
||||||
config BOARD_ADV360PRO_LEFT
|
config BOARD_ADV360PRO_LEFT
|
||||||
select SOC_NRF52840_QIAA
|
select SOC_NRF52840_QIAA
|
||||||
select ZMK_BOARD_COMPAT
|
|
||||||
imply RETAINED_MEM
|
imply RETAINED_MEM
|
||||||
imply RETENTION
|
imply RETENTION
|
||||||
imply RETENTION_BOOT_MODE
|
imply RETENTION_BOOT_MODE
|
||||||
|
|
@ -5,7 +5,6 @@
|
||||||
|
|
||||||
config BOARD_ADV360PRO_RIGHT
|
config BOARD_ADV360PRO_RIGHT
|
||||||
select SOC_NRF52840_QIAA
|
select SOC_NRF52840_QIAA
|
||||||
select ZMK_BOARD_COMPAT
|
|
||||||
imply RETAINED_MEM
|
imply RETAINED_MEM
|
||||||
imply RETENTION
|
imply RETENTION
|
||||||
imply RETENTION_BOOT_MODE
|
imply RETENTION_BOOT_MODE
|
||||||
|
|
@ -5,7 +5,6 @@
|
||||||
|
|
||||||
config BOARD_CORNEISH_ZEN_LEFT
|
config BOARD_CORNEISH_ZEN_LEFT
|
||||||
select SOC_NRF52840_QIAA
|
select SOC_NRF52840_QIAA
|
||||||
select ZMK_BOARD_COMPAT
|
|
||||||
imply RETAINED_MEM
|
imply RETAINED_MEM
|
||||||
imply RETENTION
|
imply RETENTION
|
||||||
imply RETENTION_BOOT_MODE
|
imply RETENTION_BOOT_MODE
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@
|
||||||
|
|
||||||
config BOARD_CORNEISH_ZEN_RIGHT
|
config BOARD_CORNEISH_ZEN_RIGHT
|
||||||
select SOC_NRF52840_QIAA
|
select SOC_NRF52840_QIAA
|
||||||
select ZMK_BOARD_COMPAT
|
|
||||||
imply RETAINED_MEM
|
imply RETAINED_MEM
|
||||||
imply RETENTION
|
imply RETENTION
|
||||||
imply RETENTION_BOOT_MODE
|
imply RETENTION_BOOT_MODE
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
config BOARD_NRF52840_M2
|
config BOARD_NRF52840_M2
|
||||||
select SOC_NRF52840_QIAA
|
select SOC_NRF52840_QIAA
|
||||||
select ZMK_BOARD_COMPAT if BOARD_NRF52840_M2_NRF52840_ZMK
|
|
||||||
imply RETAINED_MEM if BOARD_NRF52840_M2_NRF52840_ZMK
|
imply RETAINED_MEM if BOARD_NRF52840_M2_NRF52840_ZMK
|
||||||
imply RETENTION if BOARD_NRF52840_M2_NRF52840_ZMK
|
imply RETENTION if BOARD_NRF52840_M2_NRF52840_ZMK
|
||||||
imply RETENTION_BOOT_MODE if BOARD_NRF52840_M2_NRF52840_ZMK
|
imply RETENTION_BOOT_MODE if BOARD_NRF52840_M2_NRF52840_ZMK
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
config BOARD_PILLBUG
|
config BOARD_PILLBUG
|
||||||
select SOC_NRF52840_QIAA
|
select SOC_NRF52840_QIAA
|
||||||
select ZMK_BOARD_COMPAT if BOARD_PILLBUG_NRF52840_ZMK
|
|
||||||
imply RETAINED_MEM if BOARD_PILLBUG_NRF52840_ZMK
|
imply RETAINED_MEM if BOARD_PILLBUG_NRF52840_ZMK
|
||||||
imply RETENTION if BOARD_PILLBUG_NRF52840_ZMK
|
imply RETENTION if BOARD_PILLBUG_NRF52840_ZMK
|
||||||
imply RETENTION_BOOT_MODE if BOARD_PILLBUG_NRF52840_ZMK
|
imply RETENTION_BOOT_MODE if BOARD_PILLBUG_NRF52840_ZMK
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
board:
|
board:
|
||||||
extend: pillbug
|
name: pillbug
|
||||||
variants:
|
variants:
|
||||||
- name: zmk
|
- name: zmk
|
||||||
qualifier: nrf52840
|
qualifier: nrf52840
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
config BOARD_GLOVE80_LH
|
config BOARD_GLOVE80_LH
|
||||||
select SOC_NRF52840_QIAA
|
select SOC_NRF52840_QIAA
|
||||||
select ZMK_BOARD_COMPAT
|
|
||||||
imply RETAINED_MEM
|
imply RETAINED_MEM
|
||||||
imply RETENTION
|
imply RETENTION
|
||||||
imply RETENTION_BOOT_MODE
|
imply RETENTION_BOOT_MODE
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
config BOARD_GLOVE80_RH
|
config BOARD_GLOVE80_RH
|
||||||
select SOC_NRF52840_QIAA
|
select SOC_NRF52840_QIAA
|
||||||
select ZMK_BOARD_COMPAT
|
|
||||||
imply RETAINED_MEM
|
imply RETAINED_MEM
|
||||||
imply RETENTION
|
imply RETENTION
|
||||||
imply RETENTION_BOOT_MODE
|
imply RETENTION_BOOT_MODE
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
config BOARD_NICE60
|
config BOARD_NICE60
|
||||||
select SOC_NRF52840_QIAA
|
select SOC_NRF52840_QIAA
|
||||||
select ZMK_BOARD_COMPAT if BOARD_NICE60_NRF52840_ZMK
|
imply RETAINED_MEM
|
||||||
imply RETAINED_MEM if BOARD_NICE60_NRF52840_ZMK
|
imply RETENTION
|
||||||
imply RETENTION if BOARD_NICE60_NRF52840_ZMK
|
imply RETENTION_BOOT_MODE
|
||||||
imply RETENTION_BOOT_MODE if BOARD_NICE60_NRF52840_ZMK
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
config BOARD_NICE_NANO
|
config BOARD_NICE_NANO
|
||||||
select SOC_NRF52840_QIAA
|
select SOC_NRF52840_QIAA
|
||||||
select ZMK_BOARD_COMPAT if BOARD_NICE_NANO_NRF52840_ZMK
|
|
||||||
imply RETAINED_MEM if BOARD_NICE_NANO_NRF52840_ZMK
|
imply RETAINED_MEM if BOARD_NICE_NANO_NRF52840_ZMK
|
||||||
imply RETENTION if BOARD_NICE_NANO_NRF52840_ZMK
|
imply RETENTION if BOARD_NICE_NANO_NRF52840_ZMK
|
||||||
imply RETENTION_BOOT_MODE if BOARD_NICE_NANO_NRF52840_ZMK
|
imply RETENTION_BOOT_MODE if BOARD_NICE_NANO_NRF52840_ZMK
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
config BOARD_NRF52840DK
|
config BOARD_NRF52840DK
|
||||||
select SOC_NRF52840_QIAA if BOARD_NRF52840DK_NRF52840_ZMK
|
select SOC_NRF52840_QIAA if BOARD_NRF52840DK_NRF52840_ZMK
|
||||||
select ZMK_BOARD_COMPAT if BOARD_NRF52840DK_NRF52840_ZMK
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +0,0 @@
|
||||||
# Copyright (c) 2026 The ZMK Contributors
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
config BOARD_NRF52840DONGLE
|
|
||||||
select ZMK_BOARD_COMPAT if BOARD_NRF52840DONGLE_NRF52840_ZMK
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
# Copyright (c) 2020 The ZMK Contributors
|
# Copyright (c) 2020 The ZMK Contributors
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
if BOARD_PLANCK
|
if BOARD_PLANCK_REV6
|
||||||
|
|
||||||
config ZMK_KEYBOARD_NAME
|
config ZMK_KEYBOARD_NAME
|
||||||
default "Planck V6"
|
default "Planck V6"
|
||||||
|
|
@ -11,4 +11,4 @@ config ZMK_KEYBOARD_NAME
|
||||||
config ZMK_KSCAN_MATRIX_POLLING
|
config ZMK_KSCAN_MATRIX_POLLING
|
||||||
default y
|
default y
|
||||||
|
|
||||||
endif # BOARD_PLANCK
|
endif # BOARD_PLANCK_REV6
|
||||||
|
|
|
||||||
|
|
@ -4,5 +4,5 @@
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
config BOARD_PLANCK
|
config BOARD_PLANCK
|
||||||
|
bool "Planck Keyboard"
|
||||||
select SOC_STM32F303XC
|
select SOC_STM32F303XC
|
||||||
select ZMK_BOARD_COMPAT
|
|
||||||
|
|
|
||||||
|
|
@ -5,4 +5,3 @@
|
||||||
|
|
||||||
config BOARD_PREONIC
|
config BOARD_PREONIC
|
||||||
select SOC_STM32F303XC
|
select SOC_STM32F303XC
|
||||||
select ZMK_BOARD_COMPAT
|
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@
|
||||||
|
|
||||||
config BOARD_FERRIS
|
config BOARD_FERRIS
|
||||||
select SOC_STM32F072XB
|
select SOC_STM32F072XB
|
||||||
select ZMK_BOARD_COMPAT
|
|
||||||
imply RETAINED_MEM
|
imply RETAINED_MEM
|
||||||
imply RETENTION
|
imply RETENTION
|
||||||
imply RETENTION_BOOT_MODE
|
imply RETENTION_BOOT_MODE
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@
|
||||||
|
|
||||||
config BOARD_BT60
|
config BOARD_BT60
|
||||||
select SOC_NRF52840_QIAA
|
select SOC_NRF52840_QIAA
|
||||||
select ZMK_BOARD_COMPAT
|
|
||||||
imply RETAINED_MEM
|
imply RETAINED_MEM
|
||||||
imply RETENTION
|
imply RETENTION
|
||||||
imply RETENTION_BOOT_MODE
|
imply RETENTION_BOOT_MODE
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@
|
||||||
|
|
||||||
config BOARD_BT60_HS
|
config BOARD_BT60_HS
|
||||||
select SOC_NRF52840_QIAA
|
select SOC_NRF52840_QIAA
|
||||||
select ZMK_BOARD_COMPAT
|
|
||||||
imply RETAINED_MEM
|
imply RETAINED_MEM
|
||||||
imply RETENTION
|
imply RETENTION
|
||||||
imply RETENTION_BOOT_MODE
|
imply RETENTION_BOOT_MODE
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@
|
||||||
|
|
||||||
config BOARD_BT65
|
config BOARD_BT65
|
||||||
select SOC_NRF52840_QIAA
|
select SOC_NRF52840_QIAA
|
||||||
select ZMK_BOARD_COMPAT
|
|
||||||
imply RETAINED_MEM
|
imply RETAINED_MEM
|
||||||
imply RETENTION
|
imply RETENTION
|
||||||
imply RETENTION_BOOT_MODE
|
imply RETENTION_BOOT_MODE
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,6 @@
|
||||||
|
|
||||||
config BOARD_BT75
|
config BOARD_BT75
|
||||||
select SOC_NRF52840_QIAA
|
select SOC_NRF52840_QIAA
|
||||||
select ZMK_BOARD_COMPAT
|
|
||||||
imply RETAINED_MEM
|
imply RETAINED_MEM
|
||||||
imply RETENTION
|
imply RETENTION
|
||||||
imply RETENTION_BOOT_MODE
|
imply RETENTION_BOOT_MODE
|
||||||
|
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
# Copyright (c) 2026 The ZMK Contributors
|
|
||||||
# SPDX-License-Identifier: Apache-2.0
|
|
||||||
|
|
||||||
config BOARD_PROTON_C
|
|
||||||
select ZMK_BOARD_COMPAT
|
|
||||||
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
# Copyright (c) 2026 The ZMK Contributors
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
config BOARD_RPI_PICO
|
|
||||||
select SOC_RP2040
|
|
||||||
select ZMK_BOARD_COMPAT if BOARD_RPI_PICO_RP2040_ZMK
|
|
||||||
imply RETAINED_MEM if BOARD_RPI_PICO_RP2040_ZMK
|
|
||||||
imply RETENTION if BOARD_RPI_PICO_RP2040_ZMK
|
|
||||||
imply RETENTION_BOOT_MODE if BOARD_RPI_PICO_RP2040_ZMK
|
|
||||||
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
||||||
# Copyright (c) 2026 Pete Johanson
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
config BOARD_SEEEDUINO_XIAO
|
|
||||||
select ZMK_BOARD_COMPAT if BOARD_SEEEDUINO_XIAO_SAMD21G18A_ZMK
|
|
||||||
imply RETAINED_MEM if BOARD_SEEEDUINO_XIAO_SAMD21G18A_ZMK
|
|
||||||
imply RETENTION if BOARD_SEEEDUINO_XIAO_SAMD21G18A_ZMK
|
|
||||||
imply RETENTION_BOOT_MODE if BOARD_SEEEDUINO_XIAO_SAMD21G18A_ZMK
|
|
||||||
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
# Copyright (c) 2026 Pete Johanson
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
config BOARD_XIAO_BLE
|
|
||||||
select SOC_NRF52840_QIAA
|
|
||||||
select ZMK_BOARD_COMPAT if BOARD_XIAO_BLE_NRF52840_ZMK
|
|
||||||
imply RETAINED_MEM if BOARD_XIAO_BLE_NRF52840_ZMK
|
|
||||||
imply RETENTION if BOARD_XIAO_BLE_NRF52840_ZMK
|
|
||||||
imply RETENTION_BOOT_MODE if BOARD_XIAO_BLE_NRF52840_ZMK
|
|
||||||
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
# Copyright (c) 2026 Pete Johanson
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
config BOARD_XIAO_RP2040
|
|
||||||
select ZMK_BOARD_COMPAT if BOARD_XIAO_RP2040_RP2040_ZMK
|
|
||||||
imply RETAINED_MEM if BOARD_XIAO_RP2040_RP2040_ZMK
|
|
||||||
imply RETENTION if BOARD_XIAO_RP2040_RP2040_ZMK
|
|
||||||
imply RETENTION_BOOT_MODE if BOARD_XIAO_RP2040_RP2040_ZMK
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -3,9 +3,6 @@
|
||||||
|
|
||||||
if SHIELD_NICE_VIEW
|
if SHIELD_NICE_VIEW
|
||||||
|
|
||||||
config LS0XX_VCOM_THREAD_PRIO
|
|
||||||
default 11
|
|
||||||
|
|
||||||
config LV_Z_VDB_SIZE
|
config LV_Z_VDB_SIZE
|
||||||
default 100
|
default 100
|
||||||
|
|
||||||
|
|
@ -29,7 +26,6 @@ endchoice
|
||||||
|
|
||||||
config LV_Z_MEM_POOL_SIZE
|
config LV_Z_MEM_POOL_SIZE
|
||||||
default 8192 if ZMK_DISPLAY_STATUS_SCREEN_CUSTOM
|
default 8192 if ZMK_DISPLAY_STATUS_SCREEN_CUSTOM
|
||||||
default 5120 if ZMK_DISPLAY_STATUS_SCREEN_BUILT_IN
|
|
||||||
|
|
||||||
config ZMK_DISPLAY_STATUS_SCREEN_CUSTOM
|
config ZMK_DISPLAY_STATUS_SCREEN_CUSTOM
|
||||||
imply NICE_VIEW_WIDGET_STATUS
|
imply NICE_VIEW_WIDGET_STATUS
|
||||||
|
|
|
||||||
|
|
@ -12,8 +12,6 @@
|
||||||
reg = <0>;
|
reg = <0>;
|
||||||
width = <160>;
|
width = <160>;
|
||||||
height = <68>;
|
height = <68>;
|
||||||
serial-vcom-inversion;
|
|
||||||
serial-vcom-interval = <33>;
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,114 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2026 The ZMK Contributors
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: MIT
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <physical_layouts.dtsi>
|
|
||||||
|
|
||||||
/ {
|
|
||||||
reviung34_dual_1u_layout: reviung34_dual_1u_layout {
|
|
||||||
compatible = "zmk,physical-layout";
|
|
||||||
display-name = "Dual 1U (34 keys)";
|
|
||||||
|
|
||||||
keys // w h x y rot rx ry
|
|
||||||
= <&key_physical_attrs 100 100 35 2 1000 85 52>
|
|
||||||
, <&key_physical_attrs 100 100 136 1 1000 186 51>
|
|
||||||
, <&key_physical_attrs 100 100 238 0 1000 288 50>
|
|
||||||
, <&key_physical_attrs 100 100 333 35 1000 383 85>
|
|
||||||
, <&key_physical_attrs 100 100 429 71 1000 479 121>
|
|
||||||
, <&key_physical_attrs 100 100 555 71 (-1000) 605 121>
|
|
||||||
, <&key_physical_attrs 100 100 650 35 (-1000) 700 85>
|
|
||||||
, <&key_physical_attrs 100 100 746 0 (-1000) 796 50>
|
|
||||||
, <&key_physical_attrs 100 100 847 1 (-1000) 897 51>
|
|
||||||
, <&key_physical_attrs 100 100 949 1 (-1000) 999 51>
|
|
||||||
, <&key_physical_attrs 100 100 17 100 1000 67 150>
|
|
||||||
, <&key_physical_attrs 100 100 119 99 1000 169 149>
|
|
||||||
, <&key_physical_attrs 100 100 221 98 1000 271 148>
|
|
||||||
, <&key_physical_attrs 100 100 316 134 1000 366 184>
|
|
||||||
, <&key_physical_attrs 100 100 411 169 1000 461 219>
|
|
||||||
, <&key_physical_attrs 100 100 572 169 (-1000) 622 219>
|
|
||||||
, <&key_physical_attrs 100 100 668 134 (-1000) 718 184>
|
|
||||||
, <&key_physical_attrs 100 100 763 98 (-1000) 813 148>
|
|
||||||
, <&key_physical_attrs 100 100 865 99 (-1000) 915 149>
|
|
||||||
, <&key_physical_attrs 100 100 966 100 (-1000) 1016 150>
|
|
||||||
, <&key_physical_attrs 100 100 0 198 1000 50 248>
|
|
||||||
, <&key_physical_attrs 100 100 102 198 1000 152 248>
|
|
||||||
, <&key_physical_attrs 100 100 203 197 1000 253 247>
|
|
||||||
, <&key_physical_attrs 100 100 298 232 1000 348 282>
|
|
||||||
, <&key_physical_attrs 100 100 394 268 1000 444 318>
|
|
||||||
, <&key_physical_attrs 100 100 590 268 (-1000) 640 318>
|
|
||||||
, <&key_physical_attrs 100 100 685 232 (-1000) 735 282>
|
|
||||||
, <&key_physical_attrs 100 100 780 197 (-1000) 830 247>
|
|
||||||
, <&key_physical_attrs 100 100 882 198 (-1000) 932 248>
|
|
||||||
, <&key_physical_attrs 100 100 984 198 (-1000) 1034 248>
|
|
||||||
, <&key_physical_attrs 100 100 328 370 1500 378 420>
|
|
||||||
, <&key_physical_attrs 100 100 442 385 0 0 0>
|
|
||||||
, <&key_physical_attrs 100 100 542 385 0 0 0>
|
|
||||||
, <&key_physical_attrs 100 100 655 370 (-1500) 705 420>
|
|
||||||
;
|
|
||||||
};
|
|
||||||
|
|
||||||
reviung34_single_2u_layout: reviung34_single_2u_layout {
|
|
||||||
compatible = "zmk,physical-layout";
|
|
||||||
display-name = "Single 2U (33 keys)";
|
|
||||||
|
|
||||||
keys // w h x y rot rx ry
|
|
||||||
= <&key_physical_attrs 100 100 35 2 1000 85 52>
|
|
||||||
, <&key_physical_attrs 100 100 136 1 1000 186 51>
|
|
||||||
, <&key_physical_attrs 100 100 238 0 1000 288 50>
|
|
||||||
, <&key_physical_attrs 100 100 333 35 1000 383 85>
|
|
||||||
, <&key_physical_attrs 100 100 429 71 1000 479 121>
|
|
||||||
, <&key_physical_attrs 100 100 555 71 (-1000) 605 121>
|
|
||||||
, <&key_physical_attrs 100 100 650 35 (-1000) 700 85>
|
|
||||||
, <&key_physical_attrs 100 100 746 0 (-1000) 796 50>
|
|
||||||
, <&key_physical_attrs 100 100 847 1 (-1000) 897 51>
|
|
||||||
, <&key_physical_attrs 100 100 949 1 (-1000) 999 51>
|
|
||||||
, <&key_physical_attrs 100 100 17 100 1000 67 150>
|
|
||||||
, <&key_physical_attrs 100 100 119 99 1000 169 149>
|
|
||||||
, <&key_physical_attrs 100 100 221 98 1000 271 148>
|
|
||||||
, <&key_physical_attrs 100 100 316 134 1000 366 184>
|
|
||||||
, <&key_physical_attrs 100 100 411 169 1000 461 219>
|
|
||||||
, <&key_physical_attrs 100 100 572 169 (-1000) 622 219>
|
|
||||||
, <&key_physical_attrs 100 100 668 134 (-1000) 718 184>
|
|
||||||
, <&key_physical_attrs 100 100 763 98 (-1000) 813 148>
|
|
||||||
, <&key_physical_attrs 100 100 865 99 (-1000) 915 149>
|
|
||||||
, <&key_physical_attrs 100 100 966 100 (-1000) 1016 150>
|
|
||||||
, <&key_physical_attrs 100 100 0 198 1000 50 248>
|
|
||||||
, <&key_physical_attrs 100 100 102 198 1000 152 248>
|
|
||||||
, <&key_physical_attrs 100 100 203 197 1000 253 247>
|
|
||||||
, <&key_physical_attrs 100 100 298 232 1000 348 282>
|
|
||||||
, <&key_physical_attrs 100 100 394 268 1000 444 318>
|
|
||||||
, <&key_physical_attrs 100 100 590 268 (-1000) 640 318>
|
|
||||||
, <&key_physical_attrs 100 100 685 232 (-1000) 735 282>
|
|
||||||
, <&key_physical_attrs 100 100 780 197 (-1000) 830 247>
|
|
||||||
, <&key_physical_attrs 100 100 882 198 (-1000) 932 248>
|
|
||||||
, <&key_physical_attrs 100 100 984 198 (-1000) 1034 248>
|
|
||||||
, <&key_physical_attrs 100 100 328 370 1500 378 420>
|
|
||||||
, <&key_physical_attrs 200 100 442 385 0 0 0>
|
|
||||||
, <&key_physical_attrs 100 100 655 370 (-1500) 705 420>
|
|
||||||
;
|
|
||||||
};
|
|
||||||
|
|
||||||
reviung34_position_map {
|
|
||||||
compatible = "zmk,physical-layout-position-map";
|
|
||||||
|
|
||||||
reviung34_dual_1u_posmap {
|
|
||||||
physical-layout = <&reviung34_dual_1u_layout>;
|
|
||||||
positions
|
|
||||||
= < 0 1 2 3 4 5 6 7 8 9>
|
|
||||||
, <10 11 12 13 14 15 16 17 18 19>
|
|
||||||
, <20 21 22 23 24 25 26 27 28 29>
|
|
||||||
, <30 31 33 32>;
|
|
||||||
};
|
|
||||||
|
|
||||||
reviung34_single_2u_posmap {
|
|
||||||
physical-layout = <&reviung34_single_2u_layout>;
|
|
||||||
positions
|
|
||||||
= < 0 1 2 3 4 5 6 7 8 9>
|
|
||||||
, <10 11 12 13 14 15 16 17 18 19>
|
|
||||||
, <20 21 22 23 24 25 26 27 28 29>
|
|
||||||
, <30 31 32>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
@ -6,20 +6,10 @@
|
||||||
|
|
||||||
#include <dt-bindings/zmk/matrix_transform.h>
|
#include <dt-bindings/zmk/matrix_transform.h>
|
||||||
|
|
||||||
#include "reviung34-layouts.dtsi"
|
|
||||||
|
|
||||||
&reviung34_dual_1u_layout {
|
|
||||||
transform = <&dual_1u_transform>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&reviung34_single_2u_layout {
|
|
||||||
transform = <&single_2u_transform>;
|
|
||||||
};
|
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
chosen {
|
chosen {
|
||||||
zmk,kscan = &kscan0;
|
zmk,kscan = &kscan0;
|
||||||
zmk,physical-layout = &reviung34_dual_1u_layout;
|
zmk,matrix-transform = &dual_1u_transform;
|
||||||
};
|
};
|
||||||
|
|
||||||
dual_1u_transform: keymap_transform_0 {
|
dual_1u_transform: keymap_transform_0 {
|
||||||
|
|
|
||||||
|
|
@ -78,7 +78,7 @@
|
||||||
// | | | | | | | | | | | |
|
// | | | | | | | | | | | |
|
||||||
bindings = <
|
bindings = <
|
||||||
&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans
|
&bt BT_CLR &bt BT_SEL 0 &bt BT_SEL 1 &bt BT_SEL 2 &bt BT_SEL 3 &bt BT_SEL 4 &trans &trans &trans &trans &trans &trans
|
||||||
&trans &kp INS &kp PSCRN &kp K_CMENU &trans &trans &kp PG_UP &trans &kp UP &trans &trans &trans
|
&trans &kp INS &kp PSCRN &kp K_CMENU &trans &trans &kp PG_UP &trans &kp UP &trans &kp N0 &trans
|
||||||
&trans &kp LALT &kp LCTRL &kp LSHFT &trans &kp CLCK &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &kp DEL &kp BSPC
|
&trans &kp LALT &kp LCTRL &kp LSHFT &trans &kp CLCK &kp PG_DN &kp LEFT &kp DOWN &kp RIGHT &kp DEL &kp BSPC
|
||||||
&trans &kp K_UNDO &kp K_CUT &kp K_COPY &kp K_PASTE &trans &trans &trans &trans &trans &trans &trans &trans &trans
|
&trans &kp K_UNDO &kp K_CUT &kp K_COPY &kp K_PASTE &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
|
||||||
|
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
# Copyright (c) 2026 The ZMK Contributors
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
config BOARD_SPARKFUN_PRO_MICRO_RP2040
|
|
||||||
select ZMK_BOARD_COMPAT if BOARD_SPARKFUN_PRO_MICRO_RP2040_RP2040_ZMK
|
|
||||||
imply RETAINED_MEM if BOARD_SPARKFUN_PRO_MICRO_RP2040_RP2040_ZMK
|
|
||||||
imply RETENTION if BOARD_SPARKFUN_PRO_MICRO_RP2040_RP2040_ZMK
|
|
||||||
imply RETENTION_BOOT_MODE if BOARD_SPARKFUN_PRO_MICRO_RP2040_RP2040_ZMK
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
# Copyright (c) 2026 The ZMK Contributors
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
config BOARD_BLACKPILL_F401CC
|
|
||||||
select ZMK_BOARD_COMPAT
|
|
||||||
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
# Copyright (c) 2026 The ZMK Contributors
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
config BOARD_BLACKPILL_F401CE
|
|
||||||
select ZMK_BOARD_COMPAT
|
|
||||||
|
|
||||||
|
|
@ -1,6 +0,0 @@
|
||||||
# Copyright (c) 2026 The ZMK Contributors
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
config BOARD_BLACKPILL_F411CE
|
|
||||||
select ZMK_BOARD_COMPAT
|
|
||||||
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
|
|
||||||
config BOARD_MIKOTO
|
config BOARD_MIKOTO
|
||||||
select SOC_NRF52840_QIAA
|
select SOC_NRF52840_QIAA
|
||||||
select ZMK_BOARD_COMPAT if BOARD_MIKOTO_NRF52840_ZMK
|
|
||||||
imply RETAINED_MEM if BOARD_MIKOTO_NRF52840_ZMK
|
imply RETAINED_MEM if BOARD_MIKOTO_NRF52840_ZMK
|
||||||
imply RETENTION if BOARD_MIKOTO_NRF52840_ZMK
|
imply RETENTION if BOARD_MIKOTO_NRF52840_ZMK
|
||||||
imply RETENTION_BOOT_MODE if BOARD_MIKOTO_NRF52840_ZMK
|
imply RETENTION_BOOT_MODE if BOARD_MIKOTO_NRF52840_ZMK
|
||||||
|
|
|
||||||
22
app/dts/behaviors/key_tap.dtsi
Normal file
22
app/dts/behaviors/key_tap.dtsi
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2025 The ZMK Contributors
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <dt-bindings/zmk/behaviors.h>
|
||||||
|
|
||||||
|
/ {
|
||||||
|
macros {
|
||||||
|
#if ZMK_BEHAVIOR_OMIT(KTAP)
|
||||||
|
/omit-if-no-ref/
|
||||||
|
#endif
|
||||||
|
ktap: key_tap {
|
||||||
|
compatible = "zmk,behavior-macro-one-param";
|
||||||
|
#binding-cells = <1>;
|
||||||
|
display-name = "Key Tap";
|
||||||
|
bindings = <¯o_param_1to1>, <&kp MACRO_PLACEHOLDER>;
|
||||||
|
tap-ms = <30>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
@ -16,5 +16,25 @@
|
||||||
#binding-cells = <1>;
|
#binding-cells = <1>;
|
||||||
display-name = "Key Toggle";
|
display-name = "Key Toggle";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if ZMK_BEHAVIOR_OMIT(KT_ON)
|
||||||
|
/omit-if-no-ref/
|
||||||
|
#endif
|
||||||
|
kt_on: key_toggle_on {
|
||||||
|
compatible = "zmk,behavior-key-toggle";
|
||||||
|
#binding-cells = <1>;
|
||||||
|
display-name = "Key Toggle On";
|
||||||
|
toggle-mode = "on";
|
||||||
|
};
|
||||||
|
|
||||||
|
#if ZMK_BEHAVIOR_OMIT(KT_OFF)
|
||||||
|
/omit-if-no-ref/
|
||||||
|
#endif
|
||||||
|
kt_off: key_toggle_off {
|
||||||
|
compatible = "zmk,behavior-key-toggle";
|
||||||
|
#binding-cells = <1>;
|
||||||
|
display-name = "Key Toggle Off";
|
||||||
|
toggle-mode = "off";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -17,5 +17,25 @@
|
||||||
display-name = "Toggle Layer";
|
display-name = "Toggle Layer";
|
||||||
locking;
|
locking;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if ZMK_BEHAVIOR_OMIT(TOG_ON)
|
||||||
|
/omit-if-no-ref/
|
||||||
|
#endif
|
||||||
|
tog_on: toggle_layer_on {
|
||||||
|
compatible = "zmk,behavior-toggle-layer";
|
||||||
|
#binding-cells = <1>;
|
||||||
|
display-name = "Toggle Layer On";
|
||||||
|
toggle-mode = "on";
|
||||||
|
};
|
||||||
|
|
||||||
|
#if ZMK_BEHAVIOR_OMIT(TOG_OFF)
|
||||||
|
/omit-if-no-ref/
|
||||||
|
#endif
|
||||||
|
tog_off: toggle_layer_off {
|
||||||
|
compatible = "zmk,behavior-toggle-layer";
|
||||||
|
#binding-cells = <1>;
|
||||||
|
display-name = "Toggle Layer Off";
|
||||||
|
toggle-mode = "off";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
||||||
# Copyright (c) 2025, The ZMK Contributors
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
description: Display the states of HID indicators using LEDs
|
|
||||||
|
|
||||||
compatible: "zmk,indicator-leds"
|
|
||||||
|
|
||||||
child-binding:
|
|
||||||
properties:
|
|
||||||
leds:
|
|
||||||
type: phandles
|
|
||||||
required: true
|
|
||||||
description: One or more LED devices to control
|
|
||||||
|
|
||||||
indicator:
|
|
||||||
type: int
|
|
||||||
required: true
|
|
||||||
description: HID_INDICATOR_* value to indicate (see dt-bindings/zmk/hid_indicators.h)
|
|
||||||
|
|
||||||
active-brightness:
|
|
||||||
type: int
|
|
||||||
description: LED brightness in percent when the indicator is active
|
|
||||||
default: 100
|
|
||||||
|
|
||||||
inactive-brightness:
|
|
||||||
type: int
|
|
||||||
description: LED brightness in percent when the indicator is not active
|
|
||||||
default: 0
|
|
||||||
|
|
||||||
disconnected-brightness:
|
|
||||||
type: int
|
|
||||||
description: LED brightness in percent when the keyboard is not connected to any device
|
|
||||||
default: 0
|
|
||||||
|
|
||||||
on-while-idle:
|
|
||||||
type: boolean
|
|
||||||
description: Keep LEDs enabled even when the keyboard is idle and on battery power
|
|
||||||
|
|
@ -1,18 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2026 The ZMK Contributors
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: MIT
|
|
||||||
*/
|
|
||||||
|
|
||||||
#pragma once
|
|
||||||
|
|
||||||
#include <dt-bindings/zmk/hid_usage.h>
|
|
||||||
|
|
||||||
// hid.h defines HID_USAGE_LED_NUM_LOCK as the minimum value, so that is bit
|
|
||||||
// zero in the report, and all other indicators are relative to that.
|
|
||||||
|
|
||||||
#define HID_INDICATOR_NUM_LOCK (1 << (HID_USAGE_LED_NUM_LOCK - HID_USAGE_LED_NUM_LOCK))
|
|
||||||
#define HID_INDICATOR_CAPS_LOCK (1 << (HID_USAGE_LED_CAPS_LOCK - HID_USAGE_LED_NUM_LOCK))
|
|
||||||
#define HID_INDICATOR_SCROLL_LOCK (1 << (HID_USAGE_LED_SCROLL_LOCK - HID_USAGE_LED_NUM_LOCK))
|
|
||||||
#define HID_INDICATOR_COMPOSE (1 << (HID_USAGE_LED_COMPOSE - HID_USAGE_LED_NUM_LOCK))
|
|
||||||
#define HID_INDICATOR_KANA (1 << (HID_USAGE_LED_KANA - HID_USAGE_LED_NUM_LOCK))
|
|
||||||
|
|
@ -6,5 +6,4 @@
|
||||||
|
|
||||||
#define OUT_TOG 0
|
#define OUT_TOG 0
|
||||||
#define OUT_USB 1
|
#define OUT_USB 1
|
||||||
#define OUT_BLE 2
|
#define OUT_BLE 2
|
||||||
#define OUT_NONE 3
|
|
||||||
|
|
@ -50,12 +50,12 @@ if (ZMK_CONFIG)
|
||||||
set(ENV{ZMK_CONFIG} "${ZMK_CONFIG}")
|
set(ENV{ZMK_CONFIG} "${ZMK_CONFIG}")
|
||||||
if(EXISTS ${ZMK_CONFIG}/boards)
|
if(EXISTS ${ZMK_CONFIG}/boards)
|
||||||
message(STATUS "Adding ZMK config directory as board root: ${ZMK_CONFIG}")
|
message(STATUS "Adding ZMK config directory as board root: ${ZMK_CONFIG}")
|
||||||
message(DEPRECATION "The `config/boards` folder is deprecated. Please use a module instead. See https://zmk.dev/docs/hardware-integration/new-shield and https://zmk.dev/docs/development/module-creation for more information.")
|
message(DEPRECATION "The `config/boards` folder is deprecated. Please use a module instead. See https://zmk.dev/docs/development/hardware-integration/new-shield and https://zmk.dev/docs/development/module-creation for more information.")
|
||||||
list(APPEND BOARD_ROOT ${ZMK_CONFIG})
|
list(APPEND BOARD_ROOT ${ZMK_CONFIG})
|
||||||
endif()
|
endif()
|
||||||
if(EXISTS ${ZMK_CONFIG}/dts)
|
if(EXISTS ${ZMK_CONFIG}/dts)
|
||||||
message(STATUS "Adding ZMK config directory as DTS root: ${ZMK_CONFIG}")
|
message(STATUS "Adding ZMK config directory as DTS root: ${ZMK_CONFIG}")
|
||||||
message(DEPRECATION "The `config/dts` folder is deprecated. Please use a module instead. See https://zmk.dev/docs/hardware-integration/new-shield and https://zmk.dev/docs/development/module-creation for more information.")
|
message(DEPRECATION "The `config/dts` folder is deprecated. Please use a module instead. See https://zmk.dev/docs/development/hardware-integration/new-shield and https://zmk.dev/docs/development/module-creation for more information.")
|
||||||
list(APPEND DTS_ROOT ${ZMK_CONFIG})
|
list(APPEND DTS_ROOT ${ZMK_CONFIG})
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ config ZMK_KSCAN_MATRIX_WAIT_BEFORE_INPUTS
|
||||||
|
|
||||||
config ZMK_KSCAN_MATRIX_WAIT_BETWEEN_OUTPUTS
|
config ZMK_KSCAN_MATRIX_WAIT_BETWEEN_OUTPUTS
|
||||||
int "Ticks to wait between each output when scanning"
|
int "Ticks to wait between each output when scanning"
|
||||||
default 1 if SOC_RP2040 || SOC_SERIES_RP2350
|
default 1 if SOC_RP2040
|
||||||
default 0
|
default 0
|
||||||
help
|
help
|
||||||
When iterating over each output to drive it active, read inputs, then set
|
When iterating over each output to drive it active, read inputs, then set
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ struct ec11_data {
|
||||||
const struct sensor_trigger *trigger;
|
const struct sensor_trigger *trigger;
|
||||||
|
|
||||||
#if defined(CONFIG_EC11_TRIGGER_OWN_THREAD)
|
#if defined(CONFIG_EC11_TRIGGER_OWN_THREAD)
|
||||||
K_KERNEL_STACK_MEMBER(thread_stack, CONFIG_EC11_THREAD_STACK_SIZE);
|
K_THREAD_STACK_MEMBER(thread_stack, CONFIG_EC11_THREAD_STACK_SIZE);
|
||||||
struct k_sem gpio_sem;
|
struct k_sem gpio_sem;
|
||||||
struct k_thread thread;
|
struct k_thread thread;
|
||||||
#elif defined(CONFIG_EC11_TRIGGER_GLOBAL_THREAD)
|
#elif defined(CONFIG_EC11_TRIGGER_GLOBAL_THREAD)
|
||||||
|
|
|
||||||
|
|
@ -42,11 +42,6 @@ static const struct behavior_parameter_value_metadata std_values[] = {
|
||||||
.type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE,
|
.type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE,
|
||||||
},
|
},
|
||||||
#endif // IS_ENABLED(CONFIG_ZMK_BLE)
|
#endif // IS_ENABLED(CONFIG_ZMK_BLE)
|
||||||
{
|
|
||||||
.value = OUT_NONE,
|
|
||||||
.display_name = "No Output",
|
|
||||||
.type = BEHAVIOR_PARAMETER_VALUE_TYPE_VALUE,
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct behavior_parameter_metadata_set std_set = {
|
static const struct behavior_parameter_metadata_set std_set = {
|
||||||
|
|
@ -70,8 +65,6 @@ static int on_keymap_binding_pressed(struct zmk_behavior_binding *binding,
|
||||||
return zmk_endpoint_set_preferred_transport(ZMK_TRANSPORT_USB);
|
return zmk_endpoint_set_preferred_transport(ZMK_TRANSPORT_USB);
|
||||||
case OUT_BLE:
|
case OUT_BLE:
|
||||||
return zmk_endpoint_set_preferred_transport(ZMK_TRANSPORT_BLE);
|
return zmk_endpoint_set_preferred_transport(ZMK_TRANSPORT_BLE);
|
||||||
case OUT_NONE:
|
|
||||||
return zmk_endpoint_set_preferred_transport(ZMK_TRANSPORT_NONE);
|
|
||||||
default:
|
default:
|
||||||
LOG_ERR("Unknown output command: %d", binding->param1);
|
LOG_ERR("Unknown output command: %d", binding->param1);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
# Copyright (c) 2025 The ZMK Contributors
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
target_sources_ifdef(CONFIG_ZMK_INDICATOR_LEDS app PRIVATE indicator_leds.c)
|
|
||||||
|
|
@ -1,4 +0,0 @@
|
||||||
# Copyright (c) 2026 The ZMK Contributors
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
rsource "Kconfig.indicator_leds"
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
||||||
# Copyright (c) 2025 The ZMK Contributors
|
|
||||||
# SPDX-License-Identifier: MIT
|
|
||||||
|
|
||||||
config ZMK_INDICATOR_LEDS
|
|
||||||
bool
|
|
||||||
default y
|
|
||||||
depends on DT_HAS_ZMK_INDICATOR_LEDS_ENABLED
|
|
||||||
select LED
|
|
||||||
select ZMK_HID_INDICATORS
|
|
||||||
|
|
||||||
if ZMK_INDICATOR_LEDS
|
|
||||||
|
|
||||||
config ZMK_INDICATOR_LEDS_INIT_PRIORITY
|
|
||||||
int "ZMK indicator LED initialization priority"
|
|
||||||
default 91
|
|
||||||
help
|
|
||||||
System initialization priority for ZMK indicator LEDs.
|
|
||||||
|
|
||||||
endif # ZMK_INDICATOR_LEDS
|
|
||||||
|
|
@ -1,226 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (c) 2025 The ZMK Contributors
|
|
||||||
*
|
|
||||||
* SPDX-License-Identifier: MIT
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define DT_DRV_COMPAT zmk_indicator_leds
|
|
||||||
|
|
||||||
#include <errno.h>
|
|
||||||
#include <zephyr/device.h>
|
|
||||||
#include <zephyr/kernel.h>
|
|
||||||
#include <zephyr/drivers/led.h>
|
|
||||||
#include <zephyr/pm/device.h>
|
|
||||||
|
|
||||||
#include <zmk/endpoints.h>
|
|
||||||
#include <zmk/event_manager.h>
|
|
||||||
#include <zmk/hid_indicators.h>
|
|
||||||
#include <zmk/usb.h>
|
|
||||||
#include <zmk/events/activity_state_changed.h>
|
|
||||||
#include <zmk/events/endpoint_changed.h>
|
|
||||||
#include <zmk/events/hid_indicators_changed.h>
|
|
||||||
#include <zmk/events/usb_conn_state_changed.h>
|
|
||||||
|
|
||||||
#include <zephyr/logging/log.h>
|
|
||||||
LOG_MODULE_DECLARE(zmk, CONFIG_ZMK_LOG_LEVEL);
|
|
||||||
|
|
||||||
struct indicator_led_child_config {
|
|
||||||
size_t leds_len;
|
|
||||||
const struct led_dt_spec *leds;
|
|
||||||
|
|
||||||
zmk_hid_indicators_t indicator;
|
|
||||||
uint8_t active_brightness;
|
|
||||||
uint8_t inactive_brightness;
|
|
||||||
uint8_t disconnected_brightness;
|
|
||||||
bool on_while_idle;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct indicator_led_config {
|
|
||||||
size_t indicators_len;
|
|
||||||
const struct indicator_led_child_config *indicators;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct indicator_led_data {
|
|
||||||
enum zmk_activity_state activity_state;
|
|
||||||
zmk_hid_indicators_t indicators;
|
|
||||||
bool usb_powered;
|
|
||||||
bool pm_suspended;
|
|
||||||
bool endpoint_connected;
|
|
||||||
};
|
|
||||||
|
|
||||||
static bool is_led_disabled(const struct indicator_led_child_config *config,
|
|
||||||
const struct indicator_led_data *data) {
|
|
||||||
// LEDs should always be off if the device is suspended.
|
|
||||||
if (data->pm_suspended) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If the keyboard is powered, LEDs don't need to be disabled to save power.
|
|
||||||
if (data->usb_powered) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (data->activity_state) {
|
|
||||||
case ZMK_ACTIVITY_ACTIVE:
|
|
||||||
return false;
|
|
||||||
|
|
||||||
case ZMK_ACTIVITY_IDLE:
|
|
||||||
return !config->on_while_idle;
|
|
||||||
|
|
||||||
case ZMK_ACTIVITY_SLEEP:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG_ERR("Unhandled activity state %d", data->activity_state);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint8_t get_brightness(const struct indicator_led_child_config *config,
|
|
||||||
const struct indicator_led_data *data) {
|
|
||||||
if (is_led_disabled(config, data)) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!data->endpoint_connected) {
|
|
||||||
return config->disconnected_brightness;
|
|
||||||
}
|
|
||||||
|
|
||||||
const bool active = data->indicators & config->indicator;
|
|
||||||
return active ? config->active_brightness : config->inactive_brightness;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int update_indicator(const struct indicator_led_child_config *config,
|
|
||||||
const struct indicator_led_data *data) {
|
|
||||||
const uint8_t value = get_brightness(config, data);
|
|
||||||
|
|
||||||
for (int i = 0; i < config->leds_len; i++) {
|
|
||||||
const struct led_dt_spec *spec = &config->leds[i];
|
|
||||||
const int err = led_set_brightness_dt(spec, value);
|
|
||||||
if (err) {
|
|
||||||
LOG_ERR("Failed to set %s %u to %u%%: %d", spec->dev->name, spec->index, value, err);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
LOG_DBG("Set %s %u to %u%%", spec->dev->name, spec->index, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int update_device(const struct device *dev) {
|
|
||||||
const struct indicator_led_config *config = dev->config;
|
|
||||||
struct indicator_led_data *data = dev->data;
|
|
||||||
|
|
||||||
data->activity_state = zmk_activity_get_state();
|
|
||||||
data->indicators = zmk_hid_indicators_get_current_profile();
|
|
||||||
data->usb_powered = zmk_usb_is_powered();
|
|
||||||
data->endpoint_connected = zmk_endpoint_is_connected();
|
|
||||||
|
|
||||||
for (int i = 0; i < config->indicators_len; i++) {
|
|
||||||
const int err = update_indicator(&config->indicators[i], data);
|
|
||||||
if (err) {
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define INST_DEV(n) DEVICE_DT_GET(DT_DRV_INST(n)),
|
|
||||||
static const struct device *all_instances[] = {DT_INST_FOREACH_STATUS_OKAY(INST_DEV)};
|
|
||||||
|
|
||||||
static void update_all_indicators(struct k_work *work) {
|
|
||||||
LOG_DBG("Updating indicator LEDs");
|
|
||||||
|
|
||||||
for (int i = 0; i < ARRAY_SIZE(all_instances); i++) {
|
|
||||||
if (device_is_ready(all_instances[i])) {
|
|
||||||
update_device(all_instances[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// We may get multiple events at the same time (e.g. endpoint changed will
|
|
||||||
// also trigger HID indicators changed), but we only need to update the LEDs
|
|
||||||
// once per batch of events, so defer the updates with a work item.
|
|
||||||
static K_WORK_DEFINE(update_all_indicators_work, update_all_indicators);
|
|
||||||
|
|
||||||
static int indicator_led_event_listener(const zmk_event_t *eh) {
|
|
||||||
k_work_submit(&update_all_indicators_work);
|
|
||||||
return ZMK_EV_EVENT_BUBBLE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int indicator_led_init(const struct device *dev) { return update_device(dev); }
|
|
||||||
|
|
||||||
ZMK_LISTENER(indicator_led, indicator_led_event_listener);
|
|
||||||
ZMK_SUBSCRIPTION(indicator_led, zmk_activity_state_changed);
|
|
||||||
ZMK_SUBSCRIPTION(indicator_led, zmk_hid_indicators_changed);
|
|
||||||
ZMK_SUBSCRIPTION(indicator_led, zmk_usb_conn_state_changed);
|
|
||||||
ZMK_SUBSCRIPTION(indicator_led, zmk_endpoint_changed);
|
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_PM_DEVICE)
|
|
||||||
|
|
||||||
static int indicator_led_init_pm_action(const struct device *dev, enum pm_device_action action) {
|
|
||||||
struct indicator_led_data *data = dev->data;
|
|
||||||
|
|
||||||
switch (action) {
|
|
||||||
case PM_DEVICE_ACTION_SUSPEND:
|
|
||||||
data->pm_suspended = true;
|
|
||||||
return update_device(dev);
|
|
||||||
|
|
||||||
case PM_DEVICE_ACTION_RESUME:
|
|
||||||
data->pm_suspended = false;
|
|
||||||
return update_device(dev);
|
|
||||||
|
|
||||||
default:
|
|
||||||
return -ENOTSUP;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif // IS_ENABLED(CONFIG_PM_DEVICE)
|
|
||||||
|
|
||||||
#define LED_DT_SPEC_GET_BY_IDX(node_id, prop, idx) \
|
|
||||||
LED_DT_SPEC_GET(DT_PHANDLE_BY_IDX(node_id, prop, idx))
|
|
||||||
|
|
||||||
#define CHILD_LEDS_ARRAY(inst) DT_CAT(indicator_led_dt_spec_, inst)
|
|
||||||
|
|
||||||
#define DEFINE_CHILD_LEDS(inst) \
|
|
||||||
static const struct led_dt_spec CHILD_LEDS_ARRAY(inst)[] = { \
|
|
||||||
DT_FOREACH_PROP_ELEM_SEP(inst, leds, LED_DT_SPEC_GET_BY_IDX, (, )), \
|
|
||||||
};
|
|
||||||
|
|
||||||
#define CHILD_CONFIG(inst) \
|
|
||||||
{ \
|
|
||||||
.leds_len = ARRAY_SIZE(CHILD_LEDS_ARRAY(inst)), \
|
|
||||||
.leds = CHILD_LEDS_ARRAY(inst), \
|
|
||||||
.indicator = DT_PROP(inst, indicator), \
|
|
||||||
.active_brightness = DT_PROP_OR(inst, active_brightness, 100), \
|
|
||||||
.inactive_brightness = DT_PROP_OR(inst, inactive_brightness, 0), \
|
|
||||||
.disconnected_brightness = DT_PROP_OR(inst, disconnected_brightness, 0), \
|
|
||||||
.on_while_idle = DT_PROP_OR(inst, on_while_idle, false), \
|
|
||||||
},
|
|
||||||
|
|
||||||
#define INDICATOR_LED_DEVICE(n) \
|
|
||||||
DT_INST_FOREACH_CHILD(n, DEFINE_CHILD_LEDS) \
|
|
||||||
\
|
|
||||||
static const struct indicator_led_child_config indicator_led_children_##n[] = { \
|
|
||||||
DT_INST_FOREACH_CHILD(n, CHILD_CONFIG)}; \
|
|
||||||
\
|
|
||||||
static const struct indicator_led_config indicator_led_config_##n = { \
|
|
||||||
.indicators_len = ARRAY_SIZE(indicator_led_children_##n), \
|
|
||||||
.indicators = indicator_led_children_##n, \
|
|
||||||
}; \
|
|
||||||
\
|
|
||||||
static struct indicator_led_data indicator_led_data_##n = { \
|
|
||||||
.activity_state = ZMK_ACTIVITY_ACTIVE, \
|
|
||||||
.indicators = 0, \
|
|
||||||
.usb_powered = true, \
|
|
||||||
.pm_suspended = false, \
|
|
||||||
}; \
|
|
||||||
\
|
|
||||||
PM_DEVICE_DT_INST_DEFINE(n, indicator_led_init_pm_action); \
|
|
||||||
\
|
|
||||||
DEVICE_DT_INST_DEFINE(n, &indicator_led_init, PM_DEVICE_DT_INST_GET(n), \
|
|
||||||
&indicator_led_data_##n, &indicator_led_config_##n, POST_KERNEL, \
|
|
||||||
CONFIG_ZMK_INDICATOR_LEDS_INIT_PRIORITY, NULL);
|
|
||||||
|
|
||||||
DT_INST_FOREACH_STATUS_OKAY(INDICATOR_LED_DEVICE);
|
|
||||||
|
|
@ -71,7 +71,7 @@ BUILD_ASSERT(
|
||||||
#define ZMK_LAYOUT_INST(n) \
|
#define ZMK_LAYOUT_INST(n) \
|
||||||
BUILD_ASSERT(!IS_ENABLED(CONFIG_ZMK_STUDIO) || DT_INST_NODE_HAS_PROP(n, keys), \
|
BUILD_ASSERT(!IS_ENABLED(CONFIG_ZMK_STUDIO) || DT_INST_NODE_HAS_PROP(n, keys), \
|
||||||
"ZMK Studio requires physical layouts with key positions. See " \
|
"ZMK Studio requires physical layouts with key positions. See " \
|
||||||
"https://zmk.dev/docs/hardware-integration/studio-setup"); \
|
"https://zmk.dev/docs/development/hardware-integration/studio-setup"); \
|
||||||
static const struct zmk_key_physical_attrs _CONCAT(_zmk_physical_layout_keys_, \
|
static const struct zmk_key_physical_attrs _CONCAT(_zmk_physical_layout_keys_, \
|
||||||
n)[DT_INST_PROP_LEN_OR(n, keys, 0)] = { \
|
n)[DT_INST_PROP_LEN_OR(n, keys, 0)] = { \
|
||||||
LISTIFY(DT_INST_PROP_LEN_OR(n, keys, 0), ZKPA_INIT, (, ), n)}; \
|
LISTIFY(DT_INST_PROP_LEN_OR(n, keys, 0), ZKPA_INIT, (, ), n)}; \
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,8 @@ config ZMK_SPLIT_ROLE_CENTRAL
|
||||||
select BT_SCAN_WITH_IDENTITY
|
select BT_SCAN_WITH_IDENTITY
|
||||||
|
|
||||||
# Bump this value needed for concurrent GATT discovery of splits
|
# Bump this value needed for concurrent GATT discovery of splits
|
||||||
config BT_ATT_TX_COUNT
|
config BT_L2CAP_TX_BUF_COUNT
|
||||||
default 10 if ZMK_SPLIT_ROLE_CENTRAL
|
default 5 if ZMK_SPLIT_ROLE_CENTRAL
|
||||||
|
|
||||||
if ZMK_SPLIT_ROLE_CENTRAL
|
if ZMK_SPLIT_ROLE_CENTRAL
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -77,7 +77,7 @@ static const struct gpio_dt_spec detect_gpio = GPIO_DT_SPEC_INST_GET(0, detect_g
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#error \
|
#error \
|
||||||
"Need to create a node with compatible of 'zmk,wired-split` with a `device` property set to an enabled UART. See http://zmk.dev/docs/hardware-integration/new-shield#wired-split"
|
"Need to create a node with compatible of 'zmk,wired-split` with a `device` property set to an enabled UART. See http://zmk.dev/docs/development/hardware-integration/new-shield#wired-split"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ static const struct gpio_dt_spec detect_gpio = GPIO_DT_SPEC_INST_GET(0, detect_g
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#error \
|
#error \
|
||||||
"Need to create a node with compatible of 'zmk,wired-split` with a `device` property set to an enabled UART. See http://zmk.dev/docs/hardware-integration/new-shield#wired-split"
|
"Need to create a node with compatible of 'zmk,wired-split` with a `device` property set to an enabled UART. See http://zmk.dev/docs/development/hardware-integration/new-shield#wired-split"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -59,20 +59,11 @@ config ZMK_STUDIO_TRANSPORT_UART
|
||||||
select RING_BUFFER
|
select RING_BUFFER
|
||||||
default y if $(dt_chosen_enabled,$(DT_CHOSEN_ZMK_STUDIO_RPC_UART))
|
default y if $(dt_chosen_enabled,$(DT_CHOSEN_ZMK_STUDIO_RPC_UART))
|
||||||
|
|
||||||
if ZMK_STUDIO_TRANSPORT_UART
|
|
||||||
|
|
||||||
config ZMK_STUDIO_TRANSPORT_UART_RX_STACK_SIZE
|
config ZMK_STUDIO_TRANSPORT_UART_RX_STACK_SIZE
|
||||||
int "RX Stack Size"
|
int "RX Stack Size"
|
||||||
depends on !UART_INTERRUPT_DRIVEN
|
depends on !UART_INTERRUPT_DRIVEN
|
||||||
default 512
|
default 512
|
||||||
|
|
||||||
config ZMK_STUDIO_TRANSPORT_UART_RX_PRIORITY
|
|
||||||
int "RX Thread Priority"
|
|
||||||
depends on !UART_INTERRUPT_DRIVEN
|
|
||||||
default 9
|
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
config ZMK_STUDIO_TRANSPORT_BLE
|
config ZMK_STUDIO_TRANSPORT_BLE
|
||||||
bool "BLE (GATT)"
|
bool "BLE (GATT)"
|
||||||
select RING_BUFFER
|
select RING_BUFFER
|
||||||
|
|
@ -80,12 +71,9 @@ config ZMK_STUDIO_TRANSPORT_BLE
|
||||||
depends on ZMK_BLE
|
depends on ZMK_BLE
|
||||||
default y
|
default y
|
||||||
|
|
||||||
|
|
||||||
config BT_CONN_TX_MAX
|
config BT_CONN_TX_MAX
|
||||||
default 64 if ZMK_STUDIO_TRANSPORT_BLE
|
default 64 if ZMK_STUDIO_TRANSPORT_BLE
|
||||||
|
|
||||||
if ZMK_STUDIO_TRANSPORT_BLE
|
|
||||||
|
|
||||||
config ZMK_STUDIO_TRANSPORT_BLE_PREF_LATENCY
|
config ZMK_STUDIO_TRANSPORT_BLE_PREF_LATENCY
|
||||||
int "BLE Transport preferred latency"
|
int "BLE Transport preferred latency"
|
||||||
default 10
|
default 10
|
||||||
|
|
@ -93,8 +81,6 @@ config ZMK_STUDIO_TRANSPORT_BLE_PREF_LATENCY
|
||||||
When the studio UI is connected, a lower latency can be requested in order
|
When the studio UI is connected, a lower latency can be requested in order
|
||||||
to make the interactions between keyboard and studio faster.
|
to make the interactions between keyboard and studio faster.
|
||||||
|
|
||||||
endif
|
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
config ZMK_STUDIO_RPC_THREAD_STACK_SIZE
|
config ZMK_STUDIO_RPC_THREAD_STACK_SIZE
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ static void uart_rx_main(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
K_THREAD_DEFINE(uart_transport_read_thread, CONFIG_ZMK_STUDIO_TRANSPORT_UART_RX_STACK_SIZE,
|
K_THREAD_DEFINE(uart_transport_read_thread, CONFIG_ZMK_STUDIO_TRANSPORT_UART_RX_STACK_SIZE,
|
||||||
uart_rx_main, NULL, NULL, NULL, CONFIG_ZMK_STUDIO_TRANSPORT_UART_RX_PRIORITY, 0, 0);
|
uart_rx_main, NULL, NULL, NULL, K_LOWEST_APPLICATION_THREAD_PRIO, 0, 0);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,16 +3,6 @@
|
||||||
#include <dt-bindings/zmk/kscan_mock.h>
|
#include <dt-bindings/zmk/kscan_mock.h>
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
behaviors {
|
|
||||||
tog_off: toggle_layer_off_only {
|
|
||||||
compatible = "zmk,behavior-toggle-layer";
|
|
||||||
#binding-cells = <1>;
|
|
||||||
display-name = "Toggle Layer Off";
|
|
||||||
toggle-mode = "off";
|
|
||||||
locking;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
keymap {
|
keymap {
|
||||||
compatible = "zmk,keymap";
|
compatible = "zmk,keymap";
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ There's been lots of various activity in ZMK land!
|
||||||
- Tons of [documentation](/docs) work.
|
- Tons of [documentation](/docs) work.
|
||||||
- Refactoring ([#73](https://github.com/zmkfirmware/zmk/pull/73), [#74](https://github.com/zmkfirmware/zmk/pull/74)) of [keymaps](/docs/keymaps) to make them simpler for users.
|
- Refactoring ([#73](https://github.com/zmkfirmware/zmk/pull/73), [#74](https://github.com/zmkfirmware/zmk/pull/74)) of [keymaps](/docs/keymaps) to make them simpler for users.
|
||||||
- Mod-Tap Behavior (docs coming!) is much improved ([#69](https://github.com/zmkfirmware/zmk/pull/69)) and usable now.
|
- Mod-Tap Behavior (docs coming!) is much improved ([#69](https://github.com/zmkfirmware/zmk/pull/69)) and usable now.
|
||||||
- An initial `setup.sh` script was created, allowing users to quickly bootstrap a "user config" setup and push it to GitHub, where GitHub Actions will build the firmware for you.
|
- An initial [`setup.sh`](/docs/user-setup#user-config-setup-script) script was created, allowing users to quickly bootstrap a "user config" setup and push it to GitHub, where GitHub Actions will build the firmware for you.
|
||||||
- Corne shield ([#80](https://github.com/zmkfirmware/zmk/pull/80)) shield definition was added.
|
- Corne shield ([#80](https://github.com/zmkfirmware/zmk/pull/80)) shield definition was added.
|
||||||
- Initial [encoder](/docs/features/encoders) support ([#61](https://github.com/zmkfirmware/zmk/pull/61)) was added.
|
- Initial [encoder](/docs/features/encoders) support ([#61](https://github.com/zmkfirmware/zmk/pull/61)) was added.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -219,7 +219,7 @@ This can be useful to be sure that lowering brightness doesn't set the brightnes
|
||||||
|
|
||||||
## Board/Shield Metadata
|
## Board/Shield Metadata
|
||||||
|
|
||||||
[nicell] and [petejohanson] worked together in [#883](https://github.com/zmkfirmware/zmk/pull/883) to settle on a [metadata format](/docs/hardware-integration/hardware-metadata-files) that is used to document every board and shield. This now drives automatic generation of our [supported hardware](/docs/hardware) page and our
|
[nicell] and [petejohanson] worked together in [#883](https://github.com/zmkfirmware/zmk/pull/883) to settle on a [metadata format](/docs/development/hardware-integration/hardware-metadata-files) that is used to document every board and shield. This now drives automatic generation of our [supported hardware](/docs/hardware) page and our
|
||||||
more nuanced GH Actions automation for testing changes to ZMK.
|
more nuanced GH Actions automation for testing changes to ZMK.
|
||||||
|
|
||||||
## Coming Soon!
|
## Coming Soon!
|
||||||
|
|
|
||||||
|
|
@ -173,7 +173,7 @@ For users or future contributors that might want to dive into writing their own
|
||||||
|
|
||||||
#### Shield interconnects
|
#### Shield interconnects
|
||||||
|
|
||||||
[petejohanson] updated the [new shield guide](/docs/hardware-integration/new-shield) for non-Pro Micro interconnects including Xiao, Arduino Uno and Blackpill in [#1607](https://github.com/zmkfirmware/zmk/pull/1607).
|
[petejohanson] updated the [new shield guide](/docs/development/hardware-integration/new-shield) for non-Pro Micro interconnects including Xiao, Arduino Uno and Blackpill in [#1607](https://github.com/zmkfirmware/zmk/pull/1607).
|
||||||
|
|
||||||
#### Bluetooth feature page
|
#### Bluetooth feature page
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ Stay tuned for future installments in the series!
|
||||||
|
|
||||||
## ZMK Tools
|
## ZMK Tools
|
||||||
|
|
||||||
[ZMK Tools](https://github.com/joelspadin/zmk-tools) is an extension for [Visual Studio Code](https://code.visualstudio.com) that helps with editing a ZMK user config repo or a fork of ZMK. I originally created it to add some code completion in `.keymap` files, but then I realized that with the web version of VS Code, I could also let you set up a user config repo and build firmware, much like the user setup script, except without downloading a single thing.
|
[ZMK Tools](https://github.com/joelspadin/zmk-tools) is an extension for [Visual Studio Code](https://code.visualstudio.com) that helps with editing a ZMK user config repo or a fork of ZMK. I originally created it to add some code completion in `.keymap` files, but then I realized that with the web version of VS Code, I could also let you set up a user config repo and build firmware, much like the [user setup script](/docs/user-setup#user-config-setup-script), except without downloading a single thing.
|
||||||
|
|
||||||
### User Config Setup in Browser
|
### User Config Setup in Browser
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -225,7 +225,7 @@ return (
|
||||||
|
|
||||||
:::note
|
:::note
|
||||||
|
|
||||||
For keyboard maintainers, additional changes are needed to add metadata about the keyboard's physical layouts in order to use ZMK Studio. See the documentation on [physical layouts](/docs/hardware-integration/physical-layouts#optional-keys-property) for more information.
|
For keyboard maintainers, additional changes are needed to add metadata about the keyboard's physical layouts in order to use ZMK Studio. See the documentation on [physical layouts](/docs/development/hardware-integration/physical-layouts#optional-keys-property) for more information.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
To use ZMK Studio, you need to have a firmware for your keyboard with the feature enabled, as well as a small keymap change to add an unlock key. See [Building with ZMK Studio](/docs/features/studio#building) and [ZMK Studio keymap changes](/docs/features/studio#keymap-changes) for more details.
|
To use ZMK Studio, you need to have a firmware for your keyboard with the feature enabled, as well as a small keymap change to add an unlock key. See [Building with ZMK Studio](/docs/features/studio#building) and [ZMK Studio keymap changes](/docs/features/studio#keymap-changes) for more details.
|
||||||
|
|
|
||||||
|
|
@ -80,36 +80,36 @@ As a result, all board definitions found in the ZMK tree now must be used with a
|
||||||
As part of this change, ZMK is now using board/shield revisions, rather than duplicate board/shield definitions. This means that instead of having e.g. `nice_nano`, and `nice_nano_v2`, we only have `nice_nano`, which by default points to the `2.0.0` revision. To point to the original Nice!Nano V1, you would need to use `nice_nano@1.0.0` where you would have previously used `nice_nano`. Of course, you could also put `nice_nano@2.0.0` if you wished to make that explicit, instead of merely replacing `nice_nano_v2` with `nice_nano`. Some boards, such as the `nrfmicro`, also have additional _board qualifiers_ such as the choice between multiple SoCs. Board qualifiers must always be specified, and do not have defaults. See [Zephyr's overview](https://docs.zephyrproject.org/4.1.0/hardware/porting/board_porting.html#board-terminology) for more information on board qualifiers. The below table provides an overview of some of the differences in in-tree boards we have in ZMK, and how they are selected in the new build system. The shorthand shows the minimum needed to build with a specific board, taking into account defaults.
|
As part of this change, ZMK is now using board/shield revisions, rather than duplicate board/shield definitions. This means that instead of having e.g. `nice_nano`, and `nice_nano_v2`, we only have `nice_nano`, which by default points to the `2.0.0` revision. To point to the original Nice!Nano V1, you would need to use `nice_nano@1.0.0` where you would have previously used `nice_nano`. Of course, you could also put `nice_nano@2.0.0` if you wished to make that explicit, instead of merely replacing `nice_nano_v2` with `nice_nano`. Some boards, such as the `nrfmicro`, also have additional _board qualifiers_ such as the choice between multiple SoCs. Board qualifiers must always be specified, and do not have defaults. See [Zephyr's overview](https://docs.zephyrproject.org/4.1.0/hardware/porting/board_porting.html#board-terminology) for more information on board qualifiers. The below table provides an overview of some of the differences in in-tree boards we have in ZMK, and how they are selected in the new build system. The shorthand shows the minimum needed to build with a specific board, taking into account defaults.
|
||||||
|
|
||||||
- nice!nano (`nice_nano`)
|
- nice!nano (`nice_nano`)
|
||||||
- `nice_nano` -> `nice_nano@1.0.0//zmk` (short: `nice_nano@1//zmk`)
|
- `nice_nano` -> `nice_nano@1.0.0` (short: `nice_nano@1`)
|
||||||
- `nice_nano_v2` -> `nice_nano@2.0.0//zmk` (short: `nice_nano//zmk`)
|
- `nice_nano_v2` -> `nice_nano@2.0.0` (short: `nice_nano`)
|
||||||
- nRFMicro (`nrfmicro/nrf52840`)
|
- nRFMicro (`nrfmicro/nrf52840`)
|
||||||
- `nrfmicro_11` -> `nrfmicro@1.1.0/nrf52840/zmk` (short: `nrfmicro@1.1/nrf52840/zmk`)
|
- `nrfmicro_11` -> `nrfmicro@1.1.0/nrf52840` (short: `nrfmicro@1.1/nrf52840`)
|
||||||
- `nrfmicro_11_flipped` -> `nrfmicro@1.1.0/nrf52840/flipped_zmk` (short: `nrfmicro@1.1/nrf52840/flipped_zmk`)
|
- `nrfmicro_11_flipped` -> `nrfmicro@1.1.0/nrf52840/flipped` (short: `nrfmicro@1.1/nrf52840/flipped`)
|
||||||
- `nrfmicro_13` -> `nrfmicro@1.3.0/nrf52840/zmk` (short: `nrfmicro/nrf52840/zmk`)
|
- `nrfmicro_13` -> `nrfmicro@1.3.0/nrf52840` (short: `nrfmicro/nrf52840`)
|
||||||
- `nrfmicro_13_52833` -> `nrfmicro@1.3.0/nrf52833/zmk` (short: `nrfmicro/nrf52833/zmk`)
|
- `nrfmicro_13_52833` -> `nrfmicro@1.3.0/nrf52833` (short: `nrfmicro/nrf52833`)
|
||||||
- Mikoto (`mikoto`)
|
- Mikoto (`mikoto`)
|
||||||
- `mikoto` -> `mikoto@5.20.0//zmk` (short: `mikoto//zmk`)
|
- `mikoto` -> `mikoto@5.20.0` (short: `mikoto`)
|
||||||
- `mikoto@6.1` -> `mikoto@6.1.0//zmk` (short: `mikoto@6//zmk`)
|
- `mikoto@6.1` -> `mikoto@6.1.0` (short: `mikoto@6`)
|
||||||
- `mikoto@7.2` -> `mikoto@7.2.0//zmk` (short: `mikoto@7//zmk`)
|
- `mikoto@7.2` -> `mikoto@7.2.0` (short: `mikoto@7`)
|
||||||
- XIAO RP2040 (`xiao_rp2040`)
|
- XIAO RP2040 (`xiao_rp2040`)
|
||||||
- `seeeduino_xiao_rp2040` -> `xiao_rp2040//zmk`
|
- `seeeduino_xiao_rp2040` -> `xiao_rp2040`
|
||||||
- XIAO nRF52840/BLE (`xiao_ble`)
|
- XIAO nRF52840/BLE (`xiao_ble`)
|
||||||
- `seeeduino_xiao_ble` -> `xiao_ble//zmk`
|
- `seeeduino_xiao_ble` -> `xiao_ble`
|
||||||
- BT60 (`bt60`)
|
- BT60 (`bt60`)
|
||||||
- `bt60_v1` -> `bt60@1.0.0//zmk`
|
- `bt60_v1` -> `bt60@1.0.0`
|
||||||
- `bt60_v2` -> `bt60@2.0.0//zmk`
|
- `bt60_v2` -> `bt60@2.0.0`
|
||||||
- `bt60_hs` -> `bt60_hs//zmk`
|
- `bt60_hs` -> `bt60_hs`
|
||||||
- Planck (`planck`)
|
- Planck (`planck`)
|
||||||
- `planck_rev6` -> `planck//zmk`
|
- `planck_rev6` -> `planck`
|
||||||
- BDN9 (`bdn9`)
|
- BDN9 (`bdn9`)
|
||||||
- `bdn9_rev2` -> `bdn9//zmk`
|
- `bdn9_rev2` -> `bdn9`
|
||||||
- Ferris Rev2 (`ferris`)
|
- Ferris Rev2 (`ferris`)
|
||||||
- `ferris_rev02` -> `ferris@2.0.0//zmk` (short: `ferris//zmk`)
|
- `ferris_rev02` -> `ferris@2.0.0` (short: `ferris`)
|
||||||
- Corne-ish Zen (`corneish_zen`)
|
- Corne-ish Zen (`corneish_zen`)
|
||||||
- `corneish_zen_v2_left` -> `corneish_zen_left@2.0.0//zmk` (short: `corneish_zen_left//zmk`)
|
- `corneish_zen_v2_left` -> `corneish_zen_left@2.0.0` (short: `corneish_zen_left`)
|
||||||
- `corneish_zen_v2_right` -> `corneish_zen_right@2.0.0//zmk` (short: `corneish_zen_right//zmk`)
|
- `corneish_zen_v2_right` -> `corneish_zen_right@2.0.0` (short: `corneish_zen_right`)
|
||||||
- `corneish_zen_v1_left` -> `corneish_zen_left@1.0.0//zmk` (short: `corneish_zen_left@1//zmk`)
|
- `corneish_zen_v1_left` -> `corneish_zen_left@1.0.0` (short: `corneish_zen_left@1`)
|
||||||
- `corneish_zen_v1_right` -> `corneish_zen_right@1.0.0//zmk` (short: `corneish_zen_right@1//zmk`)
|
- `corneish_zen_v1_right` -> `corneish_zen_right@1.0.0` (short: `corneish_zen_right@1`)
|
||||||
|
|
||||||
The boards above are those which have changed in ZMK's tree, with the addition of the very popular XIAO series. For other boards in Zephyr's tree, please refer to the Zephyr documentation or source files directly.
|
The boards above are those which have changed in ZMK's tree, with the addition of the very popular XIAO series. For other boards in Zephyr's tree, please refer to the Zephyr documentation or source files directly.
|
||||||
|
|
||||||
|
|
@ -257,7 +257,7 @@ A few other changes, unrelated to the HWMv2 move, may impact out-of-tree boards/
|
||||||
|
|
||||||
### Bootloader Setup
|
### Bootloader Setup
|
||||||
|
|
||||||
With the version bump, the previous method to enable `&bootloader` has been disabled. Instead, ZMK is introducing _boot retention_, which as a side effect also enables `&bootloader` for SoCs which previously didn't work with said behavior, such as the STM32F072. To set up boot retention for your board, please read through [the dedicated page](/docs/hardware-integration/bootloader).
|
With the version bump, the previous method to enable `&bootloader` has been disabled. Instead, ZMK is introducing _boot retention_, which as a side effect also enables `&bootloader` for SoCs which previously didn't work with said behavior, such as the STM32F072. To set up boot retention for your board, please read through [the dedicated page](/docs/development/hardware-integration/bootloader).
|
||||||
|
|
||||||
### nRF52840 NFC Pins as GPIO
|
### nRF52840 NFC Pins as GPIO
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ To ensure the BOOT button on keyboard and controllers using these SoCs works as
|
||||||
|
|
||||||
### Bootmode Magic Value Mapper
|
### Bootmode Magic Value Mapper
|
||||||
|
|
||||||
Some target SoCs may use the bootmode magic value mapper for [bootloader integration](docs/hardware-integration/bootloader/index.mdx). When doing so, the following configurations are used:
|
Some target SoCs may use the bootmode magic value mapper for [bootloader integration](docs/development/hardware-integration/bootloader/index.mdx). When doing so, the following configurations are used:
|
||||||
|
|
||||||
| Config | Type | Description | Default |
|
| Config | Type | Description | Default |
|
||||||
| ---------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------- | ------- |
|
| ---------------------------------------------------------------- | ---- | ------------------------------------------------------------------------------------- | ------- |
|
||||||
|
|
|
||||||
|
|
@ -55,8 +55,12 @@ Per sensor overrides can be added with ordered nested nodes with the correct ove
|
||||||
};
|
};
|
||||||
```
|
```
|
||||||
|
|
||||||
|
:::note
|
||||||
|
|
||||||
The names of the child nodes are not important, and are applied in order to the sensors listed in the `sensors` property of the sensors node.
|
The names of the child nodes are not important, and are applied in order to the sensors listed in the `sensors` property of the sensors node.
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
Applies to the node and child nodes of: `compatible = "zmk,keymap-sensors"`
|
Applies to the node and child nodes of: `compatible = "zmk,keymap-sensors"`
|
||||||
|
|
||||||
Definition file: [zmk/app/drivers/zephyr/dts/bindings/zmk,keymap-sensors.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/zephyr/dts/bindings/zmk%2Ckeymap-sensors.yaml)
|
Definition file: [zmk/app/drivers/zephyr/dts/bindings/zmk,keymap-sensors.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/drivers/zephyr/dts/bindings/zmk%2Ckeymap-sensors.yaml)
|
||||||
|
|
|
||||||
|
|
@ -30,12 +30,12 @@ When using a [split keyboard](../features/split-keyboards.md), you can use a sin
|
||||||
|
|
||||||
ZMK will search for config files in:
|
ZMK will search for config files in:
|
||||||
|
|
||||||
- [`zmk/app/boards/<vendor>/<board>`](https://github.com/zmkfirmware/zmk/tree/main/app/boards)
|
- [`zmk/app/boards/arm/<board>`](https://github.com/zmkfirmware/zmk/tree/main/app/boards/arm)
|
||||||
- `zmk-config/boards/<vendor>/<board>`
|
- `zmk-config/boards/arm/<board>`
|
||||||
- `<module>/boards/<vendor>/<board>`
|
- `<module>/boards/arm/<board>`
|
||||||
- `zmk-config/config/boards/<vendor>/<board>` (For backwards compatibility only, do not use.)
|
- `zmk-config/config/boards/arm/<board>` (For backwards compatibility only, do not use.)
|
||||||
|
|
||||||
...where `<vendor>` is the name of the creator or vendor, `<board>` is the name of the board and `<module>` is the root directory of any [included module](../features/modules.mdx). These files describe the hardware of the board.
|
...where `<board>` is the name of the board and `<module>` is the root directory of any [included module](../features/modules.mdx). These files describe the hardware of the board.
|
||||||
|
|
||||||
ZMK will search the board folder for the following config files _in addition_ to [Zephyr board-defining files](https://docs.zephyrproject.org/4.1.0/hardware/porting/board_porting.html#create-your-board-directory):
|
ZMK will search the board folder for the following config files _in addition_ to [Zephyr board-defining files](https://docs.zephyrproject.org/4.1.0/hardware/porting/board_porting.html#create-your-board-directory):
|
||||||
|
|
||||||
|
|
@ -64,7 +64,7 @@ ZMK will search the shield folder for the following config files _in addition_ t
|
||||||
|
|
||||||
Shared config files (excluding any `_left` or `_right` suffix) are not currently supported in shield folders.
|
Shared config files (excluding any `_left` or `_right` suffix) are not currently supported in shield folders.
|
||||||
|
|
||||||
For more documentation on creating and configuring a new shield, see [Zephyr's shield documentation](https://docs.zephyrproject.org/4.1.0/hardware/porting/shields.html) and [ZMK's new keyboard shield](../hardware-integration/new-shield.mdx) guide.
|
For more documentation on creating and configuring a new shield, see [Zephyr's shield documentation](https://docs.zephyrproject.org/4.1.0/hardware/porting/shields.html) and [ZMK's new keyboard shield](../development/hardware-integration/new-shield.mdx) guide.
|
||||||
|
|
||||||
## Kconfig Files
|
## Kconfig Files
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ Defines a mapping from keymap logical positions to physical [kscan](./kscan.md)
|
||||||
|
|
||||||
You can define multiple matrix transform nodes, one for each layout, and users can select which one they want from the `/chosen` node in their keymaps.
|
You can define multiple matrix transform nodes, one for each layout, and users can select which one they want from the `/chosen` node in their keymaps.
|
||||||
|
|
||||||
See the [new shield guide](../hardware-integration/new-shield.mdx#matrix-transform) for more documentation on how to define a matrix transform.
|
See the [new shield guide](../development/hardware-integration/new-shield.mdx#matrix-transform) for more documentation on how to define a matrix transform.
|
||||||
|
|
||||||
### Devicetree
|
### Devicetree
|
||||||
|
|
||||||
|
|
@ -174,7 +174,7 @@ Note that the entire addressable space does not need to be mapped.
|
||||||
|
|
||||||
Defines a keyboard layout by joining together a [matrix transform](#matrix-transform), a [keyboard scan](./kscan.md), and a list of physical key properties.
|
Defines a keyboard layout by joining together a [matrix transform](#matrix-transform), a [keyboard scan](./kscan.md), and a list of physical key properties.
|
||||||
Multiple physical layouts can be defined for keyboards with multiple physical key layouts.
|
Multiple physical layouts can be defined for keyboards with multiple physical key layouts.
|
||||||
Read through the [page on physical layouts](../hardware-integration/physical-layouts.md) for more information.
|
Read through the [page on physical layouts](../development/hardware-integration/physical-layouts.md) for more information.
|
||||||
|
|
||||||
### Devicetree
|
### Devicetree
|
||||||
|
|
||||||
|
|
@ -211,7 +211,7 @@ The `key_physical_attrs` node is defined in [`dts/physical_layouts.dtsi`](https:
|
||||||
|
|
||||||
## Physical Layout Position Map
|
## Physical Layout Position Map
|
||||||
|
|
||||||
Defines a mapping between [physical layouts](#physical-layout), allowing key mappings to be preserved in the same locations as previously when using [ZMK Studio](../features/studio.md). Read through the [page on physical layouts](../hardware-integration/physical-layouts.md) for more information.
|
Defines a mapping between [physical layouts](#physical-layout), allowing key mappings to be preserved in the same locations as previously when using [ZMK Studio](../features/studio.md). Read through the [page on physical layouts](../development/hardware-integration/physical-layouts.md) for more information.
|
||||||
|
|
||||||
### Devicetree
|
### Devicetree
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
||||||
---
|
|
||||||
title: LED Indicators Configuration
|
|
||||||
sidebar_label: LED Indicators
|
|
||||||
---
|
|
||||||
|
|
||||||
See the [LED indicators feature page](../features/led-indicators.md) for more details.
|
|
||||||
|
|
||||||
See [Configuration Overview](index.md) for instructions on how to change these settings.
|
|
||||||
|
|
||||||
## Kconfig
|
|
||||||
|
|
||||||
Definition files:
|
|
||||||
|
|
||||||
- [zmk/app/src/indicators/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/app/src/indicators/Kconfig)
|
|
||||||
|
|
||||||
| Config | Type | Description | Default |
|
|
||||||
| ----------------------------------------- | ---- | --------------------------------------------------- | ------- |
|
|
||||||
| `CONFIG_ZMK_INDICATOR_LEDS_INIT_PRIORITY` | int | Indicator LED device driver initialization priority | 91 |
|
|
||||||
|
|
||||||
`CONFIG_ZMK_INDICATOR_LEDS_INIT_PRIORITY` must be set to a larger value than `CONFIG_LED_INIT_PRIORITY`.
|
|
||||||
|
|
||||||
## Indicator LED Driver
|
|
||||||
|
|
||||||
This driver maps HID indicator states to [LED API](https://docs.zephyrproject.org/4.1.0/hardware/peripherals/led.html) devices.
|
|
||||||
|
|
||||||
### Devicetree
|
|
||||||
|
|
||||||
Applies to: `compatible = "zmk,indicator-leds"`
|
|
||||||
|
|
||||||
Definition file: [zmk/app/dts/bindings/indicators/zmk,indicator-leds.yaml](https://github.com/zmkfirmware/zmk/blob/main/app/dts/bindings/indicators/zmk%2Cindicator-leds.yaml)
|
|
||||||
|
|
||||||
| Property | Type | Description | Default |
|
|
||||||
| ------------------------- | -------- | --------------------------------------------------------------------- | ------- |
|
|
||||||
| `indicator` | int | The `HID_INDICATOR_*` value to indicate | |
|
|
||||||
| `leds` | phandles | One or more LED devices to control | |
|
|
||||||
| `active-brightness` | int | LED brightness in percent when the indicator is active | 100 |
|
|
||||||
| `inactive-brightness` | int | LED brightness in percent when the indicator is not active | 0 |
|
|
||||||
| `disconnected-brightness` | int | LED brightness in percent when the keyboard is not connected | 0 |
|
|
||||||
| `on-while-idle` | bool | Keep LEDs enabled even when the keyboard is idle and on battery power | false |
|
|
||||||
|
|
||||||
The `indicator` property must be one of the `HID_INDICATOR_*` values defined in [zmk/app/include/dt-bindings/zmk/hid_indicators.h](https://github.com/zmkfirmware/zmk/blob/main/app/include/dt-bindings/zmk/hid_indicators.h). You may also combine values with `|` to make the LED be lit when any of the indicator states are active.
|
|
||||||
|
|
@ -7,7 +7,7 @@ See the [Lighting feature page](../features/lighting.md) for an overview of the
|
||||||
|
|
||||||
## RGB Underglow
|
## RGB Underglow
|
||||||
|
|
||||||
See the [RGB underglow section](../features/lighting.md#rgb-underglow) in the Lighting feature page for more details, and [hardware integration page](../hardware-integration/lighting/underglow.md) for adding underglow support to a board.
|
See the [RGB underglow section](../features/lighting.md#rgb-underglow) in the Lighting feature page for more details, and [hardware integration page](../development/hardware-integration/lighting/underglow.md) for adding underglow support to a board.
|
||||||
|
|
||||||
See [Configuration Overview](index.md) for instructions on how to change these settings.
|
See [Configuration Overview](index.md) for instructions on how to change these settings.
|
||||||
|
|
||||||
|
|
@ -52,11 +52,11 @@ The `*_START` settings only determine the initial underglow state. Any changes y
|
||||||
|
|
||||||
ZMK does not have any Devicetree properties of its own. See the Devicetree bindings for [Zephyr's LED strip drivers](https://github.com/zephyrproject-rtos/zephyr/tree/main/dts/bindings/led_strip).
|
ZMK does not have any Devicetree properties of its own. See the Devicetree bindings for [Zephyr's LED strip drivers](https://github.com/zephyrproject-rtos/zephyr/tree/main/dts/bindings/led_strip).
|
||||||
|
|
||||||
See the [RGB underglow hardware integration page](../hardware-integration/lighting/underglow.md) for examples of the properties that must be set to enable underglow.
|
See the [RGB underglow hardware integration page](../development/hardware-integration/lighting/underglow.md) for examples of the properties that must be set to enable underglow.
|
||||||
|
|
||||||
## Backlight
|
## Backlight
|
||||||
|
|
||||||
See the [backlight section](../features/lighting.md#backlight) in Lighting feature page for more details, and [hardware integration page](../hardware-integration/lighting/backlight.mdx) for adding backlight support to a board.
|
See the [backlight section](../features/lighting.md#backlight) in Lighting feature page for more details, and [hardware integration page](../development/hardware-integration/lighting/backlight.mdx) for adding backlight support to a board.
|
||||||
|
|
||||||
See [Configuration Overview](index.md) for instructions on how to change these settings.
|
See [Configuration Overview](index.md) for instructions on how to change these settings.
|
||||||
|
|
||||||
|
|
@ -90,4 +90,4 @@ See the Zephyr devicetree bindings for LED drivers:
|
||||||
- [gpio-leds](https://docs.zephyrproject.org/4.1.0/build/dts/api/bindings/led/gpio-leds.html)
|
- [gpio-leds](https://docs.zephyrproject.org/4.1.0/build/dts/api/bindings/led/gpio-leds.html)
|
||||||
- [pwm-leds](https://docs.zephyrproject.org/4.1.0/build/dts/api/bindings/led/pwm-leds.html)
|
- [pwm-leds](https://docs.zephyrproject.org/4.1.0/build/dts/api/bindings/led/pwm-leds.html)
|
||||||
|
|
||||||
See the [backlight hardware integration page](../hardware-integration/lighting/backlight.mdx) for examples of the properties that must be set to enable backlighting.
|
See the [backlight hardware integration page](../development/hardware-integration/lighting/backlight.mdx) for examples of the properties that must be set to enable backlighting.
|
||||||
|
|
|
||||||
|
|
@ -53,7 +53,7 @@ Additional properties can be set on child nodes, which allows changing the setti
|
||||||
|
|
||||||
## Input Split
|
## Input Split
|
||||||
|
|
||||||
Input splits are used for [pointing devices on split peripherals](../hardware-integration/pointing.mdx#listener-and-input-split-device).
|
Input splits are used for [pointing devices on split peripherals](../development/hardware-integration/pointing.mdx#listener-and-input-split-device).
|
||||||
|
|
||||||
### Devicetree
|
### Devicetree
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/
|
||||||
|
|
||||||
While regular ZMK builds will not cause any settings to be cleared upon flashing, flashing a build with `CONFIG_ZMK_SETTINGS_RESET_ON_START` enabled as documented above will cause the firmware to run a special procedure when the controller starts that clears the settings partition.
|
While regular ZMK builds will not cause any settings to be cleared upon flashing, flashing a build with `CONFIG_ZMK_SETTINGS_RESET_ON_START` enabled as documented above will cause the firmware to run a special procedure when the controller starts that clears the settings partition.
|
||||||
|
|
||||||
For end users, it is recommended to use a special [shield](../hardware-integration/index.mdx#boards--shields) named `settings_reset` to build a new firmware file, then flash that firmware.
|
For end users, it is recommended to use a special [shield](../development/hardware-integration/index.mdx#boards--shields) named `settings_reset` to build a new firmware file, then flash that firmware.
|
||||||
See example for building firmware using this shield in the [troubleshooting docs](../troubleshooting/connection-issues.mdx#building-a-reset-firmware).
|
See example for building firmware using this shield in the [troubleshooting docs](../troubleshooting/connection-issues.mdx#building-a-reset-firmware).
|
||||||
|
|
||||||
In both cases, regular, non-reset firmware will need to be flashed afterwards for normal operation.
|
In both cases, regular, non-reset firmware will need to be flashed afterwards for normal operation.
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ The following settings only apply when using wired split in polling mode:
|
||||||
|
|
||||||
### Wired Split
|
### Wired Split
|
||||||
|
|
||||||
Wired splits require a properly configured UART to function. If writing a shield, you may be able to use the standard UART already provided by the board, e.g. `&pro_micro_serial`. See [predefined nodes](../hardware-integration/pinctrl.mdx#predefined-nodes) for details on the UART node labels provided by various interconnects. If you are creating your own board, or using custom pins for the UART, see the documentation on [pin control](../hardware-integration/pinctrl.mdx#additional-examples) to configure the pins for your UART.
|
Wired splits require a properly configured UART to function. If writing a shield, you may be able to use the standard UART already provided by the board, e.g. `&pro_micro_serial`. See [predefined nodes](../development/hardware-integration/pinctrl.mdx#predefined-nodes) for details on the UART node labels provided by various interconnects. If you are creating your own board, or using custom pins for the UART, see the documentation on [pin control](../development/hardware-integration/pinctrl.mdx#additional-examples) to configure the pins for your UART.
|
||||||
|
|
||||||
Once you have a properly configured UART device, it needs to be assigned in a new node with a compatible value of `"zmk,wired-split"`. For example:
|
Once you have a properly configured UART device, it needs to be assigned in a new node with a compatible value of `"zmk,wired-split"`. For example:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -13,12 +13,11 @@ Definition file: [zmk/app/Kconfig](https://github.com/zmkfirmware/zmk/blob/main/
|
||||||
|
|
||||||
### General
|
### General
|
||||||
|
|
||||||
| Config | Type | Description | Default |
|
| Config | Type | Description | Default |
|
||||||
| --------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | ------- |
|
| --------------------------- | ------ | -------------------------------------------- | ------- |
|
||||||
| `CONFIG_ZMK_BOARD_COMPAT` | bool | A special config for boards to enable. This helps check if users have accidentally used an upstream Zephyr board without ZMK additions applied | n |
|
| `CONFIG_ZMK_KEYBOARD_NAME` | string | The name of the keyboard (max 16 characters) | |
|
||||||
| `CONFIG_ZMK_KEYBOARD_NAME` | string | The name of the keyboard (max 16 characters) | |
|
| `CONFIG_ZMK_WPM` | bool | Enable calculating words per minute | n |
|
||||||
| `CONFIG_ZMK_WPM` | bool | Enable calculating words per minute | n |
|
| `CONFIG_HEAP_MEM_POOL_SIZE` | int | Size of the heap memory pool | 8192 |
|
||||||
| `CONFIG_HEAP_MEM_POOL_SIZE` | int | Size of the heap memory pool | 8192 |
|
|
||||||
|
|
||||||
:::info
|
:::info
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,6 @@ This document outlines how to test your documentation changes locally and prepar
|
||||||
|
|
||||||
The documentation is written with [Docusaurus](https://docusaurus.io/). The ZMK source code has all of the necessary Docusaurus dependencies included, but referencing their documentation can be helpful at times.
|
The documentation is written with [Docusaurus](https://docusaurus.io/). The ZMK source code has all of the necessary Docusaurus dependencies included, but referencing their documentation can be helpful at times.
|
||||||
|
|
||||||
The website is built using the latest LTS version of node, which is available at <https://nodejs.org/en/download/>.
|
|
||||||
|
|
||||||
The general process for updating the ZMK documentation is:
|
The general process for updating the ZMK documentation is:
|
||||||
|
|
||||||
1. Update the documentation
|
1. Update the documentation
|
||||||
|
|
@ -20,6 +18,14 @@ The general process for updating the ZMK documentation is:
|
||||||
3. Ensure the sources are formatted properly and linted
|
3. Ensure the sources are formatted properly and linted
|
||||||
4. Create a Pull Request for review and inclusion into the ZMK sources
|
4. Create a Pull Request for review and inclusion into the ZMK sources
|
||||||
|
|
||||||
|
:::note
|
||||||
|
If you are working with the documentation from within VS Code+Docker please be aware the documentation will not be auto-generated when making changes while the server is running. You'll need to restart the server when saving changes to the documentation.
|
||||||
|
:::
|
||||||
|
|
||||||
|
:::note
|
||||||
|
You will need `Node.js` and `npm` installed to update the documentation. If you're using the ZMK dev container (Docker) the necessary dependencies are already installed. Otherwise, you must install these dependencies yourself. Since `Node.js` packages in Linux distributions tend to be outdated, it's recommended to install the current version from a repository like [NodeSource](https://github.com/nodesource/distributions) to avoid build errors.
|
||||||
|
:::
|
||||||
|
|
||||||
## Testing Documentation Updates Locally
|
## Testing Documentation Updates Locally
|
||||||
|
|
||||||
To verify documentation updates locally, follow the following procedure. The `npm` commands and first step will need to be run from a terminal.
|
To verify documentation updates locally, follow the following procedure. The `npm` commands and first step will need to be run from a terminal.
|
||||||
|
|
@ -46,9 +52,15 @@ The check commands can be run with the following procedure in a terminal that's
|
||||||
3. Run `npm run lint`
|
3. Run `npm run lint`
|
||||||
4. Run `npm run build`
|
4. Run `npm run build`
|
||||||
|
|
||||||
|
:::danger
|
||||||
If any of the above steps throw an error, they need to be addressed and all of the checks re-run prior to submitting a pull request.
|
If any of the above steps throw an error, they need to be addressed and all of the checks re-run prior to submitting a pull request.
|
||||||
|
:::
|
||||||
|
|
||||||
The documentation uses American English spelling and grammar conventions. Title case is used for the first three heading levels, with sentence case used beyond that. Please make sure your changes conform to these conventions.
|
:::note
|
||||||
|
The documentation uses American English spelling and grammar conventions. Title case is used for the first three heading levels, with sentence case used beyond that.
|
||||||
|
|
||||||
|
Please make sure your changes conform to these conventions - prettier and lint are unfortunately unable to do this automatically.
|
||||||
|
:::
|
||||||
|
|
||||||
## Submitting a Pull Request
|
## Submitting a Pull Request
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ title: Battery Sensing
|
||||||
sidebar_label: Battery Sensing
|
sidebar_label: Battery Sensing
|
||||||
---
|
---
|
||||||
|
|
||||||
If your keyboard is using one of the [boards supported in ZMK](../hardware.mdx) it will already be configured to [sense and report battery levels](../features/battery.md).
|
If your keyboard is using one of the [boards supported in ZMK](../../hardware.mdx) it will already be configured to [sense and report battery levels](../../features/battery.md).
|
||||||
Below instructions are only intended for users defining and using a custom board.
|
Below instructions are only intended for users defining and using a custom board.
|
||||||
|
|
||||||
To enable a battery sensor on a new board, add the driver for the sensor to your board's `.dts` file. ZMK provides two drivers for estimating the battery level using its voltage:
|
To enable a battery sensor on a new board, add the driver for the sensor to your board's `.dts` file. ZMK provides two drivers for estimating the battery level using its voltage:
|
||||||
|
|
@ -11,7 +11,7 @@ To enable a battery sensor on a new board, add the driver for the sensor to your
|
||||||
- `zmk,battery-voltage-divider`: Reads the voltage on an analog input pin.
|
- `zmk,battery-voltage-divider`: Reads the voltage on an analog input pin.
|
||||||
- `zmk,battery-nrf-vddh`: Reads the power supply voltage on a Nordic nRF52's VDDH pin.
|
- `zmk,battery-nrf-vddh`: Reads the power supply voltage on a Nordic nRF52's VDDH pin.
|
||||||
|
|
||||||
See the [battery level configuration page](../config/battery.md) for the configuration supported by each driver provided by ZMK.
|
See the [battery level configuration page](../../config/battery.md) for the configuration supported by each driver provided by ZMK.
|
||||||
|
|
||||||
Zephyr also provides some drivers for fuel gauge ICs such as the TI bq274xx series and Maxim MAX17xxx series. If you use a battery sensor that does not have an existing driver, you will need to write a new driver that supports the `SENSOR_CHAN_GAUGE_STATE_OF_CHARGE` sensor channel and contribute it to Zephyr or ZMK.
|
Zephyr also provides some drivers for fuel gauge ICs such as the TI bq274xx series and Maxim MAX17xxx series. If you use a battery sensor that does not have an existing driver, you will need to write a new driver that supports the `SENSOR_CHAN_GAUGE_STATE_OF_CHARGE` sensor channel and contribute it to Zephyr or ZMK.
|
||||||
|
|
||||||
|
|
@ -7,7 +7,7 @@ import BaseConfig from "./_base-config.md";
|
||||||
|
|
||||||
The RP2040/RP2350 Bootloader is a [jump-to type bootloader](./index.mdx#jump-to-bootloaders), with some extra setup used to integrate with it.
|
The RP2040/RP2350 Bootloader is a [jump-to type bootloader](./index.mdx#jump-to-bootloaders), with some extra setup used to integrate with it.
|
||||||
|
|
||||||
By default, when integrating this bootloader, a ["double tap reset to enter the bootloader"](../../config/bootloader.md#double-tap-to-bootloader) feature will be enabled, to help with designs that do not easily expose a BOOTSEL pin.
|
By default, when integrating this bootloader, a ["double tap reset to enter the bootloader"](../../../config/system.md#double-tap-to-bootloader) feature will be enabled, to help with designs that do not easily expose a BOOTSEL pin.
|
||||||
|
|
||||||
<BaseConfig />
|
<BaseConfig />
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue