diff --git a/.clangd b/.clangd
index 2be2d817fc7..6133ae7229d 100644
--- a/.clangd
+++ b/.clangd
@@ -1,4 +1,4 @@
CompileFlags:
Add: [-Wno-unknown-attributes, -Wno-maybe-uninitialized, -Wno-unknown-warning-option]
- Remove: [-W*, -mcall-prologues]
+ Remove: [-W*, -mmcu=*, -mcpu=*, -mfpu=*, -mfloat-abi=*, -mno-unaligned-access, -mno-thumb-interwork, -mcall-prologues]
Compiler: clang
diff --git a/.github/workflows/ci_builds.yml b/.github/workflows/ci_builds.yml
deleted file mode 100644
index 7fa07fe09d9..00000000000
--- a/.github/workflows/ci_builds.yml
+++ /dev/null
@@ -1,74 +0,0 @@
-name: CI Builds
-
-permissions:
- contents: read
-
-on:
- push:
- branches: [master, develop]
- workflow_dispatch:
- inputs:
- branch:
- type: choice
- description: 'Branch to build'
- options: [master, develop]
-
-concurrency: ci_build-${{ github.event.inputs.branch || github.ref_name }}
-
-jobs:
- ci_builds:
- if: github.repository == 'qmk/qmk_firmware'
- name: "CI Build"
- runs-on: self-hosted
- timeout-minutes: 1380
-
- strategy:
- fail-fast: false
- matrix:
- keymap: [default, via]
-
- container: ghcr.io/qmk/qmk_cli
-
- steps:
- - name: Disable safe.directory check
- run : git config --global --add safe.directory '*'
-
- - uses: actions/checkout@v4
- with:
- submodules: recursive
- ref: ${{ github.event.inputs.branch || github.ref }}
-
- - name: Install dependencies
- run: pip3 install -r requirements.txt
-
- - name: Run `qmk mass-compile` (keymap ${{ matrix.keymap }})
- run: |
- export NCPUS=$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || getconf _NPROCESSORS_ONLN 2>/dev/null)
- qmk mass-compile -t -j $NCPUS -km ${{ matrix.keymap }} -e DUMP_CI_METADATA=yes || touch .failed
- # Generate the step summary markdown
- ./util/ci/generate_failure_markdown.sh > $GITHUB_STEP_SUMMARY || true
- # Truncate to a maximum of 1MB to deal with GitHub workflow limit
- truncate --size='<960K' $GITHUB_STEP_SUMMARY || true
- # Exit with failure if the compilation stage failed
- [ ! -f .failed ] || exit 1
-
- - name: 'Upload artifacts'
- uses: actions/upload-artifact@v4
- if: always()
- with:
- name: artifacts-${{ github.event.inputs.branch || github.ref_name }}-${{ matrix.keymap }}
- if-no-files-found: ignore
- path: |
- *.bin
- *.hex
- *.uf2
- .build/failed.*
-
- - name: 'CI Discord Notification'
- if: always()
- working-directory: util/ci/
- env:
- DISCORD_WEBHOOK: ${{ secrets.CI_DISCORD_WEBHOOK }}
- run: |
- python3 -m pip install -r requirements.txt
- python3 ./discord-results.py --branch ${{ github.event.inputs.branch || github.ref_name }} --keymap ${{ matrix.keymap }} --url ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
diff --git a/data/constants/keycodes/extras/keycodes_czech_mac_ansi_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_czech_mac_ansi_0.0.1.hjson
new file mode 100644
index 00000000000..d0eb554126d
--- /dev/null
+++ b/data/constants/keycodes/extras/keycodes_czech_mac_ansi_0.0.1.hjson
@@ -0,0 +1,580 @@
+{
+ "aliases": {
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ \ │ + │ ě │ š │ č │ ř │ ž │ ý │ á │ í │ é │ = │ ' │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ ú │ ) │ ¨ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤
+ * │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ů │ § │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──────┤
+ * │ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │ │
+ * ├─────┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │ │ │ │ │ │ │ │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+ "KC_GRV": {
+ "key": "CZ_BSLS",
+ "label": "\\",
+ }
+ "KC_1": {
+ "key": "CZ_PLUS",
+ "label": "+",
+ }
+ "KC_2": {
+ "key": "CZ_ECAR",
+ "label": "ě",
+ }
+ "KC_3": {
+ "key": "CZ_SCAR",
+ "label": "š",
+ }
+ "KC_4": {
+ "key": "CZ_CCAR",
+ "label": "č",
+ }
+ "KC_5": {
+ "key": "CZ_RCAR",
+ "label": "ř",
+ }
+ "KC_6": {
+ "key": "CZ_ZCAR",
+ "label": "ž",
+ }
+ "KC_7": {
+ "key": "CZ_YACU",
+ "label": "ý",
+ }
+ "KC_8": {
+ "key": "CZ_AACU",
+ "label": "á",
+ }
+ "KC_9": {
+ "key": "CZ_IACU",
+ "label": "í",
+ }
+ "KC_0": {
+ "key": "CZ_EACU",
+ "label": "é",
+ }
+ "KC_MINS": {
+ "key": "CZ_EQL",
+ "label": "=",
+ }
+ "KC_EQL": {
+ "key": "CZ_ACUT",
+ "label": "' (dead)",
+ }
+ "KC_Q": {
+ "key": "CZ_Q",
+ "label": "Q",
+ }
+ "KC_W": {
+ "key": "CZ_W",
+ "label": "W",
+ }
+ "KC_E": {
+ "key": "CZ_E",
+ "label": "E",
+ }
+ "KC_R": {
+ "key": "CZ_R",
+ "label": "R",
+ }
+ "KC_T": {
+ "key": "CZ_T",
+ "label": "T",
+ }
+ "KC_Y": {
+ "key": "CZ_Z",
+ "label": "Z",
+ }
+ "KC_U": {
+ "key": "CZ_U",
+ "label": "U",
+ }
+ "KC_I": {
+ "key": "CZ_I",
+ "label": "I",
+ }
+ "KC_O": {
+ "key": "CZ_O",
+ "label": "O",
+ }
+ "KC_P": {
+ "key": "CZ_P",
+ "label": "P",
+ }
+ "KC_LBRC": {
+ "key": "CZ_UACU",
+ "label": "ú",
+ }
+ "KC_RBRC": {
+ "key": "CZ_RPRN",
+ "label": ")",
+ }
+ "KC_NUHS": {
+ "key": "CZ_DIAE",
+ "label": "¨ (dead)",
+ }
+ "KC_A": {
+ "key": "CZ_A",
+ "label": "A",
+ }
+ "KC_S": {
+ "key": "CZ_S",
+ "label": "S",
+ }
+ "KC_D": {
+ "key": "CZ_D",
+ "label": "D",
+ }
+ "KC_F": {
+ "key": "CZ_F",
+ "label": "F",
+ }
+ "KC_G": {
+ "key": "CZ_G",
+ "label": "G",
+ }
+ "KC_H": {
+ "key": "CZ_H",
+ "label": "H",
+ }
+ "KC_J": {
+ "key": "CZ_J",
+ "label": "J",
+ }
+ "KC_K": {
+ "key": "CZ_K",
+ "label": "K",
+ }
+ "KC_L": {
+ "key": "CZ_L",
+ "label": "L",
+ }
+ "KC_SCLN": {
+ "key": "CZ_URNG",
+ "label": "ů",
+ }
+ "KC_QUOT": {
+ "key": "CZ_SECT",
+ "label": "§",
+ }
+ "KC_Z": {
+ "key": "CZ_Y",
+ "label": "Y",
+ }
+ "KC_X": {
+ "key": "CZ_X",
+ "label": "X",
+ }
+ "KC_C": {
+ "key": "CZ_C",
+ "label": "C",
+ }
+ "KC_V": {
+ "key": "CZ_V",
+ "label": "V",
+ }
+ "KC_B": {
+ "key": "CZ_B",
+ "label": "B",
+ }
+ "KC_N": {
+ "key": "CZ_N",
+ "label": "N",
+ }
+ "KC_M": {
+ "key": "CZ_M",
+ "label": "M",
+ }
+ "KC_COMM": {
+ "key": "CZ_COMM",
+ "label": ",",
+ }
+ "KC_DOT": {
+ "key": "CZ_DOT",
+ "label": ".",
+ }
+ "KC_SLSH": {
+ "key": "CZ_MINS",
+ "label": "-",
+ }
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ | │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ % │ ˇ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ / │ ( │ ` │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤
+ * │ │ │ │ │ │ │ │ │ │ │ " │ ! │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──────┤
+ * │ │ │ │ │ │ │ │ │ ? │ : │ _ │ │
+ * ├─────┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │ │ │ │ │ │ │ │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+ "S(CZ_BSLS)": {
+ "key": "CZ_PIPE",
+ "label": "|",
+ }
+ "S(CZ_PLUS)": {
+ "key": "CZ_1",
+ "label": "1",
+ }
+ "S(CZ_ECAR)": {
+ "key": "CZ_2",
+ "label": "2",
+ }
+ "S(CZ_SCAR)": {
+ "key": "CZ_3",
+ "label": "3",
+ }
+ "S(CZ_CCAR)": {
+ "key": "CZ_4",
+ "label": "4",
+ }
+ "S(CZ_RCAR)": {
+ "key": "CZ_5",
+ "label": "5",
+ }
+ "S(CZ_ZCAR)": {
+ "key": "CZ_6",
+ "label": "6",
+ }
+ "S(CZ_YACU)": {
+ "key": "CZ_7",
+ "label": "7",
+ }
+ "S(CZ_AACU)": {
+ "key": "CZ_8",
+ "label": "8",
+ }
+ "S(CZ_IACU)": {
+ "key": "CZ_9",
+ "label": "9",
+ }
+ "S(CZ_EACU)": {
+ "key": "CZ_0",
+ "label": "0",
+ }
+ "S(CZ_EQL)": {
+ "key": "CZ_PERC",
+ "label": "%",
+ }
+ "S(CZ_ACUT)": {
+ "key": "CZ_CARN",
+ "label": "ˇ (dead)",
+ }
+ "S(CZ_UACU)": {
+ "key": "CZ_SLSH",
+ "label": "/",
+ }
+ "S(CZ_RPRN)": {
+ "key": "CZ_LPRN",
+ "label": "(",
+ }
+ "S(CZ_DIAE)": {
+ "key": "CZ_GRV",
+ "label": "`",
+ }
+ "S(CZ_URNG)": {
+ "key": "CZ_DQUO",
+ "label": "\"",
+ }
+ "S(CZ_SECT)": {
+ "key": "CZ_EXLM",
+ "label": "!",
+ }
+ "S(CZ_COMM)": {
+ "key": "CZ_QUES",
+ "label": "?",
+ }
+ "S(CZ_DOT)": {
+ "key": "CZ_COLN",
+ "label": ":",
+ }
+ "S(CZ_MINS)": {
+ "key": "CZ_UNDS",
+ "label": "_",
+ }
+/* Alted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ │ │ @ │ # │ $ │ ~ │ ^ │ & │ * │ { │ } │ ° │ ^ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │ │ │ ė │ ę │ € │ │ │ │ │ │ │ [ │ ] │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤
+ * │ │ ą │ ß │ ∂ │ │ │ ‘ │ ’ │ │ ł │ ; │ ' │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──────┤
+ * │ │ │ │ │ │ │ ‚ │ │ < │ > │ – │ │
+ * ├─────┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │ │ │ │ │ │ │ │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+ "A(CZ_ECAR)": {
+ "key": "CZ_AT",
+ "label": "@",
+ }
+ "A(CZ_SCAR)": {
+ "key": "CZ_HASH",
+ "label": "#",
+ }
+ "A(CZ_CCAR)": {
+ "key": "CZ_DLR",
+ "label": "$",
+ }
+ "A(CZ_RCAR)": {
+ "key": "CZ_TILD",
+ "label": "~",
+ }
+ "A(CZ_ZCAR)": {
+ "key": "CZ_CIRC",
+ "label": "^",
+ }
+ "A(CZ_YACU)": {
+ "key": "CZ_AMPR",
+ "label": "&",
+ }
+ "A(CZ_AACU)": {
+ "key": "CZ_ASTR",
+ "label": "*",
+ }
+ "A(CZ_IACU)": {
+ "key": "CZ_LCBR",
+ "label": "{",
+ }
+ "A(CZ_EACU)": {
+ "key": "CZ_RCBR",
+ "label": "}",
+ }
+ "A(CZ_EQL)": {
+ "key": "CZ_RNGA",
+ "label": "° (dead)",
+ }
+ "A(CZ_ACUT)": {
+ "key": "CZ_DCIR",
+ "label": "^ (dead)",
+ }
+ "A(CZ_W)": {
+ "key": "CZ_LEDT",
+ "label": "ė",
+ }
+ "A(CZ_E)": {
+ "key": "CZ_LEOG",
+ "label": "ę",
+ }
+ "A(CZ_R)": {
+ "key": "CZ_EURO",
+ "label": "€",
+ }
+ "A(CZ_Z)": {
+ "key": "CZ_LZDT",
+ "label": "ż",
+ }
+ "A(CZ_UACU)": {
+ "key": "CZ_LBRC",
+ "label": "[",
+ }
+ "A(CZ_RPRN)": {
+ "key": "CZ_RBRC",
+ "label": "]",
+ }
+ "A(CZ_A)": {
+ "key": "CZ_LAOG",
+ "label": "ą",
+ }
+ "A(CZ_S)": {
+ "key": "CZ_SS",
+ "label": "ß",
+ }
+ "A(CZ_D)": {
+ "key": "CZ_PDIF",
+ "label": "∂",
+ }
+ "A(CZ_H)": {
+ "key": "CZ_LSQU",
+ "label": "‘",
+ }
+ "A(CZ_J)": {
+ "key": "CZ_RSQU",
+ "label": "’",
+ }
+ "A(CZ_L)": {
+ "key": "CZ_LLST",
+ "label": "ł",
+ }
+ "A(CZ_URNG)": {
+ "key": "CZ_SCLN",
+ "label": ";",
+ }
+ "A(CZ_SECT)": {
+ "key": "CZ_QUOT",
+ "label": "'",
+ }
+ "A(CZ_N)": {
+ "key": "CZ_SLQU",
+ "label": "‚",
+ }
+ "A(CZ_COMM)": {
+ "key": "CZ_LABK",
+ "label": "<",
+ }
+ "A(CZ_DOT)": {
+ "key": "CZ_RABK",
+ "label": ">",
+ }
+ "A(CZ_MINS)": {
+ "key": "CZ_NDSH",
+ "label": "–",
+ }
+/* Shift+Alted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ │ ¬ │ • │ ≠ │ £ │ ◊ │ † │ ¶ │ ÷ │ « │ » │ , │ - │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │ │ │ Ė │ Ę │ ® │ ™ │ Ż │ │ │ │ │ ‹ │ › │ " │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴───┤
+ * │ │ Ą │ ∑ │ ∆ │ │ │ “ │ ” │ │ Ł │ … │ ~ │ │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴──────┤
+ * │ │ │ │ © │ √ │ │ „ │ │ ≤ │ ≥ │ — │ │
+ * ├─────┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │ │ │ │ │ │ │ │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+ "S(A(CZ_1))": {
+ "key": "CZ_NOT",
+ "label": "¬",
+ }
+ "S(A(CZ_2))": {
+ "key": "CZ_BULT",
+ "label": "•",
+ }
+ "S(A(CZ_3))": {
+ "key": "CZ_NEQL",
+ "label": "≠",
+ }
+ "S(A(CZ_4))": {
+ "key": "CZ_PND",
+ "label": "£",
+ }
+ "S(A(CZ_5))": {
+ "key": "CZ_LOZN",
+ "label": "◊",
+ }
+ "S(A(CZ_6))": {
+ "key": "CZ_DAGG",
+ "label": "†",
+ }
+ "S(A(CZ_7))": {
+ "key": "CZ_PARA",
+ "label": "¶",
+ }
+ "S(A(CZ_8))": {
+ "key": "CZ_DIV",
+ "label": "÷",
+ }
+ "S(A(CZ_9))": {
+ "key": "CZ_LDAQ",
+ "label": "«",
+ }
+ "S(A(CZ_0))": {
+ "key": "CZ_RDAQ",
+ "label": "»",
+ }
+ "S(A(CZ_EQL))": {
+ "key": "CZ_DCOM",
+ "label": ", (dead)",
+ }
+ "S(A(CZ_ACUT))": {
+ "key": "CZ_DHPN",
+ "label": "- (dead)",
+ }
+ "S(A(CZ_W))": {
+ "key": "CZ_CEDT",
+ "label": "Ė",
+ }
+ "S(A(CZ_E))": {
+ "key": "CZ_CEOG",
+ "label": "Ę",
+ }
+ "S(A(CZ_R))": {
+ "key": "CZ_REGD",
+ "label": "®",
+ }
+ "S(A(CZ_T))": {
+ "key": "CZ_TM",
+ "label": "™",
+ }
+ "S(A(CZ_Z))": {
+ "key": "CZ_CZDT",
+ "label": "Ż",
+ }
+ "S(A(CZ_UACU))": {
+ "key": "CZ_LSAQ",
+ "label": "‹",
+ }
+ "S(A(CZ_RPRN))": {
+ "key": "CZ_RSAQ",
+ "label": "›",
+ }
+ "S(A(CZ_DIAE))": {
+ "key": "CZ_DDQT",
+ "label": "\" (dead)",
+ }
+ "S(A(CZ_A))": {
+ "key": "CZ_CAOG",
+ "label": "Ą",
+ }
+ "S(A(CZ_S))": {
+ "key": "CZ_NARS",
+ "label": "∑",
+ }
+ "S(A(CZ_D))": {
+ "key": "CZ_INCR",
+ "label": "∆",
+ }
+ "S(A(CZ_H))": {
+ "key": "CZ_LDQU",
+ "label": "“",
+ }
+ "S(A(CZ_J))": {
+ "key": "CZ_RDQU",
+ "label": "”",
+ }
+ "S(A(CZ_L))": {
+ "key": "CZ_CLST",
+ "label": "Ł",
+ }
+ "S(A(CZ_URNG))": {
+ "key": "CZ_ELLP",
+ "label": "…",
+ }
+ "S(A(CZ_SECT))": {
+ "key": "CZ_DTIL",
+ "label": "~ (dead)",
+ }
+ "S(A(CZ_C))": {
+ "key": "CZ_COPY",
+ "label": "©",
+ }
+ "S(A(CZ_V))": {
+ "key": "CZ_SQRT",
+ "label": "√",
+ }
+ "S(A(CZ_N))": {
+ "key": "CZ_DLQU",
+ "label": "„",
+ }
+ "S(A(CZ_COMM))": {
+ "key": "CZ_LEQL",
+ "label": "≤",
+ }
+ "S(A(CZ_DOT))": {
+ "key": "CZ_GEQL",
+ "label": "≥",
+ }
+ "S(A(CZ_MINS))": {
+ "key": "CZ_MDSH",
+ "label": "—",
+ }
+ }
+}
diff --git a/data/constants/keycodes/extras/keycodes_czech_mac_iso_0.0.1.hjson b/data/constants/keycodes/extras/keycodes_czech_mac_iso_0.0.1.hjson
new file mode 100644
index 00000000000..5158ea16d8d
--- /dev/null
+++ b/data/constants/keycodes/extras/keycodes_czech_mac_iso_0.0.1.hjson
@@ -0,0 +1,580 @@
+{
+ "aliases": {
+/*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ │ + │ ě │ š │ č │ ř │ ž │ ý │ á │ í │ é │ = │ ' │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │ │ Q │ W │ E │ R │ T │ Z │ U │ I │ O │ P │ ú │ ) │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+ * │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ů │ § │ ¨ │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
+ * │ │ \ │ Y │ X │ C │ V │ B │ N │ M │ , │ . │ - │ │
+ * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │ │ │ │ │ │ │ │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+ "KC_1": {
+ "key": "CZ_PLUS",
+ "label": "+",
+ }
+ "KC_2": {
+ "key": "CZ_ECAR",
+ "label": "ě",
+ }
+ "KC_3": {
+ "key": "CZ_SCAR",
+ "label": "š",
+ }
+ "KC_4": {
+ "key": "CZ_CCAR",
+ "label": "č",
+ }
+ "KC_5": {
+ "key": "CZ_RCAR",
+ "label": "ř",
+ }
+ "KC_6": {
+ "key": "CZ_ZCAR",
+ "label": "ž",
+ }
+ "KC_7": {
+ "key": "CZ_YACU",
+ "label": "ý",
+ }
+ "KC_8": {
+ "key": "CZ_AACU",
+ "label": "á",
+ }
+ "KC_9": {
+ "key": "CZ_IACU",
+ "label": "í",
+ }
+ "KC_0": {
+ "key": "CZ_EACU",
+ "label": "é",
+ }
+ "KC_MINS": {
+ "key": "CZ_EQL",
+ "label": "=",
+ }
+ "KC_EQL": {
+ "key": "CZ_ACUT",
+ "label": "' (dead)",
+ }
+ "KC_Q": {
+ "key": "CZ_Q",
+ "label": "Q",
+ }
+ "KC_W": {
+ "key": "CZ_W",
+ "label": "W",
+ }
+ "KC_E": {
+ "key": "CZ_E",
+ "label": "E",
+ }
+ "KC_R": {
+ "key": "CZ_R",
+ "label": "R",
+ }
+ "KC_T": {
+ "key": "CZ_T",
+ "label": "T",
+ }
+ "KC_Y": {
+ "key": "CZ_Z",
+ "label": "Z",
+ }
+ "KC_U": {
+ "key": "CZ_U",
+ "label": "U",
+ }
+ "KC_I": {
+ "key": "CZ_I",
+ "label": "I",
+ }
+ "KC_O": {
+ "key": "CZ_O",
+ "label": "O",
+ }
+ "KC_P": {
+ "key": "CZ_P",
+ "label": "P",
+ }
+ "KC_LBRC": {
+ "key": "CZ_UACU",
+ "label": "ú",
+ }
+ "KC_RBRC": {
+ "key": "CZ_RPRN",
+ "label": ")",
+ }
+ "KC_A": {
+ "key": "CZ_A",
+ "label": "A",
+ }
+ "KC_S": {
+ "key": "CZ_S",
+ "label": "S",
+ }
+ "KC_D": {
+ "key": "CZ_D",
+ "label": "D",
+ }
+ "KC_F": {
+ "key": "CZ_F",
+ "label": "F",
+ }
+ "KC_G": {
+ "key": "CZ_G",
+ "label": "G",
+ }
+ "KC_H": {
+ "key": "CZ_H",
+ "label": "H",
+ }
+ "KC_J": {
+ "key": "CZ_J",
+ "label": "J",
+ }
+ "KC_K": {
+ "key": "CZ_K",
+ "label": "K",
+ }
+ "KC_L": {
+ "key": "CZ_L",
+ "label": "L",
+ }
+ "KC_SCLN": {
+ "key": "CZ_URNG",
+ "label": "ů",
+ }
+ "KC_QUOT": {
+ "key": "CZ_SECT",
+ "label": "§",
+ }
+ "KC_NUHS": {
+ "key": "CZ_DIAE",
+ "label": "¨ (dead)",
+ }
+ "KC_NUBS": {
+ "key": "CZ_BSLS",
+ "label": "\\",
+ }
+ "KC_Z": {
+ "key": "CZ_Y",
+ "label": "Y",
+ }
+ "KC_X": {
+ "key": "CZ_X",
+ "label": "X",
+ }
+ "KC_C": {
+ "key": "CZ_C",
+ "label": "C",
+ }
+ "KC_V": {
+ "key": "CZ_V",
+ "label": "V",
+ }
+ "KC_B": {
+ "key": "CZ_B",
+ "label": "B",
+ }
+ "KC_N": {
+ "key": "CZ_N",
+ "label": "N",
+ }
+ "KC_M": {
+ "key": "CZ_M",
+ "label": "M",
+ }
+ "KC_COMM": {
+ "key": "CZ_COMM",
+ "label": ",",
+ }
+ "KC_DOT": {
+ "key": "CZ_DOT",
+ "label": ".",
+ }
+ "KC_SLSH": {
+ "key": "CZ_MINS",
+ "label": "-",
+ }
+/* Shifted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ % │ ˇ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │ │ │ │ │ │ │ │ │ │ │ │ / │ ( │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+ * │ │ │ │ │ │ │ │ │ │ │ " │ ! │ ` │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
+ * │ │ | │ │ │ │ │ │ │ │ ? │ : │ _ │ │
+ * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │ │ │ │ │ │ │ │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+ "S(CZ_PLUS)": {
+ "key": "CZ_1",
+ "label": "1",
+ }
+ "S(CZ_ECAR)": {
+ "key": "CZ_2",
+ "label": "2",
+ }
+ "S(CZ_SCAR)": {
+ "key": "CZ_3",
+ "label": "3",
+ }
+ "S(CZ_CCAR)": {
+ "key": "CZ_4",
+ "label": "4",
+ }
+ "S(CZ_RCAR)": {
+ "key": "CZ_5",
+ "label": "5",
+ }
+ "S(CZ_ZCAR)": {
+ "key": "CZ_6",
+ "label": "6",
+ }
+ "S(CZ_YACU)": {
+ "key": "CZ_7",
+ "label": "7",
+ }
+ "S(CZ_AACU)": {
+ "key": "CZ_8",
+ "label": "8",
+ }
+ "S(CZ_IACU)": {
+ "key": "CZ_9",
+ "label": "9",
+ }
+ "S(CZ_EACU)": {
+ "key": "CZ_0",
+ "label": "0",
+ }
+ "S(CZ_EQL)": {
+ "key": "CZ_PERC",
+ "label": "%",
+ }
+ "S(CZ_ACUT)": {
+ "key": "CZ_CARN",
+ "label": "ˇ (dead)",
+ }
+ "S(CZ_UACU)": {
+ "key": "CZ_SLSH",
+ "label": "/",
+ }
+ "S(CZ_RPRN)": {
+ "key": "CZ_LPRN",
+ "label": "(",
+ }
+ "S(CZ_URNG)": {
+ "key": "CZ_DQUO",
+ "label": "\"",
+ }
+ "S(CZ_SECT)": {
+ "key": "CZ_EXLM",
+ "label": "!",
+ }
+ "S(CZ_DIAE)": {
+ "key": "CZ_GRV",
+ "label": "`",
+ }
+ "S(CZ_BSLS)": {
+ "key": "CZ_PIPE",
+ "label": "|",
+ }
+ "S(CZ_COMM)": {
+ "key": "CZ_QUES",
+ "label": "?",
+ }
+ "S(CZ_DOT)": {
+ "key": "CZ_COLN",
+ "label": ":",
+ }
+ "S(CZ_MINS)": {
+ "key": "CZ_UNDS",
+ "label": "_",
+ }
+/* Alted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ │ │ @ │ # │ $ │ ~ │ ^ │ & │ * │ { │ } │ ° │ ^ │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │ │ │ ė │ ę │ € │ │ ż │ │ │ │ │ [ │ ] │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+ * │ │ ą │ ß │ ∂ │ │ │ ‘ │ ’ │ │ ł │ ; │ ' │ │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
+ * │ │ │ │ │ │ │ │ ‚ │ │ < │ > │ – │ │
+ * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │ │ │ │ │ │ │ │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+ "A(CZ_ECAR)": {
+ "key": "CZ_AT",
+ "label": "@",
+ }
+ "A(CZ_SCAR)": {
+ "key": "CZ_HASH",
+ "label": "#",
+ }
+ "A(CZ_CCAR)": {
+ "key": "CZ_DLR",
+ "label": "$",
+ }
+ "A(CZ_RCAR)": {
+ "key": "CZ_TILD",
+ "label": "~",
+ }
+ "A(CZ_ZCAR)": {
+ "key": "CZ_CIRC",
+ "label": "^",
+ }
+ "A(CZ_YACU)": {
+ "key": "CZ_AMPR",
+ "label": "&",
+ }
+ "A(CZ_AACU)": {
+ "key": "CZ_ASTR",
+ "label": "*",
+ }
+ "A(CZ_IACU)": {
+ "key": "CZ_LCBR",
+ "label": "{",
+ }
+ "A(CZ_EACU)": {
+ "key": "CZ_RCBR",
+ "label": "}",
+ }
+ "A(CZ_EQL)": {
+ "key": "CZ_RNGA",
+ "label": "° (dead)",
+ }
+ "A(CZ_ACUT)": {
+ "key": "CZ_DCIR",
+ "label": "^ (dead)",
+ }
+ "A(CZ_W)": {
+ "key": "CZ_LEDT",
+ "label": "ė",
+ }
+ "A(CZ_E)": {
+ "key": "CZ_LEOG",
+ "label": "ę",
+ }
+ "A(CZ_R)": {
+ "key": "CZ_EURO",
+ "label": "€",
+ }
+ "A(CZ_Z)": {
+ "key": "CZ_LZDT",
+ "label": "ż",
+ }
+ "A(CZ_UACU)": {
+ "key": "CZ_LBRC",
+ "label": "[",
+ }
+ "A(CZ_RPRN)": {
+ "key": "CZ_RBRC",
+ "label": "]",
+ }
+ "A(CZ_A)": {
+ "key": "CZ_LAOG",
+ "label": "ą",
+ }
+ "A(CZ_S)": {
+ "key": "CZ_SS",
+ "label": "ß",
+ }
+ "A(CZ_D)": {
+ "key": "CZ_PDIF",
+ "label": "∂",
+ }
+ "A(CZ_H)": {
+ "key": "CZ_LSQU",
+ "label": "‘",
+ }
+ "A(CZ_J)": {
+ "key": "CZ_RSQU",
+ "label": "’",
+ }
+ "A(CZ_L)": {
+ "key": "CZ_LLST",
+ "label": "ł",
+ }
+ "A(CZ_URNG)": {
+ "key": "CZ_SCLN",
+ "label": ";",
+ }
+ "A(CZ_SECT)": {
+ "key": "CZ_QUOT",
+ "label": "'",
+ }
+ "A(CZ_N)": {
+ "key": "CZ_SLQU",
+ "label": "‚",
+ }
+ "A(CZ_COMM)": {
+ "key": "CZ_LABK",
+ "label": "<",
+ }
+ "A(CZ_DOT)": {
+ "key": "CZ_RABK",
+ "label": ">",
+ }
+ "A(CZ_MINS)": {
+ "key": "CZ_NDSH",
+ "label": "–",
+ }
+/* Shift+Alted symbols
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬─────┐
+ * │ │ ¬ │ • │ ≠ │ £ │ ◊ │ † │ ¶ │ ÷ │ « │ » │ , │ - │ │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬───┤
+ * │ │ │ Ė │ Ę │ ® │ ™ │ Ż │ │ │ │ │ ‹ │ › │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+ * │ │ Ą │ ∑ │ ∆ │ │ │ “ │ ” │ │ Ł │ … │ ~ │ " │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴──┤
+ * │ │ │ │ │ © │ √ │ │ „ │ │ ≤ │ ≥ │ — │ │
+ * ├────┴┬──┴─┬─┴───┼───┴───┴───┴───┴───┴───┼───┴─┬─┴──┬─────┤
+ * │ │ │ │ │ │ │ │
+ * └─────┴────┴─────┴───────────────────────┴─────┴────┴─────┘
+ */
+ "S(A(CZ_1))": {
+ "key": "CZ_NOT",
+ "label": "¬",
+ }
+ "S(A(CZ_2))": {
+ "key": "CZ_BULT",
+ "label": "•",
+ }
+ "S(A(CZ_3))": {
+ "key": "CZ_NEQL",
+ "label": "≠",
+ }
+ "S(A(CZ_4))": {
+ "key": "CZ_PND",
+ "label": "£",
+ }
+ "S(A(CZ_5))": {
+ "key": "CZ_LOZN",
+ "label": "◊",
+ }
+ "S(A(CZ_6))": {
+ "key": "CZ_DAGG",
+ "label": "†",
+ }
+ "S(A(CZ_7))": {
+ "key": "CZ_PARA",
+ "label": "¶",
+ }
+ "S(A(CZ_8))": {
+ "key": "CZ_DIV",
+ "label": "÷",
+ }
+ "S(A(CZ_9))": {
+ "key": "CZ_LDAQ",
+ "label": "«",
+ }
+ "S(A(CZ_0))": {
+ "key": "CZ_RDAQ",
+ "label": "»",
+ }
+ "S(A(CZ_EQL))": {
+ "key": "CZ_DCOM",
+ "label": ", (dead)",
+ }
+ "S(A(CZ_ACUT))": {
+ "key": "CZ_DHPN",
+ "label": "- (dead)",
+ }
+ "S(A(CZ_W))": {
+ "key": "CZ_CEDT",
+ "label": "Ė",
+ }
+ "S(A(CZ_E))": {
+ "key": "CZ_CEOG",
+ "label": "Ę",
+ }
+ "S(A(CZ_R))": {
+ "key": "CZ_REGD",
+ "label": "®",
+ }
+ "S(A(CZ_T))": {
+ "key": "CZ_TM",
+ "label": "™",
+ }
+ "S(A(CZ_Z))": {
+ "key": "CZ_CZDT",
+ "label": "Ż",
+ }
+ "S(A(CZ_UACU))": {
+ "key": "CZ_LSAQ",
+ "label": "‹",
+ }
+ "S(A(CZ_RPRN))": {
+ "key": "CZ_RSAQ",
+ "label": "›",
+ }
+ "S(A(CZ_A))": {
+ "key": "CZ_CAOG",
+ "label": "Ą",
+ }
+ "S(A(CZ_S))": {
+ "key": "CZ_NARS",
+ "label": "∑",
+ }
+ "S(A(CZ_D))": {
+ "key": "CZ_INCR",
+ "label": "∆",
+ }
+ "S(A(CZ_H))": {
+ "key": "CZ_LDQU",
+ "label": "“",
+ }
+ "S(A(CZ_J))": {
+ "key": "CZ_RDQU",
+ "label": "”",
+ }
+ "S(A(CZ_L))": {
+ "key": "CZ_CLST",
+ "label": "Ł",
+ }
+ "S(A(CZ_URNG))": {
+ "key": "CZ_ELLP",
+ "label": "…",
+ }
+ "S(A(CZ_SECT))": {
+ "key": "CZ_DTIL",
+ "label": "~ (dead)",
+ }
+ "S(A(CZ_DIAE))": {
+ "key": "CZ_DDQT",
+ "label": "\" (dead)",
+ }
+ "S(A(CZ_C))": {
+ "key": "CZ_COPY",
+ "label": "©",
+ }
+ "S(A(CZ_V))": {
+ "key": "CZ_SQRT",
+ "label": "√",
+ }
+ "S(A(CZ_N))": {
+ "key": "CZ_DLQU",
+ "label": "„",
+ }
+ "S(A(CZ_COMM))": {
+ "key": "CZ_LEQL",
+ "label": "≤",
+ }
+ "S(A(CZ_DOT))": {
+ "key": "CZ_GEQL",
+ "label": "≥",
+ }
+ "S(A(CZ_MINS))": {
+ "key": "CZ_MDSH",
+ "label": "—",
+ }
+ }
+}
diff --git a/data/mappings/info_config.hjson b/data/mappings/info_config.hjson
index c0417b88396..b61ca040714 100644
--- a/data/mappings/info_config.hjson
+++ b/data/mappings/info_config.hjson
@@ -164,7 +164,6 @@
"RGBLIGHT_DEFAULT_SAT": {"info_key": "rgblight.default.sat", "value_type": "int"},
"RGBLIGHT_DEFAULT_VAL": {"info_key": "rgblight.default.val", "value_type": "int"},
"RGBLIGHT_DEFAULT_SPD": {"info_key": "rgblight.default.speed", "value_type": "int"},
- "RGBW": {"info_key": "rgblight.rgbw", "value_type": "flag"},
// Secure
"SECURE_IDLE_TIMEOUT": {"info_key": "secure.idle_timeout", "value_type": "int"},
@@ -215,6 +214,7 @@
"WS2812_DI_PIN": {"info_key": "ws2812.pin"},
"WS2812_I2C_ADDRESS": {"info_key": "ws2812.i2c_address", "value_type": "hex"},
"WS2812_I2C_TIMEOUT": {"info_key": "ws2812.i2c_timeout", "value_type": "int"},
+ "WS2812_RGBW": {"info_key": "ws2812.rgbw", "value_type": "flag"},
"LAYOUTS": {"info_key": "layout_aliases", "value_type": "mapping"},
@@ -229,6 +229,7 @@
"PREVENT_STUCK_MODIFIERS": {"info_key": "_invalid.prevent_stuck_mods", "invalid": true},
"QMK_KEYS_PER_SCAN": {"info_key": "qmk.keys_per_scan", "value_type": "int", "deprecated": true},
"RGB_DI_PIN": {"info_key": "rgblight.pin", "invalid": true, "replace_with": "WS2812_DI_PIN or APA102_DI_PIN"},
+ "RGBW": {"info_key": "rgblight.rgbw", "invalid": true, "replace_with": "WS2812_RGBW"},
"RGB_DISABLE_WHEN_USB_SUSPENDED": {"info_key": "_invalid.rgb_matrix_sleep", "invalid": true, "replace_with": "RGB_MATRIX_SLEEP"},
"RGBLIGHT_ANIMATIONS": {"info_key": "_invalid.rgblight.animations.all", "value_type": "flag", "invalid": true},
"TAPPING_FORCE_HOLD": {"info_key": "tapping.force_hold", "value_type": "flag", "deprecated": true},
diff --git a/data/mappings/info_rules.hjson b/data/mappings/info_rules.hjson
index 35e2e8dfc0d..97611bcf587 100644
--- a/data/mappings/info_rules.hjson
+++ b/data/mappings/info_rules.hjson
@@ -11,6 +11,7 @@
// invalid: Default `false`. Set to `true` to generate errors when a value exists
// replace_with: use with a key marked deprecated or invalid to designate a replacement
+ "AUDIO_DRIVER": {"info_key": "audio.driver"},
"BACKLIGHT_DRIVER": {"info_key": "backlight.driver"},
"BLUETOOTH_DRIVER": {"info_key": "bluetooth.driver"},
"BOARD": {"info_key": "board"},
@@ -44,7 +45,7 @@
"SPLIT_TRANSPORT": {"info_key": "split.transport.protocol", "to_c": false},
"STENO_ENABLE": {"info_key": "stenography.enabled", "value_type": "bool"},
"STENO_PROTOCOL": {"info_key": "stenography.protocol"},
- "WAIT_FOR_USB": {"info_key": "usb.wait_for", "value_type": "bool"},
+ "USB_WAIT_FOR_ENUMERATION": {"info_key": "usb.wait_for_enumeration", "value_type": "bool"},
"WEAR_LEVELING_DRIVER": {"info_key": "eeprom.wear_leveling.driver"},
"WS2812_DRIVER": {"info_key": "ws2812.driver"},
diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema
index f3116fd2710..de01809b43d 100644
--- a/data/schemas/keyboard.jsonschema
+++ b/data/schemas/keyboard.jsonschema
@@ -133,6 +133,10 @@
"clicky": {"type": "boolean"}
}
},
+ "driver": {
+ "type": "string",
+ "enum": ["dac_additive", "dac_basic", "pwm_software", "pwm_hardware"]
+ },
"macro_beep": {"type": "boolean"},
"pins": {"$ref": "qmk.definitions.v1#/mcu_pin_array"},
"power_control": {
@@ -657,7 +661,10 @@
"$ref": "qmk.definitions.v1#/mcu_pin",
"$comment": "Deprecated: use ws2812.pin instead"
},
- "rgbw": {"type": "boolean"},
+ "rgbw": {
+ "type": "boolean",
+ "$comment": "Deprecated: use ws2812.rgbw instead"
+ },
"saturation_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"},
"sleep": {"type": "boolean"},
"split": {"type": "boolean"},
@@ -894,7 +901,7 @@
}
},
"suspend_wakeup_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"},
- "wait_for": {"type": "boolean"}
+ "wait_for_enumeration": {"type": "boolean"}
}
},
"qmk": {
@@ -933,6 +940,7 @@
"enum": ["bitbang", "custom", "i2c", "pwm", "spi", "vendor"]
},
"pin": {"$ref": "qmk.definitions.v1#/mcu_pin"},
+ "rgbw": {"type": "boolean"},
"i2c_address": {"$ref": "qmk.definitions.v1#/hex_number_2d"},
"i2c_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}
}
diff --git a/docs/ChangeLog/20240526/PR23309.md b/docs/ChangeLog/20240526/PR23309.md
new file mode 100644
index 00000000000..b5ca5f1e4d0
--- /dev/null
+++ b/docs/ChangeLog/20240526/PR23309.md
@@ -0,0 +1,35 @@
+# MechKeys ACR60 Layout Updates
+
+This PR removed and changed some of the layouts that were configured for
+the ACR60. If you use one of the following layouts, you will need to
+update your keymap:
+
+- [`LAYOUT_hhkb`](#layout-hhkb)
+- [`LAYOUT_true_hhkb`](#layout-true-hhkb)
+- [`LAYOUT_directional`](#layout-directional)
+- [`LAYOUT_mitchsplit`](#layout-mitchsplit)
+
+## `LAYOUT_hhkb` :id=layout-hhkb
+
+1. Change your layout macro to `LAYOUT_60_hhkb`.
+2. Remove any keycodes for the key between Left Shift and QWERTY Z.
+
+## `LAYOUT_true_hhkb` :id=layout-true-hhkb
+
+1. Change your layout macro to `LAYOUT_60_true_hhkb`.
+2. Remove any keycodes for the key between Left Shift and QWERTY Z.
+
+## `LAYOUT_directional` :id=layout-directional
+
+1. Change your layout macro to `LAYOUT_60_ansi_arrow_split_bs`.
+2. Remove any keycodes for the key between Left Shift and QWERTY Z.
+3. Remove any keycodes for the keys immediately before *and* after the
+1.25u key of Split Spacebar.
+
+If you need split spacebars, you may implement
+`LAYOUT_60_ansi_arrow_split_space_split_bs` and change your layout to
+it, removing the keycode between Left Shift and QWERTY Z.
+
+## `LAYOUT_mitchsplit` :id=layout-mitchsplit
+
+1. Use `LAYOUT_60_ansi_split_space_split_rshift`.
diff --git a/docs/config_options.md b/docs/config_options.md
index 045d9c07479..046429a5875 100644
--- a/docs/config_options.md
+++ b/docs/config_options.md
@@ -237,7 +237,7 @@ If you define these options you will enable the associated feature, which may in
* units to step when in/decreasing saturation
* `#define RGBLIGHT_VAL_STEP 12`
* units to step when in/decreasing value (brightness)
-* `#define RGBW`
+* `#define WS2812_RGBW`
* Enables RGBW LED support
## Mouse Key Options
@@ -446,7 +446,7 @@ Use these to enable or disable building certain features. The more you have enab
* Allows replacing the standard matrix scanning routine with a custom one.
* `DEBOUNCE_TYPE`
* Allows replacing the standard key debouncing routine with an alternative or custom one.
-* `WAIT_FOR_USB`
+* `USB_WAIT_FOR_ENUMERATION`
* Forces the keyboard to wait for a USB connection to be established before it starts up
* `NO_USB_STARTUP_CHECK`
* Disables usb suspend check after keyboard startup. Usually the keyboard waits for the host to wake it up before any tasks are performed. This is useful for split keyboards as one half will not get a wakeup call but must send commands to the master.
diff --git a/docs/feature_rgblight.md b/docs/feature_rgblight.md
index a6a89d1d00c..ae37ceca92f 100644
--- a/docs/feature_rgblight.md
+++ b/docs/feature_rgblight.md
@@ -6,7 +6,7 @@ QMK has the ability to control RGB LEDs attached to your keyboard. This is commo
Some keyboards come with RGB LEDs preinstalled. Others must have them installed after the fact. See the [Hardware Modification](#hardware-modification) section for information on adding RGB lighting to your keyboard.
-Currently QMK supports the following addressable LEDs (however, the white LED in RGBW variants is not supported):
+Currently QMK supports the following addressable LEDs:
* WS2811, WS2812, WS2812B, WS2812C, etc.
* SK6812, SK6812MINI, SK6805
diff --git a/docs/ja/config_options.md b/docs/ja/config_options.md
index a349081d6a2..6cc1b6bfcd7 100644
--- a/docs/ja/config_options.md
+++ b/docs/ja/config_options.md
@@ -378,7 +378,7 @@ QMK での全ての利用可能な設定にはデフォルトがあります。
* 標準マトリックス走査ルーチンを独自のものに置き換えることができます。
* `DEBOUNCE_TYPE`
* 標準キーデバウンスルーチンを代替または独自のものに置き換えることができます。
-* `WAIT_FOR_USB`
+* `USB_WAIT_FOR_ENUMERATION`
* キーボードが起動する前に、USB 接続が確立されるのをキーボードに待機させます
* `NO_USB_STARTUP_CHECK`
* キーボードの起動後の usb サスペンドチェックを無効にします。通常、キーボードはタスクが実行される前にホストがウェイク アップするのを待ちます。分割キーボードは半分はウェイクアップコールを取得できませんが、マスタにコマンドを送信する必要があるため、役に立ちます。
diff --git a/docs/reference_info_json.md b/docs/reference_info_json.md
index e6bc34e79ec..5b06e9a3268 100644
--- a/docs/reference_info_json.md
+++ b/docs/reference_info_json.md
@@ -118,6 +118,8 @@ Configures the [Audio](feature_audio.md) feature.
* `clicky`
* The default audio clicky enabled state.
* Default: `true`
+ * `driver`
+ * The driver to use. Must be one of `dac_additive`, `dac_basic`, `pwm_software`, `pwm_hardware`.
* `macro_beep`
* Play a short beep for `\a` (ASCII `BEL`) characters in Send String macros.
* Default: `false`
@@ -586,9 +588,6 @@ Configures the [RGB Lighting](feature_rgblight.md) feature.
* `max_brightness`
* The maximum value which the HSV "V" component is scaled to, from 0 to 255.
* Default: `255`
- * `rgbw`
- * Enable RGBW LEDs.
- * Default: `false`
* `saturation_steps`
* The number of saturation adjustment steps.
* Default: `17`
@@ -833,7 +832,7 @@ Configures the [Stenography](feature_stenography.md) feature.
* `suspend_wakeup_delay`
* The amount of time to wait after sending a wakeup packet, in milliseconds.
* Default: `0` (disabled)
- * `wait_for`
+ * `wait_for_enumeration`
* Force the keyboard to wait for USB enumeration before starting up.
* Default: `false`
@@ -853,3 +852,6 @@ Configures the [WS2812](ws2812_driver.md) driver.
* `i2c_timeout`
* The I²C timeout in milliseconds (`i2c` driver only).
* Default: `100` (100 ms)
+ * `rgbw`
+ * Enable RGBW LEDs.
+ * Default: `false`
diff --git a/docs/reference_keymap_extras.md b/docs/reference_keymap_extras.md
index cf2ab288761..191e0d4ea8d 100644
--- a/docs/reference_keymap_extras.md
+++ b/docs/reference_keymap_extras.md
@@ -23,6 +23,8 @@ These headers are located in [`quantum/keymap_extras/`](https://github.com/qmk/q
|Canadian Multilingual (CSA) |`keymap_canadian_multilingual.h` |`sendstring_canadian_multilingual.h`|
|Croatian |`keymap_croatian.h` |`sendstring_croatian.h` |
|Czech |`keymap_czech.h` |`sendstring_czech.h` |
+|Czech (macOS, ANSI) |`keymap_czech_mac_ansi.h` |`sendstring_czech_mac_ansi.h` |
+|Czech (macOS, ISO) |`keymap_czech_mac_iso.h` |`sendstring_czech_mac_iso.h` |
|Danish |`keymap_danish.h` |`sendstring_danish.h` |
|Dutch (Belgium) |`keymap_belgian.h` |`sendstring_belgian.h` |
|English (Ireland) |`keymap_irish.h` | |
diff --git a/docs/ws2812_driver.md b/docs/ws2812_driver.md
index 006529cc8ae..8851c042f04 100644
--- a/docs/ws2812_driver.md
+++ b/docs/ws2812_driver.md
@@ -33,6 +33,7 @@ Add the following to your `config.h`:
|`WS2812_T0H` |`350` |The length of a "0" bit's high phase in nanoseconds |
|`WS2812_TRST_US` |`280` |The length of the reset phase in microseconds |
|`WS2812_BYTE_ORDER`|`WS2812_BYTE_ORDER_GRB`|The byte order of the RGB data |
+|`WS2812_RGBW` |*Not defined* |Enables RGBW support (except `i2c` driver) |
### Timing Adjustment :id=timing-adjustment
@@ -58,6 +59,27 @@ Where the byte order may be one of:
|`RGB` |WS2812B-2020 |
|`BGR` |TM1812 |
+### RGBW Support :id=rgbw-support
+
+Rendering the color white with RGB LEDs is typically inconsistent due to inherent variations between each individual LED die. However, some WS2812 variants (such as SK6812RGBW) also possess a white LED along with the red, green, and blue channels, which allows for a more accurate white to be displayed.
+
+QMK can automatically convert the RGB data to be sent to the LEDs to mix in the white channel:
+
+```
+w = min(r, g, b)
+r -= w
+g -= w
+b -= w
+```
+
+Thus, an RGB triplet of `255,255,255` will simply turn on the white LED fully (`0,0,0,255`).
+
+To enable RGBW conversion, add the following to your `config.h`:
+
+```c
+#define WS2812_RGBW
+```
+
## Driver Configuration :id=driver-configuration
Driver selection can be configured in `rules.mk` as `WS2812_DRIVER`, or in `info.json` as `ws2812.driver`. Valid values are `bitbang` (default), `i2c`, `spi`, `pwm`, `vendor`, or `custom`. See below for information on individual drivers.
diff --git a/keyboards/40percentclub/ut47/led.c b/keyboards/40percentclub/ut47/led.c
index 867a6e2e2a3..fa431de760c 100644
--- a/keyboards/40percentclub/ut47/led.c
+++ b/keyboards/40percentclub/ut47/led.c
@@ -25,16 +25,14 @@ bool led_update_kb(led_t led_state)
if (res) {
if (led_state.caps_lock) {
// output low
- DDRB |= (1<<0);
- PORTB &= ~(1<<0);
- DDRD |= (1<<5);
- PORTD &= ~(1<<5);
+ gpio_set_pin_output(B0);
+ gpio_write_pin_low(B0);
+ gpio_set_pin_output(D5);
+ gpio_write_pin_low(D5);
} else {
// Hi-Z
- DDRB &= ~(1<<0);
- PORTB &= ~(1<<0);
- DDRD &= ~(1<<5);
- PORTD &= ~(1<<5);
+ gpio_set_pin_input(B0);
+ gpio_set_pin_input(D5);
}
}
return false;
diff --git a/keyboards/40percentclub/ut47/matrix.c b/keyboards/40percentclub/ut47/matrix.c
index 02ed88b7091..d803f11c5e4 100644
--- a/keyboards/40percentclub/ut47/matrix.c
+++ b/keyboards/40percentclub/ut47/matrix.c
@@ -126,14 +126,18 @@ void matrix_print(void)
static void init_cols(void)
{
// Input with pull-up(DDR:0, PORT:1)
- DDRF &= ~(1<<4 | 1<<5 | 1<<6 | 1<<7);
- PORTF |= (1<<4 | 1<<5 | 1<<6 | 1<<7);
- DDRE &= ~(1<<6);
- PORTE |= (1<<6);
- DDRD &= ~(1<<7);
- PORTD |= (1<<7);
- DDRB &= ~(1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6);
- PORTB |= (1<<1 | 1<<2 | 1<<3 | 1<<4 | 1<<5 | 1<<6);
+ gpio_set_pin_input_high(F4);
+ gpio_set_pin_input_high(F5);
+ gpio_set_pin_input_high(F6);
+ gpio_set_pin_input_high(F7);
+ gpio_set_pin_input_high(E6);
+ gpio_set_pin_input_high(D7);
+ gpio_set_pin_input_high(B1);
+ gpio_set_pin_input_high(B2);
+ gpio_set_pin_input_high(B3);
+ gpio_set_pin_input_high(B4);
+ gpio_set_pin_input_high(B5);
+ gpio_set_pin_input_high(B6);
}
static matrix_row_t read_cols(void)
@@ -160,10 +164,10 @@ static matrix_row_t read_cols(void)
static void unselect_rows(void)
{
// Hi-Z(DDR:0, PORT:0) to unselect
- DDRD &= ~0b00010011;
- PORTD &= ~0b00010011;
- DDRC &= ~0b01000000;
- PORTC &= ~0b01000000;
+ gpio_set_pin_input(C6);
+ gpio_set_pin_input(D0);
+ gpio_set_pin_input(D1);
+ gpio_set_pin_input(D4);
}
static void select_row(uint8_t row)
@@ -171,20 +175,20 @@ static void select_row(uint8_t row)
// Output low(DDR:1, PORT:0) to select
switch (row) {
case 0:
- DDRD |= (1<<1);
- PORTD &= ~(1<<1);
+ gpio_set_pin_output(D1);
+ gpio_write_pin_low(D1);
break;
case 1:
- DDRD |= (1<<0);
- PORTD &= ~(1<<0);
+ gpio_set_pin_output(D0);
+ gpio_write_pin_low(D0);
break;
case 2:
- DDRD |= (1<<4);
- PORTD &= ~(1<<4);
+ gpio_set_pin_output(D4);
+ gpio_write_pin_low(D4);
break;
case 3:
- DDRC |= (1<<6);
- PORTC &= ~(1<<6);
+ gpio_set_pin_output(C6);
+ gpio_write_pin_low(C6);
break;
}
}
diff --git a/keyboards/adafruit/macropad/keyboard.json b/keyboards/adafruit/macropad/keyboard.json
index 86601c0167f..94f2673f98f 100644
--- a/keyboards/adafruit/macropad/keyboard.json
+++ b/keyboards/adafruit/macropad/keyboard.json
@@ -19,6 +19,7 @@
"oled": true
},
"audio": {
+ "driver": "pwm_hardware",
"power_control": {
"pin": "GP14"
}
diff --git a/keyboards/adafruit/macropad/rules.mk b/keyboards/adafruit/macropad/rules.mk
index 1630b74ceae..d7ca5b3b90f 100644
--- a/keyboards/adafruit/macropad/rules.mk
+++ b/keyboards/adafruit/macropad/rules.mk
@@ -1,2 +1 @@
-AUDIO_DRIVER = pwm_hardware
OLED_TRANSPORT = spi
diff --git a/keyboards/amjkeyboard/amj96/matrix.c b/keyboards/amjkeyboard/amj96/matrix.c
index 7faf40d4fe7..448508971fb 100644
--- a/keyboards/amjkeyboard/amj96/matrix.c
+++ b/keyboards/amjkeyboard/amj96/matrix.c
@@ -65,8 +65,8 @@ void matrix_init(void)
#endif
// 85 REST
- DDRD |= _BV(PD7);
- PORTD |= _BV(PD7);
+ gpio_set_pin_output(D7);
+ gpio_write_pin_high(D7);
// initialize row and col
init_rows();
@@ -143,36 +143,35 @@ static void init_cols(void)
DDRD &= 0b00011100;
PORTD |= 0b11100011;
- DDRB &= ~(_BV(PB6) | _BV(PB7)| _BV(PB0));
- PORTB |= (_BV(PB6) | _BV(PB7)| _BV(PB0));
+ gpio_set_pin_input_high(B0);
+ gpio_set_pin_input_high(B6);
+ gpio_set_pin_input_high(B7);
- DDRE &= ~_BV(PE6);
- PORTE |= _BV(PE6);
+ gpio_set_pin_input_high(E6);
- DDRC &= ~_BV(PC7);
- PORTC |= _BV(PC7);
+ gpio_set_pin_input_high(C7);
}
static matrix_row_t read_cols(void)
{
- return (PINF&_BV(PF7) ? 0 : (1<<0)) |
- (PINF&_BV(PF6) ? 0 : (1<<1)) |
- (PINF&_BV(PF5) ? 0 : (1<<2)) |
- (PINF&_BV(PF4) ? 0 : (1<<3)) |
- (PINF&_BV(PF1) ? 0 : (1<<4)) |
- (PINF&_BV(PF0) ? 0 : (1<<5)) |
- (PINE&_BV(PE6) ? 0 : (1<<6)) |
- (PIND&_BV(PD7) ? 0 : (1<<7)) |
- (PIND&_BV(PD6) ? 0 : (1<<8)) |
- (PIND&_BV(PD5) ? 0 : (1<<9)) |
- (PIND&_BV(PD1) ? 0 : (1<<10)) |
- (PIND&_BV(PD0) ? 0 : (1<<11)) |
- (PINB&_BV(PB7) ? 0 : (1<<12)) |
- (PINB&_BV(PB6) ? 0 : (1<<13)) |
- (PINB&_BV(PB0) ? 0 : (1<<14)) |
- (PINC&_BV(PC7) ? 0 : (1<<15));
+ return (gpio_read_pin(F7) ? 0 : (1<<0)) |
+ (gpio_read_pin(F6) ? 0 : (1<<1)) |
+ (gpio_read_pin(F5) ? 0 : (1<<2)) |
+ (gpio_read_pin(F4) ? 0 : (1<<3)) |
+ (gpio_read_pin(F1) ? 0 : (1<<4)) |
+ (gpio_read_pin(F0) ? 0 : (1<<5)) |
+ (gpio_read_pin(E6) ? 0 : (1<<6)) |
+ (gpio_read_pin(D7) ? 0 : (1<<7)) |
+ (gpio_read_pin(D6) ? 0 : (1<<8)) |
+ (gpio_read_pin(D5) ? 0 : (1<<9)) |
+ (gpio_read_pin(D1) ? 0 : (1<<10)) |
+ (gpio_read_pin(D0) ? 0 : (1<<11)) |
+ (gpio_read_pin(B7) ? 0 : (1<<12)) |
+ (gpio_read_pin(B6) ? 0 : (1<<13)) |
+ (gpio_read_pin(B0) ? 0 : (1<<14)) |
+ (gpio_read_pin(C7) ? 0 : (1<<15));
}
/* Row pin configuration
@@ -184,21 +183,23 @@ static matrix_row_t read_cols(void)
static void init_rows(void)
{
- DDRB |= (1<.
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_60_ansi_tsangan(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
+ ),
+ [1] = LAYOUT_60_ansi_tsangan(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_60_ansi_tsangan(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ )
+ // clang-format on
+};
diff --git a/keyboards/cipulot/chroma/keymaps/60_ansi_wkl/keymap.c b/keyboards/cipulot/chroma/keymaps/60_ansi_wkl/keymap.c
new file mode 100644
index 00000000000..4bc80d1d24b
--- /dev/null
+++ b/keyboards/cipulot/chroma/keymaps/60_ansi_wkl/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_60_ansi_wkl(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL
+ ),
+ [1] = LAYOUT_60_ansi_wkl(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_60_ansi_wkl(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______
+ )
+ // clang-format on
+};
diff --git a/keyboards/cipulot/chroma/keymaps/60_ansi_wkl_split_bs_rshift/keymap.c b/keyboards/cipulot/chroma/keymaps/60_ansi_wkl_split_bs_rshift/keymap.c
new file mode 100644
index 00000000000..e9cdf26567f
--- /dev/null
+++ b/keyboards/cipulot/chroma/keymaps/60_ansi_wkl_split_bs_rshift/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_60_ansi_wkl_split_bs_rshift(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL
+ ),
+ [1] = LAYOUT_60_ansi_wkl_split_bs_rshift(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, MO(2)
+ ),
+ [2] = LAYOUT_60_ansi_wkl_split_bs_rshift(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______
+ )
+ // clang-format on
+};
diff --git a/keyboards/cipulot/chroma/keymaps/60_iso_tsangan/keymap.c b/keyboards/cipulot/chroma/keymaps/60_iso_tsangan/keymap.c
new file mode 100644
index 00000000000..55492c3e4d4
--- /dev/null
+++ b/keyboards/cipulot/chroma/keymaps/60_iso_tsangan/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_60_iso_tsangan(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
+ ),
+ [1] = LAYOUT_60_iso_tsangan(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_60_iso_tsangan(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ )
+ // clang-format on
+};
diff --git a/keyboards/cipulot/chroma/keymaps/60_iso_tsangan_split_bs_rshift/keymap.c b/keyboards/cipulot/chroma/keymaps/60_iso_tsangan_split_bs_rshift/keymap.c
new file mode 100644
index 00000000000..3cce7112447
--- /dev/null
+++ b/keyboards/cipulot/chroma/keymaps/60_iso_tsangan_split_bs_rshift/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_60_iso_tsangan_split_bs_rshift(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
+ ),
+ [1] = LAYOUT_60_iso_tsangan_split_bs_rshift(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, MO(2)
+ ),
+ [2] = LAYOUT_60_iso_tsangan_split_bs_rshift(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ )
+ // clang-format on
+};
diff --git a/keyboards/cipulot/chroma/keymaps/60_iso_wkl/keymap.c b/keyboards/cipulot/chroma/keymaps/60_iso_wkl/keymap.c
new file mode 100644
index 00000000000..01bb84f50d4
--- /dev/null
+++ b/keyboards/cipulot/chroma/keymaps/60_iso_wkl/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_60_iso_wkl(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL
+ ),
+ [1] = LAYOUT_60_iso_wkl(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT_60_iso_wkl(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______
+ )
+ // clang-format on
+};
diff --git a/keyboards/cipulot/chroma/keymaps/60_iso_wkl_split_bs_rshift/keymap.c b/keyboards/cipulot/chroma/keymaps/60_iso_wkl_split_bs_rshift/keymap.c
new file mode 100644
index 00000000000..d412f2a977d
--- /dev/null
+++ b/keyboards/cipulot/chroma/keymaps/60_iso_wkl_split_bs_rshift/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_60_iso_wkl_split_bs_rshift(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL
+ ),
+ [1] = LAYOUT_60_iso_wkl_split_bs_rshift(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, MO(2)
+ ),
+ [2] = LAYOUT_60_iso_wkl_split_bs_rshift(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______
+ )
+ // clang-format on
+};
diff --git a/keyboards/cipulot/chroma/keymaps/default/keymap.c b/keyboards/cipulot/chroma/keymaps/default/keymap.c
new file mode 100644
index 00000000000..c93d9110efe
--- /dev/null
+++ b/keyboards/cipulot/chroma/keymaps/default/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
+ ),
+ [1] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, MO(2)
+ ),
+ [2] = LAYOUT_all(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ )
+ // clang-format on
+};
diff --git a/keyboards/cipulot/chroma/keymaps/via/keymap.c b/keyboards/cipulot/chroma/keymaps/via/keymap.c
new file mode 100644
index 00000000000..c93d9110efe
--- /dev/null
+++ b/keyboards/cipulot/chroma/keymaps/via/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
+ ),
+ [1] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL,
+ _______, _______, KC_UP, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______, _______,
+ _______, KC_LEFT, KC_DOWN, KC_RIGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, MO(2)
+ ),
+ [2] = LAYOUT_all(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ )
+ // clang-format on
+};
diff --git a/keyboards/cipulot/chroma/keymaps/via/rules.mk b/keyboards/cipulot/chroma/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/cipulot/chroma/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cipulot/chroma/readme.md b/keyboards/cipulot/chroma/readme.md
new file mode 100644
index 00000000000..9a08bbecac1
--- /dev/null
+++ b/keyboards/cipulot/chroma/readme.md
@@ -0,0 +1,27 @@
+# Chroma
+
+
+
+A 60% hot swap PCB for MX switches.
+
+* Keyboard Maintainer: [cipulot](https://github.com/cipulot)
+* Hardware Supported: Chroma
+* Hardware Availability: [Eloquent Clicks](https://eloquentclicks.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cipulot/chroma:default
+
+Flashing example for this keyboard:
+
+ make cipulot/chroma:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is configured.
+* **Physical reset button**: Long press the reset button soldered on the PCB.
+* **Bootmagic reset**: Hold down the top left key and plug in the controller.
diff --git a/keyboards/keyten/lisa/rules.mk b/keyboards/cipulot/chroma/rules.mk
similarity index 100%
rename from keyboards/keyten/lisa/rules.mk
rename to keyboards/cipulot/chroma/rules.mk
diff --git a/keyboards/cipulot/ec_23u/config.h b/keyboards/cipulot/ec_23u/config.h
index 3a3d482e3d3..f5b74b9e600 100644
--- a/keyboards/cipulot/ec_23u/config.h
+++ b/keyboards/cipulot/ec_23u/config.h
@@ -62,8 +62,3 @@
#define EECONFIG_KB_DATA_SIZE 57
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/cipulot/ec_23u/keyboard.json b/keyboards/cipulot/ec_23u/keyboard.json
index 0f656f8e8ca..17aa5eb6e7a 100644
--- a/keyboards/cipulot/ec_23u/keyboard.json
+++ b/keyboards/cipulot/ec_23u/keyboard.json
@@ -6,6 +6,12 @@
"build": {
"lto": true
},
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
"diode_direction": "COL2ROW",
"features": {
"bootmagic": false,
diff --git a/keyboards/cipulot/ec_23u/rules.mk b/keyboards/cipulot/ec_23u/rules.mk
index ab6c37cad43..318e0215ce9 100644
--- a/keyboards/cipulot/ec_23u/rules.mk
+++ b/keyboards/cipulot/ec_23u/rules.mk
@@ -1,4 +1,5 @@
CUSTOM_MATRIX = lite
ANALOG_DRIVER_REQUIRED = yes
-SRC += keyboards/cipulot/common/matrix.c keyboards/cipulot/common/ec_board.c keyboards/cipulot/common/ec_switch_matrix.c
+VPATH += keyboards/cipulot/common
+SRC += matrix.c ec_board.c ec_switch_matrix.c
OPT = 2
diff --git a/keyboards/cipulot/ec_60/config.h b/keyboards/cipulot/ec_60/config.h
index c936b248c45..24525501439 100644
--- a/keyboards/cipulot/ec_60/config.h
+++ b/keyboards/cipulot/ec_60/config.h
@@ -64,9 +64,3 @@
// #define DEBUG_MATRIX_SCAN_RATE
#define EECONFIG_KB_DATA_SIZE 159
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/cipulot/ec_60/keyboard.json b/keyboards/cipulot/ec_60/keyboard.json
index a86b20bfd63..860594f611a 100644
--- a/keyboards/cipulot/ec_60/keyboard.json
+++ b/keyboards/cipulot/ec_60/keyboard.json
@@ -6,6 +6,12 @@
"build": {
"lto": true
},
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
"diode_direction": "COL2ROW",
"features": {
"bootmagic": false,
diff --git a/keyboards/cipulot/ec_60/rules.mk b/keyboards/cipulot/ec_60/rules.mk
index 70494b635f6..ce525670a68 100644
--- a/keyboards/cipulot/ec_60/rules.mk
+++ b/keyboards/cipulot/ec_60/rules.mk
@@ -1,4 +1,5 @@
CUSTOM_MATRIX = lite
ANALOG_DRIVER_REQUIRED = yes
-SRC += keyboards/cipulot/common/matrix.c keyboards/cipulot/common/ec_board.c keyboards/cipulot/common/ec_switch_matrix.c
+VPATH += keyboards/cipulot/common
+SRC += matrix.c ec_board.c ec_switch_matrix.c
OPT = 3
diff --git a/keyboards/cipulot/ec_660c/config.h b/keyboards/cipulot/ec_660c/config.h
new file mode 100644
index 00000000000..9e883c40da2
--- /dev/null
+++ b/keyboards/cipulot/ec_660c/config.h
@@ -0,0 +1,66 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+#define MATRIX_ROW_PINS \
+ { B1, B10, B0, A1, A0 }
+
+#define AMUX_COUNT 2
+#define AMUX_MAX_COLS_COUNT 8
+
+#define AMUX_EN_PINS \
+ { B7, B6 }
+
+#define AMUX_SEL_PINS \
+ { B5, B4, B3 }
+
+#define AMUX_COL_CHANNELS_SIZES \
+ { 8, 7 }
+
+#define AMUX_0_COL_CHANNELS \
+ { 3, 0, 1, 2, 4, 6, 7, 5 }
+
+#define AMUX_1_COL_CHANNELS \
+ { 3, 0, 1, 2, 4, 6, 7 }
+
+#define AMUX_COL_CHANNELS AMUX_0_COL_CHANNELS, AMUX_1_COL_CHANNELS
+
+#define DISCHARGE_PIN A5
+#define ANALOG_PORT A4
+
+#define DEFAULT_ACTUATION_MODE 0
+#define DEFAULT_MODE_0_ACTUATION_LEVEL 550
+#define DEFAULT_MODE_0_RELEASE_LEVEL 500
+#define DEFAULT_MODE_1_INITIAL_DEADZONE_OFFSET DEFAULT_MODE_0_ACTUATION_LEVEL
+#define DEFAULT_MODE_1_ACTUATION_OFFSET 70
+#define DEFAULT_MODE_1_RELEASE_OFFSET 70
+#define DEFAULT_EXTREMUM 1023
+#define EXPECTED_NOISE_FLOOR 0
+#define NOISE_FLOOR_THRESHOLD 50
+#define BOTTOMING_CALIBRATION_THRESHOLD 100
+#define DEFAULT_NOISE_FLOOR_SAMPLING_COUNT 30
+#define DEFAULT_BOTTOMING_READING 1023
+#define DEFAULT_CALIBRATION_STARTER true
+
+#define DISCHARGE_TIME 10
+
+// #define DEBUG_MATRIX_SCAN_RATE
+
+#define EECONFIG_KB_DATA_SIZE 159
diff --git a/keyboards/cipulot/ec_660c/halconf.h b/keyboards/cipulot/ec_660c/halconf.h
new file mode 100644
index 00000000000..835d43b6a0a
--- /dev/null
+++ b/keyboards/cipulot/ec_660c/halconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_ADC TRUE
+
+#include_next
diff --git a/keyboards/cipulot/ec_660c/info.json b/keyboards/cipulot/ec_660c/info.json
new file mode 100644
index 00000000000..32ac397b6bf
--- /dev/null
+++ b/keyboards/cipulot/ec_660c/info.json
@@ -0,0 +1,111 @@
+{
+ "manufacturer": "Cipulot",
+ "keyboard_name": "EC 660C",
+ "maintainer": "Cipulot",
+ "bootloader": "stm32-dfu",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": false,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "indicators": {
+ "caps_lock": "B14",
+ "scroll_lock": "B15"
+ },
+ "processor": "STM32F401",
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x6BA6",
+ "shared_endpoint": {
+ "keyboard": true
+ },
+ "vid": "0x6369"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "0,0", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "0,1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "0,2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "0,3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "0,4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "0,5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "0,6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "0,7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "0,8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "0,9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0,10", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "0,11", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "0,12", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "0,13", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "0,14", "matrix": [0, 14], "x": 14, "y": 0},
+ {"label": "1,14", "matrix": [1, 14], "x": 15.5, "y": 0},
+ {"label": "1,0", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "1,8", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "1,13", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "2,14", "matrix": [2, 14], "x": 15.5, "y": 1},
+ {"label": "2,0", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "2,12", "matrix": [2, 12], "x": 12.75, "y": 2},
+ {"label": "2,13", "matrix": [2, 13], "x": 13.75, "y": 2, "w": 1.25},
+ {"label": "3,0", "matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"label": "3,1", "matrix": [3, 1], "x": 1.25, "y": 3},
+ {"label": "3,2", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "3,3", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "3,4", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "3,5", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "3,6", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "3,7", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "3,8", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "3,9", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": "3,10", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "3,11", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "3,12", "matrix": [3, 12], "x": 12.25, "y": 3, "w": 2.25},
+ {"label": "3,13", "matrix": [3, 13], "x": 14.5, "y": 3},
+ {"label": "4,0", "matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"label": "4,1", "matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"label": "4,2", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"label": "4,6", "matrix": [4, 6], "x": 3.75, "y": 4, "w": 6},
+ {"label": "4,9", "matrix": [4, 9], "x": 9.75, "y": 4, "w": 1.25},
+ {"label": "4,10", "matrix": [4, 10], "x": 11, "y": 4, "w": 1.25},
+ {"label": "4,11", "matrix": [4, 11], "x": 12.25, "y": 4, "w": 1.25},
+ {"label": "4,12", "matrix": [4, 12], "x": 13.5, "y": 4},
+ {"label": "4,13", "matrix": [4, 13], "x": 14.5, "y": 4},
+ {"label": "4,14", "matrix": [4, 14], "x": 15.5, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/cipulot/ec_660c/keymaps/default/keymap.c b/keyboards/cipulot/ec_660c/keymaps/default/keymap.c
new file mode 100644
index 00000000000..5d82bdc3abd
--- /dev/null
+++ b/keyboards/cipulot/ec_660c/keymaps/default/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______, _______, _______,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, _______, _______, _______,
+ _______, _______, _______, _______, _______, MO(2), _______, _______, _______, _______
+ ),
+ [2] = LAYOUT(
+ QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_660c/keymaps/via/keymap.c b/keyboards/cipulot/ec_660c/keymaps/via/keymap.c
new file mode 100644
index 00000000000..5d82bdc3abd
--- /dev/null
+++ b/keyboards/cipulot/ec_660c/keymaps/via/keymap.c
@@ -0,0 +1,43 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______, _______,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUS, _______, _______, _______, _______,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, KC_HOME, KC_PGUP, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, _______, _______, _______,
+ _______, _______, _______, _______, _______, MO(2), _______, _______, _______, _______
+ ),
+ [2] = LAYOUT(
+ QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ )
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_660c/keymaps/via/rules.mk b/keyboards/cipulot/ec_660c/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/cipulot/ec_660c/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cipulot/ec_660c/mcuconf.h b/keyboards/cipulot/ec_660c/mcuconf.h
new file mode 100644
index 00000000000..fa3c955e0d8
--- /dev/null
+++ b/keyboards/cipulot/ec_660c/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_ADC_USE_ADC1
+#define STM32_ADC_USE_ADC1 TRUE
diff --git a/keyboards/cipulot/ec_660c/post_rules.mk b/keyboards/cipulot/ec_660c/post_rules.mk
new file mode 100644
index 00000000000..d726a112a8c
--- /dev/null
+++ b/keyboards/cipulot/ec_660c/post_rules.mk
@@ -0,0 +1,3 @@
+ifeq ($(strip $(VIA_ENABLE)), yes)
+ SRC += keyboards/cipulot/common/via_ec.c
+endif
diff --git a/keyboards/cipulot/ec_660c/readme.md b/keyboards/cipulot/ec_660c/readme.md
new file mode 100644
index 00000000000..c01bb3252e0
--- /dev/null
+++ b/keyboards/cipulot/ec_660c/readme.md
@@ -0,0 +1,26 @@
+# EC660C
+
+
+
+Replacement PCB for the Leopold FC660C.
+
+* Keyboard Maintainer: [cipulot](https://github.com/cipulot)
+* Hardware Supported: EC660C PCB
+* Hardware Availability: TBD
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cipulot/ec_660c:default
+
+Flashing example for this keyboard:
+
+ make cipulot/ec_660c:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Physical reset**: Long short the exposed pads on the top of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cipulot/ec_660c/rules.mk b/keyboards/cipulot/ec_660c/rules.mk
new file mode 100644
index 00000000000..ce525670a68
--- /dev/null
+++ b/keyboards/cipulot/ec_660c/rules.mk
@@ -0,0 +1,5 @@
+CUSTOM_MATRIX = lite
+ANALOG_DRIVER_REQUIRED = yes
+VPATH += keyboards/cipulot/common
+SRC += matrix.c ec_board.c ec_switch_matrix.c
+OPT = 3
diff --git a/keyboards/cipulot/ec_980c/config.h b/keyboards/cipulot/ec_980c/config.h
new file mode 100644
index 00000000000..e3723822e33
--- /dev/null
+++ b/keyboards/cipulot/ec_980c/config.h
@@ -0,0 +1,86 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 19
+
+#define MATRIX_ROW_PINS \
+ { B13, B12, B14, A9, B6, B7 }
+
+#define AMUX_COUNT 3
+#define AMUX_MAX_COLS_COUNT 8
+
+#define AMUX_EN_PINS \
+ { A0, A1, A8 }
+
+#define AMUX_SEL_PINS \
+ { A4, A3, A2 }
+
+#define AMUX_COL_CHANNELS_SIZES \
+ { 8, 7, 4 }
+
+#define AMUX_0_COL_CHANNELS \
+ { 0, 3, 1, 2, 4, 6, 7, 5 }
+
+#define AMUX_1_COL_CHANNELS \
+ { 1, 0, 3, 2, 4, 6, 7 }
+
+#define AMUX_2_COL_CHANNELS \
+ { 4, 6, 7, 5 }
+
+#define AMUX_COL_CHANNELS AMUX_0_COL_CHANNELS, AMUX_1_COL_CHANNELS, AMUX_2_COL_CHANNELS
+
+#define DISCHARGE_PIN A6
+#define ANALOG_PORT A7
+
+#define DEFAULT_ACTUATION_MODE 0
+#define DEFAULT_MODE_0_ACTUATION_LEVEL 550
+#define DEFAULT_MODE_0_RELEASE_LEVEL 500
+#define DEFAULT_MODE_1_INITIAL_DEADZONE_OFFSET DEFAULT_MODE_0_ACTUATION_LEVEL
+#define DEFAULT_MODE_1_ACTUATION_OFFSET 70
+#define DEFAULT_MODE_1_RELEASE_OFFSET 70
+#define DEFAULT_EXTREMUM 1023
+#define EXPECTED_NOISE_FLOOR 0
+#define NOISE_FLOOR_THRESHOLD 50
+#define BOTTOMING_CALIBRATION_THRESHOLD 100
+#define DEFAULT_NOISE_FLOOR_SAMPLING_COUNT 30
+#define DEFAULT_BOTTOMING_READING 1023
+#define DEFAULT_CALIBRATION_STARTER true
+
+#define DISCHARGE_TIME 10
+
+//#define DEBUG_MATRIX_SCAN_RATE
+
+#define EECONFIG_KB_DATA_SIZE 249
+
+// Indicators
+// PWM driver with direct memory access (DMA) support
+#define WS2812_PWM_COMPLEMENTARY_OUTPUT
+#define WS2812_PWM_DRIVER PWMD1
+#define WS2812_PWM_CHANNEL 3
+#define WS2812_PWM_PAL_MODE 1
+#define WS2812_DMA_STREAM STM32_DMA2_STREAM5
+#define WS2812_DMA_CHANNEL 6
+
+#define NUM_INDICATOR_INDEX 0
+#define CAPS_INDICATOR_INDEX 1
+#define SCROLL_INDICATOR_INDEX 2
+
+#define RGB_MATRIX_DEFAULT_VAL 60
+#define RGB_MATRIX_SLEEP
+#define RGB_MATRIX_DEFAULT_MODE RGB_MATRIX_SOLID_COLOR
diff --git a/keyboards/cipulot/ec_980c/ec_980c.c b/keyboards/cipulot/ec_980c/ec_980c.c
new file mode 100644
index 00000000000..2b40d5a5e69
--- /dev/null
+++ b/keyboards/cipulot/ec_980c/ec_980c.c
@@ -0,0 +1,116 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "ec_switch_matrix.h"
+#include "quantum.h"
+
+void eeconfig_init_kb(void) {
+ // Default values
+ eeprom_ec_config.num.h = 0;
+ eeprom_ec_config.num.s = 0;
+ eeprom_ec_config.num.v = 60;
+ eeprom_ec_config.num.enabled = true;
+ eeprom_ec_config.caps.h = 0;
+ eeprom_ec_config.caps.s = 0;
+ eeprom_ec_config.caps.v = 60;
+ eeprom_ec_config.caps.enabled = true;
+ eeprom_ec_config.scroll.h = 0;
+ eeprom_ec_config.scroll.s = 0;
+ eeprom_ec_config.scroll.v = 60;
+ eeprom_ec_config.scroll.enabled = true;
+ eeprom_ec_config.actuation_mode = DEFAULT_ACTUATION_MODE;
+ eeprom_ec_config.mode_0_actuation_threshold = DEFAULT_MODE_0_ACTUATION_LEVEL;
+ eeprom_ec_config.mode_0_release_threshold = DEFAULT_MODE_0_RELEASE_LEVEL;
+ eeprom_ec_config.mode_1_initial_deadzone_offset = DEFAULT_MODE_1_INITIAL_DEADZONE_OFFSET;
+ eeprom_ec_config.mode_1_actuation_offset = DEFAULT_MODE_1_ACTUATION_OFFSET;
+ eeprom_ec_config.mode_1_release_offset = DEFAULT_MODE_1_RELEASE_OFFSET;
+
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ eeprom_ec_config.bottoming_reading[row][col] = DEFAULT_BOTTOMING_READING;
+ }
+ }
+ // Write default value to EEPROM now
+ eeconfig_update_kb_datablock(&eeprom_ec_config);
+
+ eeconfig_init_user();
+}
+
+// On Keyboard startup
+void keyboard_post_init_kb(void) {
+ // Read custom menu variables from memory
+ eeconfig_read_kb_datablock(&eeprom_ec_config);
+
+ // Set runtime values to EEPROM values
+ ec_config.actuation_mode = eeprom_ec_config.actuation_mode;
+ ec_config.mode_0_actuation_threshold = eeprom_ec_config.mode_0_actuation_threshold;
+ ec_config.mode_0_release_threshold = eeprom_ec_config.mode_0_release_threshold;
+ ec_config.mode_1_initial_deadzone_offset = eeprom_ec_config.mode_1_initial_deadzone_offset;
+ ec_config.mode_1_actuation_offset = eeprom_ec_config.mode_1_actuation_offset;
+ ec_config.mode_1_release_offset = eeprom_ec_config.mode_1_release_offset;
+ ec_config.bottoming_calibration = false;
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ ec_config.bottoming_calibration_starter[row][col] = true;
+ ec_config.bottoming_reading[row][col] = eeprom_ec_config.bottoming_reading[row][col];
+ ec_config.rescaled_mode_0_actuation_threshold[row][col] = rescale(ec_config.mode_0_actuation_threshold, 0, 1023, ec_config.noise_floor[row][col], eeprom_ec_config.bottoming_reading[row][col]);
+ ec_config.rescaled_mode_0_release_threshold[row][col] = rescale(ec_config.mode_0_release_threshold, 0, 1023, ec_config.noise_floor[row][col], eeprom_ec_config.bottoming_reading[row][col]);
+ ec_config.rescaled_mode_1_initial_deadzone_offset[row][col] = rescale(ec_config.mode_1_initial_deadzone_offset, 0, 1023, ec_config.noise_floor[row][col], eeprom_ec_config.bottoming_reading[row][col]);
+ }
+ }
+
+ // Call the indicator callback to set the indicator color
+ rgb_matrix_indicators_kb();
+
+ keyboard_post_init_user();
+}
+
+// INDICATOR CALLBACK ------------------------------------------------------------------------------
+/* LED index to physical position
+ *
+ * LED0 | LED1 | LED2
+ * -----+------+--------
+ * Num | Caps | Scroll |
+ */
+bool rgb_matrix_indicators_kb(void) {
+ if (eeprom_ec_config.num.enabled) {
+ // The rgb_matrix_set_color function needs an RGB code to work, so first the indicator color is cast to an HSV value and then translated to RGB
+ HSV hsv_num_indicator_color = {eeprom_ec_config.num.h, eeprom_ec_config.num.s, eeprom_ec_config.num.v};
+ RGB rgb_num_indicator_color = hsv_to_rgb(hsv_num_indicator_color);
+ if (host_keyboard_led_state().num_lock)
+ rgb_matrix_set_color(NUM_INDICATOR_INDEX, rgb_num_indicator_color.r, rgb_num_indicator_color.g, rgb_num_indicator_color.b);
+ else
+ rgb_matrix_set_color(NUM_INDICATOR_INDEX, 0, 0, 0);
+ }
+ if (eeprom_ec_config.caps.enabled) {
+ HSV hsv_caps_indicator_color = {eeprom_ec_config.caps.h, eeprom_ec_config.caps.s, eeprom_ec_config.caps.v};
+ RGB rgb_caps_indicator_color = hsv_to_rgb(hsv_caps_indicator_color);
+ if (host_keyboard_led_state().caps_lock)
+ rgb_matrix_set_color(CAPS_INDICATOR_INDEX, rgb_caps_indicator_color.r, rgb_caps_indicator_color.g, rgb_caps_indicator_color.b);
+ else
+ rgb_matrix_set_color(CAPS_INDICATOR_INDEX, 0, 0, 0);
+ }
+ if (eeprom_ec_config.scroll.enabled) {
+ HSV hsv_scroll_indicator_color = {eeprom_ec_config.scroll.h, eeprom_ec_config.scroll.s, eeprom_ec_config.scroll.v};
+ RGB rgb_scroll_indicator_color = hsv_to_rgb(hsv_scroll_indicator_color);
+ if (host_keyboard_led_state().scroll_lock)
+ rgb_matrix_set_color(SCROLL_INDICATOR_INDEX, rgb_scroll_indicator_color.r, rgb_scroll_indicator_color.g, rgb_scroll_indicator_color.b);
+ else
+ rgb_matrix_set_color(SCROLL_INDICATOR_INDEX, 0, 0, 0);
+ }
+
+ return true;
+}
diff --git a/keyboards/cipulot/ec_980c/ec_switch_matrix.c b/keyboards/cipulot/ec_980c/ec_switch_matrix.c
new file mode 100644
index 00000000000..33123bd236e
--- /dev/null
+++ b/keyboards/cipulot/ec_980c/ec_switch_matrix.c
@@ -0,0 +1,318 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "ec_switch_matrix.h"
+#include "analog.h"
+#include "atomic_util.h"
+#include "math.h"
+#include "print.h"
+#include "wait.h"
+
+#if defined(__AVR__)
+# error "AVR platforms not supported due to a variety of reasons. Among them there are limited memory, limited number of pins and ADC not being able to give satisfactory results."
+#endif
+
+#define OPEN_DRAIN_SUPPORT defined(PAL_MODE_OUTPUT_OPENDRAIN)
+
+eeprom_ec_config_t eeprom_ec_config;
+ec_config_t ec_config;
+
+// Pin and port array
+const pin_t row_pins[] = MATRIX_ROW_PINS;
+const pin_t amux_sel_pins[] = AMUX_SEL_PINS;
+const pin_t amux_en_pins[] = AMUX_EN_PINS;
+const pin_t amux_n_col_sizes[] = AMUX_COL_CHANNELS_SIZES;
+const pin_t amux_n_col_channels[][AMUX_MAX_COLS_COUNT] = {AMUX_COL_CHANNELS};
+
+#define AMUX_SEL_PINS_COUNT ARRAY_SIZE(amux_sel_pins)
+#define EXPECTED_AMUX_SEL_PINS_COUNT ceil(log2(AMUX_MAX_COLS_COUNT)
+// Checks for the correctness of the configuration
+_Static_assert(ARRAY_SIZE(amux_en_pins) == AMUX_COUNT, "AMUX_EN_PINS doesn't have the minimum number of bits required to enable all the multiplexers available");
+// Check that number of select pins is enough to select all the channels
+_Static_assert(AMUX_SEL_PINS_COUNT == EXPECTED_AMUX_SEL_PINS_COUNT), "AMUX_SEL_PINS doesn't have the minimum number of bits required address all the channels");
+// Check that number of elements in AMUX_COL_CHANNELS_SIZES is enough to specify the number of channels for all the multiplexers available
+_Static_assert(ARRAY_SIZE(amux_n_col_sizes) == AMUX_COUNT, "AMUX_COL_CHANNELS_SIZES doesn't have the minimum number of elements required to specify the number of channels for all the multiplexers available");
+
+static uint16_t sw_value[MATRIX_ROWS][MATRIX_COLS];
+
+static adc_mux adcMux;
+
+// Initialize the row pins
+void init_row(void) {
+ // Set all row pins as output and low
+ for (uint8_t idx = 0; idx < MATRIX_ROWS; idx++) {
+ gpio_set_pin_output(row_pins[idx]);
+ gpio_write_pin_low(row_pins[idx]);
+ }
+}
+
+// Initialize the multiplexers
+void init_amux(void) {
+ for (uint8_t idx = 0; idx < AMUX_COUNT; idx++) {
+ gpio_set_pin_output(amux_en_pins[idx]);
+ gpio_write_pin_low(amux_en_pins[idx]);
+ }
+ for (uint8_t idx = 0; idx < AMUX_SEL_PINS_COUNT; idx++) {
+ gpio_set_pin_output(amux_sel_pins[idx]);
+ }
+}
+
+// Select the multiplexer channel of the specified multiplexer
+void select_amux_channel(uint8_t channel, uint8_t col) {
+ // Get the channel for the specified multiplexer
+ uint8_t ch = amux_n_col_channels[channel][col];
+ // momentarily disable specified multiplexer
+ gpio_write_pin_high(amux_en_pins[channel]);
+ // Select the multiplexer channel
+ for (uint8_t i = 0; i < AMUX_SEL_PINS_COUNT; i++) {
+ gpio_write_pin(amux_sel_pins[i], ch & (1 << i));
+ }
+ // re enable specified multiplexer
+ gpio_write_pin_low(amux_en_pins[channel]);
+}
+
+// Disable all the unused multiplexers
+void disable_unused_amux(uint8_t channel) {
+ // disable all the other multiplexers apart from the current selected one
+ for (uint8_t idx = 0; idx < AMUX_COUNT; idx++) {
+ if (idx != channel) {
+ gpio_write_pin_high(amux_en_pins[idx]);
+ }
+ }
+}
+// Discharge the peak hold capacitor
+void discharge_capacitor(void) {
+#ifdef OPEN_DRAIN_SUPPORT
+ gpio_write_pin_low(DISCHARGE_PIN);
+#else
+ gpio_write_pin_low(DISCHARGE_PIN);
+ gpio_set_pin_output(DISCHARGE_PIN);
+#endif
+}
+
+// Charge the peak hold capacitor
+void charge_capacitor(uint8_t row) {
+#ifdef OPEN_DRAIN_SUPPORT
+ gpio_write_pin_high(DISCHARGE_PIN);
+#else
+ gpio_set_pin_input(DISCHARGE_PIN);
+#endif
+ gpio_write_pin_high(row_pins[row]);
+}
+
+// Initialize the peripherals pins
+int ec_init(void) {
+ // Initialize ADC
+ palSetLineMode(ANALOG_PORT, PAL_MODE_INPUT_ANALOG);
+ adcMux = pinToMux(ANALOG_PORT);
+
+ // Dummy call to make sure that adcStart() has been called in the appropriate state
+ adc_read(adcMux);
+
+ // Initialize discharge pin as discharge mode
+ gpio_write_pin_low(DISCHARGE_PIN);
+#ifdef OPEN_DRAIN_SUPPORT
+ gpio_set_pin_output_open_drain(DISCHARGE_PIN);
+#else
+ gpio_set_pin_output(DISCHARGE_PIN);
+#endif
+
+ // Initialize drive lines
+ init_row();
+
+ // Initialize AMUXs
+ init_amux();
+
+ return 0;
+}
+
+// Get the noise floor
+void ec_noise_floor(void) {
+ // Initialize the noise floor
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ ec_config.noise_floor[row][col] = 0;
+ }
+ }
+
+ // Sample the noise floor
+ for (uint8_t i = 0; i < DEFAULT_NOISE_FLOOR_SAMPLING_COUNT; i++) {
+ for (uint8_t amux = 0; amux < AMUX_COUNT; amux++) {
+ disable_unused_amux(amux);
+ for (uint8_t col = 0; col < amux_n_col_sizes[amux]; col++) {
+ uint8_t sum = 0;
+ for (uint8_t i = 0; i < (amux > 0 ? amux : 0); i++)
+ sum += amux_n_col_sizes[i];
+ uint8_t adjusted_col = col + sum;
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ ec_config.noise_floor[row][adjusted_col] += ec_readkey_raw(amux, row, col);
+ }
+ }
+ }
+ wait_ms(5);
+ }
+
+ // Average the noise floor
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ ec_config.noise_floor[row][col] /= DEFAULT_NOISE_FLOOR_SAMPLING_COUNT;
+ }
+ }
+}
+
+// Scan key values and update matrix state
+bool ec_matrix_scan(matrix_row_t current_matrix[]) {
+ bool updated = false;
+
+ for (uint8_t amux = 0; amux < AMUX_COUNT; amux++) {
+ disable_unused_amux(amux);
+ for (uint8_t col = 0; col < amux_n_col_sizes[amux]; col++) {
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ uint8_t sum = 0;
+ for (uint8_t i = 0; i < (amux > 0 ? amux : 0); i++)
+ sum += amux_n_col_sizes[i];
+ uint8_t adjusted_col = col + sum;
+ sw_value[row][adjusted_col] = ec_readkey_raw(amux, row, col);
+
+ if (ec_config.bottoming_calibration) {
+ if (ec_config.bottoming_calibration_starter[row][adjusted_col]) {
+ ec_config.bottoming_reading[row][adjusted_col] = sw_value[row][adjusted_col];
+ ec_config.bottoming_calibration_starter[row][adjusted_col] = false;
+ } else if (sw_value[row][adjusted_col] > ec_config.bottoming_reading[row][adjusted_col]) {
+ ec_config.bottoming_reading[row][adjusted_col] = sw_value[row][adjusted_col];
+ }
+ } else {
+ updated |= ec_update_key(¤t_matrix[row], row, adjusted_col, sw_value[row][adjusted_col]);
+ }
+ }
+ }
+ }
+
+ return ec_config.bottoming_calibration ? false : updated;
+}
+
+// Read the capacitive sensor value
+uint16_t ec_readkey_raw(uint8_t channel, uint8_t row, uint8_t col) {
+ uint16_t sw_value = 0;
+
+ // Select the multiplexer
+ select_amux_channel(channel, col);
+
+ // Set the row pin to low state to avoid ghosting
+ gpio_write_pin_low(row_pins[row]);
+
+ ATOMIC_BLOCK_FORCEON {
+ // Set the row pin to high state and have capacitor charge
+ charge_capacitor(row);
+ // Read the ADC value
+ sw_value = adc_read(adcMux);
+ }
+ // Discharge peak hold capacitor
+ discharge_capacitor();
+ // Waiting for the ghost capacitor to discharge fully
+ wait_us(DISCHARGE_TIME);
+
+ return sw_value;
+}
+
+// Update press/release state of key
+bool ec_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value) {
+ bool current_state = (*current_row >> col) & 1;
+
+ // Real Time Noise Floor Calibration
+ if (sw_value < (ec_config.noise_floor[row][col] - NOISE_FLOOR_THRESHOLD)) {
+ uprintf("Noise Floor Change: %d, %d, %d\n", row, col, sw_value);
+ ec_config.noise_floor[row][col] = sw_value;
+ ec_config.rescaled_mode_0_actuation_threshold[row][col] = rescale(ec_config.mode_0_actuation_threshold, 0, 1023, ec_config.noise_floor[row][col], eeprom_ec_config.bottoming_reading[row][col]);
+ ec_config.rescaled_mode_0_release_threshold[row][col] = rescale(ec_config.mode_0_release_threshold, 0, 1023, ec_config.noise_floor[row][col], eeprom_ec_config.bottoming_reading[row][col]);
+ ec_config.rescaled_mode_1_initial_deadzone_offset[row][col] = rescale(ec_config.mode_1_initial_deadzone_offset, 0, 1023, ec_config.noise_floor[row][col], eeprom_ec_config.bottoming_reading[row][col]);
+ }
+
+ // Normal board-wide APC
+ if (ec_config.actuation_mode == 0) {
+ if (current_state && sw_value < ec_config.rescaled_mode_0_release_threshold[row][col]) {
+ *current_row &= ~(1 << col);
+ uprintf("Key released: %d, %d, %d\n", row, col, sw_value);
+ return true;
+ }
+ if ((!current_state) && sw_value > ec_config.rescaled_mode_0_actuation_threshold[row][col]) {
+ *current_row |= (1 << col);
+ uprintf("Key pressed: %d, %d, %d\n", row, col, sw_value);
+ return true;
+ }
+ }
+ // Rapid Trigger
+ else if (ec_config.actuation_mode == 1) {
+ // Is key in active zone?
+ if (sw_value > ec_config.rescaled_mode_1_initial_deadzone_offset[row][col]) {
+ // Is key pressed while in active zone?
+ if (current_state) {
+ // Is the key still moving down?
+ if (sw_value > ec_config.extremum[row][col]) {
+ ec_config.extremum[row][col] = sw_value;
+ uprintf("Key pressed: %d, %d, %d\n", row, col, sw_value);
+ }
+ // Has key moved up enough to be released?
+ else if (sw_value < ec_config.extremum[row][col] - ec_config.mode_1_release_offset) {
+ ec_config.extremum[row][col] = sw_value;
+ *current_row &= ~(1 << col);
+ uprintf("Key released: %d, %d, %d\n", row, col, sw_value);
+ return true;
+ }
+ }
+ // Key is not pressed while in active zone
+ else {
+ // Is the key still moving up?
+ if (sw_value < ec_config.extremum[row][col]) {
+ ec_config.extremum[row][col] = sw_value;
+ }
+ // Has key moved down enough to be pressed?
+ else if (sw_value > ec_config.extremum[row][col] + ec_config.mode_1_actuation_offset) {
+ ec_config.extremum[row][col] = sw_value;
+ *current_row |= (1 << col);
+ uprintf("Key pressed: %d, %d, %d\n", row, col, sw_value);
+ return true;
+ }
+ }
+ }
+ // Key is not in active zone
+ else {
+ // Check to avoid key being stuck in pressed state near the active zone threshold
+ if (sw_value < ec_config.extremum[row][col]) {
+ ec_config.extremum[row][col] = sw_value;
+ *current_row &= ~(1 << col);
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+// Print the matrix values
+void ec_print_matrix(void) {
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ for (uint8_t col = 0; col < MATRIX_COLS - 1; col++) {
+ uprintf("%4d,", sw_value[row][col]);
+ }
+ uprintf("%4d\n", sw_value[row][MATRIX_COLS - 1]);
+ }
+ print("\n");
+}
+
+// Rescale the value to a different range
+uint16_t rescale(uint16_t x, uint16_t in_min, uint16_t in_max, uint16_t out_min, uint16_t out_max) {
+ return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
+}
diff --git a/keyboards/cipulot/ec_980c/ec_switch_matrix.h b/keyboards/cipulot/ec_980c/ec_switch_matrix.h
new file mode 100644
index 00000000000..8a75b5de5fb
--- /dev/null
+++ b/keyboards/cipulot/ec_980c/ec_switch_matrix.h
@@ -0,0 +1,83 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include
+#include
+#include "matrix.h"
+#include "eeconfig.h"
+#include "util.h"
+
+typedef struct _indicator_config_t {
+ uint8_t h;
+ uint8_t s;
+ uint8_t v;
+ bool enabled;
+} indicator_config;
+
+typedef struct PACKED {
+ indicator_config num;
+ indicator_config caps;
+ indicator_config scroll;
+ uint8_t actuation_mode; // 0: normal board-wide APC, 1: Rapid trigger from specific board-wide actuation point, 2: Rapid trigger from resting point
+ uint16_t mode_0_actuation_threshold; // threshold for key press in mode 0
+ uint16_t mode_0_release_threshold; // threshold for key release in mode 0
+ uint16_t mode_1_initial_deadzone_offset; // threshold for key press in mode 1
+ uint8_t mode_1_actuation_offset; // offset for key press in mode 1 and 2 (1-255)
+ uint8_t mode_1_release_offset; // offset for key release in mode 1 and 2 (1-255)
+ uint16_t bottoming_reading[MATRIX_ROWS][MATRIX_COLS]; // bottoming reading
+} eeprom_ec_config_t;
+
+typedef struct {
+ uint8_t actuation_mode; // 0: normal board-wide APC, 1: Rapid trigger from specific board-wide actuation point (it can be very near that baseline noise and be "full travel")
+ uint16_t mode_0_actuation_threshold; // threshold for key press in mode 0
+ uint16_t mode_0_release_threshold; // threshold for key release in mode 0
+ uint16_t mode_1_initial_deadzone_offset; // threshold for key press in mode 1 (initial deadzone)
+ uint16_t rescaled_mode_0_actuation_threshold[MATRIX_ROWS][MATRIX_COLS]; // threshold for key press in mode 0 rescaled to actual scale
+ uint16_t rescaled_mode_0_release_threshold[MATRIX_ROWS][MATRIX_COLS]; // threshold for key release in mode 0 rescaled to actual scale
+ uint16_t rescaled_mode_1_initial_deadzone_offset[MATRIX_ROWS][MATRIX_COLS]; // threshold for key press in mode 1 (initial deadzone) rescaled to actual scale
+ uint8_t mode_1_actuation_offset; // offset for key press in mode 1 (1-255)
+ uint8_t mode_1_release_offset; // offset for key release in mode 1 (1-255)
+ uint16_t extremum[MATRIX_ROWS][MATRIX_COLS]; // extremum values for mode 1
+ uint16_t noise_floor[MATRIX_ROWS][MATRIX_COLS]; // noise floor detected during startup
+ bool bottoming_calibration; // calibration mode for bottoming out values (true: calibration mode, false: normal mode)
+ bool bottoming_calibration_starter[MATRIX_ROWS][MATRIX_COLS]; // calibration mode for bottoming out values (true: calibration mode, false: normal mode)
+ uint16_t bottoming_reading[MATRIX_ROWS][MATRIX_COLS]; // bottoming reading
+} ec_config_t;
+
+// Check if the size of the reserved persistent memory is the same as the size of struct eeprom_ec_config_t
+_Static_assert(sizeof(eeprom_ec_config_t) == EECONFIG_KB_DATA_SIZE, "Mismatch in keyboard EECONFIG stored data");
+
+extern eeprom_ec_config_t eeprom_ec_config;
+
+extern ec_config_t ec_config;
+
+void init_row(void);
+void init_amux(void);
+void select_amux_channel(uint8_t channel, uint8_t col);
+void disable_unused_amux(uint8_t channel);
+void discharge_capacitor(void);
+void charge_capacitor(uint8_t row);
+
+int ec_init(void);
+void ec_noise_floor(void);
+bool ec_matrix_scan(matrix_row_t current_matrix[]);
+uint16_t ec_readkey_raw(uint8_t channel, uint8_t row, uint8_t col);
+bool ec_update_key(matrix_row_t* current_row, uint8_t row, uint8_t col, uint16_t sw_value);
+void ec_print_matrix(void);
+
+uint16_t rescale(uint16_t x, uint16_t in_min, uint16_t in_max, uint16_t out_min, uint16_t out_max);
diff --git a/keyboards/cipulot/ec_980c/halconf.h b/keyboards/cipulot/ec_980c/halconf.h
new file mode 100644
index 00000000000..24de0954858
--- /dev/null
+++ b/keyboards/cipulot/ec_980c/halconf.h
@@ -0,0 +1,23 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_ADC TRUE
+#define HAL_USE_PWM TRUE
+#define HAL_USE_PAL TRUE
+
+#include_next
diff --git a/keyboards/cipulot/ec_980c/info.json b/keyboards/cipulot/ec_980c/info.json
new file mode 100644
index 00000000000..6d3cb22719c
--- /dev/null
+++ b/keyboards/cipulot/ec_980c/info.json
@@ -0,0 +1,170 @@
+{
+ "manufacturer": "Cipulot",
+ "keyboard_name": "EC 980C",
+ "maintainer": "Cipulot",
+ "bootloader": "stm32-dfu",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "eeprom": {
+ "wear_leveling": {
+ "backing_size": 4096
+ }
+ },
+ "features": {
+ "bootmagic": false,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "processor": "STM32F411",
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "rgb_matrix": {
+ "animations": {
+ "breathing": true,
+ "cycle_left_right": true,
+ "solid_color": true
+ },
+ "driver": "ws2812",
+ "layout": [
+ {"matrix": [0, 15], "x": 16.25, "y": 1, "flags": 4},
+ {"matrix": [0, 16], "x": 17.25, "y": 1, "flags": 4},
+ {"matrix": [0, 17], "x": 18.25, "y": 1, "flags": 4}
+ ],
+ "led_count": 3,
+ "max_brightness": 255
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x6BBE",
+ "shared_endpoint": {
+ "keyboard": true
+ },
+ "vid": "0x6369"
+ },
+ "ws2812": {
+ "driver": "pwm",
+ "pin": "B15"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.5, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [0, 15], "x": 15.5, "y": 0},
+ {"matrix": [0, 16], "x": 16.5, "y": 0},
+ {"matrix": [0, 17], "x": 17.5, "y": 0},
+ {"matrix": [0, 18], "x": 18.5, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [1, 8], "x": 8, "y": 1.5},
+ {"matrix": [1, 9], "x": 9, "y": 1.5},
+ {"matrix": [1, 10], "x": 10, "y": 1.5},
+ {"matrix": [1, 11], "x": 11, "y": 1.5},
+ {"matrix": [1, 12], "x": 12, "y": 1.5},
+ {"matrix": [1, 13], "x": 13, "y": 1.5},
+ {"matrix": [1, 14], "x": 14, "y": 1.5},
+ {"matrix": [1, 15], "x": 15.5, "y": 1.5},
+ {"matrix": [1, 16], "x": 16.5, "y": 1.5},
+ {"matrix": [1, 17], "x": 17.5, "y": 1.5},
+ {"matrix": [1, 18], "x": 18.5, "y": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.5, "w": 0.75},
+ {"matrix": [2, 14], "x": 14.25, "y": 2.5, "w": 0.75},
+ {"matrix": [2, 15], "x": 15.5, "y": 2.5},
+ {"matrix": [2, 16], "x": 16.5, "y": 2.5},
+ {"matrix": [2, 17], "x": 17.5, "y": 2.5},
+ {"matrix": [2, 18], "x": 18.5, "y": 2.5},
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 12], "x": 12.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 13.75, "y": 3.5, "w": 1.25},
+ {"matrix": [3, 15], "x": 15.5, "y": 3.5},
+ {"matrix": [3, 16], "x": 16.5, "y": 3.5},
+ {"matrix": [3, 17], "x": 17.5, "y": 3.5},
+ {"matrix": [3, 18], "x": 18.5, "y": 3.5},
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.5},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 14], "x": 14.25, "y": 4.75},
+ {"matrix": [4, 15], "x": 15.5, "y": 4.5},
+ {"matrix": [4, 16], "x": 16.5, "y": 4.5},
+ {"matrix": [4, 17], "x": 17.5, "y": 4.5},
+ {"matrix": [4, 18], "x": 18.5, "y": 4.5},
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.5},
+ {"matrix": [5, 2], "x": 2.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 3.5, "y": 5.5},
+ {"matrix": [5, 5], "x": 4.5, "y": 5.5, "w": 2.5},
+ {"matrix": [5, 6], "x": 7, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 8], "x": 8.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 9], "x": 9.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 10], "x": 10.75, "y": 5.5},
+ {"matrix": [5, 11], "x": 11.75, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 13], "x": 13.25, "y": 5.75},
+ {"matrix": [5, 14], "x": 14.25, "y": 5.75},
+ {"matrix": [5, 15], "x": 15.25, "y": 5.75},
+ {"matrix": [5, 16], "x": 16.5, "y": 5.5},
+ {"matrix": [5, 17], "x": 17.5, "y": 5.5},
+ {"matrix": [5, 18], "x": 18.5, "y": 5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/cipulot/ec_980c/keymaps/default/keymap.c b/keyboards/cipulot/ec_980c/keymaps/default/keymap.c
new file mode 100644
index 00000000000..c60db783528
--- /dev/null
+++ b/keyboards/cipulot/ec_980c/keymaps/default/keymap.c
@@ -0,0 +1,48 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+#include "keymap_japanese.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_INS, KC_PGUP, KC_PGDN,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, JP_YEN, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_ENT, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, _______, KC_SPC, KC_SPC, _______, KC_RALT, KC_RCTL, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT, KC_P0, KC_PDOT, KC_PENT
+ ),
+ [1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, MO(2), _______, _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT(
+ QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_980c/keymaps/via/keymap.c b/keyboards/cipulot/ec_980c/keymaps/via/keymap.c
new file mode 100644
index 00000000000..c60db783528
--- /dev/null
+++ b/keyboards/cipulot/ec_980c/keymaps/via/keymap.c
@@ -0,0 +1,48 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+#include "keymap_japanese.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_INS, KC_PGUP, KC_PGDN,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, JP_YEN, KC_BSPC, KC_NUM, KC_PSLS, KC_PAST, KC_PMNS,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_ENT, KC_P7, KC_P8, KC_P9, KC_PPLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT, KC_P4, KC_P5, KC_P6, KC_PPLS,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT,
+ KC_LCTL, KC_LGUI, KC_LALT, _______, KC_SPC, KC_SPC, _______, KC_RALT, KC_RCTL, MO(1), KC_LEFT, KC_DOWN, KC_RIGHT, KC_P0, KC_PDOT, KC_PENT
+ ),
+ [1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, MO(2), _______, _______, _______, _______, _______, _______, _______
+ ),
+ [2] = LAYOUT(
+ QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
+ ),
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_980c/keymaps/via/rules.mk b/keyboards/cipulot/ec_980c/keymaps/via/rules.mk
new file mode 100644
index 00000000000..b870b6349c0
--- /dev/null
+++ b/keyboards/cipulot/ec_980c/keymaps/via/rules.mk
@@ -0,0 +1,3 @@
+VIA_ENABLE = yes
+
+SRC += via_ec_indicators.c
diff --git a/keyboards/cipulot/ec_980c/keymaps/via/via_ec_indicators.c b/keyboards/cipulot/ec_980c/keymaps/via/via_ec_indicators.c
new file mode 100644
index 00000000000..f885e794357
--- /dev/null
+++ b/keyboards/cipulot/ec_980c/keymaps/via/via_ec_indicators.c
@@ -0,0 +1,499 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "keyboards/cipulot/common/eeprom_tools.h"
+#include "ec_switch_matrix.h"
+#include "action.h"
+#include "print.h"
+#include "via.h"
+
+#ifdef VIA_ENABLE
+
+void ec_rescale_values(uint8_t item);
+void ec_save_threshold_data(uint8_t option);
+void ec_save_bottoming_reading(void);
+void ec_show_calibration_data(void);
+void ec_clear_bottoming_calibration_data(void);
+
+// Declaring enums for VIA config menu
+enum via_enums {
+ // clang-format off
+ id_num_indicator_enabled = 1,
+ id_num_indicator_brightness = 2,
+ id_num_indicator_color = 3,
+ id_caps_indicator_enabled = 4,
+ id_caps_indicator_brightness = 5,
+ id_caps_indicator_color = 6,
+ id_scroll_indicator_enabled = 7,
+ id_scroll_indicator_brightness = 8,
+ id_scroll_indicator_color = 9,
+ id_actuation_mode = 10,
+ id_mode_0_actuation_threshold = 11,
+ id_mode_0_release_threshold = 12,
+ id_save_threshold_data = 13,
+ id_mode_1_initial_deadzone_offset = 14,
+ id_mode_1_actuation_offset = 15,
+ id_mode_1_release_offset = 16,
+ id_bottoming_calibration = 17,
+ id_noise_floor_calibration = 18,
+ id_show_calibration_data = 19,
+ id_clear_bottoming_calibration_data = 20
+ // clang-format on
+};
+
+// Handle the data received by the keyboard from the VIA menus
+void via_config_set_value(uint8_t *data) {
+ // data = [ value_id, value_data ]
+ uint8_t *value_id = &(data[0]);
+ uint8_t *value_data = &(data[1]);
+
+ switch (*value_id) {
+ case id_num_indicator_enabled: {
+ if (value_data[0] == 1) {
+ eeprom_ec_config.num.enabled = true;
+ uprintf("#########################\n");
+ uprintf("# Num indicator enabled #\n");
+ uprintf("#########################\n");
+ } else {
+ eeprom_ec_config.num.enabled = false;
+ uprintf("##########################\n");
+ uprintf("# Num indicator disabled #\n");
+ uprintf("##########################\n");
+ }
+ EEPROM_KB_PARTIAL_UPDATE(eeprom_ec_config, num.enabled);
+ break;
+ }
+ case id_num_indicator_brightness: {
+ eeprom_ec_config.num.v = value_data[0];
+ uprintf("Num indicator brightness: %d\n", eeprom_ec_config.num.v);
+ EEPROM_KB_PARTIAL_UPDATE(eeprom_ec_config, num.v);
+ break;
+ }
+ case id_num_indicator_color: {
+ eeprom_ec_config.num.h = value_data[0];
+ eeprom_ec_config.num.s = value_data[1];
+ uprintf("Num indicator color: %d, %d\n", eeprom_ec_config.num.h, eeprom_ec_config.num.s);
+ EEPROM_KB_PARTIAL_UPDATE(eeprom_ec_config, num.h);
+ EEPROM_KB_PARTIAL_UPDATE(eeprom_ec_config, num.s);
+ break;
+ }
+ case id_caps_indicator_enabled: {
+ if (value_data[0] == 1) {
+ eeprom_ec_config.caps.enabled = true;
+ uprintf("##########################\n");
+ uprintf("# Caps indicator enabled #\n");
+ uprintf("##########################\n");
+ } else {
+ eeprom_ec_config.caps.enabled = false;
+ uprintf("###########################\n");
+ uprintf("# Caps indicator disabled #\n");
+ uprintf("###########################\n");
+ }
+ EEPROM_KB_PARTIAL_UPDATE(eeprom_ec_config, caps.enabled);
+ break;
+ }
+ case id_caps_indicator_brightness: {
+ eeprom_ec_config.caps.v = value_data[0];
+ uprintf("Caps indicator brightness: %d\n", eeprom_ec_config.caps.v);
+ EEPROM_KB_PARTIAL_UPDATE(eeprom_ec_config, caps.v);
+ break;
+ }
+ case id_caps_indicator_color: {
+ eeprom_ec_config.caps.h = value_data[0];
+ eeprom_ec_config.caps.s = value_data[1];
+ uprintf("Caps indicator color: %d, %d\n", eeprom_ec_config.caps.h, eeprom_ec_config.caps.s);
+ EEPROM_KB_PARTIAL_UPDATE(eeprom_ec_config, caps.h);
+ EEPROM_KB_PARTIAL_UPDATE(eeprom_ec_config, caps.s);
+ break;
+ }
+ case id_scroll_indicator_enabled: {
+ if (value_data[0] == 1) {
+ eeprom_ec_config.scroll.enabled = true;
+ uprintf("############################\n");
+ uprintf("# Scroll indicator enabled #\n");
+ uprintf("############################\n");
+ } else {
+ eeprom_ec_config.scroll.enabled = false;
+ uprintf("#############################\n");
+ uprintf("# Scroll indicator disabled #\n");
+ uprintf("#############################\n");
+ }
+ EEPROM_KB_PARTIAL_UPDATE(eeprom_ec_config, scroll.enabled);
+ break;
+ }
+ case id_scroll_indicator_brightness: {
+ eeprom_ec_config.scroll.v = value_data[0];
+ uprintf("Scroll indicator brightness: %d\n", eeprom_ec_config.scroll.v);
+ EEPROM_KB_PARTIAL_UPDATE(eeprom_ec_config, scroll.v);
+ break;
+ }
+ case id_scroll_indicator_color: {
+ eeprom_ec_config.scroll.h = value_data[0];
+ eeprom_ec_config.scroll.s = value_data[1];
+ uprintf("Scroll indicator color: %d, %d\n", eeprom_ec_config.scroll.h, eeprom_ec_config.scroll.s);
+ EEPROM_KB_PARTIAL_UPDATE(eeprom_ec_config, scroll.h);
+ EEPROM_KB_PARTIAL_UPDATE(eeprom_ec_config, scroll.s);
+ break;
+ }
+ case id_actuation_mode: {
+ eeprom_ec_config.actuation_mode = value_data[0];
+ ec_config.actuation_mode = eeprom_ec_config.actuation_mode;
+ if (ec_config.actuation_mode == 0) {
+ uprintf("#########################\n");
+ uprintf("# Actuation Mode: APC #\n");
+ uprintf("#########################\n");
+ } else if (ec_config.actuation_mode == 1) {
+ uprintf("#################################\n");
+ uprintf("# Actuation Mode: Rapid Trigger #\n");
+ uprintf("#################################\n");
+ }
+ EEPROM_KB_PARTIAL_UPDATE(eeprom_ec_config, actuation_mode);
+ break;
+ }
+ case id_mode_0_actuation_threshold: {
+ ec_config.mode_0_actuation_threshold = value_data[1] | (value_data[0] << 8);
+ uprintf("APC Mode Actuation Threshold: %d\n", ec_config.mode_0_actuation_threshold);
+ break;
+ }
+ case id_mode_0_release_threshold: {
+ ec_config.mode_0_release_threshold = value_data[1] | (value_data[0] << 8);
+ uprintf("APC Mode Release Threshold: %d\n", ec_config.mode_0_release_threshold);
+ break;
+ }
+ case id_mode_1_initial_deadzone_offset: {
+ ec_config.mode_1_initial_deadzone_offset = value_data[1] | (value_data[0] << 8);
+ uprintf("Rapid Trigger Mode Initial Deadzone Offset: %d\n", ec_config.mode_1_initial_deadzone_offset);
+ break;
+ }
+ case id_mode_1_actuation_offset: {
+ ec_config.mode_1_actuation_offset = value_data[0];
+ uprintf("Rapid Trigger Mode Actuation Offset: %d\n", ec_config.mode_1_actuation_offset);
+ break;
+ }
+ case id_mode_1_release_offset: {
+ ec_config.mode_1_release_offset = value_data[0];
+ uprintf("Rapid Trigger Mode Release Offset: %d\n", ec_config.mode_1_release_offset);
+ break;
+ }
+ case id_bottoming_calibration: {
+ if (value_data[0] == 1) {
+ ec_config.bottoming_calibration = true;
+ uprintf("##############################\n");
+ uprintf("# Bottoming calibration mode #\n");
+ uprintf("##############################\n");
+ } else {
+ ec_config.bottoming_calibration = false;
+ ec_save_bottoming_reading();
+ uprintf("## Bottoming calibration done ##\n");
+ ec_show_calibration_data();
+ }
+ break;
+ }
+ case id_save_threshold_data: {
+ ec_save_threshold_data(value_data[0]);
+ break;
+ }
+ case id_noise_floor_calibration: {
+ if (value_data[0] == 0) {
+ ec_noise_floor();
+ ec_rescale_values(0);
+ ec_rescale_values(1);
+ ec_rescale_values(2);
+ uprintf("#############################\n");
+ uprintf("# Noise floor data acquired #\n");
+ uprintf("#############################\n");
+ break;
+ }
+ }
+ case id_show_calibration_data: {
+ if (value_data[0] == 0) {
+ ec_show_calibration_data();
+ break;
+ }
+ }
+ case id_clear_bottoming_calibration_data: {
+ if (value_data[0] == 0) {
+ ec_clear_bottoming_calibration_data();
+ }
+ }
+ default: {
+ // Unhandled value.
+ break;
+ }
+ }
+}
+
+// Handle the data sent by the keyboard to the VIA menus
+void via_config_get_value(uint8_t *data) {
+ // data = [ value_id, value_data ]
+ uint8_t *value_id = &(data[0]);
+ uint8_t *value_data = &(data[1]);
+
+ switch (*value_id) {
+ case id_num_indicator_enabled: {
+ value_data[0] = eeprom_ec_config.num.enabled;
+ break;
+ }
+ case id_num_indicator_brightness: {
+ value_data[0] = eeprom_ec_config.num.v;
+ break;
+ }
+ case id_num_indicator_color: {
+ value_data[0] = eeprom_ec_config.num.h;
+ value_data[1] = eeprom_ec_config.num.s;
+ break;
+ }
+ case id_caps_indicator_enabled: {
+ value_data[0] = eeprom_ec_config.caps.enabled;
+ break;
+ }
+ case id_caps_indicator_brightness: {
+ value_data[0] = eeprom_ec_config.caps.v;
+ break;
+ }
+ case id_caps_indicator_color: {
+ value_data[0] = eeprom_ec_config.caps.h;
+ value_data[1] = eeprom_ec_config.caps.s;
+ break;
+ }
+ case id_scroll_indicator_enabled: {
+ value_data[0] = eeprom_ec_config.scroll.enabled;
+ break;
+ }
+ case id_scroll_indicator_brightness: {
+ value_data[0] = eeprom_ec_config.scroll.v;
+ break;
+ }
+ case id_scroll_indicator_color: {
+ value_data[0] = eeprom_ec_config.scroll.h;
+ value_data[1] = eeprom_ec_config.scroll.s;
+ break;
+ }
+ case id_actuation_mode: {
+ value_data[0] = eeprom_ec_config.actuation_mode;
+ break;
+ }
+ case id_mode_0_actuation_threshold: {
+ value_data[0] = eeprom_ec_config.mode_0_actuation_threshold >> 8;
+ value_data[1] = eeprom_ec_config.mode_0_actuation_threshold & 0xFF;
+ break;
+ }
+ case id_mode_0_release_threshold: {
+ value_data[0] = eeprom_ec_config.mode_0_release_threshold >> 8;
+ value_data[1] = eeprom_ec_config.mode_0_release_threshold & 0xFF;
+ break;
+ }
+ case id_mode_1_initial_deadzone_offset: {
+ value_data[0] = eeprom_ec_config.mode_1_initial_deadzone_offset >> 8;
+ value_data[1] = eeprom_ec_config.mode_1_initial_deadzone_offset & 0xFF;
+ break;
+ }
+ case id_mode_1_actuation_offset: {
+ value_data[0] = eeprom_ec_config.mode_1_actuation_offset;
+ break;
+ }
+ case id_mode_1_release_offset: {
+ value_data[0] = eeprom_ec_config.mode_1_release_offset;
+ break;
+ }
+ default: {
+ // Unhandled value.
+ break;
+ }
+ }
+}
+
+// Handle the commands sent and received by the keyboard with VIA
+void via_custom_value_command_kb(uint8_t *data, uint8_t length) {
+ // data = [ command_id, channel_id, value_id, value_data ]
+ uint8_t *command_id = &(data[0]);
+ uint8_t *channel_id = &(data[1]);
+ uint8_t *value_id_and_data = &(data[2]);
+
+ if (*channel_id == id_custom_channel) {
+ switch (*command_id) {
+ case id_custom_set_value: {
+ via_config_set_value(value_id_and_data);
+ break;
+ }
+ case id_custom_get_value: {
+ via_config_get_value(value_id_and_data);
+ break;
+ }
+ case id_custom_save: {
+ // Bypass the save function in favor of pinpointed saves
+ break;
+ }
+ default: {
+ // Unhandled message.
+ *command_id = id_unhandled;
+ break;
+ }
+ }
+ return;
+ }
+
+ *command_id = id_unhandled;
+}
+
+// Rescale the values received by VIA to fit the new range
+void ec_rescale_values(uint8_t item) {
+ switch (item) {
+ // Rescale the APC mode actuation thresholds
+ case 0:
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ ec_config.rescaled_mode_0_actuation_threshold[row][col] = rescale(ec_config.mode_0_actuation_threshold, 0, 1023, ec_config.noise_floor[row][col], eeprom_ec_config.bottoming_reading[row][col]);
+ }
+ }
+ break;
+ // Rescale the APC mode release thresholds
+ case 1:
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ ec_config.rescaled_mode_0_release_threshold[row][col] = rescale(ec_config.mode_0_release_threshold, 0, 1023, ec_config.noise_floor[row][col], eeprom_ec_config.bottoming_reading[row][col]);
+ }
+ }
+ break;
+ // Rescale the Rapid Trigger mode initial deadzone offsets
+ case 2:
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ ec_config.rescaled_mode_1_initial_deadzone_offset[row][col] = rescale(ec_config.mode_1_initial_deadzone_offset, 0, 1023, ec_config.noise_floor[row][col], eeprom_ec_config.bottoming_reading[row][col]);
+ }
+ }
+ break;
+
+ default:
+ // Unhandled item.
+ break;
+ }
+}
+
+void ec_save_threshold_data(uint8_t option) {
+ // Save APC mode thresholds and rescale them for runtime usage
+ if (option == 0) {
+ eeprom_ec_config.mode_0_actuation_threshold = ec_config.mode_0_actuation_threshold;
+ eeprom_ec_config.mode_0_release_threshold = ec_config.mode_0_release_threshold;
+ ec_rescale_values(0);
+ ec_rescale_values(1);
+ }
+ // Save Rapid Trigger mode thresholds and rescale them for runtime usage
+ else if (option == 1) {
+ eeprom_ec_config.mode_1_initial_deadzone_offset = ec_config.mode_1_initial_deadzone_offset;
+ eeprom_ec_config.mode_1_actuation_offset = ec_config.mode_1_actuation_offset;
+ eeprom_ec_config.mode_1_release_offset = ec_config.mode_1_release_offset;
+ ec_rescale_values(2);
+ }
+ eeconfig_update_kb_datablock(&eeprom_ec_config);
+ uprintf("####################################\n");
+ uprintf("# New thresholds applied and saved #\n");
+ uprintf("####################################\n");
+}
+
+// Save the bottoming reading
+void ec_save_bottoming_reading(void) {
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ for (uint8_t col = 0; col < MATRIX_COLS; col++) {
+ // If the bottom reading doesn't go over the noise floor by BOTTOMING_CALIBRATION_THRESHOLD, it is likely that:
+ // 1. The key is not actually in the matrix
+ // 2. The key is on an alternative layout, therefore not being pressed
+ // 3. The key in in the current layout but not being pressed
+ if (ec_config.bottoming_reading[row][col] < (ec_config.noise_floor[row][col] + BOTTOMING_CALIBRATION_THRESHOLD)) {
+ eeprom_ec_config.bottoming_reading[row][col] = 1023;
+ } else {
+ eeprom_ec_config.bottoming_reading[row][col] = ec_config.bottoming_reading[row][col];
+ }
+ }
+ }
+ // Rescale the values to fit the new range for runtime usage
+ ec_rescale_values(0);
+ ec_rescale_values(1);
+ ec_rescale_values(2);
+ eeconfig_update_kb_datablock(&eeprom_ec_config);
+}
+
+// Show the calibration data
+void ec_show_calibration_data(void) {
+ uprintf("\n###############\n");
+ uprintf("# Noise Floor #\n");
+ uprintf("###############\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ for (uint8_t col = 0; col < MATRIX_COLS - 1; col++) {
+ uprintf("%4d,", ec_config.noise_floor[row][col]);
+ }
+ uprintf("%4d\n", ec_config.noise_floor[row][MATRIX_COLS - 1]);
+ }
+
+ uprintf("\n######################\n");
+ uprintf("# Bottoming Readings #\n");
+ uprintf("######################\n");
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ for (uint8_t col = 0; col < MATRIX_COLS - 1; col++) {
+ uprintf("%4d,", eeprom_ec_config.bottoming_reading[row][col]);
+ }
+ uprintf("%4d\n", eeprom_ec_config.bottoming_reading[row][MATRIX_COLS - 1]);
+ }
+
+ uprintf("\n######################################\n");
+ uprintf("# Rescaled APC Mode Actuation Points #\n");
+ uprintf("######################################\n");
+ uprintf("Original APC Mode Actuation Point: %4d\n", ec_config.mode_0_actuation_threshold);
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ for (uint8_t col = 0; col < MATRIX_COLS - 1; col++) {
+ uprintf("%4d,", ec_config.rescaled_mode_0_actuation_threshold[row][col]);
+ }
+ uprintf("%4d\n", ec_config.rescaled_mode_0_actuation_threshold[row][MATRIX_COLS - 1]);
+ }
+
+ uprintf("\n######################################\n");
+ uprintf("# Rescaled APC Mode Release Points #\n");
+ uprintf("######################################\n");
+ uprintf("Original APC Mode Release Point: %4d\n", ec_config.mode_0_release_threshold);
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ for (uint8_t col = 0; col < MATRIX_COLS - 1; col++) {
+ uprintf("%4d,", ec_config.rescaled_mode_0_release_threshold[row][col]);
+ }
+ uprintf("%4d\n", ec_config.rescaled_mode_0_release_threshold[row][MATRIX_COLS - 1]);
+ }
+
+ uprintf("\n#######################################################\n");
+ uprintf("# Rescaled Rapid Trigger Mode Initial Deadzone Offset #\n");
+ uprintf("#######################################################\n");
+ uprintf("Original Rapid Trigger Mode Initial Deadzone Offset: %4d\n", ec_config.mode_1_initial_deadzone_offset);
+ for (uint8_t row = 0; row < MATRIX_ROWS; row++) {
+ for (uint8_t col = 0; col < MATRIX_COLS - 1; col++) {
+ uprintf("%4d,", ec_config.rescaled_mode_1_initial_deadzone_offset[row][col]);
+ }
+ uprintf("%4d\n", ec_config.rescaled_mode_1_initial_deadzone_offset[row][MATRIX_COLS - 1]);
+ }
+ print("\n");
+}
+
+// Clear the calibration data
+void ec_clear_bottoming_calibration_data(void) {
+ // Clear the EEPROM data
+ eeconfig_init_kb();
+
+ // Reset the runtime values to the EEPROM values
+ keyboard_post_init_kb();
+
+ uprintf("######################################\n");
+ uprintf("# Bottoming calibration data cleared #\n");
+ uprintf("######################################\n");
+}
+
+#endif // VIA_ENABLE
diff --git a/keyboards/cipulot/ec_980c/matrix.c b/keyboards/cipulot/ec_980c/matrix.c
new file mode 100644
index 00000000000..cfa2efe0506
--- /dev/null
+++ b/keyboards/cipulot/ec_980c/matrix.c
@@ -0,0 +1,42 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include "ec_switch_matrix.h"
+#include "matrix.h"
+
+extern matrix_row_t raw_matrix[MATRIX_ROWS]; // raw values
+extern matrix_row_t matrix[MATRIX_ROWS]; // debounced values
+
+// Custom matrix init function
+void matrix_init_custom(void) {
+ // Initialize EC
+ ec_init();
+
+ // Get the noise floor at boot
+ ec_noise_floor();
+}
+
+// Custom matrix scan function
+bool matrix_scan_custom(matrix_row_t current_matrix[]) {
+ bool updated = ec_matrix_scan(current_matrix);
+
+ return updated;
+}
+
+// Bootmagic overriden to avoid conflicts with EC
+void bootmagic_scan(void) {
+ ;
+}
diff --git a/keyboards/cipulot/ec_980c/mcuconf.h b/keyboards/cipulot/ec_980c/mcuconf.h
new file mode 100644
index 00000000000..5f9ecca48dd
--- /dev/null
+++ b/keyboards/cipulot/ec_980c/mcuconf.h
@@ -0,0 +1,28 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_ADC_USE_ADC1
+#define STM32_ADC_USE_ADC1 TRUE
+
+#undef STM32_PWM_USE_ADVANCED
+#define STM32_PWM_USE_ADVANCED TRUE
+
+#undef STM32_PWM_USE_TIM1
+#define STM32_PWM_USE_TIM1 TRUE
diff --git a/keyboards/cipulot/ec_980c/readme.md b/keyboards/cipulot/ec_980c/readme.md
new file mode 100644
index 00000000000..20be2d4928b
--- /dev/null
+++ b/keyboards/cipulot/ec_980c/readme.md
@@ -0,0 +1,26 @@
+# EC980C
+
+
+
+Replacement PCB for the Leopold FC980C.
+
+* Keyboard Maintainer: [cipulot](https://github.com/cipulot)
+* Hardware Supported: EC980C PCB
+* Hardware Availability: TBD
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cipulot/ec_980c:default
+
+Flashing example for this keyboard:
+
+ make cipulot/ec_980c:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Physical reset**: Long short the exposed pads on the top of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cipulot/ec_980c/rules.mk b/keyboards/cipulot/ec_980c/rules.mk
new file mode 100644
index 00000000000..1ff311f102d
--- /dev/null
+++ b/keyboards/cipulot/ec_980c/rules.mk
@@ -0,0 +1,4 @@
+CUSTOM_MATRIX = lite
+ANALOG_DRIVER_REQUIRED = yes
+SRC += matrix.c ec_switch_matrix.c
+OPT = 2
diff --git a/keyboards/cipulot/ec_alveus/1_0_0/config.h b/keyboards/cipulot/ec_alveus/1_0_0/config.h
index ea43ba348d5..ab51289c023 100644
--- a/keyboards/cipulot/ec_alveus/1_0_0/config.h
+++ b/keyboards/cipulot/ec_alveus/1_0_0/config.h
@@ -63,9 +63,3 @@
// #define DEBUG_MATRIX_SCAN_RATE
#define EECONFIG_KB_DATA_SIZE 169
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/cipulot/ec_alveus/1_0_0/keyboard.json b/keyboards/cipulot/ec_alveus/1_0_0/keyboard.json
index 4652166cc5e..cffd3ade586 100644
--- a/keyboards/cipulot/ec_alveus/1_0_0/keyboard.json
+++ b/keyboards/cipulot/ec_alveus/1_0_0/keyboard.json
@@ -6,6 +6,12 @@
"build": {
"lto": true
},
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
"diode_direction": "COL2ROW",
"features": {
"bootmagic": false,
diff --git a/keyboards/cipulot/ec_alveus/1_0_0/rules.mk b/keyboards/cipulot/ec_alveus/1_0_0/rules.mk
index 70494b635f6..ce525670a68 100644
--- a/keyboards/cipulot/ec_alveus/1_0_0/rules.mk
+++ b/keyboards/cipulot/ec_alveus/1_0_0/rules.mk
@@ -1,4 +1,5 @@
CUSTOM_MATRIX = lite
ANALOG_DRIVER_REQUIRED = yes
-SRC += keyboards/cipulot/common/matrix.c keyboards/cipulot/common/ec_board.c keyboards/cipulot/common/ec_switch_matrix.c
+VPATH += keyboards/cipulot/common
+SRC += matrix.c ec_board.c ec_switch_matrix.c
OPT = 3
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/config.h b/keyboards/cipulot/ec_alveus/1_2_0/config.h
index ea43ba348d5..ab51289c023 100644
--- a/keyboards/cipulot/ec_alveus/1_2_0/config.h
+++ b/keyboards/cipulot/ec_alveus/1_2_0/config.h
@@ -63,9 +63,3 @@
// #define DEBUG_MATRIX_SCAN_RATE
#define EECONFIG_KB_DATA_SIZE 169
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/keyboard.json b/keyboards/cipulot/ec_alveus/1_2_0/keyboard.json
index 8b63d02f770..da212f83411 100644
--- a/keyboards/cipulot/ec_alveus/1_2_0/keyboard.json
+++ b/keyboards/cipulot/ec_alveus/1_2_0/keyboard.json
@@ -6,6 +6,12 @@
"build": {
"lto": true
},
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
"diode_direction": "COL2ROW",
"features": {
"bootmagic": false,
diff --git a/keyboards/cipulot/ec_alveus/1_2_0/rules.mk b/keyboards/cipulot/ec_alveus/1_2_0/rules.mk
index 70494b635f6..ce525670a68 100644
--- a/keyboards/cipulot/ec_alveus/1_2_0/rules.mk
+++ b/keyboards/cipulot/ec_alveus/1_2_0/rules.mk
@@ -1,4 +1,5 @@
CUSTOM_MATRIX = lite
ANALOG_DRIVER_REQUIRED = yes
-SRC += keyboards/cipulot/common/matrix.c keyboards/cipulot/common/ec_board.c keyboards/cipulot/common/ec_switch_matrix.c
+VPATH += keyboards/cipulot/common
+SRC += matrix.c ec_board.c ec_switch_matrix.c
OPT = 3
diff --git a/keyboards/cipulot/ec_dolice/config.h b/keyboards/cipulot/ec_dolice/config.h
new file mode 100644
index 00000000000..a5c56e79491
--- /dev/null
+++ b/keyboards/cipulot/ec_dolice/config.h
@@ -0,0 +1,66 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+#define MATRIX_ROW_PINS \
+ { B13, A8, B12, B14, B15 }
+
+#define AMUX_COUNT 2
+#define AMUX_MAX_COLS_COUNT 8
+
+#define AMUX_EN_PINS \
+ { B9, B8 }
+
+#define AMUX_SEL_PINS \
+ { B7, B6, B5 }
+
+#define AMUX_COL_CHANNELS_SIZES \
+ { 8, 7 }
+
+#define AMUX_0_COL_CHANNELS \
+ { 3, 0, 1, 2, 4, 6, 7, 5 }
+
+#define AMUX_1_COL_CHANNELS \
+ { 3, 0, 1, 2, 4, 6, 7 }
+
+#define AMUX_COL_CHANNELS AMUX_0_COL_CHANNELS, AMUX_1_COL_CHANNELS
+
+#define DISCHARGE_PIN A3
+#define ANALOG_PORT A2
+
+#define DEFAULT_ACTUATION_MODE 0
+#define DEFAULT_MODE_0_ACTUATION_LEVEL 550
+#define DEFAULT_MODE_0_RELEASE_LEVEL 500
+#define DEFAULT_MODE_1_INITIAL_DEADZONE_OFFSET DEFAULT_MODE_0_ACTUATION_LEVEL
+#define DEFAULT_MODE_1_ACTUATION_OFFSET 70
+#define DEFAULT_MODE_1_RELEASE_OFFSET 70
+#define DEFAULT_EXTREMUM 1023
+#define EXPECTED_NOISE_FLOOR 0
+#define NOISE_FLOOR_THRESHOLD 50
+#define BOTTOMING_CALIBRATION_THRESHOLD 100
+#define DEFAULT_NOISE_FLOOR_SAMPLING_COUNT 30
+#define DEFAULT_BOTTOMING_READING 1023
+#define DEFAULT_CALIBRATION_STARTER true
+
+#define DISCHARGE_TIME 10
+
+// #define DEBUG_MATRIX_SCAN_RATE
+
+#define EECONFIG_KB_DATA_SIZE 159
diff --git a/keyboards/cipulot/ec_dolice/halconf.h b/keyboards/cipulot/ec_dolice/halconf.h
new file mode 100644
index 00000000000..835d43b6a0a
--- /dev/null
+++ b/keyboards/cipulot/ec_dolice/halconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_ADC TRUE
+
+#include_next
diff --git a/keyboards/cipulot/ec_dolice/info.json b/keyboards/cipulot/ec_dolice/info.json
new file mode 100644
index 00000000000..e81422e2c54
--- /dev/null
+++ b/keyboards/cipulot/ec_dolice/info.json
@@ -0,0 +1,319 @@
+{
+ "manufacturer": "Cipulot",
+ "keyboard_name": "Dolice EC",
+ "maintainer": "Cipulot",
+ "bootloader": "stm32-dfu",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": false,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "indicators": {
+ "caps_lock": "B4",
+ "num_lock": "A15",
+ "scroll_lock": "B3",
+ "on_state": 0
+ },
+ "processor": "STM32F411",
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x6BB9",
+ "shared_endpoint": {
+ "keyboard": true
+ },
+ "vid": "0x6369"
+ },
+ "layout_aliases": {
+ "LAYOUT_all": "LAYOUT_alice_split_bs"
+ },
+ "layouts": {
+ "LAYOUT_alice": {
+ "layout": [
+ {"matrix": [1, 0], "x": 0, "y": 0},
+ {"matrix": [0, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [0, 2], "x": 3.25, "y": 0},
+ {"matrix": [0, 3], "x": 4.25, "y": 0},
+ {"matrix": [0, 4], "x": 5.25, "y": 0},
+ {"matrix": [0, 5], "x": 6.25, "y": 0},
+ {"matrix": [0, 6], "x": 7.25, "y": 0},
+ {"matrix": [0, 7], "x": 10.25, "y": 0},
+ {"matrix": [0, 8], "x": 11.25, "y": 0},
+ {"matrix": [0, 9], "x": 12.25, "y": 0},
+ {"matrix": [0, 10], "x": 13.25, "y": 0},
+ {"matrix": [0, 11], "x": 14.25, "y": 0},
+ {"matrix": [0, 12], "x": 15.25, "y": 0},
+ {"matrix": [0, 14], "x": 16.25, "y": 0, "w": 2},
+ {"matrix": [2, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 2.75, "y": 1},
+ {"matrix": [1, 3], "x": 3.75, "y": 1},
+ {"matrix": [1, 4], "x": 4.75, "y": 1},
+ {"matrix": [1, 5], "x": 5.75, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+ {"matrix": [1, 7], "x": 9.75, "y": 1},
+ {"matrix": [1, 8], "x": 10.75, "y": 1},
+ {"matrix": [1, 9], "x": 11.75, "y": 1},
+ {"matrix": [1, 10], "x": 12.75, "y": 1},
+ {"matrix": [1, 11], "x": 13.75, "y": 1},
+ {"matrix": [1, 12], "x": 14.75, "y": 1},
+ {"matrix": [1, 13], "x": 15.75, "y": 1},
+ {"matrix": [1, 14], "x": 16.75, "y": 1, "w": 1.5},
+ {"matrix": [3, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 3, "y": 2},
+ {"matrix": [2, 3], "x": 4, "y": 2},
+ {"matrix": [2, 4], "x": 5, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+ {"matrix": [2, 7], "x": 10, "y": 2},
+ {"matrix": [2, 8], "x": 11, "y": 2},
+ {"matrix": [2, 9], "x": 12, "y": 2},
+ {"matrix": [2, 10], "x": 13, "y": 2},
+ {"matrix": [2, 11], "x": 14, "y": 2},
+ {"matrix": [2, 12], "x": 15, "y": 2},
+ {"matrix": [2, 13], "x": 16, "y": 2, "w": 2.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 3.5, "y": 3},
+ {"matrix": [3, 3], "x": 4.5, "y": 3},
+ {"matrix": [3, 4], "x": 5.5, "y": 3},
+ {"matrix": [3, 5], "x": 6.5, "y": 3},
+ {"matrix": [3, 6], "x": 7.5, "y": 3},
+ {"matrix": [3, 7], "x": 9.5, "y": 3},
+ {"matrix": [3, 8], "x": 10.5, "y": 3},
+ {"matrix": [3, 9], "x": 11.5, "y": 3},
+ {"matrix": [3, 10], "x": 12.5, "y": 3},
+ {"matrix": [3, 11], "x": 13.5, "y": 3},
+ {"matrix": [3, 12], "x": 14.5, "y": 3},
+ {"matrix": [3, 13], "x": 15.5, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 17.25, "y": 3},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 4.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 5], "x": 5.75, "y": 4, "w": 2},
+ {"matrix": [4, 6], "x": 7.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 8], "x": 9.5, "y": 4, "w": 2.75},
+ {"matrix": [4, 10], "x": 12.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 16.75, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_alice_split_bs": {
+ "layout": [
+ {"matrix": [1, 0], "x": 0, "y": 0},
+ {"matrix": [0, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [0, 2], "x": 3.25, "y": 0},
+ {"matrix": [0, 3], "x": 4.25, "y": 0},
+ {"matrix": [0, 4], "x": 5.25, "y": 0},
+ {"matrix": [0, 5], "x": 6.25, "y": 0},
+ {"matrix": [0, 6], "x": 7.25, "y": 0},
+ {"matrix": [0, 7], "x": 10.25, "y": 0},
+ {"matrix": [0, 8], "x": 11.25, "y": 0},
+ {"matrix": [0, 9], "x": 12.25, "y": 0},
+ {"matrix": [0, 10], "x": 13.25, "y": 0},
+ {"matrix": [0, 11], "x": 14.25, "y": 0},
+ {"matrix": [0, 12], "x": 15.25, "y": 0},
+ {"matrix": [0, 13], "x": 16.25, "y": 0},
+ {"matrix": [0, 14], "x": 17.25, "y": 0},
+ {"matrix": [2, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 2.75, "y": 1},
+ {"matrix": [1, 3], "x": 3.75, "y": 1},
+ {"matrix": [1, 4], "x": 4.75, "y": 1},
+ {"matrix": [1, 5], "x": 5.75, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+ {"matrix": [1, 7], "x": 9.75, "y": 1},
+ {"matrix": [1, 8], "x": 10.75, "y": 1},
+ {"matrix": [1, 9], "x": 11.75, "y": 1},
+ {"matrix": [1, 10], "x": 12.75, "y": 1},
+ {"matrix": [1, 11], "x": 13.75, "y": 1},
+ {"matrix": [1, 12], "x": 14.75, "y": 1},
+ {"matrix": [1, 13], "x": 15.75, "y": 1},
+ {"matrix": [1, 14], "x": 16.75, "y": 1, "w": 1.5},
+ {"matrix": [3, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 3, "y": 2},
+ {"matrix": [2, 3], "x": 4, "y": 2},
+ {"matrix": [2, 4], "x": 5, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+ {"matrix": [2, 7], "x": 10, "y": 2},
+ {"matrix": [2, 8], "x": 11, "y": 2},
+ {"matrix": [2, 9], "x": 12, "y": 2},
+ {"matrix": [2, 10], "x": 13, "y": 2},
+ {"matrix": [2, 11], "x": 14, "y": 2},
+ {"matrix": [2, 12], "x": 15, "y": 2},
+ {"matrix": [2, 13], "x": 16, "y": 2, "w": 2.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 3.5, "y": 3},
+ {"matrix": [3, 3], "x": 4.5, "y": 3},
+ {"matrix": [3, 4], "x": 5.5, "y": 3},
+ {"matrix": [3, 5], "x": 6.5, "y": 3},
+ {"matrix": [3, 6], "x": 7.5, "y": 3},
+ {"matrix": [3, 7], "x": 9.5, "y": 3},
+ {"matrix": [3, 8], "x": 10.5, "y": 3},
+ {"matrix": [3, 9], "x": 11.5, "y": 3},
+ {"matrix": [3, 10], "x": 12.5, "y": 3},
+ {"matrix": [3, 11], "x": 13.5, "y": 3},
+ {"matrix": [3, 12], "x": 14.5, "y": 3},
+ {"matrix": [3, 13], "x": 15.5, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 17.25, "y": 3},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 4.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 5], "x": 5.75, "y": 4, "w": 2},
+ {"matrix": [4, 6], "x": 7.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 8], "x": 9.5, "y": 4, "w": 2.75},
+ {"matrix": [4, 10], "x": 12.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 16.75, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_long_rshift": {
+ "layout": [
+ {"matrix": [1, 0], "x": 0, "y": 0},
+ {"matrix": [0, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [0, 2], "x": 3.25, "y": 0},
+ {"matrix": [0, 3], "x": 4.25, "y": 0},
+ {"matrix": [0, 4], "x": 5.25, "y": 0},
+ {"matrix": [0, 5], "x": 6.25, "y": 0},
+ {"matrix": [0, 6], "x": 7.25, "y": 0},
+ {"matrix": [0, 7], "x": 10.25, "y": 0},
+ {"matrix": [0, 8], "x": 11.25, "y": 0},
+ {"matrix": [0, 9], "x": 12.25, "y": 0},
+ {"matrix": [0, 10], "x": 13.25, "y": 0},
+ {"matrix": [0, 11], "x": 14.25, "y": 0},
+ {"matrix": [0, 12], "x": 15.25, "y": 0},
+ {"matrix": [0, 14], "x": 16.25, "y": 0, "w": 2},
+ {"matrix": [2, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 2.75, "y": 1},
+ {"matrix": [1, 3], "x": 3.75, "y": 1},
+ {"matrix": [1, 4], "x": 4.75, "y": 1},
+ {"matrix": [1, 5], "x": 5.75, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+ {"matrix": [1, 7], "x": 9.75, "y": 1},
+ {"matrix": [1, 8], "x": 10.75, "y": 1},
+ {"matrix": [1, 9], "x": 11.75, "y": 1},
+ {"matrix": [1, 10], "x": 12.75, "y": 1},
+ {"matrix": [1, 11], "x": 13.75, "y": 1},
+ {"matrix": [1, 12], "x": 14.75, "y": 1},
+ {"matrix": [1, 13], "x": 15.75, "y": 1},
+ {"matrix": [1, 14], "x": 16.75, "y": 1, "w": 1.5},
+ {"matrix": [3, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 3, "y": 2},
+ {"matrix": [2, 3], "x": 4, "y": 2},
+ {"matrix": [2, 4], "x": 5, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+ {"matrix": [2, 7], "x": 10, "y": 2},
+ {"matrix": [2, 8], "x": 11, "y": 2},
+ {"matrix": [2, 9], "x": 12, "y": 2},
+ {"matrix": [2, 10], "x": 13, "y": 2},
+ {"matrix": [2, 11], "x": 14, "y": 2},
+ {"matrix": [2, 12], "x": 15, "y": 2},
+ {"matrix": [2, 13], "x": 16, "y": 2, "w": 2.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 3.5, "y": 3},
+ {"matrix": [3, 3], "x": 4.5, "y": 3},
+ {"matrix": [3, 4], "x": 5.5, "y": 3},
+ {"matrix": [3, 5], "x": 6.5, "y": 3},
+ {"matrix": [3, 6], "x": 7.5, "y": 3},
+ {"matrix": [3, 7], "x": 9.5, "y": 3},
+ {"matrix": [3, 8], "x": 10.5, "y": 3},
+ {"matrix": [3, 9], "x": 11.5, "y": 3},
+ {"matrix": [3, 10], "x": 12.5, "y": 3},
+ {"matrix": [3, 11], "x": 13.5, "y": 3},
+ {"matrix": [3, 12], "x": 14.5, "y": 3},
+ {"matrix": [3, 13], "x": 15.5, "y": 3, "w": 2.75},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 4.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 5], "x": 5.75, "y": 4, "w": 2},
+ {"matrix": [4, 6], "x": 7.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 8], "x": 9.5, "y": 4, "w": 2.75},
+ {"matrix": [4, 10], "x": 12.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 16.75, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_long_rshift_split_bs": {
+ "layout": [
+ {"matrix": [1, 0], "x": 0, "y": 0},
+ {"matrix": [0, 0], "x": 1.25, "y": 0},
+ {"matrix": [0, 1], "x": 2.25, "y": 0},
+ {"matrix": [0, 2], "x": 3.25, "y": 0},
+ {"matrix": [0, 3], "x": 4.25, "y": 0},
+ {"matrix": [0, 4], "x": 5.25, "y": 0},
+ {"matrix": [0, 5], "x": 6.25, "y": 0},
+ {"matrix": [0, 6], "x": 7.25, "y": 0},
+ {"matrix": [0, 7], "x": 10.25, "y": 0},
+ {"matrix": [0, 8], "x": 11.25, "y": 0},
+ {"matrix": [0, 9], "x": 12.25, "y": 0},
+ {"matrix": [0, 10], "x": 13.25, "y": 0},
+ {"matrix": [0, 11], "x": 14.25, "y": 0},
+ {"matrix": [0, 12], "x": 15.25, "y": 0},
+ {"matrix": [0, 13], "x": 16.25, "y": 0},
+ {"matrix": [0, 14], "x": 17.25, "y": 0},
+ {"matrix": [2, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1.25, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 2.75, "y": 1},
+ {"matrix": [1, 3], "x": 3.75, "y": 1},
+ {"matrix": [1, 4], "x": 4.75, "y": 1},
+ {"matrix": [1, 5], "x": 5.75, "y": 1},
+ {"matrix": [1, 6], "x": 6.75, "y": 1},
+ {"matrix": [1, 7], "x": 9.75, "y": 1},
+ {"matrix": [1, 8], "x": 10.75, "y": 1},
+ {"matrix": [1, 9], "x": 11.75, "y": 1},
+ {"matrix": [1, 10], "x": 12.75, "y": 1},
+ {"matrix": [1, 11], "x": 13.75, "y": 1},
+ {"matrix": [1, 12], "x": 14.75, "y": 1},
+ {"matrix": [1, 13], "x": 15.75, "y": 1},
+ {"matrix": [1, 14], "x": 16.75, "y": 1, "w": 1.5},
+ {"matrix": [3, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1.25, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 3, "y": 2},
+ {"matrix": [2, 3], "x": 4, "y": 2},
+ {"matrix": [2, 4], "x": 5, "y": 2},
+ {"matrix": [2, 5], "x": 6, "y": 2},
+ {"matrix": [2, 6], "x": 7, "y": 2},
+ {"matrix": [2, 7], "x": 10, "y": 2},
+ {"matrix": [2, 8], "x": 11, "y": 2},
+ {"matrix": [2, 9], "x": 12, "y": 2},
+ {"matrix": [2, 10], "x": 13, "y": 2},
+ {"matrix": [2, 11], "x": 14, "y": 2},
+ {"matrix": [2, 12], "x": 15, "y": 2},
+ {"matrix": [2, 13], "x": 16, "y": 2, "w": 2.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 3.5, "y": 3},
+ {"matrix": [3, 3], "x": 4.5, "y": 3},
+ {"matrix": [3, 4], "x": 5.5, "y": 3},
+ {"matrix": [3, 5], "x": 6.5, "y": 3},
+ {"matrix": [3, 6], "x": 7.5, "y": 3},
+ {"matrix": [3, 7], "x": 9.5, "y": 3},
+ {"matrix": [3, 8], "x": 10.5, "y": 3},
+ {"matrix": [3, 9], "x": 11.5, "y": 3},
+ {"matrix": [3, 10], "x": 12.5, "y": 3},
+ {"matrix": [3, 11], "x": 13.5, "y": 3},
+ {"matrix": [3, 12], "x": 14.5, "y": 3},
+ {"matrix": [3, 13], "x": 15.5, "y": 3, "w": 2.75},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 2], "x": 4.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 5], "x": 5.75, "y": 4, "w": 2},
+ {"matrix": [4, 6], "x": 7.75, "y": 4, "w": 1.25},
+ {"matrix": [4, 8], "x": 9.5, "y": 4, "w": 2.75},
+ {"matrix": [4, 10], "x": 12.25, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 16.75, "y": 4, "w": 1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/cipulot/ec_dolice/keymaps/default/keymap.c b/keyboards/cipulot/ec_dolice/keymaps/default/keymap.c
new file mode 100644
index 00000000000..5a501e29823
--- /dev/null
+++ b/keyboards/cipulot/ec_dolice/keymaps/default/keymap.c
@@ -0,0 +1,41 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_PSCR, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, KC_RCTL
+ ),
+ [1] = LAYOUT_all(
+ _______, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
+ _______, _______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY, _______, _______,
+ _______, _______, _______, _______, _______, _______, MO(2)
+ ),
+ [2] = LAYOUT_all(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/cipulot/ec_dolice/keymaps/via/keymap.c b/keyboards/cipulot/ec_dolice/keymaps/via/keymap.c
new file mode 100644
index 00000000000..5a501e29823
--- /dev/null
+++ b/keyboards/cipulot/ec_dolice/keymaps/via/keymap.c
@@ -0,0 +1,41 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_PSCR, KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_PGUP, KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_PGDN, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LALT, KC_SPC, KC_LGUI, KC_SPC, KC_RALT, KC_RCTL
+ ),
+ [1] = LAYOUT_all(
+ _______, KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_DEL,
+ _______, _______, KC_HOME, KC_UP, KC_END, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, KC_CAPS, KC_LEFT, KC_DOWN, KC_RGHT, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_VOLD, KC_VOLU, KC_MUTE, KC_MPRV, KC_MNXT, KC_MPLY, _______, _______,
+ _______, _______, _______, _______, _______, _______, MO(2)
+ ),
+ [2] = LAYOUT_all(
+ QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______
+ )
+};
diff --git a/keyboards/cipulot/ec_dolice/keymaps/via/rules.mk b/keyboards/cipulot/ec_dolice/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/cipulot/ec_dolice/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cipulot/ec_dolice/mcuconf.h b/keyboards/cipulot/ec_dolice/mcuconf.h
new file mode 100644
index 00000000000..fa3c955e0d8
--- /dev/null
+++ b/keyboards/cipulot/ec_dolice/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_ADC_USE_ADC1
+#define STM32_ADC_USE_ADC1 TRUE
diff --git a/keyboards/cipulot/ec_dolice/post_rules.mk b/keyboards/cipulot/ec_dolice/post_rules.mk
new file mode 100644
index 00000000000..d726a112a8c
--- /dev/null
+++ b/keyboards/cipulot/ec_dolice/post_rules.mk
@@ -0,0 +1,3 @@
+ifeq ($(strip $(VIA_ENABLE)), yes)
+ SRC += keyboards/cipulot/common/via_ec.c
+endif
diff --git a/keyboards/cipulot/ec_dolice/readme.md b/keyboards/cipulot/ec_dolice/readme.md
new file mode 100644
index 00000000000..a947df139c3
--- /dev/null
+++ b/keyboards/cipulot/ec_dolice/readme.md
@@ -0,0 +1,26 @@
+# Dolice EC
+
+
+
+The Dolice is a alice keyboard designed by Lx3 (Linworks) and yuktsi (TGR) and run by KLC. EC Version designed by Cipulot.
+
+* Keyboard Maintainer: [cipulot](https://github.com/cipulot)
+* Hardware Supported: Dolice EC
+* Hardware availability: Groupbuys. Check the ongoing ones on [the KLC Discord](https://discord.gg/d2A72mGPRB) or [Webshop](https://klc-playground.com/).
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cipulot/ec_dolice:default
+
+Flashing example for this keyboard:
+
+ make cipulot/ec_dolice:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Physical reset**: Long short the exposed pads on the top of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cipulot/ec_dolice/rules.mk b/keyboards/cipulot/ec_dolice/rules.mk
new file mode 100644
index 00000000000..ce525670a68
--- /dev/null
+++ b/keyboards/cipulot/ec_dolice/rules.mk
@@ -0,0 +1,5 @@
+CUSTOM_MATRIX = lite
+ANALOG_DRIVER_REQUIRED = yes
+VPATH += keyboards/cipulot/common
+SRC += matrix.c ec_board.c ec_switch_matrix.c
+OPT = 3
diff --git a/keyboards/cipulot/ec_menhir/config.h b/keyboards/cipulot/ec_menhir/config.h
new file mode 100644
index 00000000000..bd0094c7f15
--- /dev/null
+++ b/keyboards/cipulot/ec_menhir/config.h
@@ -0,0 +1,61 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 12
+
+#define MATRIX_ROW_PINS \
+ { A0, A3, A2, A1 }
+
+#define AMUX_COUNT 1
+#define AMUX_MAX_COLS_COUNT 12
+
+#define AMUX_EN_PINS \
+ { C10 }
+
+#define AMUX_SEL_PINS \
+ { C11, B3, A15, A14 }
+
+#define AMUX_COL_CHANNELS_SIZES \
+ { 12 }
+
+#define AMUX_0_COL_CHANNELS \
+ { 5, 4, 3, 2, 1, 0, 15, 14, 13, 12, 11, 10 }
+
+#define AMUX_COL_CHANNELS AMUX_0_COL_CHANNELS
+
+#define DISCHARGE_PIN A4
+#define ANALOG_PORT A5
+
+#define DEFAULT_ACTUATION_MODE 0
+#define DEFAULT_MODE_0_ACTUATION_LEVEL 550
+#define DEFAULT_MODE_0_RELEASE_LEVEL 500
+#define DEFAULT_MODE_1_INITIAL_DEADZONE_OFFSET DEFAULT_MODE_0_ACTUATION_LEVEL
+#define DEFAULT_MODE_1_ACTUATION_OFFSET 70
+#define DEFAULT_MODE_1_RELEASE_OFFSET 70
+#define DEFAULT_EXTREMUM 1023
+#define EXPECTED_NOISE_FLOOR 0
+#define NOISE_FLOOR_THRESHOLD 50
+#define BOTTOMING_CALIBRATION_THRESHOLD 50
+#define DEFAULT_NOISE_FLOOR_SAMPLING_COUNT 30
+#define DEFAULT_BOTTOMING_READING 1023
+#define DEFAULT_CALIBRATION_STARTER true
+
+#define DISCHARGE_TIME 10
+
+#define EECONFIG_KB_DATA_SIZE 105
diff --git a/keyboards/cipulot/ec_menhir/halconf.h b/keyboards/cipulot/ec_menhir/halconf.h
new file mode 100644
index 00000000000..835d43b6a0a
--- /dev/null
+++ b/keyboards/cipulot/ec_menhir/halconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_ADC TRUE
+
+#include_next
diff --git a/keyboards/cipulot/ec_menhir/info.json b/keyboards/cipulot/ec_menhir/info.json
new file mode 100644
index 00000000000..4cc6a845259
--- /dev/null
+++ b/keyboards/cipulot/ec_menhir/info.json
@@ -0,0 +1,87 @@
+{
+ "manufacturer": "Cipulot",
+ "keyboard_name": "EC Menhir",
+ "maintainer": "Cipulot",
+ "bootloader": "stm32-dfu",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "eeprom": {
+ "driver": "wear_leveling",
+ "wear_leveling": {
+ "driver": "embedded_flash",
+ "backing_size": 4096
+ }
+ },
+ "features": {
+ "bootmagic": false,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "processor": "STM32G431",
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x6BB8",
+ "shared_endpoint": {
+ "keyboard": true
+ },
+ "vid": "0x6369"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0, "w": 1.75},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.25},
+ {"matrix": [1, 1], "x": 1.25, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1},
+ {"matrix": [1, 3], "x": 3.25, "y": 1},
+ {"matrix": [1, 4], "x": 4.25, "y": 1},
+ {"matrix": [1, 5], "x": 5.25, "y": 1},
+ {"matrix": [1, 6], "x": 6.25, "y": 1},
+ {"matrix": [1, 7], "x": 7.25, "y": 1},
+ {"matrix": [1, 8], "x": 8.25, "y": 1},
+ {"matrix": [1, 9], "x": 9.25, "y": 1},
+ {"matrix": [1, 10], "x": 10.25, "y": 1},
+ {"matrix": [1, 11], "x": 11.25, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0.5, "y": 2, "w": 1.25},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2, "w": 1.5},
+ {"matrix": [3, 1], "x": 1.75, "y": 3, "w": 1.25},
+ {"matrix": [3, 2], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3, "w": 2},
+ {"matrix": [3, 5], "x": 6, "y": 3},
+ {"matrix": [3, 6], "x": 7, "y": 3, "w": 2},
+ {"matrix": [3, 8], "x": 9, "y": 3},
+ {"matrix": [3, 9], "x": 10, "y": 3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/cipulot/ec_menhir/keymaps/default/keymap.c b/keyboards/cipulot/ec_menhir/keymaps/default/keymap.c
new file mode 100644
index 00000000000..e6780e6439f
--- /dev/null
+++ b/keyboards/cipulot/ec_menhir/keymaps/default/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT,
+ KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LCTL)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_menhir/keymaps/via/keymap.c b/keyboards/cipulot/ec_menhir/keymaps/via/keymap.c
new file mode 100644
index 00000000000..e6780e6439f
--- /dev/null
+++ b/keyboards/cipulot/ec_menhir/keymaps/via/keymap.c
@@ -0,0 +1,27 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT(
+ KC_ESC, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT,
+ KC_LALT, KC_LGUI, MO(1), KC_SPC, KC_SPC, MO(2), KC_LCTL)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_menhir/keymaps/via/rules.mk b/keyboards/cipulot/ec_menhir/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/cipulot/ec_menhir/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cipulot/ec_menhir/mcuconf.h b/keyboards/cipulot/ec_menhir/mcuconf.h
new file mode 100644
index 00000000000..b120f145c5b
--- /dev/null
+++ b/keyboards/cipulot/ec_menhir/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_ADC_USE_ADC2
+#define STM32_ADC_USE_ADC2 TRUE
diff --git a/keyboards/cipulot/ec_menhir/post_rules.mk b/keyboards/cipulot/ec_menhir/post_rules.mk
new file mode 100644
index 00000000000..d726a112a8c
--- /dev/null
+++ b/keyboards/cipulot/ec_menhir/post_rules.mk
@@ -0,0 +1,3 @@
+ifeq ($(strip $(VIA_ENABLE)), yes)
+ SRC += keyboards/cipulot/common/via_ec.c
+endif
diff --git a/keyboards/cipulot/ec_menhir/readme.md b/keyboards/cipulot/ec_menhir/readme.md
new file mode 100644
index 00000000000..234b1ab9d0e
--- /dev/null
+++ b/keyboards/cipulot/ec_menhir/readme.md
@@ -0,0 +1,26 @@
+# EC Menhir
+
+
+
+EC version of the Menhir.
+
+* Keyboard Maintainer: [cipulot](https://github.com/cipulot)
+* Hardware Supported: EC Menhir
+* Hardware Availability: [fruitykeeb](https://fruitykeeb.xyz/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cipulot/ec_menhir:default
+
+Flashing example for this keyboard:
+
+ make cipulot/ec_menhir:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Physical Boot0 pins**: Short the Boot0 pins on the back of the PCB while plugging in the keyboard
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cipulot/ec_menhir/rules.mk b/keyboards/cipulot/ec_menhir/rules.mk
new file mode 100644
index 00000000000..e7d73cefc98
--- /dev/null
+++ b/keyboards/cipulot/ec_menhir/rules.mk
@@ -0,0 +1,4 @@
+CUSTOM_MATRIX = lite
+ANALOG_DRIVER_REQUIRED = yes
+VPATH += keyboards/cipulot/common
+SRC += matrix.c ec_board.c ec_switch_matrix.c
diff --git a/keyboards/cipulot/ec_pro2/config.h b/keyboards/cipulot/ec_pro2/config.h
index c936b248c45..a05e716823a 100644
--- a/keyboards/cipulot/ec_pro2/config.h
+++ b/keyboards/cipulot/ec_pro2/config.h
@@ -65,8 +65,3 @@
#define EECONFIG_KB_DATA_SIZE 159
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/cipulot/ec_pro2/keyboard.json b/keyboards/cipulot/ec_pro2/keyboard.json
index 2929edfb19c..2e05cff3c16 100644
--- a/keyboards/cipulot/ec_pro2/keyboard.json
+++ b/keyboards/cipulot/ec_pro2/keyboard.json
@@ -6,6 +6,12 @@
"build": {
"lto": true
},
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
"diode_direction": "COL2ROW",
"features": {
"bootmagic": false,
diff --git a/keyboards/cipulot/ec_pro2/rules.mk b/keyboards/cipulot/ec_pro2/rules.mk
index ab6c37cad43..318e0215ce9 100644
--- a/keyboards/cipulot/ec_pro2/rules.mk
+++ b/keyboards/cipulot/ec_pro2/rules.mk
@@ -1,4 +1,5 @@
CUSTOM_MATRIX = lite
ANALOG_DRIVER_REQUIRED = yes
-SRC += keyboards/cipulot/common/matrix.c keyboards/cipulot/common/ec_board.c keyboards/cipulot/common/ec_switch_matrix.c
+VPATH += keyboards/cipulot/common
+SRC += matrix.c ec_board.c ec_switch_matrix.c
OPT = 2
diff --git a/keyboards/cipulot/ec_prox/ansi_iso/config.h b/keyboards/cipulot/ec_prox/ansi_iso/config.h
index 6a165cf3abd..bf25d0b7128 100644
--- a/keyboards/cipulot/ec_prox/ansi_iso/config.h
+++ b/keyboards/cipulot/ec_prox/ansi_iso/config.h
@@ -64,9 +64,3 @@
// #define DEBUG_MATRIX_SCAN_RATE
#define EECONFIG_KB_DATA_SIZE 159
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/cipulot/ec_prox/ansi_iso/keyboard.json b/keyboards/cipulot/ec_prox/ansi_iso/keyboard.json
index 3f390d0bc61..9a68d8b0bf7 100644
--- a/keyboards/cipulot/ec_prox/ansi_iso/keyboard.json
+++ b/keyboards/cipulot/ec_prox/ansi_iso/keyboard.json
@@ -6,6 +6,12 @@
"build": {
"lto": true
},
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
"diode_direction": "COL2ROW",
"features": {
"bootmagic": false,
diff --git a/keyboards/cipulot/ec_prox/ansi_iso/rules.mk b/keyboards/cipulot/ec_prox/ansi_iso/rules.mk
index ab6c37cad43..318e0215ce9 100644
--- a/keyboards/cipulot/ec_prox/ansi_iso/rules.mk
+++ b/keyboards/cipulot/ec_prox/ansi_iso/rules.mk
@@ -1,4 +1,5 @@
CUSTOM_MATRIX = lite
ANALOG_DRIVER_REQUIRED = yes
-SRC += keyboards/cipulot/common/matrix.c keyboards/cipulot/common/ec_board.c keyboards/cipulot/common/ec_switch_matrix.c
+VPATH += keyboards/cipulot/common
+SRC += matrix.c ec_board.c ec_switch_matrix.c
OPT = 2
diff --git a/keyboards/cipulot/ec_prox/jis/config.h b/keyboards/cipulot/ec_prox/jis/config.h
index 6a686d74044..fd3c048bc38 100644
--- a/keyboards/cipulot/ec_prox/jis/config.h
+++ b/keyboards/cipulot/ec_prox/jis/config.h
@@ -64,9 +64,3 @@
// #define DEBUG_MATRIX_SCAN_RATE
#define EECONFIG_KB_DATA_SIZE 149
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/cipulot/ec_prox/jis/keyboard.json b/keyboards/cipulot/ec_prox/jis/keyboard.json
index 88067f9305e..4c92f8c6732 100644
--- a/keyboards/cipulot/ec_prox/jis/keyboard.json
+++ b/keyboards/cipulot/ec_prox/jis/keyboard.json
@@ -6,6 +6,12 @@
"build": {
"lto": true
},
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
"diode_direction": "COL2ROW",
"features": {
"bootmagic": false,
diff --git a/keyboards/cipulot/ec_prox/jis/rules.mk b/keyboards/cipulot/ec_prox/jis/rules.mk
index ab6c37cad43..318e0215ce9 100644
--- a/keyboards/cipulot/ec_prox/jis/rules.mk
+++ b/keyboards/cipulot/ec_prox/jis/rules.mk
@@ -1,4 +1,5 @@
CUSTOM_MATRIX = lite
ANALOG_DRIVER_REQUIRED = yes
-SRC += keyboards/cipulot/common/matrix.c keyboards/cipulot/common/ec_board.c keyboards/cipulot/common/ec_switch_matrix.c
+VPATH += keyboards/cipulot/common
+SRC += matrix.c ec_board.c ec_switch_matrix.c
OPT = 2
diff --git a/keyboards/cipulot/ec_theca/config.h b/keyboards/cipulot/ec_theca/config.h
index 4b834fdff68..d9fea559675 100644
--- a/keyboards/cipulot/ec_theca/config.h
+++ b/keyboards/cipulot/ec_theca/config.h
@@ -63,9 +63,3 @@
// #define DEBUG_MATRIX_SCAN_RATE
#define DYNAMIC_KEYMAP_LAYER_COUNT 3
#define EECONFIG_KB_DATA_SIZE 201
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/cipulot/ec_theca/keyboard.json b/keyboards/cipulot/ec_theca/keyboard.json
index fbd7d7ec471..a438e401806 100644
--- a/keyboards/cipulot/ec_theca/keyboard.json
+++ b/keyboards/cipulot/ec_theca/keyboard.json
@@ -6,6 +6,12 @@
"build": {
"lto": true
},
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
"diode_direction": "COL2ROW",
"features": {
"bootmagic": false,
@@ -27,10 +33,6 @@
"LAYOUT_all": "LAYOUT_tkl_ansi",
"LAYOUT_tkl_ansi_tsangan_wkl": "LAYOUT_tkl_ansi_wkl"
},
- "community_layouts": [
- "tkl_ansi",
- "tkl_ansi_tsangan"
- ],
"layouts": {
"LAYOUT_tkl_ansi": {
"layout": [
diff --git a/keyboards/cipulot/ec_theca/rules.mk b/keyboards/cipulot/ec_theca/rules.mk
index 70494b635f6..ce525670a68 100644
--- a/keyboards/cipulot/ec_theca/rules.mk
+++ b/keyboards/cipulot/ec_theca/rules.mk
@@ -1,4 +1,5 @@
CUSTOM_MATRIX = lite
ANALOG_DRIVER_REQUIRED = yes
-SRC += keyboards/cipulot/common/matrix.c keyboards/cipulot/common/ec_board.c keyboards/cipulot/common/ec_switch_matrix.c
+VPATH += keyboards/cipulot/common
+SRC += matrix.c ec_board.c ec_switch_matrix.c
OPT = 3
diff --git a/keyboards/cipulot/ec_tkl/config.h b/keyboards/cipulot/ec_tkl/config.h
new file mode 100644
index 00000000000..95a7f9137a1
--- /dev/null
+++ b/keyboards/cipulot/ec_tkl/config.h
@@ -0,0 +1,69 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 16
+
+#define MATRIX_ROW_PINS \
+ { B6, B5, B12, B10, B13, B7 }
+
+#define AMUX_COUNT 1
+#define AMUX_MAX_COLS_COUNT 16
+
+#define AMUX_EN_PINS \
+ { A8 }
+
+#define AMUX_SEL_PINS \
+ { B14, B15, A9, A10 }
+
+#define AMUX_COL_CHANNELS_SIZES \
+ { 16 }
+
+#define AMUX_0_COL_CHANNELS \
+ { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}
+
+#define AMUX_COL_CHANNELS AMUX_0_COL_CHANNELS
+
+#define DISCHARGE_PIN A4
+#define ANALOG_PORT A2
+
+#define DEFAULT_ACTUATION_MODE 0
+#define DEFAULT_MODE_0_ACTUATION_LEVEL 550
+#define DEFAULT_MODE_0_RELEASE_LEVEL 500
+#define DEFAULT_MODE_1_INITIAL_DEADZONE_OFFSET DEFAULT_MODE_0_ACTUATION_LEVEL
+#define DEFAULT_MODE_1_ACTUATION_OFFSET 70
+#define DEFAULT_MODE_1_RELEASE_OFFSET 70
+#define DEFAULT_EXTREMUM 1023
+#define EXPECTED_NOISE_FLOOR 0
+#define NOISE_FLOOR_THRESHOLD 50
+#define BOTTOMING_CALIBRATION_THRESHOLD 50
+#define DEFAULT_NOISE_FLOOR_SAMPLING_COUNT 30
+#define DEFAULT_BOTTOMING_READING 1023
+#define DEFAULT_CALIBRATION_STARTER true
+
+#define DISCHARGE_TIME 10
+
+// #define DEBUG_MATRIX_SCAN_RATE
+#define EECONFIG_KB_DATA_SIZE 201
+
+// PWM driver with direct memory access (DMA) support
+#define WS2812_PWM_DRIVER PWMD3
+#define WS2812_PWM_CHANNEL 1
+#define WS2812_PWM_PAL_MODE 2
+#define WS2812_DMA_STREAM STM32_DMA1_STREAM2
+#define WS2812_DMA_CHANNEL 5
diff --git a/keyboards/cipulot/ec_tkl/halconf.h b/keyboards/cipulot/ec_tkl/halconf.h
new file mode 100644
index 00000000000..f2c22202313
--- /dev/null
+++ b/keyboards/cipulot/ec_tkl/halconf.h
@@ -0,0 +1,23 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_ADC TRUE
+#define HAL_USE_PAL TRUE
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/cipulot/ec_tkl/info.json b/keyboards/cipulot/ec_tkl/info.json
new file mode 100644
index 00000000000..0c56fb838d8
--- /dev/null
+++ b/keyboards/cipulot/ec_tkl/info.json
@@ -0,0 +1,433 @@
+{
+ "manufacturer": "Cipulot",
+ "keyboard_name": "EC TKL",
+ "maintainer": "Cipulot",
+ "bootloader": "stm32-dfu",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "eeprom": {
+ "wear_leveling": {
+ "backing_size": 4096
+ }
+ },
+ "features": {
+ "bootmagic": false,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "processor": "STM32F411",
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "led_count": 22
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x6BC3",
+ "shared_endpoint": {
+ "keyboard": true
+ },
+ "vid": "0x6369"
+ },
+ "ws2812": {
+ "driver": "pwm",
+ "pin": "B4"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"label": "0,0", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "0,1", "matrix": [0, 1], "x": 2, "y": 0},
+ {"label": "0,2", "matrix": [0, 2], "x": 3, "y": 0},
+ {"label": "0,3", "matrix": [0, 3], "x": 4, "y": 0},
+ {"label": "0,4", "matrix": [0, 4], "x": 5, "y": 0},
+ {"label": "0,5", "matrix": [0, 5], "x": 6.5, "y": 0},
+ {"label": "0,6", "matrix": [0, 6], "x": 7.5, "y": 0},
+ {"label": "0,7", "matrix": [0, 7], "x": 8.5, "y": 0},
+ {"label": "0,8", "matrix": [0, 8], "x": 9.5, "y": 0},
+ {"label": "0,9", "matrix": [0, 9], "x": 11, "y": 0},
+ {"label": "0,10", "matrix": [0, 10], "x": 12, "y": 0},
+ {"label": "0,11", "matrix": [0, 11], "x": 13, "y": 0},
+ {"label": "0,12", "matrix": [0, 12], "x": 14, "y": 0},
+ {"label": "0,13", "matrix": [0, 13], "x": 15.25, "y": 0},
+ {"label": "0,14", "matrix": [0, 14], "x": 16.25, "y": 0},
+ {"label": "0,15", "matrix": [0, 15], "x": 17.25, "y": 0},
+ {"label": "1,0", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1,1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "1,2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "1,3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "1,4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "1,5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "1,6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "1,7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "1,8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "1,9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "1,10", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "1,11", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "1,12", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "1,13", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "1,14", "matrix": [1, 14], "x": 14, "y": 1.25},
+ {"label": "3,14", "matrix": [3, 14], "x": 15.25, "y": 1.25},
+ {"label": "2,15", "matrix": [2, 15], "x": 16.25, "y": 1.25},
+ {"label": "1,15", "matrix": [1, 15], "x": 17.25, "y": 1.25},
+ {"label": "2,0", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "2,1", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "2,2", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "2,3", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "2,4", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "2,5", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "2,6", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "2,7", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "2,8", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "2,9", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "2,10", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "2,11", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "2,12", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "2,13", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 0.75},
+ {"label": "2,14", "matrix": [2, 14], "x": 14.25, "y": 2.25, "w": 0.75},
+ {"label": "4,14", "matrix": [4, 14], "x": 15.25, "y": 2.25},
+ {"label": "4,15", "matrix": [4, 15], "x": 16.25, "y": 2.25},
+ {"label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 2.25},
+ {"label": "3,0", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "3,1", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "3,2", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "3,3", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "3,4", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "3,5", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "3,6", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "3,7", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "3,8", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "3,9", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": "3,10", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "3,11", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "3,12", "matrix": [3, 12], "x": 12.75, "y": 3.25},
+ {"label": "3,13", "matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
+ {"label": "4,0", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"label": "4,1", "matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"label": "4,2", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "4,3", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "4,4", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "4,5", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "4,6", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "4,7", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "4,8", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": "4,9", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": "4,10", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "4,11", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "4,12", "matrix": [4, 12], "x": 12.25, "y": 4.25},
+ {"label": "4,13", "matrix": [4, 13], "x": 13.25, "y": 4.25, "w": 1.75},
+ {"label": "5,14", "matrix": [5, 14], "x": 16.25, "y": 4.25},
+ {"label": "5,0", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label": "5,1", "matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"label": "5,2", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "5,4", "matrix": [5, 4], "x": 4, "y": 5.25, "w": 1.5},
+ {"label": "5,6", "matrix": [5, 6], "x": 5.5, "y": 5.25, "w": 2.5},
+ {"label": "5,7", "matrix": [5, 7], "x": 8, "y": 5.25, "w": 1.5},
+ {"label": "5,8", "matrix": [5, 8], "x": 9.5, "y": 5.25, "w": 1.5},
+ {"label": "5,9", "matrix": [5, 9], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "5,10", "matrix": [5, 10], "x": 12.5, "y": 5.25},
+ {"label": "5,11", "matrix": [5, 11], "x": 13.5, "y": 5.25, "w": 1.5},
+ {"label": "5,12", "matrix": [5, 12], "x": 15.25, "y": 5.25},
+ {"label": "5,13", "matrix": [5, 13], "x": 16.25, "y": 5.25},
+ {"label": "5,15", "matrix": [5, 15], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_tsangan": {
+ "layout": [
+ {"label": "0,0", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "0,1", "matrix": [0, 1], "x": 2, "y": 0},
+ {"label": "0,2", "matrix": [0, 2], "x": 3, "y": 0},
+ {"label": "0,3", "matrix": [0, 3], "x": 4, "y": 0},
+ {"label": "0,4", "matrix": [0, 4], "x": 5, "y": 0},
+ {"label": "0,5", "matrix": [0, 5], "x": 6.5, "y": 0},
+ {"label": "0,6", "matrix": [0, 6], "x": 7.5, "y": 0},
+ {"label": "0,7", "matrix": [0, 7], "x": 8.5, "y": 0},
+ {"label": "0,8", "matrix": [0, 8], "x": 9.5, "y": 0},
+ {"label": "0,9", "matrix": [0, 9], "x": 11, "y": 0},
+ {"label": "0,10", "matrix": [0, 10], "x": 12, "y": 0},
+ {"label": "0,11", "matrix": [0, 11], "x": 13, "y": 0},
+ {"label": "0,12", "matrix": [0, 12], "x": 14, "y": 0},
+ {"label": "0,13", "matrix": [0, 13], "x": 15.25, "y": 0},
+ {"label": "0,14", "matrix": [0, 14], "x": 16.25, "y": 0},
+ {"label": "0,15", "matrix": [0, 15], "x": 17.25, "y": 0},
+ {"label": "1,0", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1,1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "1,2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "1,3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "1,4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "1,5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "1,6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "1,7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "1,8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "1,9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "1,10", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "1,11", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "1,12", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "1,14", "matrix": [1, 14], "x": 13, "y": 1.25, "w": 2},
+ {"label": "3,14", "matrix": [3, 14], "x": 15.25, "y": 1.25},
+ {"label": "2,15", "matrix": [2, 15], "x": 16.25, "y": 1.25},
+ {"label": "1,15", "matrix": [1, 15], "x": 17.25, "y": 1.25},
+ {"label": "2,0", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "2,1", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "2,2", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "2,3", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "2,4", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "2,5", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "2,6", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "2,7", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "2,8", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "2,9", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "2,10", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "2,11", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "2,12", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "2,13", "matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"label": "4,14", "matrix": [4, 14], "x": 15.25, "y": 2.25},
+ {"label": "4,15", "matrix": [4, 15], "x": 16.25, "y": 2.25},
+ {"label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 2.25},
+ {"label": "3,0", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "3,1", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "3,2", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "3,3", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "3,4", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "3,5", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "3,6", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "3,7", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "3,8", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "3,9", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": "3,10", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "3,11", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "3,13", "matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"label": "4,0", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "4,2", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "4,3", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "4,4", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "4,5", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "4,6", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "4,7", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "4,8", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": "4,9", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": "4,10", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "4,11", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "4,13", "matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"label": "5,14", "matrix": [5, 14], "x": 16.25, "y": 4.25},
+ {"label": "5,0", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label": "5,1", "matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"label": "5,2", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "5,6", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"label": "5,9", "matrix": [5, 9], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "5,10", "matrix": [5, 10], "x": 12.5, "y": 5.25},
+ {"label": "5,11", "matrix": [5, 11], "x": 13.5, "y": 5.25, "w": 1.5},
+ {"label": "5,12", "matrix": [5, 12], "x": 15.25, "y": 5.25},
+ {"label": "5,13", "matrix": [5, 13], "x": 16.25, "y": 5.25},
+ {"label": "5,15", "matrix": [5, 15], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_iso_tsangan": {
+ "layout": [
+ {"label": "0,0", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "0,1", "matrix": [0, 1], "x": 2, "y": 0},
+ {"label": "0,2", "matrix": [0, 2], "x": 3, "y": 0},
+ {"label": "0,3", "matrix": [0, 3], "x": 4, "y": 0},
+ {"label": "0,4", "matrix": [0, 4], "x": 5, "y": 0},
+ {"label": "0,5", "matrix": [0, 5], "x": 6.5, "y": 0},
+ {"label": "0,6", "matrix": [0, 6], "x": 7.5, "y": 0},
+ {"label": "0,7", "matrix": [0, 7], "x": 8.5, "y": 0},
+ {"label": "0,8", "matrix": [0, 8], "x": 9.5, "y": 0},
+ {"label": "0,9", "matrix": [0, 9], "x": 11, "y": 0},
+ {"label": "0,10", "matrix": [0, 10], "x": 12, "y": 0},
+ {"label": "0,11", "matrix": [0, 11], "x": 13, "y": 0},
+ {"label": "0,12", "matrix": [0, 12], "x": 14, "y": 0},
+ {"label": "0,13", "matrix": [0, 13], "x": 15.25, "y": 0},
+ {"label": "0,14", "matrix": [0, 14], "x": 16.25, "y": 0},
+ {"label": "0,15", "matrix": [0, 15], "x": 17.25, "y": 0},
+ {"label": "1,0", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1,1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "1,2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "1,3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "1,4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "1,5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "1,6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "1,7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "1,8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "1,9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "1,10", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "1,11", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "1,12", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "1,14", "matrix": [1, 14], "x": 13, "y": 1.25, "w": 2},
+ {"label": "3,14", "matrix": [3, 14], "x": 15.25, "y": 1.25},
+ {"label": "2,15", "matrix": [2, 15], "x": 16.25, "y": 1.25},
+ {"label": "1,15", "matrix": [1, 15], "x": 17.25, "y": 1.25},
+ {"label": "2,0", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "2,1", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "2,2", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "2,3", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "2,4", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "2,5", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "2,6", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "2,7", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "2,8", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "2,9", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "2,10", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "2,11", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "2,12", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "2,14", "matrix": [2, 14], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+ {"label": "4,14", "matrix": [4, 14], "x": 15.25, "y": 2.25},
+ {"label": "4,15", "matrix": [4, 15], "x": 16.25, "y": 2.25},
+ {"label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 2.25},
+ {"label": "3,0", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "3,1", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "3,2", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "3,3", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "3,4", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "3,5", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "3,6", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "3,7", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "3,8", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "3,9", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": "3,10", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "3,11", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "3,12", "matrix": [3, 12], "x": 12.75, "y": 3.25},
+ {"label": "4,0", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
+ {"label": "4,1", "matrix": [4, 1], "x": 1.25, "y": 4.25},
+ {"label": "4,2", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "4,3", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "4,4", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "4,5", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "4,6", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "4,7", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "4,8", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": "4,9", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": "4,10", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "4,11", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "4,13", "matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"label": "5,14", "matrix": [5, 14], "x": 16.25, "y": 4.25},
+ {"label": "5,0", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label": "5,1", "matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"label": "5,2", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "5,6", "matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
+ {"label": "5,9", "matrix": [5, 9], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "5,10", "matrix": [5, 10], "x": 12.5, "y": 5.25},
+ {"label": "5,11", "matrix": [5, 11], "x": 13.5, "y": 5.25, "w": 1.5},
+ {"label": "5,12", "matrix": [5, 12], "x": 15.25, "y": 5.25},
+ {"label": "5,13", "matrix": [5, 13], "x": 16.25, "y": 5.25},
+ {"label": "5,15", "matrix": [5, 15], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_jis": {
+ "layout": [
+ {"label": "0,0", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "0,1", "matrix": [0, 1], "x": 2, "y": 0},
+ {"label": "0,2", "matrix": [0, 2], "x": 3, "y": 0},
+ {"label": "0,3", "matrix": [0, 3], "x": 4, "y": 0},
+ {"label": "0,4", "matrix": [0, 4], "x": 5, "y": 0},
+ {"label": "0,5", "matrix": [0, 5], "x": 6.5, "y": 0},
+ {"label": "0,6", "matrix": [0, 6], "x": 7.5, "y": 0},
+ {"label": "0,7", "matrix": [0, 7], "x": 8.5, "y": 0},
+ {"label": "0,8", "matrix": [0, 8], "x": 9.5, "y": 0},
+ {"label": "0,9", "matrix": [0, 9], "x": 11, "y": 0},
+ {"label": "0,10", "matrix": [0, 10], "x": 12, "y": 0},
+ {"label": "0,11", "matrix": [0, 11], "x": 13, "y": 0},
+ {"label": "0,12", "matrix": [0, 12], "x": 14, "y": 0},
+ {"label": "0,13", "matrix": [0, 13], "x": 15.25, "y": 0},
+ {"label": "0,14", "matrix": [0, 14], "x": 16.25, "y": 0},
+ {"label": "0,15", "matrix": [0, 15], "x": 17.25, "y": 0},
+ {"label": "1,0", "matrix": [1, 0], "x": 0, "y": 1.25},
+ {"label": "1,1", "matrix": [1, 1], "x": 1, "y": 1.25},
+ {"label": "1,2", "matrix": [1, 2], "x": 2, "y": 1.25},
+ {"label": "1,3", "matrix": [1, 3], "x": 3, "y": 1.25},
+ {"label": "1,4", "matrix": [1, 4], "x": 4, "y": 1.25},
+ {"label": "1,5", "matrix": [1, 5], "x": 5, "y": 1.25},
+ {"label": "1,6", "matrix": [1, 6], "x": 6, "y": 1.25},
+ {"label": "1,7", "matrix": [1, 7], "x": 7, "y": 1.25},
+ {"label": "1,8", "matrix": [1, 8], "x": 8, "y": 1.25},
+ {"label": "1,9", "matrix": [1, 9], "x": 9, "y": 1.25},
+ {"label": "1,10", "matrix": [1, 10], "x": 10, "y": 1.25},
+ {"label": "1,11", "matrix": [1, 11], "x": 11, "y": 1.25},
+ {"label": "1,12", "matrix": [1, 12], "x": 12, "y": 1.25},
+ {"label": "1,13", "matrix": [1, 13], "x": 13, "y": 1.25},
+ {"label": "1,14", "matrix": [1, 14], "x": 14, "y": 1.25},
+ {"label": "3,14", "matrix": [3, 14], "x": 15.25, "y": 1.25},
+ {"label": "2,15", "matrix": [2, 15], "x": 16.25, "y": 1.25},
+ {"label": "1,15", "matrix": [1, 15], "x": 17.25, "y": 1.25},
+ {"label": "2,0", "matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"label": "2,1", "matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"label": "2,2", "matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"label": "2,3", "matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"label": "2,4", "matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"label": "2,5", "matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"label": "2,6", "matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"label": "2,7", "matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"label": "2,8", "matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"label": "2,9", "matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"label": "2,10", "matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"label": "2,11", "matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"label": "2,12", "matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"label": "2,14", "matrix": [2, 14], "x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
+ {"label": "4,14", "matrix": [4, 14], "x": 15.25, "y": 2.25},
+ {"label": "4,15", "matrix": [4, 15], "x": 16.25, "y": 2.25},
+ {"label": "3,15", "matrix": [3, 15], "x": 17.25, "y": 2.25},
+ {"label": "3,0", "matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"label": "3,1", "matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"label": "3,2", "matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"label": "3,3", "matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"label": "3,4", "matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"label": "3,5", "matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"label": "3,6", "matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"label": "3,7", "matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"label": "3,8", "matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"label": "3,9", "matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"label": "3,10", "matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"label": "3,11", "matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"label": "3,12", "matrix": [3, 12], "x": 12.75, "y": 3.25},
+ {"label": "4,0", "matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"label": "4,2", "matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"label": "4,3", "matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"label": "4,4", "matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"label": "4,5", "matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"label": "4,6", "matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"label": "4,7", "matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"label": "4,8", "matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"label": "4,9", "matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"label": "4,10", "matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"label": "4,11", "matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"label": "4,12", "matrix": [4, 12], "x": 12.25, "y": 4.25},
+ {"label": "4,13", "matrix": [4, 13], "x": 13.25, "y": 4.25, "w": 1.75},
+ {"label": "5,14", "matrix": [5, 14], "x": 16.25, "y": 4.25},
+ {"label": "5,0", "matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"label": "5,1", "matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"label": "5,2", "matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"label": "5,4", "matrix": [5, 4], "x": 4, "y": 5.25, "w": 1.5},
+ {"label": "5,6", "matrix": [5, 6], "x": 5.5, "y": 5.25, "w": 2.5},
+ {"label": "5,7", "matrix": [5, 7], "x": 8, "y": 5.25, "w": 1.5},
+ {"label": "5,8", "matrix": [5, 8], "x": 9.5, "y": 5.25, "w": 1.5},
+ {"label": "5,9", "matrix": [5, 9], "x": 11, "y": 5.25, "w": 1.5},
+ {"label": "5,10", "matrix": [5, 10], "x": 12.5, "y": 5.25},
+ {"label": "5,11", "matrix": [5, 11], "x": 13.5, "y": 5.25, "w": 1.5},
+ {"label": "5,12", "matrix": [5, 12], "x": 15.25, "y": 5.25},
+ {"label": "5,13", "matrix": [5, 13], "x": 16.25, "y": 5.25},
+ {"label": "5,15", "matrix": [5, 15], "x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/cipulot/ec_tkl/keymaps/default/keymap.c b/keyboards/cipulot/ec_tkl/keymaps/default/keymap.c
new file mode 100644
index 00000000000..983bdefe8a9
--- /dev/null
+++ b/keyboards/cipulot/ec_tkl/keymaps/default/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+#include "keymap_japanese.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, JP_YEN, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_ENTER, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENTER,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, JP_UNDS, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, JP_MHEN, KC_SPC, JP_KANA, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_all(
+ QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_tkl/keymaps/tkl_ansi_tsangan/keymap.c b/keyboards/cipulot/ec_tkl/keymaps/tkl_ansi_tsangan/keymap.c
new file mode 100644
index 00000000000..ba948b4fc12
--- /dev/null
+++ b/keyboards/cipulot/ec_tkl/keymaps/tkl_ansi_tsangan/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_tkl_ansi_tsangan(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_tkl_ansi_tsangan(
+ QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_tkl/keymaps/tkl_iso_tsangan/keymap.c b/keyboards/cipulot/ec_tkl/keymaps/tkl_iso_tsangan/keymap.c
new file mode 100644
index 00000000000..1689d44d408
--- /dev/null
+++ b/keyboards/cipulot/ec_tkl/keymaps/tkl_iso_tsangan/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_tkl_iso_tsangan(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_ENT, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_tkl_iso_tsangan(
+ QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_tkl/keymaps/tkl_jis/keymap.c b/keyboards/cipulot/ec_tkl/keymaps/tkl_jis/keymap.c
new file mode 100644
index 00000000000..e44575f74f9
--- /dev/null
+++ b/keyboards/cipulot/ec_tkl/keymaps/tkl_jis/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+#include "keymap_japanese.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_tkl_jis(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ JP_ZKHK, JP_1, JP_2, JP_3, JP_4, JP_5, JP_6, JP_7, JP_8, JP_9, JP_0, JP_MINS, JP_CIRC, JP_YEN, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, JP_Q, JP_W, JP_E, JP_R, JP_T, JP_Y, JP_U, JP_I, JP_O, JP_P, JP_AT, JP_LBRC, KC_ENTER, KC_DEL, KC_END, KC_PGDN,
+ JP_EISU, JP_A, JP_S, JP_D, JP_F, JP_G, JP_H, JP_J, JP_K, JP_L, JP_SCLN, JP_COLN, JP_RBRC,
+ KC_LSFT, JP_Z, JP_X, JP_C, JP_V, JP_B, JP_N, JP_M, JP_COMM, JP_DOT, JP_SLSH, JP_BSLS, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, JP_MHEN, KC_SPC, JP_HENK, JP_KANA, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_tkl_jis(
+ QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/kawayo/config.h b/keyboards/cipulot/ec_tkl/keymaps/via/config.h
similarity index 76%
rename from keyboards/cipulot/kawayo/config.h
rename to keyboards/cipulot/ec_tkl/keymaps/via/config.h
index a08011b9cf9..1ab0d3d9aa2 100644
--- a/keyboards/cipulot/kawayo/config.h
+++ b/keyboards/cipulot/ec_tkl/keymaps/via/config.h
@@ -1,4 +1,4 @@
-/* Copyright 2022 Cipulot
+/* Copyright 2023 Cipulot
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -16,7 +16,5 @@
#pragma once
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
+// This is the firmware version for VIA support to avoid conflicts on menu fetching
+#define VIA_FIRMWARE_VERSION 1
diff --git a/keyboards/cipulot/ec_tkl/keymaps/via/keymap.c b/keyboards/cipulot/ec_tkl/keymaps/via/keymap.c
new file mode 100644
index 00000000000..983bdefe8a9
--- /dev/null
+++ b/keyboards/cipulot/ec_tkl/keymaps/via/keymap.c
@@ -0,0 +1,39 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+#include "keymap_japanese.h"
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, JP_YEN, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_ENTER, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENTER,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, JP_UNDS, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, JP_MHEN, KC_SPC, JP_KANA, KC_RALT, KC_RGUI, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+
+ [1] = LAYOUT_all(
+ QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_tkl/keymaps/via/rules.mk b/keyboards/cipulot/ec_tkl/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/cipulot/ec_tkl/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cipulot/ec_tkl/mcuconf.h b/keyboards/cipulot/ec_tkl/mcuconf.h
new file mode 100644
index 00000000000..206928272fb
--- /dev/null
+++ b/keyboards/cipulot/ec_tkl/mcuconf.h
@@ -0,0 +1,25 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_ADC_USE_ADC1
+#define STM32_ADC_USE_ADC1 TRUE
+
+#undef STM32_PWM_USE_TIM3
+#define STM32_PWM_USE_TIM3 TRUE
diff --git a/keyboards/cipulot/ec_tkl/post_rules.mk b/keyboards/cipulot/ec_tkl/post_rules.mk
new file mode 100644
index 00000000000..d726a112a8c
--- /dev/null
+++ b/keyboards/cipulot/ec_tkl/post_rules.mk
@@ -0,0 +1,3 @@
+ifeq ($(strip $(VIA_ENABLE)), yes)
+ SRC += keyboards/cipulot/common/via_ec.c
+endif
diff --git a/keyboards/cipulot/ec_tkl/readme.md b/keyboards/cipulot/ec_tkl/readme.md
new file mode 100644
index 00000000000..31467b94d74
--- /dev/null
+++ b/keyboards/cipulot/ec_tkl/readme.md
@@ -0,0 +1,26 @@
+# EC TKL
+
+
+
+Universal TKL Electrostatic Capacitive PCB, with multi-layout support.
+
+* Keyboard Maintainer: [cipulot](https://github.com/cipulot)
+* Hardware Supported: EC TKL PCB Rev 1.1
+* Hardware Availability: TBD
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cipulot/ec_tkl:default
+
+Flashing example for this keyboard:
+
+ make cipulot/ec_tkl:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Physical reset**: Long short the exposed pins on the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cipulot/ec_tkl/rules.mk b/keyboards/cipulot/ec_tkl/rules.mk
new file mode 100644
index 00000000000..318e0215ce9
--- /dev/null
+++ b/keyboards/cipulot/ec_tkl/rules.mk
@@ -0,0 +1,5 @@
+CUSTOM_MATRIX = lite
+ANALOG_DRIVER_REQUIRED = yes
+VPATH += keyboards/cipulot/common
+SRC += matrix.c ec_board.c ec_switch_matrix.c
+OPT = 2
diff --git a/keyboards/cipulot/ec_typeb/config.h b/keyboards/cipulot/ec_typeb/config.h
new file mode 100644
index 00000000000..bf25d0b7128
--- /dev/null
+++ b/keyboards/cipulot/ec_typeb/config.h
@@ -0,0 +1,66 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+#define MATRIX_ROW_PINS \
+ { A7, B0, A4, A5, A6 }
+
+#define AMUX_COUNT 2
+#define AMUX_MAX_COLS_COUNT 8
+
+#define AMUX_EN_PINS \
+ { B7, B3 }
+
+#define AMUX_SEL_PINS \
+ { B4, B5, B6 }
+
+#define AMUX_COL_CHANNELS_SIZES \
+ { 8, 7 }
+
+#define AMUX_0_COL_CHANNELS \
+ { 0, 3, 1, 2, 5, 7, 6, 4 }
+
+#define AMUX_1_COL_CHANNELS \
+ { 0, 3, 1, 2, 5, 7, 6 }
+
+#define AMUX_COL_CHANNELS AMUX_0_COL_CHANNELS, AMUX_1_COL_CHANNELS
+
+#define DISCHARGE_PIN A2
+#define ANALOG_PORT A1
+
+#define DEFAULT_ACTUATION_MODE 0
+#define DEFAULT_MODE_0_ACTUATION_LEVEL 550
+#define DEFAULT_MODE_0_RELEASE_LEVEL 500
+#define DEFAULT_MODE_1_INITIAL_DEADZONE_OFFSET DEFAULT_MODE_0_ACTUATION_LEVEL
+#define DEFAULT_MODE_1_ACTUATION_OFFSET 70
+#define DEFAULT_MODE_1_RELEASE_OFFSET 70
+#define DEFAULT_EXTREMUM 1023
+#define EXPECTED_NOISE_FLOOR 0
+#define NOISE_FLOOR_THRESHOLD 50
+#define BOTTOMING_CALIBRATION_THRESHOLD 100
+#define DEFAULT_NOISE_FLOOR_SAMPLING_COUNT 30
+#define DEFAULT_BOTTOMING_READING 1023
+#define DEFAULT_CALIBRATION_STARTER true
+
+#define DISCHARGE_TIME 10
+
+// #define DEBUG_MATRIX_SCAN_RATE
+
+#define EECONFIG_KB_DATA_SIZE 159
diff --git a/keyboards/cipulot/ec_typeb/halconf.h b/keyboards/cipulot/ec_typeb/halconf.h
new file mode 100644
index 00000000000..835d43b6a0a
--- /dev/null
+++ b/keyboards/cipulot/ec_typeb/halconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_ADC TRUE
+
+#include_next
diff --git a/keyboards/cipulot/ec_typeb/info.json b/keyboards/cipulot/ec_typeb/info.json
new file mode 100644
index 00000000000..2036632af59
--- /dev/null
+++ b/keyboards/cipulot/ec_typeb/info.json
@@ -0,0 +1,98 @@
+{
+ "manufacturer": "Cipulot",
+ "keyboard_name": "EC Type-B",
+ "maintainer": "Cipulot",
+ "bootloader": "stm32-dfu",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": false,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "processor": "STM32F411",
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x6BAA",
+ "shared_endpoint": {
+ "keyboard": true
+ },
+ "vid": "0x6369"
+ },
+ "layouts": {
+ "LAYOUT_60_hhkb": {
+ "layout": [
+ {"label": "0,0", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "0,1", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "0,2", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "0,3", "matrix": [0, 3], "x": 3, "y": 0},
+ {"label": "0,4", "matrix": [0, 4], "x": 4, "y": 0},
+ {"label": "0,5", "matrix": [0, 5], "x": 5, "y": 0},
+ {"label": "0,6", "matrix": [0, 6], "x": 6, "y": 0},
+ {"label": "0,7", "matrix": [0, 7], "x": 7, "y": 0},
+ {"label": "0,8", "matrix": [0, 8], "x": 8, "y": 0},
+ {"label": "0,9", "matrix": [0, 9], "x": 9, "y": 0},
+ {"label": "0,10", "matrix": [0, 10], "x": 10, "y": 0},
+ {"label": "0,11", "matrix": [0, 11], "x": 11, "y": 0},
+ {"label": "0,12", "matrix": [0, 12], "x": 12, "y": 0},
+ {"label": "0,13", "matrix": [0, 13], "x": 13, "y": 0},
+ {"label": "0,14", "matrix": [0, 14], "x": 14, "y": 0},
+ {"label": "1,0", "matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"label": "1,1", "matrix": [1, 1], "x": 1.5, "y": 1},
+ {"label": "1,2", "matrix": [1, 2], "x": 2.5, "y": 1},
+ {"label": "1,3", "matrix": [1, 3], "x": 3.5, "y": 1},
+ {"label": "1,4", "matrix": [1, 4], "x": 4.5, "y": 1},
+ {"label": "1,5", "matrix": [1, 5], "x": 5.5, "y": 1},
+ {"label": "1,6", "matrix": [1, 6], "x": 6.5, "y": 1},
+ {"label": "1,7", "matrix": [1, 7], "x": 7.5, "y": 1},
+ {"label": "1,8", "matrix": [1, 8], "x": 8.5, "y": 1},
+ {"label": "1,9", "matrix": [1, 9], "x": 9.5, "y": 1},
+ {"label": "1,10", "matrix": [1, 10], "x": 10.5, "y": 1},
+ {"label": "1,11", "matrix": [1, 11], "x": 11.5, "y": 1},
+ {"label": "1,12", "matrix": [1, 12], "x": 12.5, "y": 1},
+ {"label": "1,13", "matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"label": "2,0", "matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"label": "2,1", "matrix": [2, 1], "x": 1.75, "y": 2},
+ {"label": "2,2", "matrix": [2, 2], "x": 2.75, "y": 2},
+ {"label": "2,3", "matrix": [2, 3], "x": 3.75, "y": 2},
+ {"label": "2,4", "matrix": [2, 4], "x": 4.75, "y": 2},
+ {"label": "2,5", "matrix": [2, 5], "x": 5.75, "y": 2},
+ {"label": "2,6", "matrix": [2, 6], "x": 6.75, "y": 2},
+ {"label": "2,7", "matrix": [2, 7], "x": 7.75, "y": 2},
+ {"label": "2,8", "matrix": [2, 8], "x": 8.75, "y": 2},
+ {"label": "2,9", "matrix": [2, 9], "x": 9.75, "y": 2},
+ {"label": "2,10", "matrix": [2, 10], "x": 10.75, "y": 2},
+ {"label": "2,11", "matrix": [2, 11], "x": 11.75, "y": 2},
+ {"label": "2,13", "matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"label": "3,0", "matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"label": "3,2", "matrix": [3, 2], "x": 2.25, "y": 3},
+ {"label": "3,3", "matrix": [3, 3], "x": 3.25, "y": 3},
+ {"label": "3,4", "matrix": [3, 4], "x": 4.25, "y": 3},
+ {"label": "3,5", "matrix": [3, 5], "x": 5.25, "y": 3},
+ {"label": "3,6", "matrix": [3, 6], "x": 6.25, "y": 3},
+ {"label": "3,7", "matrix": [3, 7], "x": 7.25, "y": 3},
+ {"label": "3,8", "matrix": [3, 8], "x": 8.25, "y": 3},
+ {"label": "3,9", "matrix": [3, 9], "x": 9.25, "y": 3},
+ {"label": "3,10", "matrix": [3, 10], "x": 10.25, "y": 3},
+ {"label": "3,11", "matrix": [3, 11], "x": 11.25, "y": 3},
+ {"label": "3,13", "matrix": [3, 13], "x": 12.25, "y": 3, "w": 1.75},
+ {"label": "3,14", "matrix": [3, 14], "x": 14, "y": 3},
+ {"label": "4,1", "matrix": [4, 1], "x": 1.5, "y": 4},
+ {"label": "4,2", "matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"label": "4,6", "matrix": [4, 6], "x": 4, "y": 4, "w": 6},
+ {"label": "4,9", "matrix": [4, 9], "x": 10, "y": 4, "w": 1.5},
+ {"label": "4,10", "matrix": [4, 10], "x": 11.5, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/cipulot/ec_typeb/keymaps/default/keymap.c b/keyboards/cipulot/ec_typeb/keymaps/default/keymap.c
new file mode 100644
index 00000000000..71f8cd0368d
--- /dev/null
+++ b/keyboards/cipulot/ec_typeb/keymaps/default/keymap.c
@@ -0,0 +1,42 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_60_hhkb(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT),
+
+ [1] = LAYOUT_60_hhkb(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, KC_UP, _______, KC_BSPC,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, S(KC_8), KC_SLSH, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______,
+ _______, _______, _______, _______, _______, _______, S(KC_EQL), KC_MINS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
+ _______, _______, _______, _______, MO(2)),
+
+ [2] = LAYOUT_60_hhkb(
+ QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_typeb/keymaps/via/keymap.c b/keyboards/cipulot/ec_typeb/keymaps/via/keymap.c
new file mode 100644
index 00000000000..71f8cd0368d
--- /dev/null
+++ b/keyboards/cipulot/ec_typeb/keymaps/via/keymap.c
@@ -0,0 +1,42 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_60_hhkb(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT),
+
+ [1] = LAYOUT_60_hhkb(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, KC_UP, _______, KC_BSPC,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, S(KC_8), KC_SLSH, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______,
+ _______, _______, _______, _______, _______, _______, S(KC_EQL), KC_MINS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
+ _______, _______, _______, _______, MO(2)),
+
+ [2] = LAYOUT_60_hhkb(
+ QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_typeb/keymaps/via/rules.mk b/keyboards/cipulot/ec_typeb/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/cipulot/ec_typeb/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cipulot/ec_typeb/mcuconf.h b/keyboards/cipulot/ec_typeb/mcuconf.h
new file mode 100644
index 00000000000..fa3c955e0d8
--- /dev/null
+++ b/keyboards/cipulot/ec_typeb/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_ADC_USE_ADC1
+#define STM32_ADC_USE_ADC1 TRUE
diff --git a/keyboards/cipulot/ec_typeb/post_rules.mk b/keyboards/cipulot/ec_typeb/post_rules.mk
new file mode 100644
index 00000000000..d726a112a8c
--- /dev/null
+++ b/keyboards/cipulot/ec_typeb/post_rules.mk
@@ -0,0 +1,3 @@
+ifeq ($(strip $(VIA_ENABLE)), yes)
+ SRC += keyboards/cipulot/common/via_ec.c
+endif
diff --git a/keyboards/cipulot/ec_typeb/readme.md b/keyboards/cipulot/ec_typeb/readme.md
new file mode 100644
index 00000000000..c3bfe812388
--- /dev/null
+++ b/keyboards/cipulot/ec_typeb/readme.md
@@ -0,0 +1,26 @@
+# EC Type-B
+
+
+
+EC Type-B Keyboard by bababaul.
+
+* Keyboard Maintainer: [cipulot](https://github.com/cipulot)
+* Hardware Supported: EC Type-B
+* Hardware Availability: [Sand Keys](https://sandkeys.me/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cipulot/ec_typeb:default
+
+Flashing example for this keyboard:
+
+ make cipulot/ec_typeb:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Physical Boot0 pins**: Short the Boot0 pins on the back of the PCB while plugging in the keyboard
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cipulot/ec_typeb/rules.mk b/keyboards/cipulot/ec_typeb/rules.mk
new file mode 100644
index 00000000000..ce525670a68
--- /dev/null
+++ b/keyboards/cipulot/ec_typeb/rules.mk
@@ -0,0 +1,5 @@
+CUSTOM_MATRIX = lite
+ANALOG_DRIVER_REQUIRED = yes
+VPATH += keyboards/cipulot/common
+SRC += matrix.c ec_board.c ec_switch_matrix.c
+OPT = 3
diff --git a/keyboards/cipulot/ec_vero/config.h b/keyboards/cipulot/ec_vero/config.h
new file mode 100644
index 00000000000..89f7474b552
--- /dev/null
+++ b/keyboards/cipulot/ec_vero/config.h
@@ -0,0 +1,61 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define MATRIX_ROWS 5
+#define MATRIX_COLS 15
+
+#define MATRIX_ROW_PINS \
+ { B7, B6, A9, A10, B3 }
+
+#define AMUX_COUNT 1
+#define AMUX_MAX_COLS_COUNT 15
+
+#define AMUX_EN_PINS \
+ { B14 }
+
+#define AMUX_SEL_PINS \
+ { B13, B12, B15, A8 }
+
+#define AMUX_COL_CHANNELS_SIZES \
+ { 15 }
+
+#define AMUX_0_COL_CHANNELS \
+ { 1, 2, 3, 4, 5, 6, 7, 0, 8, 9, 10, 11, 13, 12, 14}
+
+#define AMUX_COL_CHANNELS AMUX_0_COL_CHANNELS
+
+#define DISCHARGE_PIN A4
+#define ANALOG_PORT A2
+
+#define DEFAULT_ACTUATION_MODE 0
+#define DEFAULT_MODE_0_ACTUATION_LEVEL 550
+#define DEFAULT_MODE_0_RELEASE_LEVEL 500
+#define DEFAULT_MODE_1_INITIAL_DEADZONE_OFFSET DEFAULT_MODE_0_ACTUATION_LEVEL
+#define DEFAULT_MODE_1_ACTUATION_OFFSET 70
+#define DEFAULT_MODE_1_RELEASE_OFFSET 70
+#define DEFAULT_EXTREMUM 1023
+#define EXPECTED_NOISE_FLOOR 0
+#define NOISE_FLOOR_THRESHOLD 50
+#define BOTTOMING_CALIBRATION_THRESHOLD 50
+#define DEFAULT_NOISE_FLOOR_SAMPLING_COUNT 30
+#define DEFAULT_BOTTOMING_READING 1023
+#define DEFAULT_CALIBRATION_STARTER true
+
+#define DISCHARGE_TIME 10
+
+#define EECONFIG_KB_DATA_SIZE 159
diff --git a/keyboards/cipulot/ec_vero/halconf.h b/keyboards/cipulot/ec_vero/halconf.h
new file mode 100644
index 00000000000..835d43b6a0a
--- /dev/null
+++ b/keyboards/cipulot/ec_vero/halconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_ADC TRUE
+
+#include_next
diff --git a/keyboards/cipulot/ec_vero/info.json b/keyboards/cipulot/ec_vero/info.json
new file mode 100644
index 00000000000..a2cc1e4a07d
--- /dev/null
+++ b/keyboards/cipulot/ec_vero/info.json
@@ -0,0 +1,165 @@
+{
+ "manufacturer": "Cipulot",
+ "keyboard_name": "Vero EC",
+ "maintainer": "Cipulot",
+ "bootloader": "stm32-dfu",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": false,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "processor": "STM32F411",
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x6BC1",
+ "shared_endpoint": {
+ "keyboard": true
+ },
+ "vid": "0x6369"
+ },
+ "layouts": {
+ "LAYOUT_60_hhkb": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 6},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.5},
+ {"matrix": [4, 11], "x": 11.5, "y": 4}
+ ]
+ },
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 0.75},
+ {"matrix": [1, 14], "x": 14.25, "y": 1, "w": 0.75},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 2, "w": 1.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 6},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.5},
+ {"matrix": [4, 11], "x": 11.5, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/cipulot/ec_vero/keymaps/60_hhkb/keymap.c b/keyboards/cipulot/ec_vero/keymaps/60_hhkb/keymap.c
new file mode 100644
index 00000000000..bd4df694af9
--- /dev/null
+++ b/keyboards/cipulot/ec_vero/keymaps/60_hhkb/keymap.c
@@ -0,0 +1,42 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_60_hhkb(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENTER,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT),
+
+ [1] = LAYOUT_60_hhkb(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, KC_UP, _______, KC_BSPC,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, S(KC_8), KC_SLSH, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______,
+ _______, _______, _______, _______, _______, _______, S(KC_EQL), KC_MINS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
+ _______, _______, _______, _______, MO(2)),
+
+ [2] = LAYOUT_60_hhkb(
+ QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_vero/keymaps/default/keymap.c b/keyboards/cipulot/ec_vero/keymaps/default/keymap.c
new file mode 100644
index 00000000000..06b3651d94a
--- /dev/null
+++ b/keyboards/cipulot/ec_vero/keymaps/default/keymap.c
@@ -0,0 +1,42 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_ENTER,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENTER,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT),
+
+ [1] = LAYOUT_all(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, KC_UP, _______, KC_BSPC, _______,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, S(KC_8), KC_SLSH, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, S(KC_EQL), KC_MINS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
+ _______, _______, _______, _______, MO(2)),
+
+ [2] = LAYOUT_all(
+ QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_vero/keymaps/via/keymap.c b/keyboards/cipulot/ec_vero/keymaps/via/keymap.c
new file mode 100644
index 00000000000..06b3651d94a
--- /dev/null
+++ b/keyboards/cipulot/ec_vero/keymaps/via/keymap.c
@@ -0,0 +1,42 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_ENTER,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENTER,
+ KC_LSFT, KC_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT),
+
+ [1] = LAYOUT_all(
+ _______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_CAPS, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SCRL, KC_PAUSE, KC_UP, _______, KC_BSPC, _______,
+ _______, KC_VOLD, KC_VOLU, KC_MUTE, _______, _______, S(KC_8), KC_SLSH, KC_HOME, KC_PGUP, KC_LEFT, KC_RIGHT, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, S(KC_EQL), KC_MINS, KC_END, KC_PGDN, KC_DOWN, _______, _______,
+ _______, _______, _______, _______, MO(2)),
+
+ [2] = LAYOUT_all(
+ QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______)
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_vero/keymaps/via/rules.mk b/keyboards/cipulot/ec_vero/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/cipulot/ec_vero/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cipulot/ec_vero/mcuconf.h b/keyboards/cipulot/ec_vero/mcuconf.h
new file mode 100644
index 00000000000..fa3c955e0d8
--- /dev/null
+++ b/keyboards/cipulot/ec_vero/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_ADC_USE_ADC1
+#define STM32_ADC_USE_ADC1 TRUE
diff --git a/keyboards/cipulot/ec_vero/post_rules.mk b/keyboards/cipulot/ec_vero/post_rules.mk
new file mode 100644
index 00000000000..d726a112a8c
--- /dev/null
+++ b/keyboards/cipulot/ec_vero/post_rules.mk
@@ -0,0 +1,3 @@
+ifeq ($(strip $(VIA_ENABLE)), yes)
+ SRC += keyboards/cipulot/common/via_ec.c
+endif
diff --git a/keyboards/cipulot/ec_vero/readme.md b/keyboards/cipulot/ec_vero/readme.md
new file mode 100644
index 00000000000..590423fa023
--- /dev/null
+++ b/keyboards/cipulot/ec_vero/readme.md
@@ -0,0 +1,26 @@
+# Vero EC
+
+
+
+EC version of the Vero R2 keyboard.
+
+* Keyboard Maintainer: [cipulot](https://github.com/cipulot)
+* Hardware Supported: Vero EC PCB
+* Hardware Availability: [Antipode](https://www.antipode.no/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cipulot/ec_vero:default
+
+Flashing example for this keyboard:
+
+ make cipulot/ec_vero:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Physical reset**: Long short the exposed pads on the top of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/cipulot/ec_vero/rules.mk b/keyboards/cipulot/ec_vero/rules.mk
new file mode 100644
index 00000000000..ce525670a68
--- /dev/null
+++ b/keyboards/cipulot/ec_vero/rules.mk
@@ -0,0 +1,5 @@
+CUSTOM_MATRIX = lite
+ANALOG_DRIVER_REQUIRED = yes
+VPATH += keyboards/cipulot/common
+SRC += matrix.c ec_board.c ec_switch_matrix.c
+OPT = 3
diff --git a/keyboards/cipulot/ec_virgo/config.h b/keyboards/cipulot/ec_virgo/config.h
new file mode 100644
index 00000000000..2fce8cd7fa7
--- /dev/null
+++ b/keyboards/cipulot/ec_virgo/config.h
@@ -0,0 +1,66 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define MATRIX_ROWS 6
+#define MATRIX_COLS 18
+
+#define MATRIX_ROW_PINS \
+ { B6, B7, B5, B4, B3, A15 }
+
+#define AMUX_COUNT 2
+#define AMUX_MAX_COLS_COUNT 16
+
+#define AMUX_EN_PINS \
+ { A9, A8 }
+
+#define AMUX_SEL_PINS \
+ { B12, B13, B15, B14 }
+
+#define AMUX_COL_CHANNELS_SIZES \
+ { 7, 11 }
+
+#define AMUX_0_COL_CHANNELS \
+ { 2, 1, 0, 3, 5, 4, 7 }
+
+#define AMUX_1_COL_CHANNELS \
+ { 2, 1, 0, 15, 14, 13, 12, 8, 11, 10, 9 }
+
+#define AMUX_COL_CHANNELS AMUX_0_COL_CHANNELS, AMUX_1_COL_CHANNELS
+
+#define DISCHARGE_PIN A4
+#define ANALOG_PORT A3
+
+#define DEFAULT_ACTUATION_MODE 0
+#define DEFAULT_MODE_0_ACTUATION_LEVEL 550
+#define DEFAULT_MODE_0_RELEASE_LEVEL 500
+#define DEFAULT_MODE_1_INITIAL_DEADZONE_OFFSET DEFAULT_MODE_0_ACTUATION_LEVEL
+#define DEFAULT_MODE_1_ACTUATION_OFFSET 70
+#define DEFAULT_MODE_1_RELEASE_OFFSET 70
+#define DEFAULT_EXTREMUM 1023
+#define EXPECTED_NOISE_FLOOR 0
+#define NOISE_FLOOR_THRESHOLD 50
+#define BOTTOMING_CALIBRATION_THRESHOLD 50
+#define DEFAULT_NOISE_FLOOR_SAMPLING_COUNT 30
+#define DEFAULT_BOTTOMING_READING 1023
+#define DEFAULT_CALIBRATION_STARTER true
+
+#define DISCHARGE_TIME 10
+
+// #define DEBUG_MATRIX_SCAN_RATE
+
+#define EECONFIG_KB_DATA_SIZE 225
diff --git a/keyboards/cipulot/ec_virgo/halconf.h b/keyboards/cipulot/ec_virgo/halconf.h
new file mode 100644
index 00000000000..835d43b6a0a
--- /dev/null
+++ b/keyboards/cipulot/ec_virgo/halconf.h
@@ -0,0 +1,21 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define HAL_USE_ADC TRUE
+
+#include_next
diff --git a/keyboards/cipulot/ec_virgo/info.json b/keyboards/cipulot/ec_virgo/info.json
new file mode 100644
index 00000000000..6b37880181b
--- /dev/null
+++ b/keyboards/cipulot/ec_virgo/info.json
@@ -0,0 +1,136 @@
+{
+ "manufacturer": "Cipulot",
+ "keyboard_name": "Virgo EC",
+ "maintainer": "Cipulot",
+ "bootloader": "stm32-dfu",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "eeprom": {
+ "wear_leveling": {
+ "backing_size": 4096
+ }
+ },
+ "features": {
+ "bootmagic": false,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "processor": "STM32F411",
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x6BC0",
+ "shared_endpoint": {
+ "keyboard": true
+ },
+ "vid": "0x6369"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1.25, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.5, "y": 0},
+ {"matrix": [0, 7], "x": 9, "y": 0},
+ {"matrix": [0, 8], "x": 10, "y": 0},
+ {"matrix": [0, 9], "x": 11, "y": 0},
+ {"matrix": [0, 10], "x": 12.25, "y": 0},
+ {"matrix": [0, 11], "x": 13.25, "y": 0},
+ {"matrix": [0, 12], "x": 14.25, "y": 0},
+ {"matrix": [0, 13], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 17.25, "y": 0},
+ {"matrix": [0, 16], "x": 18.25, "y": 0},
+ {"matrix": [0, 17], "x": 19.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 9, "y": 1.5},
+ {"matrix": [1, 8], "x": 10, "y": 1.5},
+ {"matrix": [1, 9], "x": 11, "y": 1.5},
+ {"matrix": [1, 10], "x": 12, "y": 1.5},
+ {"matrix": [1, 11], "x": 13, "y": 1.5},
+ {"matrix": [1, 12], "x": 14, "y": 1.5},
+ {"matrix": [1, 13], "x": 15, "y": 1.5},
+ {"matrix": [1, 14], "x": 16, "y": 1.5},
+ {"matrix": [1, 15], "x": 17.25, "y": 1.5},
+ {"matrix": [1, 16], "x": 18.25, "y": 1.5},
+ {"matrix": [1, 17], "x": 19.25, "y": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 8.5, "y": 2.5},
+ {"matrix": [2, 7], "x": 9.5, "y": 2.5},
+ {"matrix": [2, 8], "x": 10.5, "y": 2.5},
+ {"matrix": [2, 9], "x": 11.5, "y": 2.5},
+ {"matrix": [2, 10], "x": 12.5, "y": 2.5},
+ {"matrix": [2, 11], "x": 13.5, "y": 2.5},
+ {"matrix": [2, 12], "x": 14.5, "y": 2.5},
+ {"matrix": [2, 13], "x": 15.5, "y": 2.5},
+ {"matrix": [2, 14], "x": 16.5, "y": 2.5, "w": 0.5},
+ {"matrix": [2, 15], "x": 17.25, "y": 2.5},
+ {"matrix": [2, 16], "x": 18.25, "y": 2.5},
+ {"matrix": [2, 17], "x": 19.25, "y": 2.5},
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 8.75, "y": 3.5},
+ {"matrix": [3, 7], "x": 9.75, "y": 3.5},
+ {"matrix": [3, 8], "x": 10.75, "y": 3.5},
+ {"matrix": [3, 9], "x": 11.75, "y": 3.5},
+ {"matrix": [3, 10], "x": 12.75, "y": 3.5},
+ {"matrix": [3, 11], "x": 13.75, "y": 3.5},
+ {"matrix": [3, 12], "x": 14.75, "y": 3.5},
+ {"matrix": [3, 13], "x": 15.75, "y": 3.5, "w": 1.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4.5},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.5},
+ {"matrix": [5, 6], "x": 8.25, "y": 4.5},
+ {"matrix": [4, 7], "x": 9.25, "y": 4.5},
+ {"matrix": [4, 8], "x": 10.25, "y": 4.5},
+ {"matrix": [4, 9], "x": 11.25, "y": 4.5},
+ {"matrix": [4, 10], "x": 12.25, "y": 4.5},
+ {"matrix": [4, 11], "x": 13.25, "y": 4.5},
+ {"matrix": [4, 13], "x": 14.25, "y": 4.5, "w": 1.75},
+ {"matrix": [4, 14], "x": 16, "y": 4.5},
+ {"matrix": [4, 16], "x": 18.25, "y": 4.5},
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 3], "x": 3.75, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 5], "x": 5, "y": 5.5, "w": 2.25},
+ {"matrix": [5, 7], "x": 8.25, "y": 5.5, "w": 2.75},
+ {"matrix": [5, 9], "x": 11, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 10], "x": 12.25, "y": 5.5, "w": 1.25},
+ {"matrix": [5, 13], "x": 14.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 15], "x": 17.25, "y": 5.5},
+ {"matrix": [5, 16], "x": 18.25, "y": 5.5},
+ {"matrix": [5, 17], "x": 19.25, "y": 5.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/cipulot/ec_virgo/keymaps/default/keymap.c b/keyboards/cipulot/ec_virgo/keymaps/default/keymap.c
new file mode 100644
index 00000000000..f176ec71dc0
--- /dev/null
+++ b/keyboards/cipulot/ec_virgo/keymaps/default/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_ENTER, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENTER,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+ [1] = LAYOUT(
+ QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_virgo/keymaps/via/keymap.c b/keyboards/cipulot/ec_virgo/keymaps/via/keymap.c
new file mode 100644
index 00000000000..f176ec71dc0
--- /dev/null
+++ b/keyboards/cipulot/ec_virgo/keymaps/via/keymap.c
@@ -0,0 +1,37 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ // clang-format off
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_ENTER, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENTER,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RIGHT),
+ [1] = LAYOUT(
+ QK_BOOT, NK_TOGG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______)
+
+ // clang-format on
+};
diff --git a/keyboards/cipulot/ec_virgo/keymaps/via/rules.mk b/keyboards/cipulot/ec_virgo/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/cipulot/ec_virgo/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/cipulot/ec_virgo/mcuconf.h b/keyboards/cipulot/ec_virgo/mcuconf.h
new file mode 100644
index 00000000000..fa3c955e0d8
--- /dev/null
+++ b/keyboards/cipulot/ec_virgo/mcuconf.h
@@ -0,0 +1,22 @@
+/* Copyright 2023 Cipulot
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_ADC_USE_ADC1
+#define STM32_ADC_USE_ADC1 TRUE
diff --git a/keyboards/cipulot/ec_virgo/post_rules.mk b/keyboards/cipulot/ec_virgo/post_rules.mk
new file mode 100644
index 00000000000..d726a112a8c
--- /dev/null
+++ b/keyboards/cipulot/ec_virgo/post_rules.mk
@@ -0,0 +1,3 @@
+ifeq ($(strip $(VIA_ENABLE)), yes)
+ SRC += keyboards/cipulot/common/via_ec.c
+endif
diff --git a/keyboards/cipulot/ec_virgo/readme.md b/keyboards/cipulot/ec_virgo/readme.md
new file mode 100644
index 00000000000..ddf976ca792
--- /dev/null
+++ b/keyboards/cipulot/ec_virgo/readme.md
@@ -0,0 +1,26 @@
+# Virgo EC
+
+
+
+EC version of the Virgo keyboard.
+
+* Keyboard Maintainer: [cipulot](https://github.com/cipulot)
+* Hardware Supported: Virgo EC PCB
+* Hardware Availability: [Antipode](https://www.antipode.no/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make cipulot/ec_virgo:default
+
+Flashing example for this keyboard:
+
+ make cipulot/ec_virgo:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 2 ways:
+
+* **Physical reset**: Long short the exposed pads on the top of the PCB
+* **Keycode in layout**: Press the key mapped to QK_BOOT if it is available
diff --git a/keyboards/cipulot/ec_virgo/rules.mk b/keyboards/cipulot/ec_virgo/rules.mk
new file mode 100644
index 00000000000..ce525670a68
--- /dev/null
+++ b/keyboards/cipulot/ec_virgo/rules.mk
@@ -0,0 +1,5 @@
+CUSTOM_MATRIX = lite
+ANALOG_DRIVER_REQUIRED = yes
+VPATH += keyboards/cipulot/common
+SRC += matrix.c ec_board.c ec_switch_matrix.c
+OPT = 3
diff --git a/keyboards/cipulot/kallos/keyboard.json b/keyboards/cipulot/kallos/keyboard.json
index e92d634489d..731b37fda9b 100644
--- a/keyboards/cipulot/kallos/keyboard.json
+++ b/keyboards/cipulot/kallos/keyboard.json
@@ -42,6 +42,12 @@
"cols": ["F5", "F6", "C6", "B6", "B5", "B4", "D7", "D6", "D4", "D5", "D3", "F7", "D2", "D1", "B7"],
"rows": ["B3", "B2", "F0", "C7", "F4", "F1"]
},
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
"diode_direction": "COL2ROW",
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
diff --git a/keyboards/cipulot/kawayo/keyboard.json b/keyboards/cipulot/kawayo/keyboard.json
index ac4d24b9b53..4e235e4e4ac 100644
--- a/keyboards/cipulot/kawayo/keyboard.json
+++ b/keyboards/cipulot/kawayo/keyboard.json
@@ -15,6 +15,12 @@
"cols": ["B10", "A0", "B9", "B8", "B7", "B6", "B5", "B4", "B3", "A15", "A14", "A4", "A3", "A2", "A1"],
"rows": ["B1", "B12", "C13", "A7", "B0"]
},
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
"diode_direction": "COL2ROW",
"processor": "STM32F411",
"bootloader": "stm32-dfu",
diff --git a/keyboards/cipulot/rf_r1_8_9xu/config.h b/keyboards/cipulot/rf_r1_8_9xu/config.h
index fbd65f259fd..cd98ff7f3da 100644
--- a/keyboards/cipulot/rf_r1_8_9xu/config.h
+++ b/keyboards/cipulot/rf_r1_8_9xu/config.h
@@ -63,9 +63,3 @@
// #define DEBUG_MATRIX_SCAN_RATE
#define DYNAMIC_KEYMAP_LAYER_COUNT 3
#define EECONFIG_KB_DATA_SIZE 201
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/cipulot/rf_r1_8_9xu/keyboard.json b/keyboards/cipulot/rf_r1_8_9xu/keyboard.json
index 6d3ab8b7091..4c1a0e4384c 100644
--- a/keyboards/cipulot/rf_r1_8_9xu/keyboard.json
+++ b/keyboards/cipulot/rf_r1_8_9xu/keyboard.json
@@ -6,6 +6,12 @@
"build": {
"lto": true
},
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
"diode_direction": "COL2ROW",
"features": {
"bootmagic": false,
@@ -47,7 +53,6 @@
},
"vid": "0x6369"
},
- "community_layouts": ["tkl_jis", "tkl_iso_tsangan", "tkl_ansi_tsangan"],
"layouts": {
"LAYOUT_all": {
"layout": [
diff --git a/keyboards/cipulot/rf_r1_8_9xu/rules.mk b/keyboards/cipulot/rf_r1_8_9xu/rules.mk
index ab6c37cad43..318e0215ce9 100644
--- a/keyboards/cipulot/rf_r1_8_9xu/rules.mk
+++ b/keyboards/cipulot/rf_r1_8_9xu/rules.mk
@@ -1,4 +1,5 @@
CUSTOM_MATRIX = lite
ANALOG_DRIVER_REQUIRED = yes
-SRC += keyboards/cipulot/common/matrix.c keyboards/cipulot/common/ec_board.c keyboards/cipulot/common/ec_switch_matrix.c
+VPATH += keyboards/cipulot/common
+SRC += matrix.c ec_board.c ec_switch_matrix.c
OPT = 2
diff --git a/keyboards/ckeys/obelus/obelus.c b/keyboards/ckeys/obelus/obelus.c
index 123d93f0f4b..59f9000cb48 100644
--- a/keyboards/ckeys/obelus/obelus.c
+++ b/keyboards/ckeys/obelus/obelus.c
@@ -4,8 +4,8 @@ void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
// Turn status LED on
- DDRD |= (1<<6);
- PORTD |= (1<<6);
+ gpio_set_pin_output(D6);
+ gpio_write_pin_high(D6);
matrix_init_user();
}
diff --git a/keyboards/clueboard/66/rev2/rev2.c b/keyboards/clueboard/66/rev2/rev2.c
index 7e3ed5c9dde..ea306a764b9 100644
--- a/keyboards/clueboard/66/rev2/rev2.c
+++ b/keyboards/clueboard/66/rev2/rev2.c
@@ -4,26 +4,26 @@
void backlight_init_ports(void) {
print("init_backlight_pin()\n");
// Set our LED pins as output
- DDRD |= (1<<6); // Esc
- DDRB |= (1<<7); // Page Up
- DDRD |= (1<<4); // Arrows
+ gpio_set_pin_output(D6); // Esc
+ gpio_set_pin_output(B7); // Page Up
+ gpio_set_pin_output(D4); // Arrows
// Set our LED pins low
- PORTD &= ~(1<<6); // Esc
- PORTB &= ~(1<<7); // Page Up
- PORTD &= ~(1<<4); // Arrows
+ gpio_write_pin_low(D6); // Esc
+ gpio_write_pin_low(B7); // Page Up
+ gpio_write_pin_low(D4); // Arrows
}
void backlight_set(uint8_t level) {
if ( level == 0 ) {
// Turn off light
- PORTD |= (1<<6); // Esc
- PORTB |= (1<<7); // Page Up
- PORTD |= (1<<4); // Arrows
+ gpio_write_pin_high(D6); // Esc
+ gpio_write_pin_high(B7); // Page Up
+ gpio_write_pin_high(D4); // Arrows
} else {
// Turn on light
- PORTD &= ~(1<<6); // Esc
- PORTB &= ~(1<<7); // Page Up
- PORTD &= ~(1<<4); // Arrows
+ gpio_write_pin_low(D6); // Esc
+ gpio_write_pin_low(B7); // Page Up
+ gpio_write_pin_low(D4); // Arrows
}
}
diff --git a/keyboards/clueboard/66/rev3/rev3.c b/keyboards/clueboard/66/rev3/rev3.c
index 7e3ed5c9dde..ea306a764b9 100644
--- a/keyboards/clueboard/66/rev3/rev3.c
+++ b/keyboards/clueboard/66/rev3/rev3.c
@@ -4,26 +4,26 @@
void backlight_init_ports(void) {
print("init_backlight_pin()\n");
// Set our LED pins as output
- DDRD |= (1<<6); // Esc
- DDRB |= (1<<7); // Page Up
- DDRD |= (1<<4); // Arrows
+ gpio_set_pin_output(D6); // Esc
+ gpio_set_pin_output(B7); // Page Up
+ gpio_set_pin_output(D4); // Arrows
// Set our LED pins low
- PORTD &= ~(1<<6); // Esc
- PORTB &= ~(1<<7); // Page Up
- PORTD &= ~(1<<4); // Arrows
+ gpio_write_pin_low(D6); // Esc
+ gpio_write_pin_low(B7); // Page Up
+ gpio_write_pin_low(D4); // Arrows
}
void backlight_set(uint8_t level) {
if ( level == 0 ) {
// Turn off light
- PORTD |= (1<<6); // Esc
- PORTB |= (1<<7); // Page Up
- PORTD |= (1<<4); // Arrows
+ gpio_write_pin_high(D6); // Esc
+ gpio_write_pin_high(B7); // Page Up
+ gpio_write_pin_high(D4); // Arrows
} else {
// Turn on light
- PORTD &= ~(1<<6); // Esc
- PORTB &= ~(1<<7); // Page Up
- PORTD &= ~(1<<4); // Arrows
+ gpio_write_pin_low(D6); // Esc
+ gpio_write_pin_low(B7); // Page Up
+ gpio_write_pin_low(D4); // Arrows
}
}
diff --git a/keyboards/clueboard/66_hotswap/prototype/prototype.c b/keyboards/clueboard/66_hotswap/prototype/prototype.c
index c89fbafbff1..27aa332ca49 100644
--- a/keyboards/clueboard/66_hotswap/prototype/prototype.c
+++ b/keyboards/clueboard/66_hotswap/prototype/prototype.c
@@ -4,26 +4,26 @@
void backlight_init_ports(void) {
print("init_backlight_pin()\n");
// Set our LED pins as output
- DDRD |= (1<<0); // Esc
- DDRD |= (1<<4); // Page Up
- DDRD |= (1<<1); // Arrows
+ gpio_set_pin_output(D0); // Esc
+ gpio_set_pin_output(D4); // Page Up
+ gpio_set_pin_output(D1); // Arrows
// Set our LED pins low
- PORTD &= ~(1<<0); // Esc
- PORTD &= ~(1<<4); // Page Up
- PORTD &= ~(1<<1); // Arrows
+ gpio_write_pin_low(D0); // Esc
+ gpio_write_pin_low(D4); // Page Up
+ gpio_write_pin_low(D1); // Arrows
}
void backlight_set(uint8_t level) {
if ( level == 0 ) {
// Turn off light
- PORTD |= (1<<0); // Esc
- PORTD |= (1<<4); // Page Up
- PORTD |= (1<<1); // Arrows
+ gpio_write_pin_high(D0); // Esc
+ gpio_write_pin_high(D4); // Page Up
+ gpio_write_pin_high(D1); // Arrows
} else {
// Turn on light
- PORTD &= ~(1<<0); // Esc
- PORTD &= ~(1<<4); // Page Up
- PORTD &= ~(1<<1); // Arrows
+ gpio_write_pin_low(D0); // Esc
+ gpio_write_pin_low(D4); // Page Up
+ gpio_write_pin_low(D1); // Arrows
}
}
diff --git a/keyboards/converter/hp_46010a/keyboard.json b/keyboards/converter/hp_46010a/keyboard.json
index 0296bda5e98..45193069813 100644
--- a/keyboards/converter/hp_46010a/keyboard.json
+++ b/keyboards/converter/hp_46010a/keyboard.json
@@ -6,7 +6,8 @@
"usb": {
"vid": "0xFEED",
"pid": "0x6060",
- "device_version": "0.0.1"
+ "device_version": "0.0.1",
+ "wait_for_enumeration": true
},
"processor": "atmega32u4",
"bootloader": "halfkay",
diff --git a/keyboards/converter/hp_46010a/matrix.c b/keyboards/converter/hp_46010a/matrix.c
index 7f4e11ab27f..a36e8821a38 100644
--- a/keyboards/converter/hp_46010a/matrix.c
+++ b/keyboards/converter/hp_46010a/matrix.c
@@ -82,17 +82,17 @@ void matrix_scan_user(void) {
// switch, and then into the diode, then into one of the columns into the
// matrix. the reset pin can be used to reset the entire counter.
-#define RESET _BV(PB0)
-#define SCLK _BV(PB1)
-#define SDATA _BV(PB3)
-#define LED _BV(PD6)
+#define HP_46010A_RESET_PIN B0
+#define HP_46010A_SCLK_PIN B1
+#define HP_46010A_SDATA_PIN B3
+#define HP_46010A_LED_PIN D6
inline
static
void SCLK_increment(void) {
- PORTB &= ~SCLK ;
+ gpio_write_pin_low(HP_46010A_SCLK_PIN);
_delay_us( 4 ) ; // make sure the line is stable
- PORTB |= SCLK ;
+ gpio_write_pin_high(HP_46010A_SCLK_PIN);
_delay_us( 4 ) ;
return ;
@@ -101,9 +101,9 @@ void SCLK_increment(void) {
inline
static
void Matrix_Reset(void) {
- PORTB |= RESET ;
+ gpio_write_pin_high(HP_46010A_RESET_PIN);
_delay_us( 4 ) ; // make sure the line is stable
- PORTB &= ~RESET ;
+ gpio_write_pin_low(HP_46010A_RESET_PIN);
return ;
}
@@ -116,7 +116,7 @@ uint8_t Matrix_ReceiveByte (void) {
for ( uint8_t bit = 0; bit < MATRIX_COLS; ++bit ) {
// toggle the clock
SCLK_increment();
- temp = (PINB & SDATA) << 4 ;
+ temp = gpio_read_pin(HP_46010A_SDATA_PIN) << 4 ;
received |= temp >> bit ;
}
@@ -138,18 +138,19 @@ void Matrix_ThrowByte(void) {
void matrix_init (void) {
// debug_matrix = 1;
// PB0 (SS) and PB1 (SCLK) set to outputs
- DDRB |= RESET | SCLK ;
+ gpio_set_pin_output(HP_46010A_RESET_PIN);
+ gpio_set_pin_output(HP_46010A_SCLK_PIN);
// PB2, is unused, and PB3 is our serial input
- DDRB &= ~SDATA ;
+ gpio_set_pin_input(HP_46010A_SDATA_PIN);
// SS is reset for this board, and is active High
// SCLK is the serial clock and is active High
- PORTB &= ~RESET ;
- PORTB |= SCLK ;
+ gpio_write_pin_low(HP_46010A_RESET_PIN);
+ gpio_write_pin_high(HP_46010A_SCLK_PIN);
// led pin
- DDRD |= LED ;
- PORTD &= ~LED ;
+ gpio_set_pin_output(HP_46010A_LED_PIN);
+ gpio_write_pin_low(HP_46010A_LED_PIN);
matrix_init_kb();
diff --git a/keyboards/converter/hp_46010a/rules.mk b/keyboards/converter/hp_46010a/rules.mk
index 3c6124d20ab..857395fb404 100644
--- a/keyboards/converter/hp_46010a/rules.mk
+++ b/keyboards/converter/hp_46010a/rules.mk
@@ -1,4 +1,3 @@
-WAIT_FOR_USB = yes
CUSTOM_MATRIX = yes
SRC = matrix.c
diff --git a/keyboards/converter/sun_usb/matrix.c b/keyboards/converter/sun_usb/matrix.c
index 6d52d5cd6c5..93354ee114b 100644
--- a/keyboards/converter/sun_usb/matrix.c
+++ b/keyboards/converter/sun_usb/matrix.c
@@ -74,8 +74,8 @@ uint8_t matrix_cols(void)
void matrix_init(void)
{
- /* DDRD |= (1<<6); */
- /* PORTD |= (1<<6); */
+ /* gpio_set_pin_output(D6); */
+ /* gpio_write_pin_high(D6); */
debug_enable = true;
uart_init(1200);
@@ -99,7 +99,7 @@ void matrix_init(void)
/* } */
/* print(" Done\n"); */
- /* PORTD &= ~(1<<6); */
+ /* gpio_write_pin_low(D6) */
matrix_init_kb();
return;
diff --git a/keyboards/converter/usb_usb/info.json b/keyboards/converter/usb_usb/info.json
index 63c02322a2e..747fd497828 100644
--- a/keyboards/converter/usb_usb/info.json
+++ b/keyboards/converter/usb_usb/info.json
@@ -8,6 +8,13 @@
"pid": "0x005B",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": false,
+ "extrakey": true,
+ "mousekey": false,
+ "nkro": false,
+ "usb_hid": true
+ },
"processor": "atmega32u4",
"community_layouts": ["fullsize_ansi", "fullsize_iso", "fullsize_jis"],
"layouts": {
diff --git a/keyboards/converter/usb_usb/matrix.c b/keyboards/converter/usb_usb/matrix.c
deleted file mode 100644
index b077febd74d..00000000000
--- a/keyboards/converter/usb_usb/matrix.c
+++ /dev/null
@@ -1 +0,0 @@
-// Intentionally left empty. This file must exist for this board to build.
diff --git a/keyboards/converter/usb_usb/rules.mk b/keyboards/converter/usb_usb/rules.mk
index 97aebc9349b..1e278514f68 100644
--- a/keyboards/converter/usb_usb/rules.mk
+++ b/keyboards/converter/usb_usb/rules.mk
@@ -1,16 +1,3 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-USB_HID_ENABLE = yes
CUSTOM_MATRIX = yes
SRC += custom_matrix.cpp
diff --git a/keyboards/crawlpad/keymaps/default/keymap.c b/keyboards/crawlpad/keymaps/default/keymap.c
index 547132bb7dd..306ade6e5f8 100755
--- a/keyboards/crawlpad/keymaps/default/keymap.c
+++ b/keyboards/crawlpad/keymaps/default/keymap.c
@@ -40,32 +40,16 @@ void set_led(int idx, bool enable) {
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) {
case BL1:
- if (record->event.pressed) {
- PORTB |= (1 << 4);
- } else {
- PORTB &= ~(1 << 4);
- }
+ gpio_write_pin(B4, record->event.pressed);
return false;
case BL2:
- if (record->event.pressed) {
- PORTB |= (1 << 5);
- } else {
- PORTB &= ~(1 << 5);
- }
+ gpio_write_pin(B5, record->event.pressed);
return false;
case BL3:
- if (record->event.pressed) {
- PORTB |= (1 << 6);
- } else {
- PORTB &= ~(1 << 6);
- }
+ gpio_write_pin(B6, record->event.pressed);
return false;
case BL4:
- if (record->event.pressed) {
- PORTB |= (1 << 7);
- } else {
- PORTB &= ~(1 << 7);
- }
+ gpio_write_pin(B7, record->event.pressed);
return false;
}
return true;
@@ -73,6 +57,13 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
void matrix_init_user(void) {
/* set LED row pins to output and low */
- DDRB |= (1 << 4) | (1 << 5) | (1 << 6) | (1 << 7);
- PORTB &= ~(1 << 4) & ~(1 << 5) & ~(1 << 6) & ~(1 << 7);
+ gpio_set_pin_output(B4);
+ gpio_set_pin_output(B5);
+ gpio_set_pin_output(B6);
+ gpio_set_pin_output(B7);
+
+ gpio_write_pin_low(B4);
+ gpio_write_pin_low(B5);
+ gpio_write_pin_low(B6);
+ gpio_write_pin_low(B7);
}
diff --git a/keyboards/custommk/cmk11/keyboard.json b/keyboards/custommk/cmk11/keyboard.json
index d831351aa78..9a853063ba3 100644
--- a/keyboards/custommk/cmk11/keyboard.json
+++ b/keyboards/custommk/cmk11/keyboard.json
@@ -18,6 +18,9 @@
"nkro": true,
"rgb_matrix": true
},
+ "audio": {
+ "driver": "pwm_hardware"
+ },
"matrix_pins": {
"cols": ["B0", "A1", "A2", "A3", "A6", "B10"],
"rows": ["A5", "A4"]
diff --git a/keyboards/custommk/cmk11/rules.mk b/keyboards/custommk/cmk11/rules.mk
deleted file mode 100644
index 72f75f4367e..00000000000
--- a/keyboards/custommk/cmk11/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-AUDIO_DRIVER = pwm_hardware
diff --git a/keyboards/custommk/ergostrafer/keyboard.json b/keyboards/custommk/ergostrafer/keyboard.json
index a1283114c8e..4f23417415d 100644
--- a/keyboards/custommk/ergostrafer/keyboard.json
+++ b/keyboards/custommk/ergostrafer/keyboard.json
@@ -17,6 +17,9 @@
"encoder": true,
"audio": true
},
+ "audio": {
+ "driver": "pwm_hardware"
+ },
"matrix_pins": {
"cols": ["B0", "A1", "A2", "A3", "A6", "B6", "B10"],
"rows": ["C13", "C14", "C15", "B1", "A7", "A5"]
diff --git a/keyboards/custommk/ergostrafer/rules.mk b/keyboards/custommk/ergostrafer/rules.mk
deleted file mode 100644
index 72f75f4367e..00000000000
--- a/keyboards/custommk/ergostrafer/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-AUDIO_DRIVER = pwm_hardware
diff --git a/keyboards/custommk/evo70_r2/keyboard.json b/keyboards/custommk/evo70_r2/keyboard.json
index dea56ed2570..5f10d6705d9 100644
--- a/keyboards/custommk/evo70_r2/keyboard.json
+++ b/keyboards/custommk/evo70_r2/keyboard.json
@@ -51,6 +51,9 @@
"twinkle": true
}
},
+ "audio": {
+ "driver": "pwm_hardware"
+ },
"ws2812": {
"driver": "pwm",
"pin": "A10"
diff --git a/keyboards/custommk/evo70_r2/rules.mk b/keyboards/custommk/evo70_r2/rules.mk
index 193fe4f1a43..3961343ce4b 100644
--- a/keyboards/custommk/evo70_r2/rules.mk
+++ b/keyboards/custommk/evo70_r2/rules.mk
@@ -1,5 +1,3 @@
-AUDIO_DRIVER = pwm_hardware
-
# project specific files
SRC += matrix.c
diff --git a/keyboards/dcpedit/masonry/info.json b/keyboards/dcpedit/masonry/info.json
new file mode 100644
index 00000000000..2d25f726219
--- /dev/null
+++ b/keyboards/dcpedit/masonry/info.json
@@ -0,0 +1,79 @@
+{
+ "manufacturer": "dcpedit",
+ "keyboard_name": "Masonry",
+ "maintainer": "dcpedit",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "dynamic_keymap": {
+ "layer_count": 2
+ },
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true
+ },
+ "matrix_pins": {
+ "cols": ["A8", "B15", "B14", "B13", "B12", "A2"],
+ "rows": ["A9", "A0", "F0", "C15", "A10", "F1", "A1", "C14"]
+ },
+ "processor": "STM32F072",
+ "url": "https://github.com/dcpedit/masonry",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x177A",
+ "vid": "0xDC9E"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"label": "0,0", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "4,0", "matrix": [4, 0], "x": 1, "y": 0},
+ {"label": "0,1", "matrix": [0, 1], "x": 2, "y": 0},
+ {"label": "4,1", "matrix": [4, 1], "x": 3, "y": 0},
+ {"label": "0,2", "matrix": [0, 2], "x": 4, "y": 0},
+ {"label": "4,2", "matrix": [4, 2], "x": 5, "y": 0},
+ {"label": "0,3", "matrix": [0, 3], "x": 6, "y": 0},
+ {"label": "4,3", "matrix": [4, 3], "x": 7, "y": 0},
+ {"label": "0,4", "matrix": [0, 4], "x": 8, "y": 0},
+ {"label": "4,4", "matrix": [4, 4], "x": 9, "y": 0},
+ {"label": "0,5", "matrix": [0, 5], "x": 10, "y": 0},
+ {"label": "4,5", "matrix": [4, 5], "x": 11, "y": 0},
+
+ {"label": "1,0", "matrix": [1, 0], "x": 0, "y": 1.75},
+ {"label": "5,0", "matrix": [5, 0], "x": 1, "y": 1.5},
+ {"label": "1,1", "matrix": [1, 1], "x": 2, "y": 1.25},
+ {"label": "5,1", "matrix": [5, 1], "x": 3, "y": 1},
+ {"label": "1,2", "matrix": [1, 2], "x": 4, "y": 1.25},
+ {"label": "5,2", "matrix": [5, 2], "x": 5, "y": 1.25},
+ {"label": "1,3", "matrix": [1, 3], "x": 6, "y": 1.25},
+ {"label": "5,3", "matrix": [5, 3], "x": 7, "y": 1.25},
+ {"label": "1,4", "matrix": [1, 4], "x": 8, "y": 1},
+ {"label": "5,4", "matrix": [5, 4], "x": 9, "y": 1.25},
+ {"label": "1,5", "matrix": [1, 5], "x": 10, "y": 1.5},
+ {"label": "5,5", "matrix": [5, 5], "x": 11, "y": 1.75},
+
+ {"label": "2,0", "matrix": [2, 0], "x": 0, "y": 2.75},
+ {"label": "6,0", "matrix": [6, 0], "x": 1, "y": 2.5},
+ {"label": "2,1", "matrix": [2, 1], "x": 2, "y": 2.25},
+ {"label": "6,1", "matrix": [6, 1], "x": 3, "y": 2},
+ {"label": "2,2", "matrix": [2, 2], "x": 4, "y": 2.25},
+ {"label": "6,2", "matrix": [6, 2], "x": 5, "y": 2.25},
+ {"label": "2,3", "matrix": [2, 3], "x": 6, "y": 2.25},
+ {"label": "6,3", "matrix": [6, 3], "x": 7, "y": 2.25},
+ {"label": "2,4", "matrix": [2, 4], "x": 8, "y": 2},
+ {"label": "6,4", "matrix": [6, 4], "x": 9, "y": 2.25},
+ {"label": "2,5", "matrix": [2, 5], "x": 10, "y": 2.5},
+ {"label": "6,5", "matrix": [6, 5], "x": 11, "y": 2.75},
+
+ {"label": "3,1", "matrix": [3, 1], "x": 2, "y": 3.25},
+ {"label": "7,1", "matrix": [7, 1], "x": 3, "y": 3.25},
+ {"label": "3,2", "matrix": [3, 2], "x": 4, "y": 3.25},
+ {"label": "7,2", "matrix": [7, 2], "x": 5, "y": 3.25},
+ {"label": "3,3", "matrix": [3, 3], "x": 6, "y": 3.25},
+ {"label": "7,3", "matrix": [7, 3], "x": 7, "y": 3.25},
+ {"label": "3,4", "matrix": [3, 4], "x": 8, "y": 3.25},
+ {"label": "7,4", "matrix": [7, 4], "x": 9, "y": 3.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/dcpedit/masonry/keymaps/default/keymap.json b/keyboards/dcpedit/masonry/keymaps/default/keymap.json
new file mode 100644
index 00000000000..6da346bb917
--- /dev/null
+++ b/keyboards/dcpedit/masonry/keymaps/default/keymap.json
@@ -0,0 +1,21 @@
+{
+ "keyboard": "dcpedit/masonry",
+ "keymap": "default",
+ "author": "dcpedit",
+ "version": 1,
+ "layout": "LAYOUT",
+ "layers": [
+ [
+ "KC_ESC", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_QUOT",
+ "KC_TAB", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_ENT",
+ "KC_LSFT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT",
+ "KC_LCTL", "KC_LGUI", "LT(1,KC_BSPC)", "KC_BSPC", "KC_SPC", "LT(1,KC_SPC)", "KC_RALT", "KC_RGUI"
+ ],
+ [
+ "KC_GRV" , "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_RGUI",
+ "KC_LCTL", "KC_LEFT", "KC_DOWN", "KC_UP", "KC_RGHT", "KC_HOME", "KC_END", "KC_MINS", "KC_EQL", "KC_LBRC", "KC_RBRC", "KC_RALT",
+ "_______", "_______", "_______", "_______", "_______", "_______", "KC_PGDN", "KC_PGUP", "_______", "_______", "KC_BSLS", "_______",
+ "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______"
+ ]
+ ]
+}
\ No newline at end of file
diff --git a/keyboards/dcpedit/masonry/keymaps/via/keymap.json b/keyboards/dcpedit/masonry/keymaps/via/keymap.json
new file mode 100644
index 00000000000..76dfde65659
--- /dev/null
+++ b/keyboards/dcpedit/masonry/keymaps/via/keymap.json
@@ -0,0 +1,26 @@
+{
+ "keyboard": "dcpedit/masonry",
+ "keymap": "default",
+ "author": "dcpedit",
+ "version": 1,
+ "config": {
+ "features": {
+ "via": true
+ }
+ },
+ "layout": "LAYOUT",
+ "layers": [
+ [
+ "KC_ESC", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_QUOT",
+ "KC_TAB", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_ENT",
+ "KC_LSFT", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT",
+ "KC_LCTL", "KC_LGUI", "LT(1,KC_BSPC)", "KC_BSPC", "KC_SPC", "LT(1,KC_SPC)", "KC_RALT", "KC_RGUI"
+ ],
+ [
+ "KC_GRV" , "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_RGUI",
+ "KC_LCTL", "KC_LEFT", "KC_DOWN", "KC_UP", "KC_RGHT", "KC_HOME", "KC_END", "KC_MINS", "KC_EQL", "KC_LBRC", "KC_RBRC", "KC_RALT",
+ "_______", "_______", "_______", "_______", "_______", "_______", "KC_PGDN", "KC_PGUP", "_______", "_______", "KC_BSLS", "_______",
+ "_______", "_______", "_______", "_______", "_______", "_______", "_______", "_______"
+ ]
+ ]
+}
\ No newline at end of file
diff --git a/keyboards/dcpedit/masonry/readme.md b/keyboards/dcpedit/masonry/readme.md
new file mode 100644
index 00000000000..9ba7a1597e5
--- /dev/null
+++ b/keyboards/dcpedit/masonry/readme.md
@@ -0,0 +1,27 @@
+# Masonry
+
+
+
+Masonry is a 40% ergoish columnar keyboard projected on a rectangular keyboard shape.
+
+* Keyboard Maintainer: [dcpedit](https://github.com/dcpedit)
+* Hardware Supported: STM32F072
+* Hardware Availability: https://github.com/dcpedit/masonry
+
+Make example for this keyboard (after setting up your build environment):
+
+ make dcpedit/masonry:default
+
+Flashing example for this keyboard:
+
+ make dcpedit/masonry:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the ESC key (top-left key) and plug in the keyboard
+* **Physical reset button**: On the PCB, while holding down the BOOT button, press and release the RESET button
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/dcpedit/masonry/rules.mk b/keyboards/dcpedit/masonry/rules.mk
new file mode 100644
index 00000000000..cfa2d9632f9
--- /dev/null
+++ b/keyboards/dcpedit/masonry/rules.mk
@@ -0,0 +1 @@
+# Intentionally left blank
\ No newline at end of file
diff --git a/keyboards/do60/do60.h b/keyboards/do60/do60.h
index de64b8f134d..5aa9c17f2ea 100644
--- a/keyboards/do60/do60.h
+++ b/keyboards/do60/do60.h
@@ -2,6 +2,9 @@
#include "quantum.h"
+#define DO60_CAPS_LOCK_LED_PIN B2
+#define DO60_BACKLIGHT_PIN F4
+
/* DO60 LEDs
* GPIO pads
* 0 F7 not connected
@@ -13,11 +16,21 @@
*/
/*
-inline void do60_caps_led_on(void) { DDRB |= (1<<2); PORTB &= ~(1<<2); }
-inline void do60_bl_led_on(void) { DDRF |= (1<<4); PORTF &= ~(1<<4); }
+inline void do60_caps_led_on(void) {
+ gpio_set_pin_output(DO60_CAPS_LOCK_LED_PIN);
+ gpio_write_pin_low(DO60_CAPS_LOCK_LED_PIN);
+}
+inline void do60_bl_led_on(void) {
+ gpio_set_pin_output(DO60_BACKLIGHT_PIN);
+ gpio_write_pin_low(DO60_BACKLIGHT_PIN);
+}
-inline void do60_caps_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
-inline void do60_bl_led_off(void) { DDRF &= ~(1<<4); PORTF &= ~(1<<4); }
+inline void do60_caps_led_off(void) {
+ gpio_set_pin_input(DO60_CAPS_LOCK_LED_PIN);
+}
+inline void do60_bl_led_off(void) {
+ gpio_set_pin_input(DO60_BACKLIGHT_PIN);
+}
*/
inline void setdefaultrgb(void){ rgblight_sethsv(100,100,100); }
diff --git a/keyboards/druah/dk_saver_redux/info.json b/keyboards/druah/dk_saver_redux/info.json
new file mode 100644
index 00000000000..6c76e107565
--- /dev/null
+++ b/keyboards/druah/dk_saver_redux/info.json
@@ -0,0 +1,323 @@
+{
+ "manufacturer": "KBDMania",
+ "keyboard_name": "DK Saver",
+ "maintainer": "Druah",
+ "backlight": {
+ "breathing": true,
+ "levels": 10,
+ "pin": "B7"
+ },
+ "bootloader": "atmel-dfu",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "backlight": true,
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "indicators": {
+ "caps_lock": "C2",
+ "scroll_lock": "C1"
+ },
+ "matrix_pins": {
+ "cols": ["F5", "F6", "F7", "A1", "A2", "B5", "B4", "B3", "B2", "F2", "F1", "F0", "F4", "B1", "C5", "C6", "C0"],
+ "rows": ["C3", "F3", "B6", "A0", "C7", "C4"]
+ },
+ "processor": "at90usb646",
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "url": "https://druah.moe",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0002",
+ "vid": "0x444E"
+ },
+ "community_layouts": ["tkl_f13_ansi", "tkl_f13_ansi_tsangan"],
+ "layout_aliases": {
+ "LAYOUT_all": "LAYOUT_tkl_f13_ansi"
+ },
+ "layouts": {
+ "LAYOUT_tkl_f13_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1.25, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.75, "y": 0},
+ {"matrix": [0, 10], "x": 10.75, "y": 0},
+ {"matrix": [0, 11], "x": 11.75, "y": 0},
+ {"matrix": [0, 12], "x": 12.75, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 7], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 13], "x": 13.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1.25, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.75, "y": 0},
+ {"matrix": [0, 10], "x": 10.75, "y": 0},
+ {"matrix": [0, 11], "x": 11.75, "y": 0},
+ {"matrix": [0, 12], "x": 12.75, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 7], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25},
+ {"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_f13_ansi_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1.25, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.75, "y": 0},
+ {"matrix": [0, 10], "x": 10.75, "y": 0},
+ {"matrix": [0, 11], "x": 11.75, "y": 0},
+ {"matrix": [0, 12], "x": 12.75, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+ {"matrix": [1, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 13], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 7], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/druah/dk_saver_redux/keymaps/default/keymap.c b/keyboards/druah/dk_saver_redux/keymaps/default/keymap.c
new file mode 100644
index 00000000000..cf959d606a8
--- /dev/null
+++ b/keyboards/druah/dk_saver_redux/keymaps/default/keymap.c
@@ -0,0 +1,32 @@
+// Copyright 2024 Druah (@Druah)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
+ * │Esc││F1 │F2 │F3 │F4 ││F5 │F6 │F7 │F8 ││F9 │F10│F11│F12││F13││PSc│Scr│Pse│
+ * └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp││Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ ││Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤┌───┼───┼───┐
+ * │Ctrl│GUI │Alt │ │ Alt│ GUI│Menu│Ctrl││ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
+ */
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/keyboards/druah/dk_saver_redux/keymaps/via/keymap.c b/keyboards/druah/dk_saver_redux/keymaps/via/keymap.c
new file mode 100644
index 00000000000..cf959d606a8
--- /dev/null
+++ b/keyboards/druah/dk_saver_redux/keymaps/via/keymap.c
@@ -0,0 +1,32 @@
+// Copyright 2024 Druah (@Druah)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
+ * │Esc││F1 │F2 │F3 │F4 ││F5 │F6 │F7 │F8 ││F9 │F10│F11│F12││F13││PSc│Scr│Pse│
+ * └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐┌───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp││Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ ││Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤┌───┼───┼───┐
+ * │Ctrl│GUI │Alt │ │ Alt│ GUI│Menu│Ctrl││ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
+ */
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/keyboards/druah/dk_saver_redux/keymaps/via/rules.mk b/keyboards/druah/dk_saver_redux/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/druah/dk_saver_redux/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/druah/dk_saver_redux/readme.md b/keyboards/druah/dk_saver_redux/readme.md
new file mode 100644
index 00000000000..0929182b880
--- /dev/null
+++ b/keyboards/druah/dk_saver_redux/readme.md
@@ -0,0 +1,27 @@
+# DK Saver Redux
+
+
+
+A replacement TKL PCB for the DK Saver keyboard
+
+* Keyboard Maintainer: [Druah](https://github.com/Druah)
+* Hardware Supported: DK Saver Redux
+* Hardware Availability: Private buy
+
+Make example for this keyboard (after setting up your build environment):
+
+ make druah/dk_saver_redux:default
+
+Flashing example for this keyboard:
+
+ make druah/dk_saver_redux:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (the Escape/top left key) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB labelled with "RESET"
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/epomaker/tide65/rules.mk b/keyboards/druah/dk_saver_redux/rules.mk
similarity index 100%
rename from keyboards/epomaker/tide65/rules.mk
rename to keyboards/druah/dk_saver_redux/rules.mk
diff --git a/keyboards/dz60/keyboard.json b/keyboards/dz60/keyboard.json
index eb831143b79..a6beff0d63a 100644
--- a/keyboards/dz60/keyboard.json
+++ b/keyboards/dz60/keyboard.json
@@ -54,7 +54,7 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
- "community_layouts": ["60_ansi", "60_ansi_arrow_split_bs_7u_spc", "60_ansi_arrow", "60_ansi_split_bs_rshift", "60_hhkb", "60_iso", "60_abnt2", "60_tsangan_hhkb"],
+ "community_layouts": ["60_ansi", "60_ansi_arrow", "60_ansi_split_bs_rshift", "60_hhkb", "60_iso", "60_abnt2", "60_tsangan_hhkb"],
"layouts": {
"LAYOUT": {
"layout": [
diff --git a/keyboards/dztech/dz60v2/keyboard.json b/keyboards/dztech/dz60v2/keyboard.json
index bd1479b77c0..52889396089 100644
--- a/keyboards/dztech/dz60v2/keyboard.json
+++ b/keyboards/dztech/dz60v2/keyboard.json
@@ -51,7 +51,6 @@
"60_abnt2",
"60_ansi",
"60_ansi_arrow",
- "60_ansi_arrow_split_bs_7u_spc",
"60_ansi_split_bs_rshift",
"60_ansi_tsangan",
"60_hhkb",
diff --git a/keyboards/epomaker/tide65/info.json b/keyboards/epomaker/tide65/keyboard.json
similarity index 97%
rename from keyboards/epomaker/tide65/info.json
rename to keyboards/epomaker/tide65/keyboard.json
index 2715b923f47..60f1b46f708 100644
--- a/keyboards/epomaker/tide65/info.json
+++ b/keyboards/epomaker/tide65/keyboard.json
@@ -184,7 +184,7 @@
{"matrix": [1, 11], "x": 11.5, "y": 1},
{"matrix": [1, 12], "x": 12.5, "y": 1},
{"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5},
- {"matrix": [1, 14], "x": 15, "y": 1.25},
+ {"matrix": [1, 14], "x": 15, "y": 1},
{"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
{"matrix": [2, 1], "x": 1.75, "y": 2},
{"matrix": [2, 2], "x": 2.75, "y": 2},
@@ -197,8 +197,8 @@
{"matrix": [2, 9], "x": 9.75, "y": 2},
{"matrix": [2, 10], "x": 10.75, "y": 2},
{"matrix": [2, 11], "x": 11.75, "y": 2},
- {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 1.75},
- {"matrix": [2, 14], "x": 15, "y": 2.25},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [2, 14], "x": 15, "y": 2},
{"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
{"matrix": [3, 1], "x": 2.25, "y": 3},
{"matrix": [3, 2], "x": 3.25, "y": 3},
@@ -217,8 +217,8 @@
{"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
{"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
{"matrix": [4, 3], "x": 3.75, "y": 4, "w": 2.25},
- {"matrix": [4, 5], "x": 6, "y": 3.75, "w": 1.25},
- {"matrix": [4, 4], "x": 6, "y": 4, "w": 1.25},
+ {"matrix": [4, 5], "x": 6, "y": 4, "w": 1.25, "h": 0.5},
+ {"matrix": [4, 4], "x": 6, "y": 4.5, "w": 1.25, "h": 0.5},
{"matrix": [4, 6], "x": 7.25, "y": 4, "w": 2.75},
{"matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
{"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
diff --git a/keyboards/era/linx3/n86/keyboard.json b/keyboards/era/linx3/n86/keyboard.json
index 40e1f78baaa..c0b8b5525a1 100644
--- a/keyboards/era/linx3/n86/keyboard.json
+++ b/keyboards/era/linx3/n86/keyboard.json
@@ -171,100 +171,11 @@
"driver": "vendor",
"pin": "GP4"
},
+ "layout_aliases": {
+ "LAYOUT_all": "LAYOUT_tkl_ansi_tsangan_split_bs_rshift"
+ },
"community_layouts": ["tkl_ansi_tsangan", "tkl_ansi_tsangan_split_bs_rshift"],
"layouts": {
- "LAYOUT_all": {
- "layout": [
- {"matrix": [0, 0], "x": 0, "y": 0},
- {"matrix": [0, 2], "x": 2.25, "y": 0},
- {"matrix": [0, 3], "x": 3.25, "y": 0},
- {"matrix": [0, 4], "x": 4.25, "y": 0},
- {"matrix": [0, 5], "x": 5.5, "y": 0},
- {"matrix": [0, 6], "x": 6.5, "y": 0},
- {"matrix": [0, 7], "x": 7.5, "y": 0},
- {"matrix": [0, 8], "x": 8.5, "y": 0},
- {"matrix": [0, 9], "x": 9.75, "y": 0},
- {"matrix": [0, 10], "x": 10.75, "y": 0},
- {"matrix": [0, 11], "x": 11.75, "y": 0},
- {"matrix": [0, 12], "x": 12.75, "y": 0},
- {"matrix": [0, 13], "x": 14, "y": 0},
- {"matrix": [0, 14], "x": 15.25, "y": 0},
- {"matrix": [0, 15], "x": 16.25, "y": 0},
- {"matrix": [0, 16], "x": 17.25, "y": 0},
- {"matrix": [1, 0], "x": 0, "y": 1.25},
- {"matrix": [1, 1], "x": 1, "y": 1.25},
- {"matrix": [1, 2], "x": 2, "y": 1.25},
- {"matrix": [1, 3], "x": 3, "y": 1.25},
- {"matrix": [1, 4], "x": 4, "y": 1.25},
- {"matrix": [1, 5], "x": 5, "y": 1.25},
- {"matrix": [1, 6], "x": 6, "y": 1.25},
- {"matrix": [1, 7], "x": 7, "y": 1.25},
- {"matrix": [1, 8], "x": 8, "y": 1.25},
- {"matrix": [1, 9], "x": 9, "y": 1.25},
- {"matrix": [1, 10], "x": 10, "y": 1.25},
- {"matrix": [1, 11], "x": 11, "y": 1.25},
- {"matrix": [1, 12], "x": 12, "y": 1.25},
- {"matrix": [1, 13], "x": 13, "y": 1.25},
- {"matrix": [1, 14], "x": 14, "y": 1.25},
- {"matrix": [2, 14], "x": 15.25, "y": 1.25},
- {"matrix": [1, 15], "x": 16.25, "y": 1.25},
- {"matrix": [1, 16], "x": 17.25, "y": 1.25},
- {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
- {"matrix": [2, 1], "x": 1.5, "y": 2.25},
- {"matrix": [2, 2], "x": 2.5, "y": 2.25},
- {"matrix": [2, 3], "x": 3.5, "y": 2.25},
- {"matrix": [2, 4], "x": 4.5, "y": 2.25},
- {"matrix": [2, 5], "x": 5.5, "y": 2.25},
- {"matrix": [2, 6], "x": 6.5, "y": 2.25},
- {"matrix": [2, 7], "x": 7.5, "y": 2.25},
- {"matrix": [2, 8], "x": 8.5, "y": 2.25},
- {"matrix": [2, 9], "x": 9.5, "y": 2.25},
- {"matrix": [2, 10], "x": 10.5, "y": 2.25},
- {"matrix": [2, 11], "x": 11.5, "y": 2.25},
- {"matrix": [2, 12], "x": 12.5, "y": 2.25},
- {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
- {"matrix": [3, 14], "x": 15.25, "y": 2.25},
- {"matrix": [2, 15], "x": 16.25, "y": 2.25},
- {"matrix": [2, 16], "x": 17.25, "y": 2.25},
- {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
- {"matrix": [3, 1], "x": 1.75, "y": 3.25},
- {"matrix": [3, 2], "x": 2.75, "y": 3.25},
- {"matrix": [3, 3], "x": 3.75, "y": 3.25},
- {"matrix": [3, 4], "x": 4.75, "y": 3.25},
- {"matrix": [3, 5], "x": 5.75, "y": 3.25},
- {"matrix": [3, 6], "x": 6.75, "y": 3.25},
- {"matrix": [3, 7], "x": 7.75, "y": 3.25},
- {"matrix": [3, 8], "x": 8.75, "y": 3.25},
- {"matrix": [3, 9], "x": 9.75, "y": 3.25},
- {"matrix": [3, 10], "x": 11.75, "y": 3.25},
- {"matrix": [3, 11], "x": 12.75, "y": 3.25},
- {"matrix": [3, 13], "x": 13.75, "y": 3.25, "w": 1.25},
- {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 1.25},
- {"matrix": [4, 2], "x": 2.25, "y": 4.25},
- {"matrix": [4, 3], "x": 3.25, "y": 4.25},
- {"matrix": [4, 4], "x": 4.25, "y": 4.25},
- {"matrix": [4, 5], "x": 5.25, "y": 4.25},
- {"matrix": [4, 6], "x": 6.25, "y": 4.25},
- {"matrix": [4, 7], "x": 7.25, "y": 4.25},
- {"matrix": [4, 8], "x": 8.25, "y": 4.25},
- {"matrix": [4, 9], "x": 9.25, "y": 4.25},
- {"matrix": [4, 10], "x": 10.25, "y": 4.25},
- {"matrix": [4, 11], "x": 11.25, "y": 4.25},
- {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
- {"matrix": [4, 13], "x": 14, "y": 4.25},
- {"matrix": [4, 15], "x": 16.25, "y": 4.25},
- {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
- {"matrix": [5, 1], "x": 1.5, "y": 5.25, "w": 1},
- {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
- {"matrix": [5, 7], "x": 4, "y": 5.25, "w": 7},
- {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
- {"matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1},
- {"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
- {"matrix": [5, 14], "x": 15.25, "y": 5.25},
- {"matrix": [5, 15], "x": 16.25, "y": 5.25},
- {"matrix": [5, 16], "x": 17.25, "y": 5.25}
- ]
- },
"LAYOUT_tkl_ansi_tsangan": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
@@ -346,9 +257,9 @@
{"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
{"matrix": [5, 1], "x": 1.5, "y": 5.25},
{"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
- {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
- {"matrix": [5, 10], "x": 11, "y": 5.25, "w": 1.5},
- {"matrix": [5, 11], "x": 12.5, "y": 5.25},
+ {"matrix": [5, 7], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25},
{"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
{"matrix": [5, 14], "x": 15.25, "y": 5.25},
{"matrix": [5, 15], "x": 16.25, "y": 5.25},
@@ -438,9 +349,9 @@
{"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.5},
{"matrix": [5, 1], "x": 1.5, "y": 5.25},
{"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.5},
- {"matrix": [5, 6], "x": 4, "y": 5.25, "w": 7},
- {"matrix": [5, 10], "x": 11, "y": 5.25, "w": 1.5},
- {"matrix": [5, 11], "x": 12.5, "y": 5.25},
+ {"matrix": [5, 7], "x": 4, "y": 5.25, "w": 7},
+ {"matrix": [5, 11], "x": 11, "y": 5.25, "w": 1.5},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25},
{"matrix": [5, 13], "x": 13.5, "y": 5.25, "w": 1.5},
{"matrix": [5, 14], "x": 15.25, "y": 5.25},
{"matrix": [5, 15], "x": 16.25, "y": 5.25},
@@ -448,4 +359,4 @@
]
}
}
-}
\ No newline at end of file
+}
diff --git a/keyboards/era/linx3/n87/config.h b/keyboards/era/linx3/n87/config.h
new file mode 100644
index 00000000000..8b294dd91b1
--- /dev/null
+++ b/keyboards/era/linx3/n87/config.h
@@ -0,0 +1,8 @@
+// Copyright 2024 Hyojin Bak (@eerraa)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* Reset */
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 2000U
\ No newline at end of file
diff --git a/keyboards/era/linx3/n87/info.json b/keyboards/era/linx3/n87/info.json
new file mode 100644
index 00000000000..548a37faddb
--- /dev/null
+++ b/keyboards/era/linx3/n87/info.json
@@ -0,0 +1,455 @@
+{
+ "manufacturer": "eerraa",
+ "keyboard_name": "N87",
+ "maintainer": "eerraa",
+ "bootloader": "rp2040",
+ "build": {
+ "debounce_type": "sym_defer_pk"
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["GP29", "GP28", "GP27", "GP26", "GP25", "GP24", "GP23", "GP22", "GP20", "GP19", "GP18", "GP17", "GP16", "GP21", "GP11", "GP9", "GP5"],
+ "rows": ["GP3", "GP2", "GP1", "GP0", "GP10", "GP8"]
+ },
+ "processor": "RP2040",
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_sat": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "band_val": true,
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "cycle_up_down": true,
+ "digital_rain": true,
+ "dual_beacon": true,
+ "gradient_left_right": true,
+ "gradient_up_down": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "jellybean_raindrops": true,
+ "multisplash": true,
+ "pixel_flow": true,
+ "pixel_fractal": true,
+ "pixel_rain": true,
+ "rainbow_beacon": true,
+ "rainbow_moving_chevron": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "solid_multisplash": true,
+ "solid_reactive": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_multinexus": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_wide": true,
+ "solid_splash": true,
+ "splash": true,
+ "typing_heatmap": true
+ },
+ "driver": "ws2812",
+ "layout": [
+ {"matrix": [0, 16], "x": 224, "y": 0, "flags": 4},
+ {"matrix": [0, 15], "x": 211, "y": 0, "flags": 4},
+ {"matrix": [0, 14], "x": 198, "y": 0, "flags": 4},
+ {"matrix": [0, 13], "x": 182, "y": 0, "flags": 4},
+ {"matrix": [0, 12], "x": 169, "y": 0, "flags": 4},
+ {"matrix": [0, 11], "x": 156, "y": 0, "flags": 4},
+ {"matrix": [0, 10], "x": 143, "y": 0, "flags": 4},
+ {"matrix": [0, 9], "x": 123, "y": 0, "flags": 4},
+ {"matrix": [0, 8], "x": 110, "y": 0, "flags": 4},
+ {"matrix": [0, 7], "x": 97, "y": 0, "flags": 4},
+ {"matrix": [0, 6], "x": 84, "y": 0, "flags": 4},
+ {"matrix": [0, 5], "x": 65, "y": 0, "flags": 4},
+ {"matrix": [0, 4], "x": 52, "y": 0, "flags": 4},
+ {"matrix": [0, 3], "x": 39, "y": 0, "flags": 4},
+ {"matrix": [0, 2], "x": 26, "y": 0, "flags": 4},
+ {"matrix": [0, 0], "x": 0, "y": 0, "flags": 1},
+ {"matrix": [1, 0], "x": 0, "y": 15, "flags": 4},
+ {"matrix": [1, 1], "x": 13, "y": 15, "flags": 4},
+ {"matrix": [1, 2], "x": 26, "y": 15, "flags": 4},
+ {"matrix": [1, 3], "x": 39, "y": 15, "flags": 4},
+ {"matrix": [1, 4], "x": 52, "y": 15, "flags": 4},
+ {"matrix": [1, 5], "x": 65, "y": 15, "flags": 4},
+ {"matrix": [1, 6], "x": 78, "y": 15, "flags": 4},
+ {"matrix": [1, 7], "x": 91, "y": 15, "flags": 4},
+ {"matrix": [1, 8], "x": 104, "y": 15, "flags": 4},
+ {"matrix": [1, 9], "x": 117, "y": 15, "flags": 4},
+ {"matrix": [1, 10], "x": 130, "y": 15, "flags": 4},
+ {"matrix": [1, 11], "x": 143, "y": 15, "flags": 4},
+ {"matrix": [1, 12], "x": 156, "y": 15, "flags": 4},
+ {"matrix": [1, 13], "x": 175, "y": 15, "flags": 1},
+ {"matrix": [2, 14], "x": 198, "y": 15, "flags": 4},
+ {"matrix": [1, 15], "x": 211, "y": 15, "flags": 4},
+ {"matrix": [1, 16], "x": 224, "y": 15, "flags": 4},
+ {"matrix": [2, 16], "x": 224, "y": 27, "flags": 4},
+ {"matrix": [2, 15], "x": 211, "y": 27, "flags": 4},
+ {"matrix": [3, 14], "x": 198, "y": 27, "flags": 4},
+ {"matrix": [2, 13], "x": 179, "y": 27, "flags": 4},
+ {"matrix": [2, 12], "x": 162, "y": 27, "flags": 4},
+ {"matrix": [2, 11], "x": 149, "y": 27, "flags": 4},
+ {"matrix": [2, 10], "x": 136, "y": 27, "flags": 4},
+ {"matrix": [2, 9], "x": 123, "y": 27, "flags": 4},
+ {"matrix": [2, 8], "x": 110, "y": 27, "flags": 4},
+ {"matrix": [2, 7], "x": 97, "y": 27, "flags": 4},
+ {"matrix": [2, 6], "x": 84, "y": 27, "flags": 4},
+ {"matrix": [2, 5], "x": 71, "y": 27, "flags": 4},
+ {"matrix": [2, 4], "x": 58, "y": 27, "flags": 4},
+ {"matrix": [2, 3], "x": 45, "y": 27, "flags": 4},
+ {"matrix": [2, 2], "x": 32, "y": 27, "flags": 4},
+ {"matrix": [2, 1], "x": 19, "y": 27, "flags": 4},
+ {"matrix": [2, 0], "x": 3, "y": 27, "flags": 1},
+ {"matrix": [3, 0], "x": 2, "y": 40, "flags": 1},
+ {"matrix": [3, 1], "x": 23, "y": 40, "flags": 4},
+ {"matrix": [3, 2], "x": 36, "y": 40, "flags": 4},
+ {"matrix": [3, 3], "x": 49, "y": 40, "flags": 4},
+ {"matrix": [3, 4], "x": 62, "y": 40, "flags": 4},
+ {"matrix": [3, 5], "x": 75, "y": 40, "flags": 4},
+ {"matrix": [3, 6], "x": 88, "y": 40, "flags": 4},
+ {"matrix": [3, 7], "x": 101, "y": 40, "flags": 4},
+ {"matrix": [3, 8], "x": 114, "y": 40, "flags": 4},
+ {"matrix": [3, 9], "x": 127, "y": 40, "flags": 4},
+ {"matrix": [3, 10], "x": 140, "y": 40, "flags": 4},
+ {"matrix": [3, 11], "x": 153, "y": 40, "flags": 4},
+ {"matrix": [3, 13], "x": 174, "y": 40, "flags": 1},
+ {"matrix": [4, 15], "x": 211, "y": 52, "flags": 1},
+ {"matrix": [4, 13], "x": 182, "y": 52, "flags": 4},
+ {"matrix": [4, 12], "x": 170, "y": 52, "flags": 1},
+ {"matrix": [4, 11], "x": 146, "y": 52, "flags": 4},
+ {"matrix": [4, 10], "x": 133, "y": 52, "flags": 4},
+ {"matrix": [4, 9], "x": 120, "y": 52, "flags": 4},
+ {"matrix": [4, 8], "x": 107, "y": 52, "flags": 4},
+ {"matrix": [4, 7], "x": 94, "y": 52, "flags": 4},
+ {"matrix": [4, 6], "x": 81, "y": 52, "flags": 4},
+ {"matrix": [4, 5], "x": 68, "y": 52, "flags": 4},
+ {"matrix": [4, 4], "x": 55, "y": 52, "flags": 4},
+ {"matrix": [4, 3], "x": 42, "y": 52, "flags": 4},
+ {"matrix": [4, 2], "x": 29, "y": 52, "flags": 4},
+ {"matrix": [4, 0], "x": 8, "y": 52, "flags": 1},
+ {"matrix": [5, 0], "x": 2, "y": 64, "flags": 1},
+ {"matrix": [5, 1], "x": 18, "y": 64, "flags": 1},
+ {"matrix": [5, 2], "x": 34, "y": 64, "flags": 1},
+ {"x": 57, "y": 64, "flags": 4},
+ {"x": 70, "y": 64, "flags": 4},
+ {"matrix": [5, 6], "x": 83, "y": 64, "flags": 4},
+ {"x": 96, "y": 64, "flags": 4},
+ {"x": 109, "y": 64, "flags": 4},
+ {"matrix": [5, 10], "x": 131, "y": 64, "flags": 1},
+ {"matrix": [5, 11], "x": 148, "y": 64, "flags": 1},
+ {"matrix": [5, 12], "x": 164, "y": 64, "flags": 1},
+ {"matrix": [5, 13], "x": 180, "y": 64, "flags": 1},
+ {"matrix": [5, 14], "x": 198, "y": 64, "flags": 1},
+ {"matrix": [5, 15], "x": 211, "y": 64, "flags": 1},
+ {"matrix": [5, 16], "x": 224, "y": 64, "flags": 1}
+ ],
+ "sleep": true
+ },
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0009",
+ "vid": "0x4552"
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP4"
+ },
+ "community_layouts": ["tkl_ansi", "tkl_ansi_split_bs_rshift"],
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 2.25, "y": 0},
+ {"matrix": [0, 3], "x": 3.25, "y": 0},
+ {"matrix": [0, 4], "x": 4.25, "y": 0},
+ {"matrix": [0, 5], "x": 5.5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.75, "y": 0},
+ {"matrix": [0, 10], "x": 10.75, "y": 0},
+ {"matrix": [0, 11], "x": 11.75, "y": 0},
+ {"matrix": [0, 12], "x": 12.75, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25},
+ {"matrix": [1, 14], "x": 14, "y": 1.25},
+ {"matrix": [2, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"matrix": [3, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.25},
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [5, 10], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 12], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 13], "x": 13.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.5, "y": 0},
+ {"matrix": [0, 10], "x": 11, "y": 0},
+ {"matrix": [0, 11], "x": 12, "y": 0},
+ {"matrix": [0, 12], "x": 13, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25, "w": 2},
+ {"matrix": [2, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"matrix": [3, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 2.75},
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 10], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 13], "x": 13.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ },
+ "LAYOUT_tkl_ansi_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6.5, "y": 0},
+ {"matrix": [0, 7], "x": 7.5, "y": 0},
+ {"matrix": [0, 8], "x": 8.5, "y": 0},
+ {"matrix": [0, 9], "x": 9.5, "y": 0},
+ {"matrix": [0, 10], "x": 11, "y": 0},
+ {"matrix": [0, 11], "x": 12, "y": 0},
+ {"matrix": [0, 12], "x": 13, "y": 0},
+ {"matrix": [0, 13], "x": 14, "y": 0},
+ {"matrix": [0, 14], "x": 15.25, "y": 0},
+ {"matrix": [0, 15], "x": 16.25, "y": 0},
+ {"matrix": [0, 16], "x": 17.25, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.25},
+ {"matrix": [1, 1], "x": 1, "y": 1.25},
+ {"matrix": [1, 2], "x": 2, "y": 1.25},
+ {"matrix": [1, 3], "x": 3, "y": 1.25},
+ {"matrix": [1, 4], "x": 4, "y": 1.25},
+ {"matrix": [1, 5], "x": 5, "y": 1.25},
+ {"matrix": [1, 6], "x": 6, "y": 1.25},
+ {"matrix": [1, 7], "x": 7, "y": 1.25},
+ {"matrix": [1, 8], "x": 8, "y": 1.25},
+ {"matrix": [1, 9], "x": 9, "y": 1.25},
+ {"matrix": [1, 10], "x": 10, "y": 1.25},
+ {"matrix": [1, 11], "x": 11, "y": 1.25},
+ {"matrix": [1, 12], "x": 12, "y": 1.25},
+ {"matrix": [1, 13], "x": 13, "y": 1.25},
+ {"matrix": [1, 14], "x": 14, "y": 1.25},
+ {"matrix": [2, 14], "x": 15.25, "y": 1.25},
+ {"matrix": [1, 15], "x": 16.25, "y": 1.25},
+ {"matrix": [1, 16], "x": 17.25, "y": 1.25},
+ {"matrix": [2, 0], "x": 0, "y": 2.25, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.25},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.25},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.25},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.25},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.25},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.25},
+ {"matrix": [2, 7], "x": 7.5, "y": 2.25},
+ {"matrix": [2, 8], "x": 8.5, "y": 2.25},
+ {"matrix": [2, 9], "x": 9.5, "y": 2.25},
+ {"matrix": [2, 10], "x": 10.5, "y": 2.25},
+ {"matrix": [2, 11], "x": 11.5, "y": 2.25},
+ {"matrix": [2, 12], "x": 12.5, "y": 2.25},
+ {"matrix": [2, 13], "x": 13.5, "y": 2.25, "w": 1.5},
+ {"matrix": [3, 14], "x": 15.25, "y": 2.25},
+ {"matrix": [2, 15], "x": 16.25, "y": 2.25},
+ {"matrix": [2, 16], "x": 17.25, "y": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3.25, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.25},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.25},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.25},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.25},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.25},
+ {"matrix": [3, 7], "x": 7.75, "y": 3.25},
+ {"matrix": [3, 8], "x": 8.75, "y": 3.25},
+ {"matrix": [3, 9], "x": 9.75, "y": 3.25},
+ {"matrix": [3, 10], "x": 10.75, "y": 3.25},
+ {"matrix": [3, 11], "x": 11.75, "y": 3.25},
+ {"matrix": [3, 13], "x": 12.75, "y": 3.25, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.25, "w": 2.25},
+ {"matrix": [4, 2], "x": 2.25, "y": 4.25},
+ {"matrix": [4, 3], "x": 3.25, "y": 4.25},
+ {"matrix": [4, 4], "x": 4.25, "y": 4.25},
+ {"matrix": [4, 5], "x": 5.25, "y": 4.25},
+ {"matrix": [4, 6], "x": 6.25, "y": 4.25},
+ {"matrix": [4, 7], "x": 7.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 8.25, "y": 4.25},
+ {"matrix": [4, 9], "x": 9.25, "y": 4.25},
+ {"matrix": [4, 10], "x": 10.25, "y": 4.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4.25},
+ {"matrix": [4, 12], "x": 12.25, "y": 4.25, "w": 1.75},
+ {"matrix": [4, 13], "x": 14, "y": 4.25},
+ {"matrix": [4, 15], "x": 16.25, "y": 4.25},
+ {"matrix": [5, 0], "x": 0, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 1], "x": 1.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 6], "x": 3.75, "y": 5.25, "w": 6.25},
+ {"matrix": [5, 9], "x": 10, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 10], "x": 11.25, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 11], "x": 12.5, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 13], "x": 13.75, "y": 5.25, "w": 1.25},
+ {"matrix": [5, 14], "x": 15.25, "y": 5.25},
+ {"matrix": [5, 15], "x": 16.25, "y": 5.25},
+ {"matrix": [5, 16], "x": 17.25, "y": 5.25}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/era/linx3/n87/keymaps/default/keymap.c b/keyboards/era/linx3/n87/keymaps/default/keymap.c
new file mode 100644
index 00000000000..a16e6a21105
--- /dev/null
+++ b/keyboards/era/linx3/n87/keymaps/default/keymap.c
@@ -0,0 +1,24 @@
+// Copyright 2024 QMK (@qmk)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , KC_END , KC_PGDN,
+ KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT ,
+ KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, MO(1) , KC_UP ,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, KC_RGUI, MO(1) , KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/era/linx3/n87/keymaps/via/keymap.c b/keyboards/era/linx3/n87/keymaps/via/keymap.c
new file mode 100644
index 00000000000..a16e6a21105
--- /dev/null
+++ b/keyboards/era/linx3/n87/keymaps/via/keymap.c
@@ -0,0 +1,24 @@
+// Copyright 2024 QMK (@qmk)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC , KC_F1 , KC_F2 , KC_F3 , KC_F4 , KC_F5 , KC_F6 , KC_F7 , KC_F8 , KC_F9 , KC_F10 , KC_F11 , KC_F12 , KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV , KC_1 , KC_2 , KC_3 , KC_4 , KC_5 , KC_6 , KC_7 , KC_8 , KC_9 , KC_0 , KC_MINS, KC_EQL , KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB , KC_Q , KC_W , KC_E , KC_R , KC_T , KC_Y , KC_U , KC_I , KC_O , KC_P , KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL , KC_END , KC_PGDN,
+ KC_CAPS, KC_A , KC_S , KC_D , KC_F , KC_G , KC_H , KC_J , KC_K , KC_L , KC_SCLN, KC_QUOT, KC_ENT ,
+ KC_LSFT, KC_Z , KC_X , KC_C , KC_V , KC_B , KC_N , KC_M , KC_COMM, KC_DOT , KC_SLSH, KC_RSFT, MO(1) , KC_UP ,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC , KC_RALT, KC_RGUI, MO(1) , KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+ [1] = LAYOUT_all(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/era/linx3/n87/keymaps/via/rules.mk b/keyboards/era/linx3/n87/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/era/linx3/n87/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/era/linx3/n87/readme.md b/keyboards/era/linx3/n87/readme.md
new file mode 100644
index 00000000000..ff5b29d3bd1
--- /dev/null
+++ b/keyboards/era/linx3/n87/readme.md
@@ -0,0 +1,23 @@
+# N87
+
+* Keyboard Maintainer: [ERA](https://github.com/eerraa)
+* Hardware supported: Syryan & Linx3
+* Hardware availability: [Syryan](https://srind.mysoho.com/) & [Linx3](https://allthatkeyboard.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make era/linx3/n87:default
+
+Flashing example for this keyboard:
+
+ make era/linx3/n87:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at ESC(0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly short the `RESET` and `GND` pads on the SWD header twice, or short the `BOOT` header and plug in keyboard
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/era/linx3/n87/rules.mk b/keyboards/era/linx3/n87/rules.mk
new file mode 100644
index 00000000000..7ff128fa692
--- /dev/null
+++ b/keyboards/era/linx3/n87/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
\ No newline at end of file
diff --git a/keyboards/era/sirind/tomak/config.h b/keyboards/era/sirind/tomak/config.h
new file mode 100644
index 00000000000..7bb56107054
--- /dev/null
+++ b/keyboards/era/sirind/tomak/config.h
@@ -0,0 +1,16 @@
+// Copyright 2023 Hyojin Bak (@eerraa)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* Split configuration */
+#define SPLIT_HAND_PIN GP21
+#define USB_VBUS_PIN GP29
+#define SERIAL_USART_FULL_DUPLEX
+#define SERIAL_USART_TX_PIN GP0
+#define SERIAL_USART_RX_PIN GP1
+#define SERIAL_USART_PIN_SWAP
+
+/* Reset */
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET
+#define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 2000U
\ No newline at end of file
diff --git a/keyboards/era/sirind/tomak/info.json b/keyboards/era/sirind/tomak/info.json
new file mode 100644
index 00000000000..da7d12e94d1
--- /dev/null
+++ b/keyboards/era/sirind/tomak/info.json
@@ -0,0 +1,710 @@
+{
+ "manufacturer": "SIRIND",
+ "keyboard_name": "Tomak",
+ "maintainer": "eerraa",
+ "bootloader": "rp2040",
+ "build": {
+ "debounce_type": "sym_defer_pk"
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["GP16", "GP9", "GP8", "GP6", "GP5", "GP4", "GP3", "GP2", null, null, null],
+ "rows": ["GP27", "GP10", "GP11", "GP12", "GP13", "GP14"]
+ },
+ "processor": "RP2040",
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_sat": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "band_val": true,
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "cycle_up_down": true,
+ "digital_rain": true,
+ "dual_beacon": true,
+ "gradient_left_right": true,
+ "gradient_up_down": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "jellybean_raindrops": true,
+ "multisplash": true,
+ "pixel_flow": true,
+ "pixel_fractal": true,
+ "pixel_rain": true,
+ "rainbow_beacon": true,
+ "rainbow_moving_chevron": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "solid_multisplash": true,
+ "solid_reactive": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_multinexus": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_wide": true,
+ "solid_splash": true,
+ "splash": true,
+ "typing_heatmap": true
+ },
+ "driver": "ws2812",
+ "layout": [
+ {"matrix": [0, 0], "x": 2, "y": 0, "flags": 1},
+ {"matrix": [0, 2], "x": 19, "y": 0, "flags": 4},
+ {"matrix": [0, 3], "x": 31, "y": 0, "flags": 4},
+ {"matrix": [0, 4], "x": 43, "y": 0, "flags": 4},
+ {"matrix": [0, 5], "x": 55, "y": 0, "flags": 4},
+ {"matrix": [0, 6], "x": 73, "y": 0, "flags": 4},
+ {"matrix": [0, 7], "x": 85, "y": 0, "flags": 4},
+ {"matrix": [1, 7], "x": 87, "y": 13, "flags": 4},
+ {"matrix": [1, 6], "x": 74, "y": 13, "flags": 4},
+ {"matrix": [1, 5], "x": 62, "y": 13, "flags": 4},
+ {"matrix": [1, 4], "x": 50, "y": 13, "flags": 4},
+ {"matrix": [1, 3], "x": 38, "y": 13, "flags": 4},
+ {"matrix": [1, 2], "x": 26, "y": 13, "flags": 4},
+ {"matrix": [1, 1], "x": 14, "y": 13, "flags": 4},
+ {"matrix": [1, 0], "x": 2, "y": 13, "flags": 4},
+ {"matrix": [2, 0], "x": 5, "y": 26, "flags": 1},
+ {"matrix": [2, 1], "x": 20, "y": 26, "flags": 4},
+ {"matrix": [2, 2], "x": 32, "y": 26, "flags": 4},
+ {"matrix": [2, 3], "x": 44, "y": 26, "flags": 4},
+ {"matrix": [2, 4], "x": 56, "y": 26, "flags": 4},
+ {"matrix": [2, 5], "x": 68, "y": 26, "flags": 4},
+ {"matrix": [2, 6], "x": 71, "y": 26, "flags": 4},
+ {"matrix": [3, 6], "x": 84, "y": 38, "flags": 4},
+ {"matrix": [3, 5], "x": 71, "y": 38, "flags": 4},
+ {"matrix": [3, 4], "x": 59, "y": 38, "flags": 4},
+ {"matrix": [3, 3], "x": 47, "y": 38, "flags": 4},
+ {"matrix": [3, 2], "x": 35, "y": 38, "flags": 4},
+ {"matrix": [3, 1], "x": 23, "y": 38, "flags": 4},
+ {"matrix": [3, 0], "x": 0, "y": 38, "flags": 1},
+ {"matrix": [4, 0], "x": 9, "y": 51, "flags": 1},
+ {"matrix": [4, 1], "x": 29, "y": 51, "flags": 4},
+ {"matrix": [4, 2], "x": 41, "y": 51, "flags": 4},
+ {"matrix": [4, 3], "x": 53, "y": 51, "flags": 4},
+ {"matrix": [4, 4], "x": 65, "y": 51, "flags": 4},
+ {"matrix": [4, 5], "x": 77, "y": 51, "flags": 4},
+ {"matrix": [5, 5], "x": 84, "y": 64, "flags": 1},
+ {"matrix": [5, 4], "x": 61, "y": 64, "flags": 4},
+ {"matrix": [5, 2], "x": 35, "y": 64, "flags": 1},
+ {"matrix": [5, 1], "x": 20, "y": 64, "flags": 1},
+ {"matrix": [5, 0], "x": 5, "y": 64, "flags": 1},
+ {"matrix": [6, 10], "x": 224, "y": 0, "flags": 4},
+ {"matrix": [6, 9], "x": 212, "y": 0, "flags": 4},
+ {"matrix": [6, 8], "x": 200, "y": 0, "flags": 4},
+ {"matrix": [6, 7], "x": 184, "y": 0, "flags": 4},
+ {"matrix": [6, 5], "x": 167, "y": 0, "flags": 4},
+ {"matrix": [6, 4], "x": 155, "y": 0, "flags": 4},
+ {"matrix": [6, 3], "x": 143, "y": 0, "flags": 4},
+ {"matrix": [6, 2], "x": 131, "y": 0, "flags": 4},
+ {"matrix": [6, 1], "x": 113, "y": 0, "flags": 4},
+ {"matrix": [6, 0], "x": 101, "y": 0, "flags": 4},
+ {"matrix": [7, 0], "x": 99, "y": 13, "flags": 4},
+ {"matrix": [7, 1], "x": 112, "y": 13, "flags": 4},
+ {"matrix": [7, 2], "x": 124, "y": 13, "flags": 4},
+ {"matrix": [7, 3], "x": 136, "y": 13, "flags": 4},
+ {"matrix": [7, 4], "x": 148, "y": 13, "flags": 4},
+ {"matrix": [7, 5], "x": 160, "y": 13, "flags": 4},
+ {"matrix": [7, 7], "x": 178, "y": 13, "flags": 1},
+ {"matrix": [7, 8], "x": 200, "y": 13, "flags": 4},
+ {"matrix": [7, 9], "x": 212, "y": 13, "flags": 4},
+ {"matrix": [7, 10], "x": 224, "y": 13, "flags": 4},
+ {"matrix": [8, 10], "x": 224, "y": 26, "flags": 4},
+ {"matrix": [8, 9], "x": 212, "y": 26, "flags": 4},
+ {"matrix": [8, 8], "x": 200, "y": 26, "flags": 4},
+ {"matrix": [8, 7], "x": 181, "y": 26, "flags": 4},
+ {"matrix": [8, 6], "x": 166, "y": 26, "flags": 4},
+ {"matrix": [8, 5], "x": 154, "y": 26, "flags": 4},
+ {"matrix": [8, 4], "x": 142, "y": 26, "flags": 4},
+ {"matrix": [8, 3], "x": 130, "y": 26, "flags": 4},
+ {"matrix": [8, 2], "x": 118, "y": 26, "flags": 4},
+ {"matrix": [8, 1], "x": 105, "y": 26, "flags": 4},
+ {"matrix": [8, 0], "x": 93, "y": 26, "flags": 4},
+ {"matrix": [9, 0], "x": 96, "y": 38, "flags": 4},
+ {"matrix": [9, 1], "x": 109, "y": 38, "flags": 4},
+ {"matrix": [9, 2], "x": 121, "y": 38, "flags": 4},
+ {"matrix": [9, 3], "x": 133, "y": 38, "flags": 4},
+ {"matrix": [9, 4], "x": 145, "y": 38, "flags": 4},
+ {"matrix": [9, 5], "x": 157, "y": 38, "flags": 4},
+ {"matrix": [9, 7], "x": 177, "y": 38, "flags": 1},
+ {"matrix": [10, 9], "x": 212, "y": 51, "flags": 4},
+ {"matrix": [10, 7], "x": 184, "y": 45, "flags": 1},
+ {"matrix": [10, 6], "x": 174, "y": 51, "flags": 1},
+ {"matrix": [10, 5], "x": 151, "y": 51, "flags": 4},
+ {"matrix": [10, 4], "x": 139, "y": 51, "flags": 4},
+ {"matrix": [10, 3], "x": 127, "y": 51, "flags": 4},
+ {"matrix": [10, 2], "x": 115, "y": 51, "flags": 4},
+ {"matrix": [10, 1], "x": 102, "y": 51, "flags": 4},
+ {"matrix": [10, 0], "x": 90, "y": 51, "flags": 4},
+ {"matrix": [11, 1], "x": 96, "y": 64, "flags": 1},
+ {"matrix": [11, 2], "x": 110, "y": 64, "flags": 4},
+ {"matrix": [11, 4], "x": 137, "y": 64, "flags": 1},
+ {"matrix": [11, 5], "x": 153, "y": 64, "flags": 1},
+ {"matrix": [11, 6], "x": 168, "y": 64, "flags": 1},
+ {"matrix": [11, 7], "x": 183, "y": 64, "flags": 1},
+ {"matrix": [11, 8], "x": 200, "y": 64, "flags": 1},
+ {"matrix": [11, 9], "x": 212, "y": 64, "flags": 1},
+ {"matrix": [11, 10], "x": 224, "y": 64, "flags": 1},
+ {"x": 224, "y": 40, "flags": 8},
+ {"x": 224, "y": 45, "flags": 8},
+ {"x": 224, "y": 50, "flags": 8}
+ ],
+ "max_brightness": 120,
+ "sleep": true,
+ "split_count": [40, 59]
+ },
+ "split": {
+ "bootmagic": {
+ "matrix": [6, 0]
+ },
+ "enabled": true,
+ "matrix_pins": {
+ "right": {
+ "cols": ["GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP8", "GP9", "GP27", "GP17", "GP13"],
+ "rows": ["GP10", "GP11", "GP12", "GP28", "GP19", "GP16"]
+ }
+ },
+ "transport": {
+ "protocol": "serial_usart",
+ "sync": {
+ "indicators": true,
+ "layer_state": true,
+ "matrix_state": true
+ }
+ }
+ },
+ "url": "",
+ "usb": {
+ "device_version": "1.0.2",
+ "pid": "0x0006",
+ "vid": "0x4552"
+ },
+ "ws2812": {
+ "driver": "vendor",
+ "pin": "GP20"
+ },
+ "layout_aliases": {
+ "LAYOUT_all": "LAYOUT_split_tkl_ansi_split_rshift_bs_rspace",
+ "LAYOUT_ansi": "LAYOUT_split_tkl_ansi",
+ "LAYOUT_ansi_split_bs": "LAYOUT_split_tkl_ansi_split_bs",
+ "LAYOUT_ansi_split_rshift": "LAYOUT_split_tkl_ansi_split_rshift",
+ "LAYOUT_ansi_split_rshift_bs": "LAYOUT_split_tkl_ansi_split_rshift_bs"
+ },
+ "layouts": {
+ "LAYOUT_split_tkl_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [6, 0], "x": 9.5, "y": 0},
+ {"matrix": [6, 1], "x": 10.5, "y": 0},
+ {"matrix": [6, 2], "x": 12, "y": 0},
+ {"matrix": [6, 3], "x": 13, "y": 0},
+ {"matrix": [6, 4], "x": 14, "y": 0},
+ {"matrix": [6, 5], "x": 15, "y": 0},
+ {"matrix": [6, 7], "x": 16.5, "y": 0},
+ {"matrix": [6, 8], "x": 17.75, "y": 0},
+ {"matrix": [6, 9], "x": 18.75, "y": 0},
+ {"matrix": [6, 10], "x": 19.75, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [7, 0], "x": 9.5, "y": 1.5},
+ {"matrix": [7, 1], "x": 10.5, "y": 1.5},
+ {"matrix": [7, 2], "x": 11.5, "y": 1.5},
+ {"matrix": [7, 3], "x": 12.5, "y": 1.5},
+ {"matrix": [7, 4], "x": 13.5, "y": 1.5},
+ {"matrix": [7, 5], "x": 14.5, "y": 1.5},
+ {"matrix": [7, 7], "x": 15.5, "y": 1.5, "w": 2},
+ {"matrix": [7, 8], "x": 17.75, "y": 1.5},
+ {"matrix": [7, 9], "x": 18.75, "y": 1.5},
+ {"matrix": [7, 10], "x": 19.75, "y": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [8, 0], "x": 9, "y": 2.5},
+ {"matrix": [8, 1], "x": 10, "y": 2.5},
+ {"matrix": [8, 2], "x": 11, "y": 2.5},
+ {"matrix": [8, 3], "x": 12, "y": 2.5},
+ {"matrix": [8, 4], "x": 13, "y": 2.5},
+ {"matrix": [8, 5], "x": 14, "y": 2.5},
+ {"matrix": [8, 6], "x": 15, "y": 2.5},
+ {"matrix": [8, 7], "x": 16.25, "y": 2.5, "w": 1.25},
+ {"matrix": [8, 8], "x": 17.75, "y": 2.5},
+ {"matrix": [8, 9], "x": 18.75, "y": 2.5},
+ {"matrix": [8, 10], "x": 19.75, "y": 2.5},
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [9, 0], "x": 9.25, "y": 3.5},
+ {"matrix": [9, 1], "x": 10.25, "y": 3.5},
+ {"matrix": [9, 2], "x": 11.25, "y": 3.5},
+ {"matrix": [9, 3], "x": 12.25, "y": 3.5},
+ {"matrix": [9, 4], "x": 13.25, "y": 3.5},
+ {"matrix": [9, 5], "x": 14.25, "y": 3.5},
+ {"matrix": [9, 7], "x": 15.25, "y": 3.5, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 1], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 2], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 6.25, "y": 4.5},
+ {"matrix": [10, 0], "x": 8.75, "y": 4.5},
+ {"matrix": [10, 1], "x": 9.75, "y": 4.5},
+ {"matrix": [10, 2], "x": 10.75, "y": 4.5},
+ {"matrix": [10, 3], "x": 11.75, "y": 4.5},
+ {"matrix": [10, 4], "x": 12.75, "y": 4.5},
+ {"matrix": [10, 5], "x": 13.75, "y": 4.5},
+ {"matrix": [10, 6], "x": 14.75, "y": 4.5, "w": 2.75},
+ {"matrix": [10, 9], "x": 18.75, "y": 4.5},
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.5},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 4], "x": 4, "y": 5.5, "w": 2.75},
+ {"matrix": [5, 5], "x": 6.75, "y": 5.5},
+ {"matrix": [11, 2], "x": 9.25, "y": 5.5, "w": 3.25},
+ {"matrix": [11, 4], "x": 12.5, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 5], "x": 13.75, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 6], "x": 15, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 7], "x": 16.25, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 8], "x": 17.75, "y": 5.5},
+ {"matrix": [11, 9], "x": 18.75, "y": 5.5},
+ {"matrix": [11, 10], "x": 19.75, "y": 5.5}
+ ]
+ },
+ "LAYOUT_split_tkl_ansi_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [6, 0], "x": 9.5, "y": 0},
+ {"matrix": [6, 1], "x": 10.5, "y": 0},
+ {"matrix": [6, 2], "x": 12, "y": 0},
+ {"matrix": [6, 3], "x": 13, "y": 0},
+ {"matrix": [6, 4], "x": 14, "y": 0},
+ {"matrix": [6, 5], "x": 15, "y": 0},
+ {"matrix": [6, 7], "x": 16.5, "y": 0},
+ {"matrix": [6, 8], "x": 17.75, "y": 0},
+ {"matrix": [6, 9], "x": 18.75, "y": 0},
+ {"matrix": [6, 10], "x": 19.75, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [7, 0], "x": 9.5, "y": 1.5},
+ {"matrix": [7, 1], "x": 10.5, "y": 1.5},
+ {"matrix": [7, 2], "x": 11.5, "y": 1.5},
+ {"matrix": [7, 3], "x": 12.5, "y": 1.5},
+ {"matrix": [7, 4], "x": 13.5, "y": 1.5},
+ {"matrix": [7, 5], "x": 14.5, "y": 1.5},
+ {"matrix": [7, 6], "x": 15.5, "y": 1.5},
+ {"matrix": [7, 7], "x": 16.5, "y": 1.5},
+ {"matrix": [7, 8], "x": 17.75, "y": 1.5},
+ {"matrix": [7, 9], "x": 18.75, "y": 1.5},
+ {"matrix": [7, 10], "x": 19.75, "y": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [8, 0], "x": 9, "y": 2.5},
+ {"matrix": [8, 1], "x": 10, "y": 2.5},
+ {"matrix": [8, 2], "x": 11, "y": 2.5},
+ {"matrix": [8, 3], "x": 12, "y": 2.5},
+ {"matrix": [8, 4], "x": 13, "y": 2.5},
+ {"matrix": [8, 5], "x": 14, "y": 2.5},
+ {"matrix": [8, 6], "x": 15, "y": 2.5},
+ {"matrix": [8, 7], "x": 16.25, "y": 2.5, "w": 1.25},
+ {"matrix": [8, 8], "x": 17.75, "y": 2.5},
+ {"matrix": [8, 9], "x": 18.75, "y": 2.5},
+ {"matrix": [8, 10], "x": 19.75, "y": 2.5},
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [9, 0], "x": 9.25, "y": 3.5},
+ {"matrix": [9, 1], "x": 10.25, "y": 3.5},
+ {"matrix": [9, 2], "x": 11.25, "y": 3.5},
+ {"matrix": [9, 3], "x": 12.25, "y": 3.5},
+ {"matrix": [9, 4], "x": 13.25, "y": 3.5},
+ {"matrix": [9, 5], "x": 14.25, "y": 3.5},
+ {"matrix": [9, 7], "x": 15.25, "y": 3.5, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 1], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 2], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 6.25, "y": 4.5},
+ {"matrix": [10, 0], "x": 8.75, "y": 4.5},
+ {"matrix": [10, 1], "x": 9.75, "y": 4.5},
+ {"matrix": [10, 2], "x": 10.75, "y": 4.5},
+ {"matrix": [10, 3], "x": 11.75, "y": 4.5},
+ {"matrix": [10, 4], "x": 12.75, "y": 4.5},
+ {"matrix": [10, 5], "x": 13.75, "y": 4.5},
+ {"matrix": [10, 6], "x": 14.75, "y": 4.5, "w": 2.75},
+ {"matrix": [10, 9], "x": 18.75, "y": 4.5},
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.5},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 4], "x": 4, "y": 5.5, "w": 2.75},
+ {"matrix": [5, 5], "x": 6.75, "y": 5.5},
+ {"matrix": [11, 2], "x": 9.25, "y": 5.5, "w": 3.25},
+ {"matrix": [11, 4], "x": 12.5, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 5], "x": 13.75, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 6], "x": 15, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 7], "x": 16.25, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 8], "x": 17.75, "y": 5.5},
+ {"matrix": [11, 9], "x": 18.75, "y": 5.5},
+ {"matrix": [11, 10], "x": 19.75, "y": 5.5}
+ ]
+ },
+ "LAYOUT_split_tkl_ansi_split_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [6, 0], "x": 9.5, "y": 0},
+ {"matrix": [6, 1], "x": 10.5, "y": 0},
+ {"matrix": [6, 2], "x": 12, "y": 0},
+ {"matrix": [6, 3], "x": 13, "y": 0},
+ {"matrix": [6, 4], "x": 14, "y": 0},
+ {"matrix": [6, 5], "x": 15, "y": 0},
+ {"matrix": [6, 7], "x": 16.5, "y": 0},
+ {"matrix": [6, 8], "x": 17.75, "y": 0},
+ {"matrix": [6, 9], "x": 18.75, "y": 0},
+ {"matrix": [6, 10], "x": 19.75, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [7, 0], "x": 9.5, "y": 1.5},
+ {"matrix": [7, 1], "x": 10.5, "y": 1.5},
+ {"matrix": [7, 2], "x": 11.5, "y": 1.5},
+ {"matrix": [7, 3], "x": 12.5, "y": 1.5},
+ {"matrix": [7, 4], "x": 13.5, "y": 1.5},
+ {"matrix": [7, 5], "x": 14.5, "y": 1.5},
+ {"matrix": [7, 6], "x": 15.5, "y": 1.5, "w": 2},
+ {"matrix": [7, 8], "x": 17.75, "y": 1.5},
+ {"matrix": [7, 9], "x": 18.75, "y": 1.5},
+ {"matrix": [7, 10], "x": 19.75, "y": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [8, 0], "x": 9, "y": 2.5},
+ {"matrix": [8, 1], "x": 10, "y": 2.5},
+ {"matrix": [8, 2], "x": 11, "y": 2.5},
+ {"matrix": [8, 3], "x": 12, "y": 2.5},
+ {"matrix": [8, 4], "x": 13, "y": 2.5},
+ {"matrix": [8, 5], "x": 14, "y": 2.5},
+ {"matrix": [8, 6], "x": 15, "y": 2.5},
+ {"matrix": [8, 7], "x": 16.25, "y": 2.5, "w": 1.25},
+ {"matrix": [8, 8], "x": 17.75, "y": 2.5},
+ {"matrix": [8, 9], "x": 18.75, "y": 2.5},
+ {"matrix": [8, 10], "x": 19.75, "y": 2.5},
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [9, 0], "x": 9.25, "y": 3.5},
+ {"matrix": [9, 1], "x": 10.25, "y": 3.5},
+ {"matrix": [9, 2], "x": 11.25, "y": 3.5},
+ {"matrix": [9, 3], "x": 12.25, "y": 3.5},
+ {"matrix": [9, 4], "x": 13.25, "y": 3.5},
+ {"matrix": [9, 5], "x": 14.25, "y": 3.5},
+ {"matrix": [9, 7], "x": 15.25, "y": 3.5, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 1], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 2], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 6.25, "y": 4.5},
+ {"matrix": [10, 0], "x": 8.75, "y": 4.5},
+ {"matrix": [10, 1], "x": 9.75, "y": 4.5},
+ {"matrix": [10, 2], "x": 10.75, "y": 4.5},
+ {"matrix": [10, 3], "x": 11.75, "y": 4.5},
+ {"matrix": [10, 4], "x": 12.75, "y": 4.5},
+ {"matrix": [10, 5], "x": 13.75, "y": 4.5},
+ {"matrix": [10, 6], "x": 14.75, "y": 4.5, "w": 1.75},
+ {"matrix": [10, 7], "x": 16.5, "y": 4.5},
+ {"matrix": [10, 9], "x": 18.75, "y": 4.5},
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.5},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 4], "x": 4, "y": 5.5, "w": 2.75},
+ {"matrix": [5, 5], "x": 6.75, "y": 5.5},
+ {"matrix": [11, 2], "x": 9.25, "y": 5.5, "w": 3.25},
+ {"matrix": [11, 4], "x": 12.5, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 5], "x": 13.75, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 6], "x": 15, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 7], "x": 16.25, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 8], "x": 17.75, "y": 5.5},
+ {"matrix": [11, 9], "x": 18.75, "y": 5.5},
+ {"matrix": [11, 10], "x": 19.75, "y": 5.5}
+ ]
+ },
+ "LAYOUT_split_tkl_ansi_split_rshift_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [6, 0], "x": 9.5, "y": 0},
+ {"matrix": [6, 1], "x": 10.5, "y": 0},
+ {"matrix": [6, 2], "x": 12, "y": 0},
+ {"matrix": [6, 3], "x": 13, "y": 0},
+ {"matrix": [6, 4], "x": 14, "y": 0},
+ {"matrix": [6, 5], "x": 15, "y": 0},
+ {"matrix": [6, 7], "x": 16.5, "y": 0},
+ {"matrix": [6, 8], "x": 17.75, "y": 0},
+ {"matrix": [6, 9], "x": 18.75, "y": 0},
+ {"matrix": [6, 10], "x": 19.75, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [7, 0], "x": 9.5, "y": 1.5},
+ {"matrix": [7, 1], "x": 10.5, "y": 1.5},
+ {"matrix": [7, 2], "x": 11.5, "y": 1.5},
+ {"matrix": [7, 3], "x": 12.5, "y": 1.5},
+ {"matrix": [7, 4], "x": 13.5, "y": 1.5},
+ {"matrix": [7, 5], "x": 14.5, "y": 1.5},
+ {"matrix": [7, 6], "x": 15.5, "y": 1.5},
+ {"matrix": [7, 7], "x": 16.5, "y": 1.5},
+ {"matrix": [7, 8], "x": 17.75, "y": 1.5},
+ {"matrix": [7, 9], "x": 18.75, "y": 1.5},
+ {"matrix": [7, 10], "x": 19.75, "y": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [8, 0], "x": 9, "y": 2.5},
+ {"matrix": [8, 1], "x": 10, "y": 2.5},
+ {"matrix": [8, 2], "x": 11, "y": 2.5},
+ {"matrix": [8, 3], "x": 12, "y": 2.5},
+ {"matrix": [8, 4], "x": 13, "y": 2.5},
+ {"matrix": [8, 5], "x": 14, "y": 2.5},
+ {"matrix": [8, 6], "x": 15, "y": 2.5},
+ {"matrix": [8, 7], "x": 16.25, "y": 2.5, "w": 1.25},
+ {"matrix": [8, 8], "x": 17.75, "y": 2.5},
+ {"matrix": [8, 9], "x": 18.75, "y": 2.5},
+ {"matrix": [8, 10], "x": 19.75, "y": 2.5},
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [9, 0], "x": 9.25, "y": 3.5},
+ {"matrix": [9, 1], "x": 10.25, "y": 3.5},
+ {"matrix": [9, 2], "x": 11.25, "y": 3.5},
+ {"matrix": [9, 3], "x": 12.25, "y": 3.5},
+ {"matrix": [9, 4], "x": 13.25, "y": 3.5},
+ {"matrix": [9, 5], "x": 14.25, "y": 3.5},
+ {"matrix": [9, 7], "x": 15.25, "y": 3.5, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 1], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 2], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 6.25, "y": 4.5},
+ {"matrix": [10, 0], "x": 8.75, "y": 4.5},
+ {"matrix": [10, 1], "x": 9.75, "y": 4.5},
+ {"matrix": [10, 2], "x": 10.75, "y": 4.5},
+ {"matrix": [10, 3], "x": 11.75, "y": 4.5},
+ {"matrix": [10, 4], "x": 12.75, "y": 4.5},
+ {"matrix": [10, 5], "x": 13.75, "y": 4.5},
+ {"matrix": [10, 6], "x": 14.75, "y": 4.5, "w": 1.75},
+ {"matrix": [10, 7], "x": 16.5, "y": 4.5},
+ {"matrix": [10, 9], "x": 18.75, "y": 4.5},
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.5},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 4], "x": 4, "y": 5.5, "w": 2.75},
+ {"matrix": [5, 5], "x": 6.75, "y": 5.5},
+ {"matrix": [11, 2], "x": 9.25, "y": 5.5, "w": 3.25},
+ {"matrix": [11, 4], "x": 12.5, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 5], "x": 13.75, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 6], "x": 15, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 7], "x": 16.25, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 8], "x": 17.75, "y": 5.5},
+ {"matrix": [11, 9], "x": 18.75, "y": 5.5},
+ {"matrix": [11, 10], "x": 19.75, "y": 5.5}
+ ]
+ },
+ "LAYOUT_split_tkl_ansi_split_rshift_bs_rspace": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 2], "x": 1.5, "y": 0},
+ {"matrix": [0, 3], "x": 2.5, "y": 0},
+ {"matrix": [0, 4], "x": 3.5, "y": 0},
+ {"matrix": [0, 5], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [6, 0], "x": 9.5, "y": 0},
+ {"matrix": [6, 1], "x": 10.5, "y": 0},
+ {"matrix": [6, 2], "x": 12, "y": 0},
+ {"matrix": [6, 3], "x": 13, "y": 0},
+ {"matrix": [6, 4], "x": 14, "y": 0},
+ {"matrix": [6, 5], "x": 15, "y": 0},
+ {"matrix": [6, 7], "x": 16.5, "y": 0},
+ {"matrix": [6, 8], "x": 17.75, "y": 0},
+ {"matrix": [6, 9], "x": 18.75, "y": 0},
+ {"matrix": [6, 10], "x": 19.75, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1.5},
+ {"matrix": [1, 1], "x": 1, "y": 1.5},
+ {"matrix": [1, 2], "x": 2, "y": 1.5},
+ {"matrix": [1, 3], "x": 3, "y": 1.5},
+ {"matrix": [1, 4], "x": 4, "y": 1.5},
+ {"matrix": [1, 5], "x": 5, "y": 1.5},
+ {"matrix": [1, 6], "x": 6, "y": 1.5},
+ {"matrix": [1, 7], "x": 7, "y": 1.5},
+ {"matrix": [7, 0], "x": 9.5, "y": 1.5},
+ {"matrix": [7, 1], "x": 10.5, "y": 1.5},
+ {"matrix": [7, 2], "x": 11.5, "y": 1.5},
+ {"matrix": [7, 3], "x": 12.5, "y": 1.5},
+ {"matrix": [7, 4], "x": 13.5, "y": 1.5},
+ {"matrix": [7, 5], "x": 14.5, "y": 1.5},
+ {"matrix": [7, 6], "x": 15.5, "y": 1.5},
+ {"matrix": [7, 7], "x": 16.5, "y": 1.5},
+ {"matrix": [7, 8], "x": 17.75, "y": 1.5},
+ {"matrix": [7, 9], "x": 18.75, "y": 1.5},
+ {"matrix": [7, 10], "x": 19.75, "y": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2.5, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2.5},
+ {"matrix": [2, 2], "x": 2.5, "y": 2.5},
+ {"matrix": [2, 3], "x": 3.5, "y": 2.5},
+ {"matrix": [2, 4], "x": 4.5, "y": 2.5},
+ {"matrix": [2, 5], "x": 5.5, "y": 2.5},
+ {"matrix": [2, 6], "x": 6.5, "y": 2.5},
+ {"matrix": [8, 0], "x": 9, "y": 2.5},
+ {"matrix": [8, 1], "x": 10, "y": 2.5},
+ {"matrix": [8, 2], "x": 11, "y": 2.5},
+ {"matrix": [8, 3], "x": 12, "y": 2.5},
+ {"matrix": [8, 4], "x": 13, "y": 2.5},
+ {"matrix": [8, 5], "x": 14, "y": 2.5},
+ {"matrix": [8, 6], "x": 15, "y": 2.5},
+ {"matrix": [8, 7], "x": 16.25, "y": 2.5, "w": 1.25},
+ {"matrix": [8, 8], "x": 17.75, "y": 2.5},
+ {"matrix": [8, 9], "x": 18.75, "y": 2.5},
+ {"matrix": [8, 10], "x": 19.75, "y": 2.5},
+ {"matrix": [3, 0], "x": 0, "y": 3.5, "w": 1.75},
+ {"matrix": [3, 1], "x": 1.75, "y": 3.5},
+ {"matrix": [3, 2], "x": 2.75, "y": 3.5},
+ {"matrix": [3, 3], "x": 3.75, "y": 3.5},
+ {"matrix": [3, 4], "x": 4.75, "y": 3.5},
+ {"matrix": [3, 5], "x": 5.75, "y": 3.5},
+ {"matrix": [3, 6], "x": 6.75, "y": 3.5},
+ {"matrix": [9, 0], "x": 9.25, "y": 3.5},
+ {"matrix": [9, 1], "x": 10.25, "y": 3.5},
+ {"matrix": [9, 2], "x": 11.25, "y": 3.5},
+ {"matrix": [9, 3], "x": 12.25, "y": 3.5},
+ {"matrix": [9, 4], "x": 13.25, "y": 3.5},
+ {"matrix": [9, 5], "x": 14.25, "y": 3.5},
+ {"matrix": [9, 7], "x": 15.25, "y": 3.5, "w": 2.25},
+ {"matrix": [4, 0], "x": 0, "y": 4.5, "w": 2.25},
+ {"matrix": [4, 1], "x": 2.25, "y": 4.5},
+ {"matrix": [4, 2], "x": 3.25, "y": 4.5},
+ {"matrix": [4, 3], "x": 4.25, "y": 4.5},
+ {"matrix": [4, 4], "x": 5.25, "y": 4.5},
+ {"matrix": [4, 5], "x": 6.25, "y": 4.5},
+ {"matrix": [10, 0], "x": 8.75, "y": 4.5},
+ {"matrix": [10, 1], "x": 9.75, "y": 4.5},
+ {"matrix": [10, 2], "x": 10.75, "y": 4.5},
+ {"matrix": [10, 3], "x": 11.75, "y": 4.5},
+ {"matrix": [10, 4], "x": 12.75, "y": 4.5},
+ {"matrix": [10, 5], "x": 13.75, "y": 4.5},
+ {"matrix": [10, 6], "x": 14.75, "y": 4.5, "w": 1.75},
+ {"matrix": [10, 7], "x": 16.5, "y": 4.5},
+ {"matrix": [10, 9], "x": 18.75, "y": 4.5},
+ {"matrix": [5, 0], "x": 0, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 1], "x": 1.5, "y": 5.5},
+ {"matrix": [5, 2], "x": 2.5, "y": 5.5, "w": 1.5},
+ {"matrix": [5, 4], "x": 4, "y": 5.5, "w": 2.75},
+ {"matrix": [5, 5], "x": 6.75, "y": 5.5},
+ {"matrix": [11, 1], "x": 9.25, "y": 5.5},
+ {"matrix": [11, 2], "x": 10.25, "y": 5.5, "w": 2.25},
+ {"matrix": [11, 4], "x": 12.5, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 5], "x": 13.75, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 6], "x": 15, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 7], "x": 16.25, "y": 5.5, "w": 1.25},
+ {"matrix": [11, 8], "x": 17.75, "y": 5.5},
+ {"matrix": [11, 9], "x": 18.75, "y": 5.5},
+ {"matrix": [11, 10], "x": 19.75, "y": 5.5}
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/keyboards/era/sirind/tomak/keymaps/default/keymap.c b/keyboards/era/sirind/tomak/keymaps/default/keymap.c
new file mode 100644
index 00000000000..62941ff8b7a
--- /dev/null
+++ b/keyboards/era/sirind/tomak/keymaps/default/keymap.c
@@ -0,0 +1,25 @@
+// Copyright 2023 Hyojin Bak (@eerraa)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_all(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_MOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/era/sirind/tomak/keymaps/default_ansi/keymap.c b/keyboards/era/sirind/tomak/keymaps/default_ansi/keymap.c
new file mode 100644
index 00000000000..3823cc69c36
--- /dev/null
+++ b/keyboards/era/sirind/tomak/keymaps/default_ansi/keymap.c
@@ -0,0 +1,25 @@
+// Copyright 2023 Hyojin Bak (@eerraa)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_ansi(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_ansi(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_MOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/era/sirind/tomak/keymaps/default_ansi_split_bs/keymap.c b/keyboards/era/sirind/tomak/keymaps/default_ansi_split_bs/keymap.c
new file mode 100644
index 00000000000..87f3072a9e1
--- /dev/null
+++ b/keyboards/era/sirind/tomak/keymaps/default_ansi_split_bs/keymap.c
@@ -0,0 +1,25 @@
+// Copyright 2023 Hyojin Bak (@eerraa)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_ansi_split_bs(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_ansi_split_bs(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_MOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/era/sirind/tomak/keymaps/default_ansi_split_rshift/keymap.c b/keyboards/era/sirind/tomak/keymaps/default_ansi_split_rshift/keymap.c
new file mode 100644
index 00000000000..6b8fb56e339
--- /dev/null
+++ b/keyboards/era/sirind/tomak/keymaps/default_ansi_split_rshift/keymap.c
@@ -0,0 +1,25 @@
+// Copyright 2023 Hyojin Bak (@eerraa)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_ansi_split_rshift(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_ansi_split_rshift(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_MOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/era/sirind/tomak/keymaps/default_ansi_split_rshift_bs/keymap.c b/keyboards/era/sirind/tomak/keymaps/default_ansi_split_rshift_bs/keymap.c
new file mode 100644
index 00000000000..380689dd46b
--- /dev/null
+++ b/keyboards/era/sirind/tomak/keymaps/default_ansi_split_rshift_bs/keymap.c
@@ -0,0 +1,25 @@
+// Copyright 2023 Hyojin Bak (@eerraa)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_ansi_split_rshift_bs(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_ansi_split_rshift_bs(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_MOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/era/sirind/tomak/keymaps/via/keymap.c b/keyboards/era/sirind/tomak/keymaps/via/keymap.c
new file mode 100644
index 00000000000..62941ff8b7a
--- /dev/null
+++ b/keyboards/era/sirind/tomak/keymaps/via/keymap.c
@@ -0,0 +1,25 @@
+// Copyright 2023 Hyojin Bak (@eerraa)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_all(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1), KC_UP,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), MO(1), KC_SPC, KC_RALT, KC_RGUI, KC_MENU, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ ),
+
+ [1] = LAYOUT_all(
+ QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_VAI, RGB_HUI, RGB_SAI, RGB_SPI, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_MOD, RGB_VAD, RGB_HUD, RGB_SAD, RGB_SPD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/era/sirind/tomak/keymaps/via/rules.mk b/keyboards/era/sirind/tomak/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/era/sirind/tomak/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/era/sirind/tomak/readme.md b/keyboards/era/sirind/tomak/readme.md
new file mode 100644
index 00000000000..0834dfd6a87
--- /dev/null
+++ b/keyboards/era/sirind/tomak/readme.md
@@ -0,0 +1,27 @@
+# Tomak
+
+
+
+Ergonomics Split Keyboard powered by RP2040.
+
+* Keyboard Maintainer: [ERA](https://github.com/eerraa)
+* Hardware supported: SIRIND Tomak
+* Hardware availability: [Syryan](https://srind.mysoho.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make era/sirind/tomak:default
+
+Flashing example for this keyboard:
+
+ make era/sirind/tomak:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the 'top-left(ESC, F7)' key and plug in the keyboard.
+* **Physical reset**: Short the 'RESET' and 'GND' holes twice within one second, or plug in the keyboard with the 'BOOT' and 'GND' holes shorted.
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available.
\ No newline at end of file
diff --git a/keyboards/era/sirind/tomak/rules.mk b/keyboards/era/sirind/tomak/rules.mk
new file mode 100644
index 00000000000..743228e94b6
--- /dev/null
+++ b/keyboards/era/sirind/tomak/rules.mk
@@ -0,0 +1 @@
+SERIAL_DRIVER = vendor
\ No newline at end of file
diff --git a/keyboards/era/sirind/tomak/tomak.c b/keyboards/era/sirind/tomak/tomak.c
new file mode 100644
index 00000000000..8533cd4a737
--- /dev/null
+++ b/keyboards/era/sirind/tomak/tomak.c
@@ -0,0 +1,16 @@
+// Copyright 2023 Hyojin Bak (@eerraa)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "quantum.h"
+
+bool rgb_matrix_indicators_kb(void) {
+ if (!rgb_matrix_indicators_user()) {
+ return false;
+ }
+ if (host_keyboard_led_state().caps_lock) {
+ rgb_matrix_set_color(96, 0, 128, 128);
+ rgb_matrix_set_color(97, 0, 128, 128);
+ rgb_matrix_set_color(98, 0, 128, 128);
+ }
+ return true;
+}
\ No newline at end of file
diff --git a/keyboards/ergodox_ez/config.h b/keyboards/ergodox_ez/config.h
index 8209c21dba5..3688e007854 100644
--- a/keyboards/ergodox_ez/config.h
+++ b/keyboards/ergodox_ez/config.h
@@ -73,8 +73,6 @@ along with this program. If not, see .
/* fix space cadet rollover issue */
#define DISABLE_SPACE_CADET_ROLLOVER
-#define RGBW
-
/*
* The debounce filtering reports a key/switch change directly,
* without any extra delay. After that the debounce logic will filter
diff --git a/keyboards/ergodox_ez/ergodox_ez.c b/keyboards/ergodox_ez/ergodox_ez.c
index 5270738f86d..5fc173917fd 100644
--- a/keyboards/ergodox_ez/ergodox_ez.c
+++ b/keyboards/ergodox_ez/ergodox_ez.c
@@ -24,13 +24,11 @@ extern inline void ergodox_board_led_on(void);
extern inline void ergodox_right_led_1_on(void);
extern inline void ergodox_right_led_2_on(void);
extern inline void ergodox_right_led_3_on(void);
-extern inline void ergodox_right_led_on(uint8_t led);
extern inline void ergodox_board_led_off(void);
extern inline void ergodox_right_led_1_off(void);
extern inline void ergodox_right_led_2_off(void);
extern inline void ergodox_right_led_3_off(void);
-extern inline void ergodox_right_led_off(uint8_t led);
extern inline void ergodox_led_all_on(void);
extern inline void ergodox_led_all_off(void);
@@ -53,17 +51,14 @@ void matrix_init_kb(void) {
TCCR1B = 0b00001001; // set and configure fast PWM
// (tied to Vcc for hardware convenience)
- DDRB &= ~(1 << 4); // set B(4) as input
- PORTB &= ~(1 << 4); // set B(4) internal pull-up disabled
+ gpio_set_pin_input(B4); // set B(4) as input, internal pull-up disabled
- // unused pins - C7, D4, D5, D7, E6
+ // unused pins - C7, D4, D5, E6
// set as input with internal pull-up enabled
- DDRC &= ~(1 << 7);
- DDRD &= ~(1 << 5 | 1 << 4);
- DDRE &= ~(1 << 6);
- PORTC |= (1 << 7);
- PORTD |= (1 << 5 | 1 << 4);
- PORTE |= (1 << 6);
+ gpio_set_pin_input_high(C7);
+ gpio_set_pin_input_high(D4);
+ gpio_set_pin_input_high(D5);
+ gpio_set_pin_input_high(E6);
keyboard_config.raw = eeconfig_read_kb();
ergodox_led_all_set((uint8_t)keyboard_config.led_level * 255 / 4);
diff --git a/keyboards/ergodox_ez/ergodox_ez.h b/keyboards/ergodox_ez/ergodox_ez.h
index df2dbed7157..3938ff49f16 100644
--- a/keyboards/ergodox_ez/ergodox_ez.h
+++ b/keyboards/ergodox_ez/ergodox_ez.h
@@ -51,18 +51,40 @@ uint8_t ergodox_left_leds_update(void);
#define LED_BRIGHTNESS_HI 255
#endif
+#define ERGODOX_EZ_BOARD_LED_PIN D6
+#define ERGODOX_EZ_RIGHT_LED_1_PIN B5
+#define ERGODOX_EZ_RIGHT_LED_2_PIN B6
+#define ERGODOX_EZ_RIGHT_LED_3_PIN B7
-inline void ergodox_board_led_on(void) { DDRD |= (1<<6); PORTD |= (1<<6); }
-inline void ergodox_right_led_1_on(void) { DDRB |= (1<<5); PORTB |= (1<<5); }
-inline void ergodox_right_led_2_on(void) { DDRB |= (1<<6); PORTB |= (1<<6); }
-inline void ergodox_right_led_3_on(void) { DDRB |= (1<<7); PORTB |= (1<<7); }
-inline void ergodox_right_led_on(uint8_t led) { DDRB |= (1<<(led+4)); PORTB |= (1<<(led+4)); }
+inline void ergodox_board_led_on(void) {
+ gpio_set_pin_output(ERGODOX_EZ_BOARD_LED_PIN);
+ gpio_write_pin_high(ERGODOX_EZ_BOARD_LED_PIN);
+}
+inline void ergodox_right_led_1_on(void) {
+ gpio_set_pin_output(ERGODOX_EZ_RIGHT_LED_1_PIN);
+ gpio_write_pin_high(ERGODOX_EZ_RIGHT_LED_1_PIN);
+}
+inline void ergodox_right_led_2_on(void) {
+ gpio_set_pin_output(ERGODOX_EZ_RIGHT_LED_2_PIN);
+ gpio_write_pin_high(ERGODOX_EZ_RIGHT_LED_2_PIN);
+}
+inline void ergodox_right_led_3_on(void) {
+ gpio_set_pin_output(ERGODOX_EZ_RIGHT_LED_3_PIN);
+ gpio_write_pin_high(ERGODOX_EZ_RIGHT_LED_3_PIN);
+}
-inline void ergodox_board_led_off(void) { DDRD &= ~(1<<6); PORTD &= ~(1<<6); }
-inline void ergodox_right_led_1_off(void) { DDRB &= ~(1<<5); PORTB &= ~(1<<5); }
-inline void ergodox_right_led_2_off(void) { DDRB &= ~(1<<6); PORTB &= ~(1<<6); }
-inline void ergodox_right_led_3_off(void) { DDRB &= ~(1<<7); PORTB &= ~(1<<7); }
-inline void ergodox_right_led_off(uint8_t led) { DDRB &= ~(1<<(led+4)); PORTB &= ~(1<<(led+4)); }
+inline void ergodox_board_led_off(void) {
+ gpio_set_pin_input(ERGODOX_EZ_BOARD_LED_PIN);
+}
+inline void ergodox_right_led_1_off(void) {
+ gpio_set_pin_input(ERGODOX_EZ_RIGHT_LED_1_PIN);
+}
+inline void ergodox_right_led_2_off(void) {
+ gpio_set_pin_input(ERGODOX_EZ_RIGHT_LED_2_PIN);
+}
+inline void ergodox_right_led_3_off(void) {
+ gpio_set_pin_input(ERGODOX_EZ_RIGHT_LED_3_PIN);
+}
#ifdef LEFT_LEDS
bool ergodox_left_led_1;
diff --git a/keyboards/ergodox_ez/info.json b/keyboards/ergodox_ez/info.json
index f2495a409c3..a560e97a0b5 100644
--- a/keyboards/ergodox_ez/info.json
+++ b/keyboards/ergodox_ez/info.json
@@ -27,7 +27,8 @@
"debounce_type": "sym_eager_pr"
},
"ws2812": {
- "pin": "D7"
+ "pin": "D7",
+ "rgbw": true
},
"rgb_matrix": {
"animations": {
diff --git a/keyboards/ergodox_ez/shine/rgblight_custom.c b/keyboards/ergodox_ez/shine/rgblight_custom.c
index feac50cba08..29060e76fce 100644
--- a/keyboards/ergodox_ez/shine/rgblight_custom.c
+++ b/keyboards/ergodox_ez/shine/rgblight_custom.c
@@ -25,7 +25,7 @@ void setleds_custom(rgb_led_t *led, uint16_t led_num) {
uint16_t length = 0;
int i = 0;
int j = 0;
-# ifdef RGBW
+# ifdef WS2812_RGBW
int bytes_per_led = 4;
# else
int bytes_per_led = 3;
@@ -52,7 +52,7 @@ void setleds_custom(rgb_led_t *led, uint16_t led_num) {
data[j++] = data_byte[0];
data[j++] = data_byte[1];
data[j++] = data_byte[2];
-#ifdef RGBW
+#ifdef WS2812_RGBW
data[j++] = data_byte[3];
#endif
}
diff --git a/keyboards/fatotesa/info.json b/keyboards/fatotesa/info.json
new file mode 100644
index 00000000000..bdd5e40478d
--- /dev/null
+++ b/keyboards/fatotesa/info.json
@@ -0,0 +1,144 @@
+{
+ "development_board": "promicro",
+ "manufacturer": "fatotesa",
+ "keyboard_name": "fatotesa",
+ "maintainer": "stefangluszek",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "caps_word": true
+ },
+ "encoder": {
+ "rotary": [
+ { "pin_a": "D1", "pin_b": "D0" , "resolution": 2}
+ ]
+ },
+ "split": {
+ "enabled": true,
+ "soft_serial_pin": "D2",
+ "usb_detect": {
+ "enabled": true,
+ "timeout": 2500
+ },
+ "matrix_pins": {
+ "right": {
+ "cols": ["F4", "F5", "F6", "C6", "F7", "B1", "B3", "B2"],
+ "rows": ["B6", "E6", "D4", "D7", "B4", "B5"]
+ }
+ },
+ "bootmagic": {
+ "matrix": [4, 1]
+ }
+ },
+ "matrix_pins": {
+ "cols": ["F5", "F6", "F7", "B1", "B3", "B2", "B6", null],
+ "rows": ["D4", "C6", "D7", "E6", "B4", "B5"]
+ },
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x0000",
+ "vid": "0xFEED"
+ },
+ "layouts": {
+ "LAYOUT": {
+ "layout": [
+ {"matrix": [0, 0], "label":"esc", "x":0, "y":0},
+ {"matrix": [0, 2], "label":"f1", "x":2, "y":0},
+ {"matrix": [0, 3], "label":"f2", "x":3, "y":0},
+ {"matrix": [0, 4], "label":"f3", "x":4, "y":0},
+ {"matrix": [0, 5], "label":"f4", "x":5, "y":0},
+
+ {"matrix": [6, 4], "label":"end", "x":13.25, "y":0},
+ {"matrix": [6, 5], "label":"ins", "x":14.25, "y":0},
+ {"matrix": [6, 6], "label":"del", "x":15.25, "y":0},
+ {"matrix": [6, 7], "label":"enc", "x":16.5, "y":0, "encoder": 0},
+
+
+ {"matrix": [1, 0], "label":"`", "x":0, "y":1},
+ {"matrix": [1, 1], "label":"1", "x":1, "y":1},
+ {"matrix": [1, 2], "label":"2", "x":2, "y":1},
+ {"matrix": [1, 3], "label":"3", "x":3, "y":1},
+ {"matrix": [1, 4], "label":"4", "x":4, "y":1},
+ {"matrix": [1, 5], "label":"5", "x":5, "y":1},
+ {"matrix": [1, 6], "label":"6", "x":6, "y":1},
+
+ {"matrix": [7, 1], "label":"7", "x":9.5, "y":1},
+ {"matrix": [7, 2], "label":"8", "x":10.5, "y":1},
+ {"matrix": [7, 3], "label":"9", "x":11.5, "y":1},
+ {"matrix": [7, 4], "label":"0", "x":12.5, "y":1},
+ {"matrix": [7, 5], "label":"-", "x":13.5, "y":1},
+ {"matrix": [7, 6], "label":"=", "x":14.5, "y":1},
+ {"matrix": [7, 7], "label":"<", "x":15.5, "y":1, "w":2},
+
+
+ {"matrix": [2, 0], "label":"tab", "x":0, "y":2, "w":1.5},
+ {"matrix": [2, 1], "label":"q", "x":1.5, "y":2},
+ {"matrix": [2, 2], "label":"w", "x":2.5, "y":2},
+ {"matrix": [2, 3], "label":"e", "x":3.5, "y":2},
+ {"matrix": [2, 4], "label":"r", "x":4.5, "y":2},
+ {"matrix": [2, 5], "label":"t", "x":5.5, "y":2},
+
+ {"matrix": [8, 0], "label":"y", "x":9, "y":2},
+ {"matrix": [8, 1], "label":"u", "x":10, "y":2},
+ {"matrix": [8, 2], "label":"i", "x":11, "y":2},
+ {"matrix": [8, 3], "label":"o", "x":12, "y":2},
+ {"matrix": [8, 4], "label":"p", "x":13, "y":2},
+ {"matrix": [8, 5], "label":"[", "x":14, "y":2},
+ {"matrix": [8, 6], "label":"]", "x":15, "y":2},
+ {"matrix": [8, 7], "x":16.25, "y":2, "w":1.25, "h":2},
+
+
+ {"matrix": [3, 0], "label":"caps", "x":0, "y":3, "w":1.75},
+ {"matrix": [3, 1], "label":"a", "x":1.75, "y":3},
+ {"matrix": [3, 2], "label":"s", "x":2.75, "y":3},
+ {"matrix": [3, 3], "label":"d", "x":3.75, "y":3},
+ {"matrix": [3, 4], "label":"f", "x":4.75, "y":3},
+ {"matrix": [3, 5], "label":"g", "x":5.75, "y":3},
+
+ {"matrix": [9, 0], "label":"h", "x":9.25, "y":3},
+ {"matrix": [9, 1], "label":"j", "x":10.25, "y":3},
+ {"matrix": [9, 2], "label":"k", "x":11.25, "y":3},
+ {"matrix": [9, 3], "label":"l", "x":12.25, "y":3},
+ {"matrix": [9, 4], "label":";", "x":13.25, "y":3},
+ {"matrix": [9, 5], "label":"'", "x":14.25, "y":3},
+ {"matrix": [9, 6], "label":"\\", "x":15.25, "y":3},
+
+
+ {"matrix": [4, 0], "label":"shift", "x":0, "y":4, "w":1.25},
+ {"matrix": [4, 1], "label":"<", "x":1.25, "y":4},
+ {"matrix": [4, 2], "label":"z", "x":2.25, "y":4},
+ {"matrix": [4, 3], "label":"x", "x":3.25, "y":4},
+ {"matrix": [4, 4], "label":"c", "x":4.25, "y":4},
+ {"matrix": [4, 5], "label":"v", "x":5.25, "y":4},
+ {"matrix": [4, 6], "label":"b", "x":6.25, "y":4},
+
+ {"matrix": [10, 2], "label":"n", "x":9.75, "y":4},
+ {"matrix": [10, 3], "label":"m", "x":10.75, "y":4},
+ {"matrix": [10, 4], "label":",", "x":11.75, "y":4},
+ {"matrix": [10, 5], "label":".", "x":12.75, "y":4},
+ {"matrix": [10, 6], "label":"/", "x":13.75, "y":4},
+ {"matrix": [10, 7], "x":14.75, "y":4},
+
+
+ {"matrix": [5, 0], "label":"ctrl", "x":0, "y":5, "w":1.25},
+ {"matrix": [5, 1], "label":"win", "x":1.25, "y":5, "w":1.25},
+ {"matrix": [5, 2], "label":"alt", "x":2.5, "y":5, "w":1.25},
+ {"matrix": [5, 3], "label":"space", "x":3.75, "y":5, "w":1.75},
+ {"matrix": [5, 4], "label":"na", "x":5.5, "y":5},
+
+ {"matrix": [11, 3], "label":"space", "x":10.5, "y":5, "w":2},
+ {"matrix": [11, 4], "label":"alt gr", "x":12.5, "y":5, "w":1.25},
+ {"matrix": [11, 5], "label":"ctrl", "x":13.75, "y":5, "w":1.25},
+ {"matrix": [11, 6], "label":"?", "x":15, "y":5, "w":1.25},
+ {"matrix": [11, 7], "label":"?", "x":16.25, "y":5, "w":1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/fatotesa/keymaps/default/keymap.c b/keyboards/fatotesa/keymaps/default/keymap.c
new file mode 100644
index 00000000000..1f6aa804889
--- /dev/null
+++ b/keyboards/fatotesa/keymaps/default/keymap.c
@@ -0,0 +1,30 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+#if defined(ENCODER_MAP_ENABLE)
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+};
+#endif
+
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_END, KC_INSERT, KC_DELETE, KC_KB_MUTE,
+ KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINUS, KC_EQUAL, KC_BACKSPACE,
+ LT(1, KC_TAB), KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LEFT_BRACKET, KC_RIGHT_BRACKET, KC_ENTER,
+ KC_LEFT_CTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SEMICOLON, KC_QUOTE, KC_BACKSLASH,
+ KC_LEFT_SHIFT, KC_LEFT_ANGLE_BRACKET, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_SLASH, KC_RIGHT_SHIFT,
+ CW_TOGG, KC_LWIN, KC_LEFT_ALT, KC_BACKSPACE, KC_LEFT_ALT, KC_SPACE, KC_RIGHT_ALT, KC_RIGHT_CTRL, KC_NO, KC_NO
+ ),
+ [1] = LAYOUT(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, KC_DEL, _______, _______, _______, _______, _______, _______
+ )};
diff --git a/keyboards/fatotesa/keymaps/default/rules.mk b/keyboards/fatotesa/keymaps/default/rules.mk
new file mode 100644
index 00000000000..ee325681483
--- /dev/null
+++ b/keyboards/fatotesa/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
diff --git a/keyboards/fatotesa/readme.md b/keyboards/fatotesa/readme.md
new file mode 100644
index 00000000000..a3794cfd667
--- /dev/null
+++ b/keyboards/fatotesa/readme.md
@@ -0,0 +1,25 @@
+# fatotesa
+
+
+
+This is the QMK firmware for the [fat-o-tesa](https://github.com/stefangluszek/fat-o-tesa) keyboard.
+
+* Keyboard Maintainer: [Stefan Gluszek](https://github.com/stefangluszek)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make fatotesa:default
+
+Flashing example for this keyboard:
+
+ make fatotesa:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (4,1) in the matrix and plug in the keyboard - this is somewhat unusual choice but our split halves are not symmetrical and we can't use (0,0) but instead a key that maps to the same matrix position regardless of which part is being connected to the computer and flashed.
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/ibm/model_m/mschwingen/led_ffc/rules.mk b/keyboards/fatotesa/rules.mk
similarity index 100%
rename from keyboards/ibm/model_m/mschwingen/led_ffc/rules.mk
rename to keyboards/fatotesa/rules.mk
diff --git a/keyboards/gboards/ergotaco/ergotaco.c b/keyboards/gboards/ergotaco/ergotaco.c
index 6795dfde4f2..1e526f15e29 100644
--- a/keyboards/gboards/ergotaco/ergotaco.c
+++ b/keyboards/gboards/ergotaco/ergotaco.c
@@ -5,25 +5,30 @@ i2c_status_t mcp23018_status = 0x20;
void matrix_init_kb(void) {
// (tied to Vcc for hardware convenience)
- //DDRB &= ~(1<<4); // set B(4) as input
- //PORTB &= ~(1<<4); // set B(4) internal pull-up disabled
+ //gpio_set_pin_input(B4); // set B(4) as input, internal pull-up disabled
// unused pins
// set as input with internal pull-up enabled
- DDRB &= ~(1<<4 | 1<<5 | 1<<6 | 1<<7);
- PORTB |= (1<<4 | 1<<5 | 1<<6 | 1<<7);
+ gpio_set_pin_input_high(B4);
+ gpio_set_pin_input_high(B5);
+ gpio_set_pin_input_high(B6);
+ gpio_set_pin_input_high(B7);
- DDRC &= ~(1<<7 | 1<<6);
- PORTC |= (1<<7 | 1<<6);
+ gpio_set_pin_input_high(C6);
+ gpio_set_pin_input_high(C7);
- DDRD &= ~(1<<4 | 1<<5 | 1<<6 | 1<<7);
- PORTD |= (1<<4 | 1<<5 | 1<<6 | 1<<7);
+ gpio_set_pin_input_high(D4);
+ gpio_set_pin_input_high(D5);
+ gpio_set_pin_input_high(D6);
+ gpio_set_pin_input_high(D7);
- DDRE &= ~(1<<6);
- PORTE |= (1<<6);
+ gpio_set_pin_input_high(E6);
- DDRF &= ~(1<<0 | 1<<1 | 1<<4 | 1<<6 | 1<<7);
- PORTF |= (1<<0 | 1<<1 | 1<<4 | 1<<6 | 1<<7);
+ gpio_set_pin_input_high(D0);
+ gpio_set_pin_input_high(D1);
+ gpio_set_pin_input_high(D4);
+ gpio_set_pin_input_high(D6);
+ gpio_set_pin_input_high(D7);
matrix_init_user();
}
diff --git a/keyboards/gboards/georgi/georgi.c b/keyboards/gboards/georgi/georgi.c
index 44b7067b475..da88e6ed8ba 100644
--- a/keyboards/gboards/georgi/georgi.c
+++ b/keyboards/gboards/georgi/georgi.c
@@ -7,17 +7,16 @@ void matrix_init_kb(void) {
steno_set_mode(STENO_MODE_GEMINI); // or STENO_MODE_BOLT
// (tied to Vcc for hardware convenience)
- //DDRB &= ~(1<<4); // set B(4) as input
- //PORTB &= ~(1<<4); // set B(4) internal pull-up disabled
+ //gpio_set_pin_input(B4); // set B(4) as input, internal pull-up disabled
- // unused pins - C7, D4, D5, D7, E6
+ // unused pins - C7, D4, D5, D6, D7, E6
// set as input with internal pull-up enabled
- DDRC &= ~(1<<7);
- DDRD &= ~(1<<5 | 1<<4 | 1<<6 | 1<<7);
- DDRE &= ~(1<<6);
- PORTC |= (1<<7);
- PORTD |= (1<<5 | 1<<4 | 1<<6 | 1<<7);
- PORTE |= (1<<6);
+ gpio_set_pin_input_high(C7);
+ gpio_set_pin_input_high(D4);
+ gpio_set_pin_input_high(D5);
+ gpio_set_pin_input_high(D6);
+ gpio_set_pin_input_high(D7);
+ gpio_set_pin_input_high(E6);
matrix_init_user();
}
diff --git a/keyboards/gboards/gergo/gergo.c b/keyboards/gboards/gergo/gergo.c
index fa73c4b42f5..1ec6105eeb6 100644
--- a/keyboards/gboards/gergo/gergo.c
+++ b/keyboards/gboards/gergo/gergo.c
@@ -5,17 +5,16 @@ i2c_status_t mcp23018_status = 0x20;
void matrix_init_kb(void) {
// (tied to Vcc for hardware convenience)
- //DDRB &= ~(1<<4); // set B(4) as input
- //PORTB &= ~(1<<4); // set B(4) internal pull-up disabled
+ //gpio_set_pin_input(B4); // set B(4) as input, internal pull-up disabled
- // unused pins - C7, D4, D5, D7, E6
+ // unused pins - C7, D4, D5, D6, D7, E6
// set as input with internal pull-up enabled
- DDRC &= ~(1<<7);
- DDRD &= ~(1<<5 | 1<<4 | 1<<6 | 1<<7);
- DDRE &= ~(1<<6);
- PORTC |= (1<<7);
- PORTD |= (1<<5 | 1<<4 | 1<<6 | 1<<7);
- PORTE |= (1<<6);
+ gpio_set_pin_input_high(C7);
+ gpio_set_pin_input_high(D4);
+ gpio_set_pin_input_high(D5);
+ gpio_set_pin_input_high(D6);
+ gpio_set_pin_input_high(D7);
+ gpio_set_pin_input_high(E6);
matrix_init_user();
}
diff --git a/keyboards/geekboards/macropad_v2/config.h b/keyboards/geekboards/macropad_v2/config.h
index dca98f0c954..e452c886f69 100644
--- a/keyboards/geekboards/macropad_v2/config.h
+++ b/keyboards/geekboards/macropad_v2/config.h
@@ -21,5 +21,3 @@
#define WS2812_PWM_PAL_MODE 1
#define WS2812_PWM_DMA_STREAM STM32_DMA1_STREAM3
#define WS2812_PWM_DMA_CHANNEL 3
-
-#define WAIT_FOR_USB
diff --git a/keyboards/geekboards/macropad_v2/keyboard.json b/keyboards/geekboards/macropad_v2/keyboard.json
index 035a83c157d..54d779570a6 100644
--- a/keyboards/geekboards/macropad_v2/keyboard.json
+++ b/keyboards/geekboards/macropad_v2/keyboard.json
@@ -6,7 +6,8 @@
"usb": {
"vid": "0x0483",
"pid": "0xA372",
- "device_version": "0.0.2"
+ "device_version": "0.0.2",
+ "wait_for_enumeration": true
},
"qmk": {
"tap_keycode_delay": 10
diff --git a/keyboards/gh80_3000/config.h b/keyboards/gh80_3000/config.h
deleted file mode 100644
index 5f360813239..00000000000
--- a/keyboards/gh80_3000/config.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#pragma once
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
diff --git a/keyboards/gh80_3000/keyboard.json b/keyboards/gh80_3000/keyboard.json
index f5f4ba75332..c88f5c8232c 100644
--- a/keyboards/gh80_3000/keyboard.json
+++ b/keyboards/gh80_3000/keyboard.json
@@ -16,6 +16,18 @@
"mousekey": false,
"nkro": true
},
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
+ "indicators": {
+ "num_lock": "B5",
+ "caps_lock": "B6",
+ "scroll_lock": "B7",
+ "on_state": 0
+ },
"matrix_pins": {
"cols": ["C7", "C6", "B4", "D7", "B3", "B2", "B0", "E6", "B1", "D1", "D6"],
"rows": ["F4", "F1", "F0", "F5", "F6", "F7", "D4", "D5", "D3", "D2", "D0"]
diff --git a/keyboards/gh80_3000/keymaps/ansi_std/keymap.c b/keyboards/gh80_3000/keymaps/ansi_std/keymap.c
index f99d522ead4..2f1e410656f 100644
--- a/keyboards/gh80_3000/keymaps/ansi_std/keymap.c
+++ b/keyboards/gh80_3000/keymaps/ansi_std/keymap.c
@@ -11,30 +11,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
)
};
-
-bool led_update_user(led_t led_state) {
- if (led_state.num_lock) {
- DDRB |= (1 << 5);
- PORTB &= ~(1 << 5);
- } else {
- DDRB &= ~(1 << 5);
- PORTB &= ~(1 << 5);
- }
-
- if (led_state.caps_lock) {
- DDRB |= (1 << 6);
- PORTB &= ~(1 << 6);
- } else {
- DDRB &= ~(1 << 6);
- PORTB &= ~(1 << 6);
- }
-
- if (led_state.scroll_lock) {
- DDRB |= (1 << 7);
- PORTB &= ~(1 << 7);
- } else {
- DDRB &= ~(1 << 7);
- PORTB &= ~(1 << 7);
- }
- return false;
-}
diff --git a/keyboards/gh80_3000/keymaps/ansi_wkl/keymap.c b/keyboards/gh80_3000/keymaps/ansi_wkl/keymap.c
index b3f2426e88a..54fdb3400d3 100644
--- a/keyboards/gh80_3000/keymaps/ansi_wkl/keymap.c
+++ b/keyboards/gh80_3000/keymaps/ansi_wkl/keymap.c
@@ -11,30 +11,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
)
};
-
-bool led_update_user(led_t led_state) {
- if (led_state.num_lock) {
- DDRB |= (1 << 5);
- PORTB &= ~(1 << 5);
- } else {
- DDRB &= ~(1 << 5);
- PORTB &= ~(1 << 5);
- }
-
- if (led_state.caps_lock) {
- DDRB |= (1 << 6);
- PORTB &= ~(1 << 6);
- } else {
- DDRB &= ~(1 << 6);
- PORTB &= ~(1 << 6);
- }
-
- if (led_state.scroll_lock) {
- DDRB |= (1 << 7);
- PORTB &= ~(1 << 7);
- } else {
- DDRB &= ~(1 << 7);
- PORTB &= ~(1 << 7);
- }
- return false;
-}
diff --git a/keyboards/gh80_3000/keymaps/default/keymap.c b/keyboards/gh80_3000/keymaps/default/keymap.c
index b74127fc5e1..4a54df83cc0 100644
--- a/keyboards/gh80_3000/keymaps/default/keymap.c
+++ b/keyboards/gh80_3000/keymaps/default/keymap.c
@@ -11,30 +11,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PCMM, KC_PDOT, KC_PENT
)
};
-
-bool led_update_user(led_t led_state) {
- if (led_state.num_lock) {
- DDRB |= (1 << 5);
- PORTB &= ~(1 << 5);
- } else {
- DDRB &= ~(1 << 5);
- PORTB &= ~(1 << 5);
- }
-
- if (led_state.caps_lock) {
- DDRB |= (1 << 6);
- PORTB &= ~(1 << 6);
- } else {
- DDRB &= ~(1 << 6);
- PORTB &= ~(1 << 6);
- }
-
- if (led_state.scroll_lock) {
- DDRB |= (1 << 7);
- PORTB &= ~(1 << 7);
- } else {
- DDRB &= ~(1 << 7);
- PORTB &= ~(1 << 7);
- }
- return false;
-}
diff --git a/keyboards/gh80_3000/keymaps/iso_default/keymap.c b/keyboards/gh80_3000/keymaps/iso_default/keymap.c
index 4c4b10f458a..b3433eb21a5 100644
--- a/keyboards/gh80_3000/keymaps/iso_default/keymap.c
+++ b/keyboards/gh80_3000/keymaps/iso_default/keymap.c
@@ -11,30 +11,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PCMM, KC_PDOT, KC_PENT
)
};
-
-bool led_update_user(led_t led_state) {
- if (led_state.num_lock) {
- DDRB |= (1 << 5);
- PORTB &= ~(1 << 5);
- } else {
- DDRB &= ~(1 << 5);
- PORTB &= ~(1 << 5);
- }
-
- if (led_state.caps_lock) {
- DDRB |= (1 << 6);
- PORTB &= ~(1 << 6);
- } else {
- DDRB &= ~(1 << 6);
- PORTB &= ~(1 << 6);
- }
-
- if (led_state.scroll_lock) {
- DDRB |= (1 << 7);
- PORTB &= ~(1 << 7);
- } else {
- DDRB &= ~(1 << 7);
- PORTB &= ~(1 << 7);
- }
- return false;
-}
diff --git a/keyboards/gh80_3000/keymaps/iso_std/keymap.c b/keyboards/gh80_3000/keymaps/iso_std/keymap.c
index 9559bde1194..26fbb855e83 100644
--- a/keyboards/gh80_3000/keymaps/iso_std/keymap.c
+++ b/keyboards/gh80_3000/keymaps/iso_std/keymap.c
@@ -11,30 +11,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
)
};
-
-bool led_update_user(led_t led_state) {
- if (led_state.num_lock) {
- DDRB |= (1 << 5);
- PORTB &= ~(1 << 5);
- } else {
- DDRB &= ~(1 << 5);
- PORTB &= ~(1 << 5);
- }
-
- if (led_state.caps_lock) {
- DDRB |= (1 << 6);
- PORTB &= ~(1 << 6);
- } else {
- DDRB &= ~(1 << 6);
- PORTB &= ~(1 << 6);
- }
-
- if (led_state.scroll_lock) {
- DDRB |= (1 << 7);
- PORTB &= ~(1 << 7);
- } else {
- DDRB &= ~(1 << 7);
- PORTB &= ~(1 << 7);
- }
- return false;
-}
diff --git a/keyboards/gh80_3000/keymaps/iso_wkl/keymap.c b/keyboards/gh80_3000/keymaps/iso_wkl/keymap.c
index 86054ba1fd5..4d20f5a402e 100644
--- a/keyboards/gh80_3000/keymaps/iso_wkl/keymap.c
+++ b/keyboards/gh80_3000/keymaps/iso_wkl/keymap.c
@@ -11,30 +11,3 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT
)
};
-
-bool led_update_user(led_t led_state) {
- if (led_state.num_lock) {
- DDRB |= (1 << 5);
- PORTB &= ~(1 << 5);
- } else {
- DDRB &= ~(1 << 5);
- PORTB &= ~(1 << 5);
- }
-
- if (led_state.caps_lock) {
- DDRB |= (1 << 6);
- PORTB &= ~(1 << 6);
- } else {
- DDRB &= ~(1 << 6);
- PORTB &= ~(1 << 6);
- }
-
- if (led_state.scroll_lock) {
- DDRB |= (1 << 7);
- PORTB &= ~(1 << 7);
- } else {
- DDRB &= ~(1 << 7);
- PORTB &= ~(1 << 7);
- }
- return false;
-}
diff --git a/keyboards/glenpickle/chimera_ergo/chimera_ergo.c b/keyboards/glenpickle/chimera_ergo/chimera_ergo.c
index 47653c2e4b6..40748e0b3d2 100644
--- a/keyboards/glenpickle/chimera_ergo/chimera_ergo.c
+++ b/keyboards/glenpickle/chimera_ergo/chimera_ergo.c
@@ -1,10 +1,12 @@
#include "chimera_ergo.h"
void led_init(void) {
- DDRD |= (1<<1);
- PORTD |= (1<<1);
- DDRF |= (1<<4) | (1<<5);
- PORTF |= (1<<4) | (1<<5);
+ gpio_set_pin_output(CHIMERA_ERGO_GREEN_LED_PIN);
+ gpio_write_pin_high(CHIMERA_ERGO_GREEN_LED_PIN);
+ gpio_set_pin_output(CHIMERA_ERGO_BLUE_LED_PIN);
+ gpio_write_pin_high(CHIMERA_ERGO_BLUE_LED_PIN);
+ gpio_set_pin_output(CHIMERA_ERGO_RED_LED_PIN);
+ gpio_write_pin_high(CHIMERA_ERGO_RED_LED_PIN);
}
diff --git a/keyboards/glenpickle/chimera_ergo/chimera_ergo.h b/keyboards/glenpickle/chimera_ergo/chimera_ergo.h
index 04ef56503ff..46f0b931e8a 100644
--- a/keyboards/glenpickle/chimera_ergo/chimera_ergo.h
+++ b/keyboards/glenpickle/chimera_ergo/chimera_ergo.h
@@ -2,12 +2,16 @@
#include "quantum.h"
-#define red_led_off PORTF |= (1<<5)
-#define red_led_on PORTF &= ~(1<<5)
-#define blu_led_off PORTF |= (1<<4)
-#define blu_led_on PORTF &= ~(1<<4)
-#define grn_led_off PORTD |= (1<<1)
-#define grn_led_on PORTD &= ~(1<<1)
+#define CHIMERA_ERGO_RED_LED_PIN F5
+#define CHIMERA_ERGO_GREEN_LED_PIN D1
+#define CHIMERA_ERGO_BLUE_LED_PIN F4
+
+#define red_led_off gpio_write_pin_high(CHIMERA_ERGO_RED_LED_PIN)
+#define red_led_on gpio_write_pin_low(CHIMERA_ERGO_RED_LED_PIN)
+#define blu_led_off gpio_write_pin_high(CHIMERA_ERGO_BLUE_LED_PIN)
+#define blu_led_on gpio_write_pin_low(CHIMERA_ERGO_BLUE_LED_PIN)
+#define grn_led_off gpio_write_pin_high(CHIMERA_ERGO_GREEN_LED_PIN)
+#define grn_led_on gpio_write_pin_low(CHIMERA_ERGO_GREEN_LED_PIN)
#define set_led_off red_led_off; grn_led_off; blu_led_off
#define set_led_red red_led_on; grn_led_off; blu_led_off
@@ -17,27 +21,3 @@
#define set_led_magenta red_led_on; grn_led_off; blu_led_on
#define set_led_cyan red_led_off; grn_led_on; blu_led_on
#define set_led_white red_led_on; grn_led_on; blu_led_on
-
-/*
-#define LED_B 5
-#define LED_R 6
-#define LED_G 7
-
-#define all_leds_off PORTF &= ~(1<event.pressed) {
- PORTC |= (1 << 6); // PC6 goes high
+ gpio_write_pin_high(C6);
}
return true;
case TO(OSY):
if (record->event.pressed) {
- PORTC &= ~(1 << 6); // PC6 goes high
- PORTD |= (1<<4);
+ gpio_write_pin_low(C6);
+ gpio_write_pin_high(D4);
}
return true;
case TO(DEF):
if (record->event.pressed) {
- PORTD &= ~(1 << 4); // PC6 goes high
+ gpio_write_pin_low(D4);
}
return true;
diff --git a/keyboards/handwired/macroboard/f411/keyboard.json b/keyboards/handwired/macroboard/f411/keyboard.json
index 03a8aadc1b9..8b1155d7740 100644
--- a/keyboards/handwired/macroboard/f411/keyboard.json
+++ b/keyboards/handwired/macroboard/f411/keyboard.json
@@ -9,6 +9,9 @@
"rows": ["A15", "B3", "B4", "B5", "B7"]
},
"diode_direction": "COL2ROW",
+ "audio": {
+ "driver": "pwm_hardware"
+ },
"ws2812": {
"driver": "pwm"
},
diff --git a/keyboards/handwired/macroboard/f411/rules.mk b/keyboards/handwired/macroboard/f411/rules.mk
deleted file mode 100644
index 72f75f4367e..00000000000
--- a/keyboards/handwired/macroboard/f411/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-AUDIO_DRIVER = pwm_hardware
diff --git a/keyboards/handwired/retro_refit/retro_refit.c b/keyboards/handwired/retro_refit/retro_refit.c
index b7e1ec03fa2..f23ef1fd404 100644
--- a/keyboards/handwired/retro_refit/retro_refit.c
+++ b/keyboards/handwired/retro_refit/retro_refit.c
@@ -6,8 +6,8 @@ void matrix_init_kb(void) {
// runs once when the firmware starts up
// Disable status LED on KB, enable status LED on Teensy (KB_STATUS = !TEENSY_STATUS)
- DDRD |= (1<<6);
- PORTD |= (1<<6);
+ gpio_set_pin_output(D6);
+ gpio_write_pin_high(D6);
matrix_init_user();
};
diff --git a/keyboards/handwired/tennie/config.h b/keyboards/handwired/tennie/config.h
index 7c77f53a82d..dcbcfeaaa8c 100644
--- a/keyboards/handwired/tennie/config.h
+++ b/keyboards/handwired/tennie/config.h
@@ -17,8 +17,6 @@ along with this program. If not, see .
#pragma once
-#define RGBW
-
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/handwired/tennie/keyboard.json b/keyboards/handwired/tennie/keyboard.json
index 34e6676c953..36c1266d50b 100644
--- a/keyboards/handwired/tennie/keyboard.json
+++ b/keyboards/handwired/tennie/keyboard.json
@@ -26,7 +26,8 @@
}
},
"ws2812": {
- "pin": "D1"
+ "pin": "D1",
+ "rgbw": true
},
"features": {
"bootmagic": true,
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f303/keyboard.json b/keyboards/handwired/tractyl_manuform/5x6_right/f303/keyboard.json
index 000d8f0dd77..499390c6107 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/f303/keyboard.json
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/f303/keyboard.json
@@ -12,6 +12,9 @@
"led_count": 20,
"split_count": [10, 10]
},
+ "audio": {
+ "driver": "dac_additive"
+ },
"ws2812": {
"pin": "A6",
"driver": "pwm"
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f303/rules.mk b/keyboards/handwired/tractyl_manuform/5x6_right/f303/rules.mk
index 23f790a1ad4..22915ec0001 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/f303/rules.mk
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/f303/rules.mk
@@ -1,4 +1,3 @@
# KEYBOARD_SHARED_EP = yes
SERIAL_DRIVER = usart
-AUDIO_DRIVER = dac_additive
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f411/keyboard.json b/keyboards/handwired/tractyl_manuform/5x6_right/f411/keyboard.json
index 73c13e8e318..7182ee17012 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/f411/keyboard.json
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/f411/keyboard.json
@@ -15,6 +15,9 @@
"build": {
"debounce_type": "asym_eager_defer_pk"
},
+ "audio": {
+ "driver": "pwm_hardware"
+ },
"ws2812": {
"pin": "A1",
"driver": "pwm"
diff --git a/keyboards/handwired/tractyl_manuform/5x6_right/f411/rules.mk b/keyboards/handwired/tractyl_manuform/5x6_right/f411/rules.mk
index e75692030f7..f26cbbced12 100644
--- a/keyboards/handwired/tractyl_manuform/5x6_right/f411/rules.mk
+++ b/keyboards/handwired/tractyl_manuform/5x6_right/f411/rules.mk
@@ -2,4 +2,3 @@ KEYBOARD_SHARED_EP = yes
MOUSE_SHARED_EP = yes
SERIAL_DRIVER = usart
-AUDIO_DRIVER = pwm_hardware
diff --git a/keyboards/hhkb/ansi/32u2/keyboard.json b/keyboards/hhkb/ansi/32u2/keyboard.json
index dd190d18ee0..d210808d984 100644
--- a/keyboards/hhkb/ansi/32u2/keyboard.json
+++ b/keyboards/hhkb/ansi/32u2/keyboard.json
@@ -1,4 +1,10 @@
{
"processor": "atmega32u2",
- "bootloader": "atmel-dfu"
+ "bootloader": "atmel-dfu",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false
+ }
}
diff --git a/keyboards/hhkb/ansi/32u2/rules.mk b/keyboards/hhkb/ansi/32u2/rules.mk
deleted file mode 100644
index 95a1d66061d..00000000000
--- a/keyboards/hhkb/ansi/32u2/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
diff --git a/keyboards/hhkb/ansi/32u4/keyboard.json b/keyboards/hhkb/ansi/32u4/keyboard.json
index 042c41f34d6..1e47ddd20fe 100644
--- a/keyboards/hhkb/ansi/32u4/keyboard.json
+++ b/keyboards/hhkb/ansi/32u4/keyboard.json
@@ -1,4 +1,12 @@
{
"processor": "atmega32u4",
- "bootloader": "atmel-dfu"
+ "bootloader": "atmel-dfu",
+ "features": {
+ "bootmagic": true,
+ "command": true,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false
+ }
}
diff --git a/keyboards/hhkb/ansi/rules.mk b/keyboards/hhkb/ansi/rules.mk
index f5a147ccb9a..841565b8465 100644
--- a/keyboards/hhkb/ansi/rules.mk
+++ b/keyboards/hhkb/ansi/rules.mk
@@ -1,23 +1,6 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-CUSTOM_MATRIX = yes # Custom matrix file for the HHKB
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
+CUSTOM_MATRIX = yes
# project specific files
SRC = matrix.c
-# debug-on: EXTRAFLAGS += -DDEBUG -DDEBUG_ACTION
-# debug-on: all
-
-# debug-off: EXTRAFLAGS += -DNO_DEBUG -DNO_PRINT
-# debug-off: OPT_DEFS := $(filter-out -DCONSOLE_ENABLE,$(OPT_DEFS))
-# debug-off: all
-
DEFAULT_FOLDER = hhkb/ansi/32u4
diff --git a/keyboards/hotdox/hotdox.h b/keyboards/hotdox/hotdox.h
index b9333444393..d0b6c401f94 100644
--- a/keyboards/hotdox/hotdox.h
+++ b/keyboards/hotdox/hotdox.h
@@ -4,17 +4,46 @@
#include
#include
+#define HOTDOX_BOARD_LED_PIN B7
+#define HOTDOX_RIGHT_LED_1_PIN B5
+#define HOTDOX_RIGHT_LED_2_PIN B6
+#define HOTDOX_RIGHT_LED_3_PIN B4
+
void init_ergodox(void);
-inline void ergodox_board_led_on(void) { DDRB |= (1<
diff --git a/keyboards/jlw/vault35_wkl_universal/info.json b/keyboards/jlw/vault35_wkl_universal/info.json
new file mode 100644
index 00000000000..3274b717731
--- /dev/null
+++ b/keyboards/jlw/vault35_wkl_universal/info.json
@@ -0,0 +1,765 @@
+{
+ "manufacturer": "jlw",
+ "keyboard_name": "vault 35 WKL universal",
+ "maintainer": "jlw",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "B0", "pin_b": "A7"},
+ {"pin_a": "B2", "pin_b": "B1"},
+ {"pin_a": "B3", "pin_b": "A15"},
+ {"pin_a": "B5", "pin_b": "B4"},
+ {"pin_a": "A1", "pin_b": "A2"}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["B6", "B8", "A13", "B13", "B14", "A14", "A0", "A3", "A4", "A5", "A6"],
+ "rows": ["B9", "B12", "B15", "A8"]
+ },
+ "processor": "STM32F072",
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_sat": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "band_val": true,
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "cycle_up_down": true,
+ "digital_rain": true,
+ "dual_beacon": true,
+ "gradient_left_right": true,
+ "gradient_up_down": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "jellybean_raindrops": true,
+ "multisplash": true,
+ "pixel_flow": true,
+ "pixel_fractal": true,
+ "pixel_rain": true,
+ "rainbow_beacon": true,
+ "rainbow_moving_chevron": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "solid_multisplash": true,
+ "solid_reactive": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_multinexus": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_wide": true,
+ "solid_splash": true,
+ "splash": true,
+ "typing_heatmap": true
+ },
+ "driver": "ws2812",
+ "hue_steps": 4,
+ "layout": [
+ {"matrix": [1, 0], "x": 1, "y": 22, "flags": 4},
+ {"matrix": [0, 0], "x": 1, "y": 11, "flags": 4},
+ {"matrix": [0, 0], "x": 3, "y": 2, "flags": 4},
+ {"matrix": [0, 0], "x": 12, "y": 2, "flags": 4},
+ {"matrix": [0, 1], "x": 23, "y": 2, "flags": 4},
+ {"matrix": [1, 1], "x": 30, "y": 2, "flags": 4},
+ {"matrix": [0, 1], "x": 42, "y": 2, "flags": 4},
+ {"matrix": [0, 2], "x": 51, "y": 2, "flags": 4},
+ {"matrix": [1, 2], "x": 60, "y": 2, "flags": 4},
+ {"matrix": [0, 3], "x": 70, "y": 2, "flags": 4},
+ {"matrix": [1, 3], "x": 79, "y": 2, "flags": 4},
+ {"matrix": [0, 4], "x": 88, "y": 2, "flags": 4},
+ {"matrix": [0, 5], "x": 98, "y": 2, "flags": 4},
+ {"matrix": [0, 6], "x": 107, "y": 2, "flags": 4},
+ {"matrix": [0, 7], "x": 116, "y": 2, "flags": 4},
+ {"matrix": [1, 7], "x": 126, "y": 2, "flags": 4},
+ {"matrix": [0, 7], "x": 135, "y": 2, "flags": 4},
+ {"matrix": [0, 8], "x": 144, "y": 2, "flags": 4},
+ {"matrix": [1, 8], "x": 154, "y": 2, "flags": 4},
+ {"matrix": [0, 9], "x": 163, "y": 2, "flags": 4},
+ {"matrix": [1, 9], "x": 173, "y": 2, "flags": 4},
+ {"matrix": [0, 10], "x": 183, "y": 2, "flags": 4},
+ {"matrix": [0, 10], "x": 192, "y": 2, "flags": 4},
+ {"matrix": [0, 10], "x": 195, "y": 13, "flags": 4},
+ {"matrix": [1, 10], "x": 195, "y": 23, "flags": 4},
+ {"matrix": [1, 10], "x": 195, "y": 32, "flags": 4},
+ {"matrix": [1, 10], "x": 195, "y": 43, "flags": 4},
+ {"matrix": [2, 10], "x": 195, "y": 55, "flags": 4},
+ {"matrix": [2, 10], "x": 195, "y": 67, "flags": 4},
+ {"matrix": [3, 10], "x": 190, "y": 79, "flags": 4},
+ {"matrix": [3, 10], "x": 195, "y": 87, "flags": 4},
+ {"matrix": [3, 10], "x": 185, "y": 88, "flags": 4},
+ {"matrix": [3, 9], "x": 176, "y": 88, "flags": 4},
+ {"matrix": [3, 9], "x": 171, "y": 82, "flags": 4},
+ {"matrix": [2, 9], "x": 171, "y": 73, "flags": 4},
+ {"matrix": [2, 9], "x": 170, "y": 67, "flags": 4},
+ {"matrix": [2, 9], "x": 164, "y": 67, "flags": 4},
+ {"matrix": [2, 8], "x": 157, "y": 67, "flags": 4},
+ {"matrix": [2, 8], "x": 151, "y": 67, "flags": 4},
+ {"matrix": [3, 8], "x": 150, "y": 74, "flags": 4},
+ {"matrix": [2, 8], "x": 150, "y": 81, "flags": 4},
+ {"matrix": [3, 8], "x": 147, "y": 88, "flags": 4},
+ {"matrix": [3, 7], "x": 139, "y": 88, "flags": 4},
+ {"matrix": [2, 7], "x": 130, "y": 88, "flags": 4},
+ {"matrix": [3, 7], "x": 122, "y": 88, "flags": 4},
+ {"matrix": [3, 6], "x": 113, "y": 88, "flags": 4},
+ {"matrix": [2, 5], "x": 102, "y": 85, "flags": 4},
+ {"matrix": [3, 5], "x": 94, "y": 85, "flags": 4},
+ {"matrix": [3, 4], "x": 85, "y": 88, "flags": 4},
+ {"matrix": [2, 3], "x": 75, "y": 88, "flags": 4},
+ {"matrix": [3, 3], "x": 66, "y": 88, "flags": 4},
+ {"matrix": [2, 2], "x": 57, "y": 88, "flags": 4},
+ {"matrix": [3, 2], "x": 49, "y": 88, "flags": 4},
+ {"matrix": [3, 2], "x": 46, "y": 83, "flags": 4},
+ {"matrix": [3, 2], "x": 46, "y": 75, "flags": 4},
+ {"matrix": [2, 1], "x": 45, "y": 67, "flags": 4},
+ {"matrix": [2, 1], "x": 39, "y": 67, "flags": 4},
+ {"matrix": [2, 1], "x": 33, "y": 67, "flags": 4},
+ {"matrix": [2, 1], "x": 26, "y": 67, "flags": 4},
+ {"matrix": [3, 0], "x": 25, "y": 73, "flags": 4},
+ {"matrix": [3, 0], "x": 25, "y": 82, "flags": 4},
+ {"matrix": [3, 0], "x": 21, "y": 88, "flags": 4},
+ {"matrix": [3, 0], "x": 12, "y": 88, "flags": 4},
+ {"matrix": [3, 0], "x": 1, "y": 88, "flags": 4},
+ {"matrix": [3, 0], "x": 6, "y": 80, "flags": 4},
+ {"matrix": [3, 0], "x": 1, "y": 70, "flags": 4},
+ {"matrix": [2, 0], "x": 1, "y": 58, "flags": 4},
+ {"matrix": [2, 0], "x": 1, "y": 46, "flags": 4},
+ {"matrix": [1, 0], "x": 1, "y": 34, "flags": 4}
+ ],
+ "sat_steps": 4,
+ "val_steps": 4
+ },
+ "url": "https://jlw-kb.com",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0xA457",
+ "vid": "0x1209"
+ },
+ "ws2812": {
+ "driver": "pwm",
+ "pin": "B7"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [2, 6], "x": 6, "y": 2},
+ {"matrix": [2, 7], "x": 7, "y": 2},
+ {"matrix": [2, 8], "x": 8, "y": 2},
+ {"matrix": [2, 9], "x": 9, "y": 2},
+ {"matrix": [2, 10], "x": 10, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.5},
+ {"matrix": [3, 2], "x": 2.5, "y": 3},
+ {"matrix": [3, 3], "x": 3.5, "y": 3},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 10], "x": 9.5, "y": 3, "w": 1.5}
+ ]
+ },
+ "LAYOUT_alpha": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2},
+ {"matrix": [2, 2], "x": 2.5, "y": 2},
+ {"matrix": [2, 3], "x": 3.5, "y": 2},
+ {"matrix": [2, 4], "x": 4.5, "y": 2},
+ {"matrix": [2, 6], "x": 5.5, "y": 2},
+ {"matrix": [2, 7], "x": 6.5, "y": 2},
+ {"matrix": [2, 8], "x": 7.5, "y": 2},
+ {"matrix": [2, 9], "x": 8.5, "y": 2},
+ {"matrix": [2, 10], "x": 9.5, "y": 2, "w": 1.5},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.5},
+ {"matrix": [3, 2], "x": 2.5, "y": 3},
+ {"matrix": [3, 3], "x": 3.5, "y": 3},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 10], "x": 9.5, "y": 3, "w": 1.5}
+ ]
+ },
+ "LAYOUT_katana": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
+ {"matrix": [0, 1], "x": 1.5, "y": 0},
+ {"matrix": [0, 2], "x": 2.5, "y": 0},
+ {"matrix": [0, 3], "x": 3.5, "y": 0},
+ {"matrix": [0, 4], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 5.5, "y": 0},
+ {"matrix": [0, 7], "x": 6.5, "y": 0},
+ {"matrix": [0, 8], "x": 7.5, "y": 0},
+ {"matrix": [0, 9], "x": 8.5, "y": 0},
+ {"matrix": [0, 10], "x": 9.5, "y": 0, "w": 1.25, "h": 2},
+ {"matrix": [1, 0], "x": 0.25, "y": 1},
+ {"matrix": [1, 1], "x": 1.25, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1},
+ {"matrix": [1, 3], "x": 3.25, "y": 1},
+ {"matrix": [1, 4], "x": 4.25, "y": 1},
+ {"matrix": [1, 6], "x": 5.75, "y": 1},
+ {"matrix": [1, 7], "x": 6.75, "y": 1},
+ {"matrix": [1, 8], "x": 7.75, "y": 1},
+ {"matrix": [1, 9], "x": 8.75, "y": 1},
+ {"matrix": [1, 10], "x": 9.75, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [2, 6], "x": 6, "y": 2},
+ {"matrix": [2, 7], "x": 7, "y": 2},
+ {"matrix": [2, 8], "x": 8, "y": 2},
+ {"matrix": [2, 9], "x": 9, "y": 2},
+ {"matrix": [2, 10], "x": 10, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.5},
+ {"matrix": [3, 2], "x": 2.5, "y": 3},
+ {"matrix": [3, 3], "x": 3.5, "y": 3},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 10], "x": 9.5, "y": 3, "w": 1.5}
+ ]
+ },
+ "LAYOUT_katana_iso": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0, "w": 1.5},
+ {"matrix": [0, 1], "x": 1.5, "y": 0},
+ {"matrix": [0, 2], "x": 2.5, "y": 0},
+ {"matrix": [0, 3], "x": 3.5, "y": 0},
+ {"matrix": [0, 4], "x": 4.5, "y": 0},
+ {"matrix": [0, 6], "x": 5.5, "y": 0},
+ {"matrix": [0, 7], "x": 6.5, "y": 0},
+ {"matrix": [0, 8], "x": 7.5, "y": 0},
+ {"matrix": [0, 9], "x": 8.5, "y": 0},
+ {"matrix": [0, 10], "x": 9.5, "y": 0, "w": 1.25, "h": 2},
+ {"matrix": [1, 0], "x": 0.25, "y": 1},
+ {"matrix": [1, 1], "x": 1.25, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1},
+ {"matrix": [1, 3], "x": 3.25, "y": 1},
+ {"matrix": [1, 4], "x": 4.25, "y": 1},
+ {"matrix": [1, 6], "x": 5.75, "y": 1},
+ {"matrix": [1, 7], "x": 6.75, "y": 1},
+ {"matrix": [1, 8], "x": 7.75, "y": 1},
+ {"matrix": [1, 9], "x": 8.75, "y": 1},
+ {"matrix": [1, 10], "x": 9.75, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [2, 6], "x": 6, "y": 2},
+ {"matrix": [2, 7], "x": 7, "y": 2},
+ {"matrix": [2, 8], "x": 8, "y": 2},
+ {"matrix": [2, 9], "x": 9, "y": 2},
+ {"matrix": [2, 10], "x": 10, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.5},
+ {"matrix": [3, 2], "x": 2.5, "y": 3},
+ {"matrix": [3, 3], "x": 3.5, "y": 3},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 10], "x": 9.5, "y": 3, "w": 1.5}
+ ]
+ },
+ "LAYOUT_ortho_125_center1u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [2, 6], "x": 6, "y": 2},
+ {"matrix": [2, 7], "x": 7, "y": 2},
+ {"matrix": [2, 8], "x": 8, "y": 2},
+ {"matrix": [2, 9], "x": 9, "y": 2},
+ {"matrix": [2, 10], "x": 10, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.5},
+ {"matrix": [3, 2], "x": 2.5, "y": 3, "w": 1.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3, "w": 1.25},
+ {"matrix": [3, 4], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "w": 1.25},
+ {"matrix": [3, 7], "x": 7.25, "y": 3, "w": 1.25},
+ {"matrix": [3, 10], "x": 9.5, "y": 3, "w": 1.5}
+ ]
+ },
+ "LAYOUT_ortho_150_center1u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [2, 6], "x": 6, "y": 2},
+ {"matrix": [2, 7], "x": 7, "y": 2},
+ {"matrix": [2, 8], "x": 8, "y": 2},
+ {"matrix": [2, 9], "x": 9, "y": 2},
+ {"matrix": [2, 10], "x": 10, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.5},
+ {"matrix": [3, 2], "x": 2.5, "y": 3},
+ {"matrix": [3, 3], "x": 3.5, "y": 3, "w": 1.5},
+ {"matrix": [3, 4], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "w": 1.5},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 10], "x": 9.5, "y": 3, "w": 1.5}
+ ]
+ },
+ "LAYOUT_ortho_2u_bars": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [2, 6], "x": 6, "y": 2},
+ {"matrix": [2, 7], "x": 7, "y": 2},
+ {"matrix": [2, 8], "x": 8, "y": 2},
+ {"matrix": [2, 9], "x": 9, "y": 2},
+ {"matrix": [2, 10], "x": 10, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.5},
+ {"matrix": [3, 2], "x": 2.5, "y": 3},
+ {"matrix": [3, 3], "x": 3.5, "y": 3, "w": 2},
+ {"matrix": [3, 6], "x": 5.5, "y": 3, "w": 2},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 10], "x": 9.5, "y": 3, "w": 1.5}
+ ]
+ },
+ "LAYOUT_ortho_3u_bars": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [2, 6], "x": 6, "y": 2},
+ {"matrix": [2, 7], "x": 7, "y": 2},
+ {"matrix": [2, 8], "x": 8, "y": 2},
+ {"matrix": [2, 9], "x": 9, "y": 2},
+ {"matrix": [2, 10], "x": 10, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.5},
+ {"matrix": [3, 3], "x": 2.5, "y": 3, "w": 3},
+ {"matrix": [3, 6], "x": 5.5, "y": 3, "w": 3},
+ {"matrix": [3, 10], "x": 9.5, "y": 3, "w": 1.5}
+ ]
+ },
+ "LAYOUT_ortho_6u_bar": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [2, 6], "x": 6, "y": 2},
+ {"matrix": [2, 7], "x": 7, "y": 2},
+ {"matrix": [2, 8], "x": 8, "y": 2},
+ {"matrix": [2, 9], "x": 9, "y": 2},
+ {"matrix": [2, 10], "x": 10, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.5},
+ {"matrix": [3, 4], "x": 2.5, "y": 3, "w": 6},
+ {"matrix": [3, 10], "x": 9.5, "y": 3, "w": 1.5}
+ ]
+ },
+ "LAYOUT_ortho_cain_bars": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [2, 6], "x": 6, "y": 2},
+ {"matrix": [2, 7], "x": 7, "y": 2},
+ {"matrix": [2, 8], "x": 8, "y": 2},
+ {"matrix": [2, 9], "x": 9, "y": 2},
+ {"matrix": [2, 10], "x": 10, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.5},
+ {"matrix": [3, 2], "x": 2.5, "y": 3, "w": 1.25},
+ {"matrix": [3, 3], "x": 3.75, "y": 3, "w": 1.75},
+ {"matrix": [3, 6], "x": 5.5, "y": 3, "w": 1.75},
+ {"matrix": [3, 7], "x": 7.25, "y": 3, "w": 1.25},
+ {"matrix": [3, 10], "x": 9.5, "y": 3, "w": 1.5}
+ ]
+ },
+ "LAYOUT_ortho_centered_3u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [2, 6], "x": 6, "y": 2},
+ {"matrix": [2, 7], "x": 7, "y": 2},
+ {"matrix": [2, 8], "x": 8, "y": 2},
+ {"matrix": [2, 9], "x": 9, "y": 2},
+ {"matrix": [2, 10], "x": 10, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.5},
+ {"matrix": [3, 2], "x": 2.5, "y": 3, "w": 1.5},
+ {"matrix": [3, 4], "x": 4, "y": 3, "w": 3},
+ {"matrix": [3, 7], "x": 7, "y": 3, "w": 1.5},
+ {"matrix": [3, 10], "x": 9.5, "y": 3, "w": 1.5}
+ ]
+ },
+ "LAYOUT_row": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.25},
+ {"matrix": [1, 1], "x": 1.25, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1},
+ {"matrix": [1, 3], "x": 3.25, "y": 1},
+ {"matrix": [1, 4], "x": 4.25, "y": 1},
+ {"matrix": [1, 6], "x": 5.25, "y": 1},
+ {"matrix": [1, 7], "x": 6.25, "y": 1},
+ {"matrix": [1, 8], "x": 7.25, "y": 1},
+ {"matrix": [1, 9], "x": 8.25, "y": 1},
+ {"matrix": [1, 10], "x": 9.25, "y": 1, "w": 1.75},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2, "w": 1.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.5},
+ {"matrix": [3, 2], "x": 2.5, "y": 3},
+ {"matrix": [3, 3], "x": 3.5, "y": 3},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 10], "x": 9.5, "y": 3, "w": 1.5}
+ ]
+ },
+ "LAYOUT_treadstone": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [1, 0], "x": 0.25, "y": 1},
+ {"matrix": [1, 1], "x": 1.25, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1},
+ {"matrix": [1, 3], "x": 3.25, "y": 1},
+ {"matrix": [1, 4], "x": 4.25, "y": 1},
+ {"matrix": [1, 6], "x": 5.75, "y": 1},
+ {"matrix": [1, 7], "x": 6.75, "y": 1},
+ {"matrix": [1, 8], "x": 7.75, "y": 1},
+ {"matrix": [1, 9], "x": 8.75, "y": 1},
+ {"matrix": [1, 10], "x": 9.75, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [2, 6], "x": 6, "y": 2},
+ {"matrix": [2, 7], "x": 7, "y": 2},
+ {"matrix": [2, 8], "x": 8, "y": 2},
+ {"matrix": [2, 9], "x": 9, "y": 2},
+ {"matrix": [2, 10], "x": 10, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.5},
+ {"matrix": [3, 2], "x": 2.5, "y": 3},
+ {"matrix": [3, 3], "x": 3.5, "y": 3},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 10], "x": 9.5, "y": 3, "w": 1.5}
+ ]
+ },
+ "LAYOUT_uniform": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.25},
+ {"matrix": [1, 1], "x": 1.25, "y": 1},
+ {"matrix": [1, 2], "x": 2.25, "y": 1},
+ {"matrix": [1, 3], "x": 3.25, "y": 1},
+ {"matrix": [1, 4], "x": 4.25, "y": 1},
+ {"matrix": [1, 6], "x": 5.25, "y": 1},
+ {"matrix": [1, 7], "x": 6.25, "y": 1},
+ {"matrix": [1, 8], "x": 7.25, "y": 1},
+ {"matrix": [1, 9], "x": 8.25, "y": 1},
+ {"matrix": [1, 10], "x": 9.25, "y": 1, "w": 1.75},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.5},
+ {"matrix": [2, 1], "x": 1.5, "y": 2},
+ {"matrix": [2, 2], "x": 2.5, "y": 2},
+ {"matrix": [2, 3], "x": 3.5, "y": 2},
+ {"matrix": [2, 4], "x": 4.5, "y": 2},
+ {"matrix": [2, 6], "x": 5.5, "y": 2},
+ {"matrix": [2, 7], "x": 6.5, "y": 2},
+ {"matrix": [2, 8], "x": 7.5, "y": 2},
+ {"matrix": [2, 9], "x": 8.5, "y": 2},
+ {"matrix": [2, 10], "x": 9.5, "y": 2, "w": 1.5},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.5},
+ {"matrix": [3, 2], "x": 2.5, "y": 3},
+ {"matrix": [3, 3], "x": 3.5, "y": 3},
+ {"matrix": [3, 4], "x": 4.5, "y": 3},
+ {"matrix": [3, 5], "x": 5.5, "y": 3},
+ {"matrix": [3, 6], "x": 6.5, "y": 3},
+ {"matrix": [3, 7], "x": 7.5, "y": 3},
+ {"matrix": [3, 10], "x": 9.5, "y": 3, "w": 1.5}
+ ]
+ }
+ }
+}
diff --git a/keyboards/jlw/vault35_wkl_universal/keymaps/default/keymap.c b/keyboards/jlw/vault35_wkl_universal/keymaps/default/keymap.c
new file mode 100644
index 00000000000..ae5f304eed6
--- /dev/null
+++ b/keyboards/jlw/vault35_wkl_universal/keymaps/default/keymap.c
@@ -0,0 +1,36 @@
+// Copyright 2024 jlw
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_Q, KC_W, KC_E, KC_R, KC_T, KC_VOLU, KC_Y, KC_U, KC_I, KC_O, KC_P,
+ KC_A, KC_S, KC_D, KC_F, KC_G, KC_VOLD, KC_H, KC_J, KC_K, KC_L, KC_QUOT,
+ KC_Z, KC_X, KC_C, KC_V, KC_B, RGB_TOG, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
+ KC_ESC, MO(1), KC_ENT, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_BSPC
+ ),
+
+ [1] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, KC_7, KC_8, KC_9, KC_0,
+ _______, _______, _______, _______, _______, _______, _______, KC_4, KC_5, KC_6, _______,
+ _______, _______, _______, _______, _______, QK_BOOT, _______, KC_1, KC_2, KC_3, _______,
+ _______, _______, _______, _______, _______, _______, MO(2), _______
+ ),
+
+ [2] = LAYOUT_all(
+ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_UP, KC_LEFT, _______,
+ _______, _______, _______, _______, _______, QK_BOOT, _______, _______, _______, _______, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______
+ )
+};
+
+#ifdef ENCODER_MAP_ENABLE
+const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
+ [0] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
+ [1] = { ENCODER_CCW_CW(RGB_HUD, RGB_HUI) },
+ [2] = { ENCODER_CCW_CW(RGB_VAD, RGB_VAI) }
+};
+#endif
+
diff --git a/keyboards/jlw/vault35_wkl_universal/keymaps/default/rules.mk b/keyboards/jlw/vault35_wkl_universal/keymaps/default/rules.mk
new file mode 100644
index 00000000000..a40474b4d5c
--- /dev/null
+++ b/keyboards/jlw/vault35_wkl_universal/keymaps/default/rules.mk
@@ -0,0 +1 @@
+ENCODER_MAP_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/jlw/vault35_wkl_universal/mcuconf.h b/keyboards/jlw/vault35_wkl_universal/mcuconf.h
new file mode 100644
index 00000000000..3f3e8009459
--- /dev/null
+++ b/keyboards/jlw/vault35_wkl_universal/mcuconf.h
@@ -0,0 +1,11 @@
+// Copyright 2024 jlw
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_TIM17
+#define STM32_PWM_USE_TIM17 TRUE
+#define STM32_TIM17_SUPPRESS_ISR
+
diff --git a/keyboards/jlw/vault35_wkl_universal/readme.md b/keyboards/jlw/vault35_wkl_universal/readme.md
new file mode 100644
index 00000000000..d06ee1a998b
--- /dev/null
+++ b/keyboards/jlw/vault35_wkl_universal/readme.md
@@ -0,0 +1,27 @@
+# Vault 35 WKL Universal
+
+
+
+A drop in replacement PCB for the Vault 35 WKL case, originally designed by ProjectCain Mechvault.
+
+* Keyboard Maintainer: [jlw](https://github.com/josh-l-wang)
+* Hardware Supported: Vault 35 WKL Universal PCB
+* Hardware Availability: [jlw-kb.com](https://jlw-kb.com)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make jlw/vault35_wkl_universal:default
+
+Flashing example for this keyboard:
+
+ make jlw/vault35_wkl_universal:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (the top left key) and plug in the keyboard
+* **Physical reset button**: Hold button on the back of the PCB while plugging in the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/suikagiken/suika85ergo/rules.mk b/keyboards/jlw/vault35_wkl_universal/rules.mk
similarity index 100%
rename from keyboards/suikagiken/suika85ergo/rules.mk
rename to keyboards/jlw/vault35_wkl_universal/rules.mk
diff --git a/keyboards/keebio/iris/keymaps/default/keymap.c b/keyboards/keebio/iris/keymaps/default/keymap.c
deleted file mode 100644
index e1e050ab1d3..00000000000
--- a/keyboards/keebio/iris/keymaps/default/keymap.c
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright 2023 Danny Nguyen (@nooges)
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include QMK_KEYBOARD_H
-
-#define _QWERTY 0
-#define _LOWER 1
-#define _RAISE 2
-#define _ADJUST 3
-
-enum custom_keycodes {
- QWERTY = SAFE_RANGE,
- LOWER,
- RAISE,
- ADJUST,
-};
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
-
- [_QWERTY] = LAYOUT(
- //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
- //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
- //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
- KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT,
- //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_HOME, KC_END, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
- //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
- KC_LGUI, LOWER, KC_ENT, KC_SPC, RAISE, KC_RALT
- // └────────┴────────┴────────┘ └────────┴────────┴────────┘
- ),
-
- [_LOWER] = LAYOUT(
- //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
- //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
- QK_BOOT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
- //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
- KC_DEL, _______, KC_LEFT, KC_RGHT, KC_UP, KC_LBRC, KC_RBRC, KC_P4, KC_P5, KC_P6, KC_PLUS, KC_PIPE,
- //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
- BL_STEP, _______, _______, _______, KC_DOWN, KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_P1, KC_P2, KC_P3, KC_MINS, _______,
- //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
- _______, _______, KC_DEL, KC_DEL, _______, KC_P0
- // └────────┴────────┴────────┘ └────────┴────────┴────────┘
- ),
-
- [_RAISE] = LAYOUT(
- //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
- KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
- //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
- RGB_TOG, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
- //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
- RGB_MOD, KC_MPRV, KC_MNXT, KC_VOLU, KC_PGUP, KC_UNDS, KC_EQL, KC_HOME, RGB_HUI, RGB_SAI, RGB_VAI, KC_BSLS,
- //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
- KC_MUTE, KC_MSTP, KC_MPLY, KC_VOLD, KC_PGDN, KC_MINS, KC_LPRN, _______, KC_PLUS, KC_END, RGB_HUD, RGB_SAD, RGB_VAD, _______,
- //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
- _______, _______, _______, _______, _______, _______
- // └────────┴────────┴────────┘ └────────┴────────┴────────┘
- ),
-
- [_ADJUST] = LAYOUT(
- //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
- _______, _______, _______, _______, _______, _______
- // └────────┴────────┴────────┘ └────────┴────────┴────────┘
- )
-};
-
-bool process_record_user(uint16_t keycode, keyrecord_t *record) {
- switch (keycode) {
- case QWERTY:
- if (record->event.pressed) {
- set_single_persistent_default_layer(_QWERTY);
- }
- return false;
- break;
- case LOWER:
- if (record->event.pressed) {
- layer_on(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_LOWER);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case RAISE:
- if (record->event.pressed) {
- layer_on(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- } else {
- layer_off(_RAISE);
- update_tri_layer(_LOWER, _RAISE, _ADJUST);
- }
- return false;
- break;
- case ADJUST:
- if (record->event.pressed) {
- layer_on(_ADJUST);
- } else {
- layer_off(_ADJUST);
- }
- return false;
- break;
- }
- return true;
-}
diff --git a/keyboards/keebio/iris/keymaps/default/keymap.json b/keyboards/keebio/iris/keymaps/default/keymap.json
new file mode 100644
index 00000000000..8b141d992fd
--- /dev/null
+++ b/keyboards/keebio/iris/keymaps/default/keymap.json
@@ -0,0 +1,29 @@
+{
+ "config": { "features": {"tri_layer": true} },
+ "keyboard": "keebio/iris",
+ "keymap": "default",
+ "layout": "LAYOUT",
+ "layers": [
+ [
+ "QK_GESC", "KC_1" , "KC_2" , "KC_3" , "KC_4" , "KC_5" , "KC_6" , "KC_7" , "KC_8" , "KC_9" , "KC_0" , "KC_BSPC",
+ "KC_TAB" , "KC_Q" , "KC_W" , "KC_E" , "KC_R" , "KC_T" , "KC_Y" , "KC_U" , "KC_I" , "KC_O" , "KC_P" , "KC_DEL" ,
+ "KC_LCTL", "KC_A" , "KC_S" , "KC_D" , "KC_F" , "KC_G" , "KC_H" , "KC_J" , "KC_K" , "KC_L" , "KC_SCLN", "KC_QUOT",
+ "KC_LSFT", "KC_Z" , "KC_X" , "KC_C" , "KC_V" , "KC_B" , "KC_HOME", "KC_END" , "KC_N" , "KC_M" , "KC_COMM", "KC_DOT" , "KC_SLSH", "KC_RSFT",
+ "KC_LGUI", "TL_LOWR", "KC_ENT" , "KC_SPC" , "TL_UPPR", "KC_RALT"
+ ],
+ [
+ "KC_TILD", "KC_EXLM", "KC_AT" , "KC_HASH", "KC_DLR" , "KC_PERC", "KC_CIRC", "KC_AMPR", "KC_ASTR", "KC_LPRN", "KC_RPRN", "KC_PGUP",
+ "KC_GRV" , "_______", "KC_UP" , "_______", "QK_BOOT", "_______", "_______", "KC_P7" , "KC_P8" , "KC_P9" , "KC_P0" , "KC_PGDN",
+ "KC_DEL" , "KC_LEFT", "KC_DOWN", "KC_RGHT", "_______", "KC_LBRC", "KC_RBRC", "KC_P4" , "KC_P5" , "KC_P6" , "KC_PLUS", "KC_PIPE",
+ "RGB_MOD", "EE_CLR" , "_______", "_______", "_______", "KC_LCBR", "KC_LPRN", "KC_RPRN", "KC_RCBR", "KC_P1" , "KC_P2" , "KC_P3" , "KC_MINS", "_______",
+ "_______", "_______", "KC_DEL" , "KC_DEL" , "_______", "KC_P0"
+ ],
+ [
+ "KC_F12" , "KC_F1" , "KC_F2" , "KC_F3" , "KC_F4" , "KC_F5" , "KC_F6" , "KC_F7" , "KC_F8" , "KC_F9" , "KC_F10" , "KC_F11" ,
+ "RGB_TOG", "KC_EXLM", "KC_AT" , "KC_HASH", "KC_DLR" , "KC_PERC", "KC_CIRC", "KC_AMPR", "KC_ASTR", "KC_LPRN", "KC_RPRN", "QK_BOOT",
+ "RGB_MOD", "KC_MPRV", "KC_MNXT", "KC_VOLU", "KC_PGUP", "KC_UNDS", "KC_EQL" , "KC_HOME", "RGB_HUI", "RGB_SAI", "RGB_VAI", "KC_BSLS",
+ "KC_MUTE", "KC_MSTP", "KC_MPLY", "KC_VOLD", "KC_PGDN", "KC_MINS", "KC_LPRN", "_______", "KC_PLUS", "KC_END" , "RGB_HUD", "RGB_SAD", "RGB_VAD", "EE_CLR" ,
+ "_______", "_______", "_______", "_______", "_______", "_______"
+ ]
+ ]
+}
diff --git a/keyboards/keebio/iris/keymaps/via/keymap.c b/keyboards/keebio/iris/keymaps/via/keymap.c
index c2753da2a45..04ebf000b8b 100644
--- a/keyboards/keebio/iris/keymaps/via/keymap.c
+++ b/keyboards/keebio/iris/keymaps/via/keymap.c
@@ -7,14 +7,13 @@ enum custom_layer {
_MAIN,
_FN1,
_FN2,
- _FN3,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_MAIN] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
- KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_DEL,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
@@ -28,13 +27,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_FN1] = LAYOUT(
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
- KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
+ KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_PGUP,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
- QK_BOOT, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
+ KC_GRV, _______, KC_UP, _______, QK_BOOT, _______, _______, KC_P7, KC_P8, KC_P9, KC_P0, KC_PGDN,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
- KC_DEL, _______, KC_LEFT, KC_RGHT, KC_UP, KC_LBRC, KC_RBRC, KC_P4, KC_P5, KC_P6, KC_PLUS, KC_PIPE,
+ KC_DEL, KC_LEFT, KC_DOWN, KC_RGHT, _______, KC_LBRC, KC_RBRC, KC_P4, KC_P5, KC_P6, KC_PLUS, KC_PIPE,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
- BL_STEP, _______, _______, _______, KC_DOWN, KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_P1, KC_P2, KC_P3, KC_MINS, _______,
+ RGB_MOD, EE_CLR, _______, _______, _______, KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_P1, KC_P2, KC_P3, KC_MINS, _______,
//└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
_______, _______, KC_DEL, KC_DEL, _______, KC_P0
// └────────┴────────┴────────┘ └────────┴────────┴────────┘
@@ -44,25 +43,11 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
//┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
KC_F12, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
- RGB_TOG, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, _______,
+ RGB_TOG, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, QK_BOOT,
//├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
RGB_MOD, KC_MPRV, KC_MNXT, KC_VOLU, KC_PGUP, KC_UNDS, KC_EQL, KC_HOME, RGB_HUI, RGB_SAI, RGB_VAI, KC_BSLS,
//├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
- KC_MUTE, KC_MSTP, KC_MPLY, KC_VOLD, KC_PGDN, KC_MINS, KC_LPRN, _______, KC_PLUS, KC_END, RGB_HUD, RGB_SAD, RGB_VAD, _______,
- //└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
- _______, _______, _______, _______, _______, _______
- // └────────┴────────┴────────┘ └────────┴────────┴────────┘
- ),
-
- [_FN3] = LAYOUT(
- //┌────────┬────────┬────────┬────────┬────────┬────────┐ ┌────────┬────────┬────────┬────────┬────────┬────────┐
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- //├────────┼────────┼────────┼────────┼────────┼────────┤ ├────────┼────────┼────────┼────────┼────────┼────────┤
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
- //├────────┼────────┼────────┼────────┼────────┼────────┼────────┐ ┌────────┼────────┼────────┼────────┼────────┼────────┼────────┤
- _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
+ KC_MUTE, KC_MSTP, KC_MPLY, KC_VOLD, KC_PGDN, KC_MINS, KC_LPRN, _______, KC_PLUS, KC_END, RGB_HUD, RGB_SAD, RGB_VAD, EE_CLR,
//└────────┴────────┴────────┴───┬────┴───┬────┴───┬────┴───┬────┘ └───┬────┴───┬────┴───┬────┴───┬────┴────────┴────────┴────────┘
_______, _______, _______, _______, _______, _______
// └────────┴────────┴────────┘ └────────┴────────┴────────┘
diff --git a/keyboards/keebwerk/mega/ansi/rules.mk b/keyboards/keebwerk/mega/ansi/rules.mk
index ba2c38618a2..60dc97f0586 100755
--- a/keyboards/keebwerk/mega/ansi/rules.mk
+++ b/keyboards/keebwerk/mega/ansi/rules.mk
@@ -1,13 +1,13 @@
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+NO_SUSPEND_POWER_DOWN = yes
CIE1931_CURVE = yes
+I2C_DRIVER_REQUIRED = yes
# project specific files
SRC += keyboards/wilba_tech/wt_main.c \
keyboards/wilba_tech/wt_rgb_backlight.c \
drivers/led/issi/is31fl3733.c \
quantum/color.c
-I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/keyboardio/model01/leds.c b/keyboards/keyboardio/model01/leds.c
index 656e176bfad..c9a037906aa 100644
--- a/keyboards/keyboardio/model01/leds.c
+++ b/keyboards/keyboardio/model01/leds.c
@@ -65,12 +65,11 @@ static void set_color_all(uint8_t r, uint8_t g, uint8_t b) {
static void init(void) {
// Enable high current pathway to LEDs - this does violate the USB spec though! (1.6 amps...)
- DDRE |= _BV(6);
- PORTE &= ~_BV(6);
+ gpio_set_pin_output(E6);
+ gpio_write_pin_low(E6);
// Overcurrent check input
- DDRB &= ~_BV(4);
- PORTB &= ~_BV(4);
+ gpio_set_pin_input(B4);
}
static void flush(void) {
diff --git a/keyboards/keyboardio/model01/matrix.c b/keyboards/keyboardio/model01/matrix.c
index 20359ca9718..72948fc0b71 100644
--- a/keyboards/keyboardio/model01/matrix.c
+++ b/keyboards/keyboardio/model01/matrix.c
@@ -69,8 +69,8 @@ static int i2c_set_keyscan_interval(int hand, int delay) {
void matrix_init(void) {
/* Ensure scanner power is on - else right hand will not work */
- DDRC |= _BV(7);
- PORTC |= _BV(7);
+ gpio_set_pin_output(C7);
+ gpio_write_pin_high(C7);
i2c_init();
i2c_set_keyscan_interval(LEFT, 2);
diff --git a/keyboards/keyten/imi60/info.json b/keyboards/keyten/imi60/info.json
new file mode 100644
index 00000000000..2ccf8314116
--- /dev/null
+++ b/keyboards/keyten/imi60/info.json
@@ -0,0 +1,92 @@
+{
+ "manufacturer": "keyten",
+ "keyboard_name": "imi60",
+ "maintainer": "key10iq",
+ "bootloader": "stm32-dfu",
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["A15", "A5", "F1", "A6", "F0", "A7", "C15", "B0", "C14", "B1", "C13", "B11", "B4", "B3"],
+ "rows": ["B10", "B2", "B7", "B6", "B5"]
+ },
+ "processor": "STM32F072",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x6005",
+ "vid": "0xEB69"
+ },
+ "community_layouts": ["60_tsangan_hhkb"],
+ "layouts": {
+ "LAYOUT_60_tsangan_hhkb": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [2, 13], "x": 14, "y": 0},
+ {"matrix": [1, 0], "w": 1.5, "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [1, 13], "w": 1.5, "x": 13.5, "y": 1},
+ {"matrix": [2, 0], "w": 1.75, "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "w": 2.25, "x": 12.75, "y": 2},
+ {"matrix": [3, 0], "w": 2.25, "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 2.25, "y": 3},
+ {"matrix": [3, 2], "x": 3.25, "y": 3},
+ {"matrix": [3, 3], "x": 4.25, "y": 3},
+ {"matrix": [3, 4], "x": 5.25, "y": 3},
+ {"matrix": [3, 5], "x": 6.25, "y": 3},
+ {"matrix": [3, 6], "x": 7.25, "y": 3},
+ {"matrix": [3, 7], "x": 8.25, "y": 3},
+ {"matrix": [3, 8], "x": 9.25, "y": 3},
+ {"matrix": [3, 9], "x": 10.25, "y": 3},
+ {"matrix": [3, 10], "x": 11.25, "y": 3},
+ {"matrix": [4, 12], "w": 1.75, "x": 12.25, "y": 3},
+ {"matrix": [3, 13], "x": 14, "y": 3},
+ {"matrix": [4, 0], "w": 1.5, "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 2], "w": 1.5, "x": 2.5, "y": 4},
+ {"matrix": [4, 6], "w": 7, "x": 4, "y": 4},
+ {"matrix": [4, 10], "w": 1.5, "x": 11, "y": 4},
+ {"matrix": [4, 11], "x": 12.5, "y": 4},
+ {"matrix": [4, 13], "w": 1.5, "x": 13.5, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/keyboards/keyten/imi60/keymaps/default/keymap.c b/keyboards/keyten/imi60/keymaps/default/keymap.c
new file mode 100644
index 00000000000..36859fad550
--- /dev/null
+++ b/keyboards/keyten/imi60/keymaps/default/keymap.c
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_60_tsangan_hhkb(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
+ ),
+
+ [1] = LAYOUT_60_tsangan_hhkb(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
+ KC_TRNS, KC_MPRV, KC_MNXT, KC_MPLY, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/keyten/imi60/keymaps/via/keymap.c b/keyboards/keyten/imi60/keymaps/via/keymap.c
new file mode 100644
index 00000000000..36859fad550
--- /dev/null
+++ b/keyboards/keyten/imi60/keymaps/via/keymap.c
@@ -0,0 +1,22 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+
+ [0] = LAYOUT_60_tsangan_hhkb(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_LCTL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(1),
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL
+ ),
+
+ [1] = LAYOUT_60_tsangan_hhkb(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
+ KC_CAPS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_PSCR, KC_SCRL, KC_PAUS, KC_UP, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_VOLD, KC_VOLU, KC_MUTE, KC_TRNS, KC_TRNS, KC_PAST, KC_PSLS, KC_HOME, KC_PGUP, KC_LEFT, KC_RGHT, KC_TRNS,
+ KC_TRNS, KC_MPRV, KC_MNXT, KC_MPLY, KC_TRNS, KC_TRNS, KC_PPLS, KC_PMNS, KC_END, KC_PGDN, KC_DOWN, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
diff --git a/keyboards/keyten/imi60/keymaps/via/rules.mk b/keyboards/keyten/imi60/keymaps/via/rules.mk
new file mode 100644
index 00000000000..036bd6d1c3e
--- /dev/null
+++ b/keyboards/keyten/imi60/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/keyten/imi60/readme.md b/keyboards/keyten/imi60/readme.md
new file mode 100644
index 00000000000..0d4db774e09
--- /dev/null
+++ b/keyboards/keyten/imi60/readme.md
@@ -0,0 +1,27 @@
+# keyten imi60
+
+imi60 - 60% PCB compatible with keyboards by La-Versa: Animi, Mirimi and Otsukimi
+
+
+
+* Keyboard Maintainer: [keyten](https://github.com/key10iq)
+* Hardware Supported: keyten imi60
+* Hardware Availability: private GB
+
+Make example for this keyboard (after setting up your build environment):
+
+ make keyten/imi60:default
+
+Flashing example for this keyboard:
+
+ make keyten/imi60:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* Bootmagic reset: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* Keycode in layout: Press the key mapped to `QK_BOOT` if it is available
+* Physical reset button: Hold the button on the back of the PCB
diff --git a/keyboards/marksard/treadstone48/rev2/rules.mk b/keyboards/keyten/imi60/rules.mk
similarity index 100%
rename from keyboards/marksard/treadstone48/rev2/rules.mk
rename to keyboards/keyten/imi60/rules.mk
diff --git a/keyboards/keyten/lisa/info.json b/keyboards/keyten/lisa/keyboard.json
similarity index 100%
rename from keyboards/keyten/lisa/info.json
rename to keyboards/keyten/lisa/keyboard.json
diff --git a/keyboards/kira/kira75/kira75.h b/keyboards/kira/kira75/kira75.h
index 8001d69e405..95afb40e46a 100644
--- a/keyboards/kira/kira75/kira75.h
+++ b/keyboards/kira/kira75/kira75.h
@@ -18,9 +18,22 @@
#include "quantum.h"
-// Functions for setting LEDs on toggle keys
-inline void caps_led_on(void) { DDRD |= (1<<7); PORTD &= ~(1<<7); }
-inline void caps_led_off(void) { DDRD &= ~(1<<7); PORTD &= ~(1<<7); }
+#define KIRA75_CAPS_LOCK_LED_PIN D7
+#define KIRA75_NUM_LOCK_LED_PIN D6
-inline void num_led_on(void) { DDRD |= (1<<6); PORTD &= ~(1<<6); }
-inline void num_led_off(void) { DDRD &= ~(1<<6); PORTD &= ~(1<<6); }
+// Functions for setting LEDs on toggle keys
+inline void caps_led_on(void) {
+ gpio_set_pin_output(KIRA75_CAPS_LOCK_LED_PIN);
+ gpio_write_pin_low(KIRA75_CAPS_LOCK_LED_PIN);
+}
+inline void caps_led_off(void) {
+ gpio_set_pin_input(KIRA75_CAPS_LOCK_LED_PIN);
+}
+
+inline void num_led_on(void) {
+ gpio_set_pin_output(KIRA75_NUM_LOCK_LED_PIN);
+ gpio_write_pin_low(KIRA75_NUM_LOCK_LED_PIN);
+}
+inline void num_led_off(void) {
+ gpio_set_pin_input(KIRA75_NUM_LOCK_LED_PIN);
+}
diff --git a/keyboards/kmini/matrix.c b/keyboards/kmini/matrix.c
index 92565e937a0..da177a7a35b 100755
--- a/keyboards/kmini/matrix.c
+++ b/keyboards/kmini/matrix.c
@@ -194,11 +194,13 @@ static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col)
* Caps lock uses its own pin E2
*/
static void init_rows(void) {
- DDRD &= ~((1<<0)| (1<<1) | (1<<2) | (1<<3) | (1<<5)); // IN
- PORTD &= ~((1<<0)| (1<<1) | (1<<2) | (1<<3) | (1<<5)); // LO
+ gpio_set_pin_input(D0);
+ gpio_set_pin_input(D1);
+ gpio_set_pin_input(D2);
+ gpio_set_pin_input(D3);
+ gpio_set_pin_input(D5);
- DDRE &= ~(1<<2); // IN
- PORTE |= (1<<2); // HI
+ gpio_set_pin_input_high(E2);
}
/* Columns 0 - 16
@@ -224,87 +226,103 @@ static void init_rows(void) {
* col 16: B4
*/
static void unselect_cols(void) {
- DDRB |= (1<<5) | (1<<6) | (1<<0) | (1<<7) | (1<<4); // OUT
- PORTB &= ~((1<<5) | (1<<6) | (1<<0) | (1<<7) | (1<<4)); // LO
+ gpio_set_pin_output(B0);
+ gpio_set_pin_output(B4);
+ gpio_set_pin_output(B5);
+ gpio_set_pin_output(B6);
+ gpio_set_pin_output(B7);
+ gpio_write_pin_low(B0);
+ gpio_write_pin_low(B4);
+ gpio_write_pin_low(B5);
+ gpio_write_pin_low(B6);
+ gpio_write_pin_low(B7);
- DDRD |= (1<<4) | (1<<6) | (1<<7); // OUT
- PORTD &= ~((1<<4) | (1<<6) | (1<<7)); // LO
+ gpio_set_pin_output(D4);
+ gpio_set_pin_output(D6);
+ gpio_set_pin_output(D7);
+ gpio_write_pin_low(D4);
+ gpio_write_pin_low(D6);
+ gpio_write_pin_low(D7);
- DDRE |= (1<<6); // OUT
- PORTE &= ~((1<<6)); // LO
+ gpio_set_pin_output(E6);
+ gpio_write_pin_low(E6);
- DDRF |= (1<<0) | (1<<1); // OUT
- PORTF &= ~((1<<0) | (1<<1)); // LO
+ gpio_set_pin_output(F0);
+ gpio_set_pin_output(F1);
+ gpio_write_pin_low(F0);
+ gpio_write_pin_low(F1);
- DDRC |= (1<<7) | (1<<6); // OUT
- PORTC &= ~((1<<7) | (1<<6)); // LO
+ gpio_set_pin_output(C6);
+ gpio_set_pin_output(C7);
+ gpio_write_pin_low(C6);
+ gpio_write_pin_low(C7);
}
static void select_col(uint8_t col)
{
switch (col) {
case 0:
- PORTB |= (1<<5); // HI
+ gpio_write_pin_high(B5); // HI
break;
case 1:
- PORTB |= (1<<6); // HI
+ gpio_write_pin_high(B6); // HI
break;
case 2:
- PORTC |= (1<<6); // HI
+ gpio_write_pin_high(C6); // HI
break;
case 3:
- PORTC |= (1<<6); // HI
- PORTF |= (1<<0); // HI
+ gpio_write_pin_high(C6); // HI
+ gpio_write_pin_high(F0); // HI
break;
case 4:
- PORTC |= (1<<6); // HI
- PORTF |= (1<<1); // HI
+ gpio_write_pin_high(C6); // HI
+ gpio_write_pin_high(F1); // HI
break;
case 5:
- PORTC |= (1<<6); // HI
- PORTF |= (1<<0); // HI
- PORTF |= (1<<1); // HI
+ gpio_write_pin_high(C6); // HI
+ gpio_write_pin_high(F0); // HI
+ gpio_write_pin_high(F1); // HI
break;
case 6:
- PORTC |= (1<<6); // HI
- PORTC |= (1<<7); // HI
+ gpio_write_pin_high(C6); // HI
+ gpio_write_pin_high(C7); // HI
break;
case 7:
- PORTC |= (1<<6); // HI
- PORTF |= (1<<0); // HI
- PORTC |= (1<<7); // HI
+ gpio_write_pin_high(C6); // HI
+ gpio_write_pin_high(F0); // HI
+ gpio_write_pin_high(C7); // HI
break;
case 8:
- PORTC |= (1<<6); // HI
- PORTF |= (1<<1); // HI
- PORTC |= (1<<7); // HI
+ gpio_write_pin_high(C6); // HI
+ gpio_write_pin_high(F1); // HI
+ gpio_write_pin_high(C7); // HI
break;
case 9:
- PORTC |= (1<<6); // HI
- PORTF |= (1<<0); // HI
- PORTF |= (1<<1); // HI
- PORTC |= (1<<7); // HI
+ gpio_write_pin_high(C6); // HI
+ gpio_write_pin_high(F0); // HI
+ gpio_write_pin_high(F1); // HI
+ gpio_write_pin_high(C7); // HI
break;
case 10:
- PORTE |= (1<<6); // HI
+ gpio_write_pin_high(E6); // HI
break;
case 11:
- PORTB |= (1<<0); // HI
+ gpio_write_pin_high(B0); // HI
break;
case 12:
- PORTB |= (1<<7); // HI
+ gpio_write_pin_high(B7); // HI
break;
case 13:
- PORTD |= (1<<4); // HI
+ gpio_write_pin_high(D4); // HI
break;
case 14:
- PORTD |= (1<<6); // HI
+ gpio_write_pin_high(D6); // HI
break;
case 15:
- PORTD |= (1<<7); // HI
+ gpio_write_pin_high(D7); // HI
break;
case 16:
- PORTB |= (1<<4); // HI
+ gpio_write_pin_high(B4); // HI
break;
}
}
diff --git a/keyboards/knops/mini/keymaps/default-gsm-newbs/keymap.c b/keyboards/knops/mini/keymaps/default-gsm-newbs/keymap.c
index 5a629f57ffa..059c7a54db7 100644
--- a/keyboards/knops/mini/keymaps/default-gsm-newbs/keymap.c
+++ b/keyboards/knops/mini/keymaps/default-gsm-newbs/keymap.c
@@ -135,51 +135,51 @@ void set_switch_led(int ledId, bool state) {
if(state) {
switch(ledId) {
case 1:
- PORTD |= (1<<7);
+ gpio_write_pin_high(D7);
break;
case 2:
- if((PINB & (1 << 7)) != 0) {
- PORTC |= (1<<6);
+ if(gpio_read_pin(B7)) {
+ gpio_write_pin_high(C6);
} else {
- PORTC |= (1<<7);
+ gpio_write_pin_high(C7);
}
break;
case 3:
- PORTD |= (1<<4);
+ gpio_write_pin_high(D4);
break;
case 4:
- PORTE |= (1<<6);
+ gpio_write_pin_high(E6);
break;
case 5:
- PORTB |= (1<<4);
+ gpio_write_pin_high(B4);
break;
case 6:
- PORTD |= (1<<6);
+ gpio_write_pin_high(D6);
break;
}
} else {
switch(ledId) {
case 1:
- PORTD &= ~(1<<7);
+ gpio_write_pin_low(D7);
break;
case 2:
- if((PINB & (1 << 7)) != 0) {
- PORTC &= ~(1<<6);
+ if(gpio_read_pin(B7)) {
+ gpio_write_pin_low(C6);
} else {
- PORTC &= ~(1<<7);
+ gpio_write_pin_low(C7);
}
break;
case 3:
- PORTD &= ~(1<<4);
+ gpio_write_pin_low(D4);
break;
case 4:
- PORTE &= ~(1<<6);
+ gpio_write_pin_low(E6);
break;
case 5:
- PORTB &= ~(1<<4);
+ gpio_write_pin_low(B4);
break;
case 6:
- PORTD &= ~(1<<6);
+ gpio_write_pin_low(D6);
break;
}
}
@@ -187,88 +187,88 @@ void set_switch_led(int ledId, bool state) {
void set_layer_led(int layerId) {
- PORTD |= (1<<5);
- PORTB &= ~(1<<6);
- PORTB |= (1<<0);
+ gpio_write_pin_high(D5);
+ gpio_write_pin_low(B6);
+ gpio_write_pin_high(B0);
switch(layerId) {
case 0:
- PORTD &= ~(1<<5);
+ gpio_write_pin_low(D5);
break;
case 1:
- PORTB |= (1<<6);
+ gpio_write_pin_high(B6);
break;
case 2:
- PORTB &= ~(1<<0);
+ gpio_write_pin_low(B0);
break;
}
}
void led_init_ports_user(void) {
// led voor switch #1
- DDRD |= (1<<7);
- PORTD &= ~(1<<7);
+ gpio_set_pin_output(D7);
+ gpio_write_pin_low(D7);
// led voor switch #2
- DDRC |= (1<<6);
- DDRC |= (1<<7);
- PORTC &= ~(1<<6);
- PORTC &= ~(1<<7);
+ gpio_set_pin_output(C6);
+ gpio_set_pin_output(C7);
+ gpio_write_pin_low(C6);
+ gpio_write_pin_low(C7);
// led voor switch #3
- DDRD |= (1<<4);
- PORTD &= ~(1<<4);
+ gpio_set_pin_output(D4);
+ gpio_write_pin_low(D4);
// led voor switch #4
- DDRE |= (1<<6);
- PORTE &= ~(1<<6);
+ gpio_set_pin_output(E6);
+ gpio_write_pin_low(E6);
// led voor switch #5
- DDRB |= (1<<4);
- PORTB &= ~(1<<4);
+ gpio_set_pin_output(B4);
+ gpio_write_pin_low(B4);
// led voor switch #6
- DDRD |= (1<<6);
- PORTD &= ~(1<<6);
+ gpio_set_pin_output(D6);
+ gpio_write_pin_low(D6);
/*
- DDRD |= (1<<7);
- PORTD |= (1<<7);
+ gpio_set_pin_output(D7);
+ gpio_write_pin_high(D7);
- DDRC |= (1<<6);
- PORTC |= (1<<6);
+ gpio_set_pin_output(C6);
+ gpio_write_pin_high(C6);
- DDRD |= (1<<4);
- PORTD |= (1<<4);
+ gpio_set_pin_output(D4);
+ gpio_write_pin_high(D4);
- DDRE |= (1<<6);
- PORTE |= (1<<6);
+ gpio_set_pin_output(E6);
+ gpio_write_pin_high(E6);
- DDRB |= (1<<4);
- PORTB |= (1<<4);
+ gpio_set_pin_output(B4);
+ gpio_write_pin_high(B4);
- DDRD |= (1<<6);
- PORTD |= (1<<6);
+ gpio_set_pin_output(D6);
+ gpio_write_pin_high(D6);
// */
- DDRD |= (1<<5);
- DDRB |= (1<<6);
- DDRB |= (1<<0);
+ gpio_set_pin_output(D5);
+ gpio_set_pin_output(B6);
+ gpio_set_pin_output(B0);
//led_set_layer(0);
}
void matrix_init_user(void) {
led_init_ports_user();
- PORTB |= (1 << 7);
- DDRB &= ~(1<<7);
+ gpio_write_pin_high(B7);
+ gpio_set_pin_input(B7);
- PORTD |= (1<<7);
- PORTC |= (1<<6);
- PORTC |= (1<<7);
- PORTD |= (1<<4);
- PORTE |= (1<<6);
- PORTB |= (1<<4);
- PORTD |= (1<<6);
+ gpio_write_pin_high(D7);
+ gpio_write_pin_high(C6);
+ gpio_write_pin_high(C7);
+ gpio_write_pin_high(D4);
+ gpio_write_pin_high(E6);
+ gpio_write_pin_high(B4);
+ gpio_write_pin_high(D6);
set_layer_led(0);
}
diff --git a/keyboards/knops/mini/keymaps/default/keymap.c b/keyboards/knops/mini/keymaps/default/keymap.c
index de990cc597c..6f879c67380 100644
--- a/keyboards/knops/mini/keymaps/default/keymap.c
+++ b/keyboards/knops/mini/keymaps/default/keymap.c
@@ -61,51 +61,51 @@ void set_switch_led(int ledId, bool state) {
if(state) {
switch(ledId) {
case 1:
- PORTD |= (1<<7);
+ gpio_write_pin_high(D7);
break;
case 2:
- if((PINB & (1 << 7)) != 0) {
- PORTC |= (1<<6);
+ if(gpio_read_pin(B7)) {
+ gpio_write_pin_high(C6);
} else {
- PORTC |= (1<<7);
+ gpio_write_pin_high(C7);
}
break;
case 3:
- PORTD |= (1<<4);
+ gpio_write_pin_high(D4);
break;
case 4:
- PORTE |= (1<<6);
+ gpio_write_pin_high(E6);
break;
case 5:
- PORTB |= (1<<4);
+ gpio_write_pin_high(B4);
break;
case 6:
- PORTD |= (1<<6);
+ gpio_write_pin_high(D6);
break;
}
} else {
switch(ledId) {
case 1:
- PORTD &= ~(1<<7);
+ gpio_write_pin_low(D7);
break;
case 2:
- if((PINB & (1 << 7)) != 0) {
- PORTC &= ~(1<<6);
+ if(gpio_read_pin(B7)) {
+ gpio_write_pin_low(C6);
} else {
- PORTC &= ~(1<<7);
+ gpio_write_pin_low(C7);
}
break;
case 3:
- PORTD &= ~(1<<4);
+ gpio_write_pin_low(D4);
break;
case 4:
- PORTE &= ~(1<<6);
+ gpio_write_pin_low(E6);
break;
case 5:
- PORTB &= ~(1<<4);
+ gpio_write_pin_low(B4);
break;
case 6:
- PORTD &= ~(1<<6);
+ gpio_write_pin_low(D6);
break;
}
}
@@ -113,88 +113,88 @@ void set_switch_led(int ledId, bool state) {
void set_layer_led(int layerId) {
- PORTD |= (1<<5);
- PORTB &= ~(1<<6);
- PORTB |= (1<<0);
+ gpio_write_pin_high(D5);
+ gpio_write_pin_low(B6);
+ gpio_write_pin_high(B0);
switch(layerId) {
case 0:
- PORTD &= ~(1<<5);
+ gpio_write_pin_low(D5);
break;
case 1:
- PORTB |= (1<<6);
+ gpio_write_pin_high(B6);
break;
case 2:
- PORTB &= ~(1<<0);
+ gpio_write_pin_low(B0);
break;
}
}
void led_init_ports_user(void) {
// led voor switch #1
- DDRD |= (1<<7);
- PORTD &= ~(1<<7);
+ gpio_set_pin_output(D7);
+ gpio_write_pin_low(D7);
// led voor switch #2
- DDRC |= (1<<6);
- DDRC |= (1<<7);
- PORTC &= ~(1<<6);
- PORTC &= ~(1<<7);
+ gpio_set_pin_output(C6);
+ gpio_set_pin_output(C7);
+ gpio_write_pin_low(C6);
+ gpio_write_pin_low(C7);
// led voor switch #3
- DDRD |= (1<<4);
- PORTD &= ~(1<<4);
+ gpio_set_pin_output(D4);
+ gpio_write_pin_low(D4);
// led voor switch #4
- DDRE |= (1<<6);
- PORTE &= ~(1<<6);
+ gpio_set_pin_output(E6);
+ gpio_write_pin_low(E6);
// led voor switch #5
- DDRB |= (1<<4);
- PORTB &= ~(1<<4);
+ gpio_set_pin_output(B4);
+ gpio_write_pin_low(B4);
// led voor switch #6
- DDRD |= (1<<6);
- PORTD &= ~(1<<6);
+ gpio_set_pin_output(D6);
+ gpio_write_pin_low(D6);
/*
- DDRD |= (1<<7);
- PORTD |= (1<<7);
+ gpio_set_pin_output(D7);
+ gpio_write_pin_high(D7);
- DDRC |= (1<<6);
- PORTC |= (1<<6);
+ gpio_set_pin_output(C6);
+ gpio_write_pin_high(C6);
- DDRD |= (1<<4);
- PORTD |= (1<<4);
+ gpio_set_pin_output(D4);
+ gpio_write_pin_high(D4);
- DDRE |= (1<<6);
- PORTE |= (1<<6);
+ gpio_set_pin_output(E6);
+ gpio_write_pin_high(E6);
- DDRB |= (1<<4);
- PORTB |= (1<<4);
+ gpio_set_pin_output(B4);
+ gpio_write_pin_high(B4);
- DDRD |= (1<<6);
- PORTD |= (1<<6);
+ gpio_set_pin_output(D6);
+ gpio_write_pin_high(D6);
// */
- DDRD |= (1<<5);
- DDRB |= (1<<6);
- DDRB |= (1<<0);
+ gpio_set_pin_output(D5);
+ gpio_set_pin_output(B6);
+ gpio_set_pin_output(B0);
//led_set_layer(0);
}
void matrix_init_user(void) {
led_init_ports_user();
- PORTB |= (1 << 7);
- DDRB &= ~(1<<7);
+ gpio_write_pin_high(B7);
+ gpio_set_pin_input(B7);
- PORTD |= (1<<7);
- PORTC |= (1<<6);
- PORTC |= (1<<7);
- PORTD |= (1<<4);
- PORTE |= (1<<6);
- PORTB |= (1<<4);
- PORTD |= (1<<6);
+ gpio_write_pin_high(D7);
+ gpio_write_pin_high(C6);
+ gpio_write_pin_high(C7);
+ gpio_write_pin_high(D4);
+ gpio_write_pin_high(E6);
+ gpio_write_pin_high(B4);
+ gpio_write_pin_high(D6);
set_layer_led(0);
}
diff --git a/keyboards/latincompass/latin47ble/info.json b/keyboards/latincompass/latin47ble/keyboard.json
similarity index 100%
rename from keyboards/latincompass/latin47ble/info.json
rename to keyboards/latincompass/latin47ble/keyboard.json
diff --git a/keyboards/latincompass/latin64ble/info.json b/keyboards/latincompass/latin64ble/keyboard.json
similarity index 100%
rename from keyboards/latincompass/latin64ble/info.json
rename to keyboards/latincompass/latin64ble/keyboard.json
diff --git a/keyboards/latincompass/latinpadble/info.json b/keyboards/latincompass/latinpadble/keyboard.json
similarity index 100%
rename from keyboards/latincompass/latinpadble/info.json
rename to keyboards/latincompass/latinpadble/keyboard.json
diff --git a/keyboards/lazydesigners/dimple/ortho/info.json b/keyboards/lazydesigners/dimple/ortho/keyboard.json
similarity index 98%
rename from keyboards/lazydesigners/dimple/ortho/info.json
rename to keyboards/lazydesigners/dimple/ortho/keyboard.json
index 7328cfca79e..f5c0cf3ad0f 100644
--- a/keyboards/lazydesigners/dimple/ortho/info.json
+++ b/keyboards/lazydesigners/dimple/ortho/keyboard.json
@@ -8,6 +8,12 @@
"pid": "0x0040",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
"matrix_pins": {
"cols": ["B0", "B1", "B2", "B3", "D4", "D6", "D7", "B4", "B5", "B6", "C6", "C7"],
"rows": ["D0", "D1", "D2", "D3"]
diff --git a/keyboards/lazydesigners/dimple/ortho/rules.mk b/keyboards/lazydesigners/dimple/ortho/rules.mk
index 902a3d4bbc7..dcedd7449b5 100644
--- a/keyboards/lazydesigners/dimple/ortho/rules.mk
+++ b/keyboards/lazydesigners/dimple/ortho/rules.mk
@@ -1,3 +1,4 @@
# Disable unsupported hardware
BACKLIGHT_SUPPORTED = no
RGBLIGHT_ENABLE = no
+AUDIO_SUPPORTED = no
diff --git a/keyboards/lazydesigners/dimple/rules.mk b/keyboards/lazydesigners/dimple/rules.mk
index 5316d1bc7e1..cd05623d841 100644
--- a/keyboards/lazydesigners/dimple/rules.mk
+++ b/keyboards/lazydesigners/dimple/rules.mk
@@ -1,17 +1 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
-
-# Disable unsupported hardware
-AUDIO_SUPPORTED = no
DEFAULT_FOLDER = lazydesigners/dimple/staggered/rev1
diff --git a/keyboards/lazydesigners/dimple/staggered/rev2/info.json b/keyboards/lazydesigners/dimple/staggered/rev1/keyboard.json
similarity index 93%
rename from keyboards/lazydesigners/dimple/staggered/rev2/info.json
rename to keyboards/lazydesigners/dimple/staggered/rev1/keyboard.json
index 5109d49d3c8..bc5822214ab 100644
--- a/keyboards/lazydesigners/dimple/staggered/rev2/info.json
+++ b/keyboards/lazydesigners/dimple/staggered/rev1/keyboard.json
@@ -1,4 +1,15 @@
{
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "indicators": {
+ "caps_lock": "E6",
+ "on_state": 0
+ },
"layouts": {
"LAYOUT": {
"layout": [
diff --git a/keyboards/lazydesigners/dimple/staggered/rev1/rules.mk b/keyboards/lazydesigners/dimple/staggered/rev1/rules.mk
index 2fdb308d164..623023fdb63 100644
--- a/keyboards/lazydesigners/dimple/staggered/rev1/rules.mk
+++ b/keyboards/lazydesigners/dimple/staggered/rev1/rules.mk
@@ -1,4 +1,3 @@
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-
# Disable unsupported hardware
BACKLIGHT_SUPPORTED = no
+AUDIO_SUPPORTED = no
diff --git a/keyboards/lazydesigners/dimple/staggered/rev1/info.json b/keyboards/lazydesigners/dimple/staggered/rev2/keyboard.json
similarity index 96%
rename from keyboards/lazydesigners/dimple/staggered/rev1/info.json
rename to keyboards/lazydesigners/dimple/staggered/rev2/keyboard.json
index 65e559b252d..d8b051db650 100644
--- a/keyboards/lazydesigners/dimple/staggered/rev1/info.json
+++ b/keyboards/lazydesigners/dimple/staggered/rev2/keyboard.json
@@ -1,7 +1,9 @@
{
- "indicators": {
- "caps_lock": "E6",
- "on_state": 0
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
},
"layouts": {
"LAYOUT": {
diff --git a/keyboards/lazydesigners/dimple/staggered/rev2/rules.mk b/keyboards/lazydesigners/dimple/staggered/rev2/rules.mk
index 1961392f2db..748a459f785 100644
--- a/keyboards/lazydesigners/dimple/staggered/rev2/rules.mk
+++ b/keyboards/lazydesigners/dimple/staggered/rev2/rules.mk
@@ -1,4 +1,3 @@
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-
# Disable unsupported hardware
RGBLIGHT_ENABLE = no
+AUDIO_SUPPORTED = no
diff --git a/keyboards/lazydesigners/dimple/staggered/rev3/info.json b/keyboards/lazydesigners/dimple/staggered/rev3/keyboard.json
similarity index 98%
rename from keyboards/lazydesigners/dimple/staggered/rev3/info.json
rename to keyboards/lazydesigners/dimple/staggered/rev3/keyboard.json
index 332a554610d..9262048c8ab 100644
--- a/keyboards/lazydesigners/dimple/staggered/rev3/info.json
+++ b/keyboards/lazydesigners/dimple/staggered/rev3/keyboard.json
@@ -1,4 +1,11 @@
{
+ "features": {
+ "backlight": true,
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
"backlight": {
"pin": "B7"
},
diff --git a/keyboards/lazydesigners/dimple/staggered/rev3/rules.mk b/keyboards/lazydesigners/dimple/staggered/rev3/rules.mk
index b3b1cc58a19..748a459f785 100644
--- a/keyboards/lazydesigners/dimple/staggered/rev3/rules.mk
+++ b/keyboards/lazydesigners/dimple/staggered/rev3/rules.mk
@@ -1,4 +1,3 @@
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-
# Disable unsupported hardware
RGBLIGHT_ENABLE = no
+AUDIO_SUPPORTED = no
diff --git a/keyboards/lazydesigners/the50/the50.c b/keyboards/lazydesigners/the50/the50.c
index 35c678fd5e0..bf0391bfb45 100644
--- a/keyboards/lazydesigners/the50/the50.c
+++ b/keyboards/lazydesigners/the50/the50.c
@@ -1,9 +1,12 @@
#include "the50.h"
+#define THE50_LED_PIN B7
+
void the50_led_on(void) {
- DDRB |= (1 << 7); PORTB &= ~(1 << 7);
+ gpio_set_pin_output(THE50_LED_PIN);
+ gpio_write_pin_low(THE50_LED_PIN);
}
void the50_led_off(void) {
- DDRB &= ~(1 << 7); PORTB &= ~(1 << 7);
+ gpio_set_pin_input(THE50_LED_PIN);
}
diff --git a/keyboards/lets_split/rev2/info.json b/keyboards/lets_split/rev2/keyboard.json
similarity index 100%
rename from keyboards/lets_split/rev2/info.json
rename to keyboards/lets_split/rev2/keyboard.json
diff --git a/keyboards/lets_split/sockets/info.json b/keyboards/lets_split/sockets/keyboard.json
similarity index 100%
rename from keyboards/lets_split/sockets/info.json
rename to keyboards/lets_split/sockets/keyboard.json
diff --git a/keyboards/linworks/fave65h/info.json b/keyboards/linworks/fave65h/keyboard.json
similarity index 100%
rename from keyboards/linworks/fave65h/info.json
rename to keyboards/linworks/fave65h/keyboard.json
diff --git a/keyboards/linworks/fave84h/info.json b/keyboards/linworks/fave84h/keyboard.json
similarity index 100%
rename from keyboards/linworks/fave84h/info.json
rename to keyboards/linworks/fave84h/keyboard.json
diff --git a/keyboards/linworks/fave87h/info.json b/keyboards/linworks/fave87h/keyboard.json
similarity index 100%
rename from keyboards/linworks/fave87h/info.json
rename to keyboards/linworks/fave87h/keyboard.json
diff --git a/keyboards/loki65/info.json b/keyboards/loki65/keyboard.json
similarity index 100%
rename from keyboards/loki65/info.json
rename to keyboards/loki65/keyboard.json
diff --git a/keyboards/lucid/alexa/info.json b/keyboards/lucid/alexa/keyboard.json
similarity index 100%
rename from keyboards/lucid/alexa/info.json
rename to keyboards/lucid/alexa/keyboard.json
diff --git a/keyboards/lucid/alexa_solder/info.json b/keyboards/lucid/alexa_solder/keyboard.json
similarity index 100%
rename from keyboards/lucid/alexa_solder/info.json
rename to keyboards/lucid/alexa_solder/keyboard.json
diff --git a/keyboards/lucid/kbd8x_hs/info.json b/keyboards/lucid/kbd8x_hs/keyboard.json
similarity index 100%
rename from keyboards/lucid/kbd8x_hs/info.json
rename to keyboards/lucid/kbd8x_hs/keyboard.json
diff --git a/keyboards/lucid/phantom_hs/info.json b/keyboards/lucid/phantom_hs/keyboard.json
similarity index 100%
rename from keyboards/lucid/phantom_hs/info.json
rename to keyboards/lucid/phantom_hs/keyboard.json
diff --git a/keyboards/lucid/phantom_solder/info.json b/keyboards/lucid/phantom_solder/keyboard.json
similarity index 100%
rename from keyboards/lucid/phantom_solder/info.json
rename to keyboards/lucid/phantom_solder/keyboard.json
diff --git a/keyboards/lucid/scarlet/info.json b/keyboards/lucid/scarlet/keyboard.json
similarity index 100%
rename from keyboards/lucid/scarlet/info.json
rename to keyboards/lucid/scarlet/keyboard.json
diff --git a/keyboards/lucid/velvet_hotswap/info.json b/keyboards/lucid/velvet_hotswap/keyboard.json
similarity index 100%
rename from keyboards/lucid/velvet_hotswap/info.json
rename to keyboards/lucid/velvet_hotswap/keyboard.json
diff --git a/keyboards/lucid/velvet_solder/info.json b/keyboards/lucid/velvet_solder/keyboard.json
similarity index 100%
rename from keyboards/lucid/velvet_solder/info.json
rename to keyboards/lucid/velvet_solder/keyboard.json
diff --git a/keyboards/lyso1/lck75/info.json b/keyboards/lyso1/lck75/keyboard.json
similarity index 100%
rename from keyboards/lyso1/lck75/info.json
rename to keyboards/lyso1/lck75/keyboard.json
diff --git a/keyboards/lz/erghost/info.json b/keyboards/lz/erghost/keyboard.json
similarity index 100%
rename from keyboards/lz/erghost/info.json
rename to keyboards/lz/erghost/keyboard.json
diff --git a/keyboards/maple_computing/jnao/config.h b/keyboards/maple_computing/jnao/config.h
deleted file mode 100644
index c2949ab3a7a..00000000000
--- a/keyboards/maple_computing/jnao/config.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-Copyright 2012 Jun Wako
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
-*/
-
-#pragma once
-
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
-
diff --git a/keyboards/maple_computing/jnao/info.json b/keyboards/maple_computing/jnao/keyboard.json
similarity index 98%
rename from keyboards/maple_computing/jnao/info.json
rename to keyboards/maple_computing/jnao/keyboard.json
index 861baa95b94..97b51a7680f 100644
--- a/keyboards/maple_computing/jnao/info.json
+++ b/keyboards/maple_computing/jnao/keyboard.json
@@ -27,6 +27,12 @@
"command": true,
"backlight": true
},
+ "qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ }
+ },
"community_layouts": ["ortho_5x12", "ortho_4x12"],
"layouts": {
"LAYOUT_ortho_5x12": {
diff --git a/keyboards/maple_computing/lets_split_eh/lets_split_eh.c b/keyboards/maple_computing/lets_split_eh/eh/eh.c
similarity index 100%
rename from keyboards/maple_computing/lets_split_eh/lets_split_eh.c
rename to keyboards/maple_computing/lets_split_eh/eh/eh.c
diff --git a/keyboards/maple_computing/lets_split_eh/eh/info.json b/keyboards/maple_computing/lets_split_eh/eh/keyboard.json
similarity index 100%
rename from keyboards/maple_computing/lets_split_eh/eh/info.json
rename to keyboards/maple_computing/lets_split_eh/eh/keyboard.json
diff --git a/keyboards/marksard/treadstone48/rev2/info.json b/keyboards/marksard/treadstone48/rev2/keyboard.json
similarity index 100%
rename from keyboards/marksard/treadstone48/rev2/info.json
rename to keyboards/marksard/treadstone48/rev2/keyboard.json
diff --git a/keyboards/massdrop/alt/info.json b/keyboards/massdrop/alt/keyboard.json
similarity index 100%
rename from keyboards/massdrop/alt/info.json
rename to keyboards/massdrop/alt/keyboard.json
diff --git a/keyboards/massdrop/ctrl/info.json b/keyboards/massdrop/ctrl/keyboard.json
similarity index 100%
rename from keyboards/massdrop/ctrl/info.json
rename to keyboards/massdrop/ctrl/keyboard.json
diff --git a/keyboards/matrix/abelx/info.json b/keyboards/matrix/abelx/keyboard.json
similarity index 99%
rename from keyboards/matrix/abelx/info.json
rename to keyboards/matrix/abelx/keyboard.json
index d62ddf53e22..7fcad281da2 100644
--- a/keyboards/matrix/abelx/info.json
+++ b/keyboards/matrix/abelx/keyboard.json
@@ -34,6 +34,8 @@
"extrakey": true,
"rgblight": true
},
+ "processor": "STM32F411",
+ "bootloader": "custom",
"layouts": {
"LAYOUT_tkl_ansi": {
"layout": [
diff --git a/keyboards/matrix/abelx/rules.mk b/keyboards/matrix/abelx/rules.mk
index 00a63f4a279..ee9c23c0864 100644
--- a/keyboards/matrix/abelx/rules.mk
+++ b/keyboards/matrix/abelx/rules.mk
@@ -1,33 +1,7 @@
-#
-# - the next two should match the directories in
-# /os/hal/ports/$(MCU_FAMILY)/$(MCU_SERIES)
-MCU_FAMILY = STM32
-MCU_SERIES = STM32F4xx
-
-# Linker script to use
-# - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/
-# or /ld/
+# custom bootloader
MCU_LDSCRIPT = abelx_boot
-
-# Startup code to use
-# - it should exist in /os/common/startup/ARMCMx/compilers/GCC/mk/
-MCU_STARTUP = stm32f4xx
-
-# Board: it should exist either in /os/hal/boards/
-# or /boards
BOARD = abelx_bd
-# Cortex version
-MCU = cortex-m4
-
-# ARM version, CORTEX-M0/M1 are 6, CORTEX-M3/M4/M7 are 7
-ARMV = 7
-
-USE_FPU = yes
-
-# Bootloader selection
-BOOTLOADER = custom
-
CUSTOM_MATRIX = lite
# project specific files
SRC += matrix.c tca6424.c aw9523b.c
diff --git a/keyboards/matrix/m12og/rev1/info.json b/keyboards/matrix/m12og/rev1/keyboard.json
similarity index 99%
rename from keyboards/matrix/m12og/rev1/info.json
rename to keyboards/matrix/m12og/rev1/keyboard.json
index d5ee589cc17..c956720a8d0 100644
--- a/keyboards/matrix/m12og/rev1/info.json
+++ b/keyboards/matrix/m12og/rev1/keyboard.json
@@ -40,6 +40,8 @@
"build": {
"lto": true
},
+ "bootloader": "custom",
+ "processor": "STM32F103",
"layout_aliases": {
"LAYOUT_all": "LAYOUT_tkl_ansi_tsangan"
},
diff --git a/keyboards/matrix/m12og/rev1/rev1.c b/keyboards/matrix/m12og/rev1/rev1.c
index 702d3857c4b..f517703c605 100644
--- a/keyboards/matrix/m12og/rev1/rev1.c
+++ b/keyboards/matrix/m12og/rev1/rev1.c
@@ -29,4 +29,6 @@ void keyboard_post_init_kb(void) {
rgblight_enable_noeeprom();
rgblight_sethsv_noeeprom(5, 255, 255);
rgblight_mode_noeeprom(37);
+
+ keyboard_post_init_user();
}
diff --git a/keyboards/matrix/m12og/rev1/rules.mk b/keyboards/matrix/m12og/rev1/rules.mk
index bc406d1cba4..077011cdc16 100644
--- a/keyboards/matrix/m12og/rev1/rules.mk
+++ b/keyboards/matrix/m12og/rev1/rules.mk
@@ -1,12 +1,6 @@
-# MCU name
-MCU = STM32F103
-
+# custom bootloader
MCU_LDSCRIPT = m12og_v1
-
BOARD = m12og_v1
-# Bootloader selection
-BOOTLOADER = custom
-
CUSTOM_MATRIX = lite
SRC += matrix.c
diff --git a/keyboards/matrix/m12og/rev2/rev2.c b/keyboards/matrix/m12og/rev2/rev2.c
index 1a35dff7a90..fb424b164fb 100644
--- a/keyboards/matrix/m12og/rev2/rev2.c
+++ b/keyboards/matrix/m12og/rev2/rev2.c
@@ -4,10 +4,12 @@
#include "quantum.h"
-void matrix_init_user(void) {
+void matrix_init_kb(void) {
setPinOutput(C6);
setPinOutput(B2);
setPinOutput(B1);
+
+ matrix_init_user();
}
bool led_update_kb(led_t led_state) {
diff --git a/keyboards/matrix/m20add/info.json b/keyboards/matrix/m20add/keyboard.json
similarity index 99%
rename from keyboards/matrix/m20add/info.json
rename to keyboards/matrix/m20add/keyboard.json
index 5a999bb4847..fc58d242e60 100644
--- a/keyboards/matrix/m20add/info.json
+++ b/keyboards/matrix/m20add/keyboard.json
@@ -34,6 +34,8 @@
"extrakey": true,
"rgblight": true
},
+ "processor": "STM32F411",
+ "bootloader": "custom",
"layouts": {
"LAYOUT_tkl_ansi_tsangan": {
"layout": [
diff --git a/keyboards/matrix/m20add/rules.mk b/keyboards/matrix/m20add/rules.mk
index 150bd24e30e..980cf9518bd 100644
--- a/keyboards/matrix/m20add/rules.mk
+++ b/keyboards/matrix/m20add/rules.mk
@@ -1,18 +1,7 @@
-# MCU name
-MCU = STM32F411
-
-# Linker script to use
-# - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/
-# or /ld/
+# custom bootloader
MCU_LDSCRIPT = m20add_boot
-
-# Board: it should exist either in /os/hal/boards/
-# or /boards
BOARD = ST_NUCLEO64_F411RE
-# Bootloader selection
-BOOTLOADER = custom
-
CUSTOM_MATRIX = lite
# project specific files
SRC += matrix.c tca6424.c rgb_ring.c drivers/led/issi/is31fl3731.c
diff --git a/keyboards/matrix/noah/info.json b/keyboards/matrix/noah/keyboard.json
similarity index 99%
rename from keyboards/matrix/noah/info.json
rename to keyboards/matrix/noah/keyboard.json
index 959c3c8c9c9..eb13e16aa2b 100644
--- a/keyboards/matrix/noah/info.json
+++ b/keyboards/matrix/noah/keyboard.json
@@ -83,6 +83,8 @@
"rgblight": true,
"rgb_matrix": true
},
+ "processor": "STM32F411",
+ "bootloader": "custom",
"community_layouts": ["65_iso_blocker"],
"layouts": {
"LAYOUT_default": {
diff --git a/keyboards/matrix/noah/rules.mk b/keyboards/matrix/noah/rules.mk
index d1c19f36ffe..407c120a524 100644
--- a/keyboards/matrix/noah/rules.mk
+++ b/keyboards/matrix/noah/rules.mk
@@ -1,18 +1,7 @@
-# MCU name
-MCU = STM32F411
-
-# Linker script to use
-# - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/
-# or /ld/
+# custom bootloader
MCU_LDSCRIPT = noah_boot
-
-# Board: it should exist either in /os/hal/boards/
-# or /boards
BOARD = ST_NUCLEO64_F411RE
-# Bootloader selection
-BOOTLOADER = custom
-
WS2812_DRIVER_REQUIRED = yes
CUSTOM_MATRIX = yes
diff --git a/keyboards/mechkeys/acr60/keyboard.json b/keyboards/mechkeys/acr60/keyboard.json
index f2d618b8bd1..916a750b963 100644
--- a/keyboards/mechkeys/acr60/keyboard.json
+++ b/keyboards/mechkeys/acr60/keyboard.json
@@ -53,8 +53,10 @@
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
+ "community_layouts": ["60_ansi", "60_ansi_split_bs_rshift", "60_ansi_tsangan", "60_tsangan_hhkb", "60_ansi_wkl", "60_ansi_wkl_split_bs_rshift", "60_ansi_arrow", "64_ansi", "60_hhkb", "60_iso", "60_iso_split_bs_rshift", "60_iso_tsangan", "60_iso_tsangan_split_bs_rshift", "60_iso_wkl", "60_iso_wkl_split_bs_rshift", "64_iso"],
"layout_aliases": {
- "LAYOUT_2_shifts": "LAYOUT_all"
+ "LAYOUT_2_shifts": "LAYOUT_all",
+ "LAYOUT_mitchsplit": "LAYOUT_60_ansi_split_space_split_rshift"
},
"layouts": {
"LAYOUT_all": {
@@ -133,6 +135,1623 @@
{"matrix": [4, 14], "x": 14, "y": 4}
]
},
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 14], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 14], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 12.5, "y": 4},
+ {"matrix": [4, 14], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_tsangan_hhkb": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 12.5, "y": 4},
+ {"matrix": [4, 14], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_ansi_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_ansi_wkl_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_ansi_arrow": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 12], "x": 11.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 13, "y": 3},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4},
+ {"matrix": [4, 11], "x": 11, "y": 4},
+ {"matrix": [4, 12], "x": 12, "y": 4},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_60_ansi_arrow_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 12], "x": 11.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 13, "y": 3},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4},
+ {"matrix": [4, 11], "x": 11, "y": 4},
+ {"matrix": [4, 12], "x": 12, "y": 4},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_64_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3},
+ {"matrix": [3, 7], "x": 7, "y": 3},
+ {"matrix": [3, 8], "x": 8, "y": 3},
+ {"matrix": [3, 9], "x": 9, "y": 3},
+ {"matrix": [3, 10], "x": 10, "y": 3},
+ {"matrix": [3, 11], "x": 11, "y": 3},
+ {"matrix": [3, 12], "x": 12, "y": 3},
+ {"matrix": [3, 13], "x": 13, "y": 3},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4},
+ {"matrix": [4, 11], "x": 11, "y": 4},
+ {"matrix": [4, 12], "x": 12, "y": 4},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_64_ansi_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3},
+ {"matrix": [3, 7], "x": 7, "y": 3},
+ {"matrix": [3, 8], "x": 8, "y": 3},
+ {"matrix": [3, 9], "x": 9, "y": 3},
+ {"matrix": [3, 10], "x": 10, "y": 3},
+ {"matrix": [3, 11], "x": 11, "y": 3},
+ {"matrix": [3, 12], "x": 12, "y": 3},
+ {"matrix": [3, 13], "x": 13, "y": 3},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4},
+ {"matrix": [4, 11], "x": 11, "y": 4},
+ {"matrix": [4, 12], "x": 12, "y": 4},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_60_hhkb": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 12.5, "y": 4}
+ ]
+ },
+ "LAYOUT_60_true_hhkb": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+ {"matrix": [1, 14], "x": 13.5, "y": 1, "w": 1.5},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 6},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.5},
+ {"matrix": [4, 11], "x": 11.5, "y": 4}
+ ]
+ },
+ "LAYOUT_60_iso": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [1, 14], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 14], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [1, 14], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 14], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [1, 14], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 12.5, "y": 4},
+ {"matrix": [4, 14], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_tsangan_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [1, 14], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 1], "x": 1.5, "y": 4},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 13], "x": 12.5, "y": 4},
+ {"matrix": [4, 14], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_wkl": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [1, 14], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 2.75},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_wkl_split_bs_rshift": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [1, 14], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.5},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.5},
+ {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
+ {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
+ {"matrix": [4, 14], "x": 13.5, "y": 4, "w": 1.5}
+ ]
+ },
+ "LAYOUT_60_iso_arrow": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [1, 14], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 12], "x": 11.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 13, "y": 3},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4},
+ {"matrix": [4, 11], "x": 11, "y": 4},
+ {"matrix": [4, 12], "x": 12, "y": 4},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_60_iso_arrow_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [1, 14], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 12], "x": 11.25, "y": 3, "w": 1.75},
+ {"matrix": [3, 13], "x": 13, "y": 3},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4},
+ {"matrix": [4, 11], "x": 11, "y": 4},
+ {"matrix": [4, 12], "x": 12, "y": 4},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_64_iso": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [1, 14], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3},
+ {"matrix": [3, 7], "x": 7, "y": 3},
+ {"matrix": [3, 8], "x": 8, "y": 3},
+ {"matrix": [3, 9], "x": 9, "y": 3},
+ {"matrix": [3, 10], "x": 10, "y": 3},
+ {"matrix": [3, 11], "x": 11, "y": 3},
+ {"matrix": [3, 12], "x": 12, "y": 3},
+ {"matrix": [3, 13], "x": 13, "y": 3},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4},
+ {"matrix": [4, 11], "x": 11, "y": 4},
+ {"matrix": [4, 12], "x": 12, "y": 4},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_64_iso_split_bs": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0},
+ {"matrix": [0, 14], "x": 14, "y": 0},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [1, 14], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3},
+ {"matrix": [3, 7], "x": 7, "y": 3},
+ {"matrix": [3, 8], "x": 8, "y": 3},
+ {"matrix": [3, 9], "x": 9, "y": 3},
+ {"matrix": [3, 10], "x": 10, "y": 3},
+ {"matrix": [3, 11], "x": 11, "y": 3},
+ {"matrix": [3, 12], "x": 12, "y": 3},
+ {"matrix": [3, 13], "x": 13, "y": 3},
+ {"matrix": [3, 14], "x": 14, "y": 3},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4},
+ {"matrix": [4, 11], "x": 11, "y": 4},
+ {"matrix": [4, 12], "x": 12, "y": 4},
+ {"matrix": [4, 13], "x": 13, "y": 4},
+ {"matrix": [4, 14], "x": 14, "y": 4}
+ ]
+ },
+ "LAYOUT_abnt2": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 14], "x": 13, "y": 0, "w": 2},
+
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 2], "x": 1.5, "y": 1},
+ {"matrix": [1, 3], "x": 2.5, "y": 1},
+ {"matrix": [1, 4], "x": 3.5, "y": 1},
+ {"matrix": [1, 5], "x": 4.5, "y": 1},
+ {"matrix": [1, 6], "x": 5.5, "y": 1},
+ {"matrix": [1, 7], "x": 6.5, "y": 1},
+ {"matrix": [1, 8], "x": 7.5, "y": 1},
+ {"matrix": [1, 9], "x": 8.5, "y": 1},
+ {"matrix": [1, 10], "x": 9.5, "y": 1},
+ {"matrix": [1, 11], "x": 10.5, "y": 1},
+ {"matrix": [1, 12], "x": 11.5, "y": 1},
+ {"matrix": [1, 13], "x": 12.5, "y": 1},
+
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 2], "x": 1.75, "y": 2},
+ {"matrix": [2, 3], "x": 2.75, "y": 2},
+ {"matrix": [2, 4], "x": 3.75, "y": 2},
+ {"matrix": [2, 5], "x": 4.75, "y": 2},
+ {"matrix": [2, 6], "x": 5.75, "y": 2},
+ {"matrix": [2, 7], "x": 6.75, "y": 2},
+ {"matrix": [2, 8], "x": 7.75, "y": 2},
+ {"matrix": [2, 9], "x": 8.75, "y": 2},
+ {"matrix": [2, 10], "x": 9.75, "y": 2},
+ {"matrix": [2, 11], "x": 10.75, "y": 2},
+ {"matrix": [2, 12], "x": 11.75, "y": 2},
+ {"matrix": [1, 14], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3},
+ {"matrix": [3, 7], "x": 7, "y": 3},
+ {"matrix": [3, 8], "x": 8, "y": 3},
+ {"matrix": [3, 9], "x": 9, "y": 3},
+ {"matrix": [3, 10], "x": 10, "y": 3},
+ {"matrix": [3, 11], "x": 11, "y": 3},
+ {"matrix": [3, 12], "x": 12, "y": 3},
+ {"matrix": [3, 13], "x": 13, "y": 3, "w": 2},
+
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 14], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
"LAYOUT": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
@@ -208,220 +1827,7 @@
{"matrix": [4, 14], "x": 14, "y": 4}
]
},
- "LAYOUT_hhkb": {
- "layout": [
- {"matrix": [0, 0], "x": 0, "y": 0},
- {"matrix": [0, 1], "x": 1, "y": 0},
- {"matrix": [0, 2], "x": 2, "y": 0},
- {"matrix": [0, 3], "x": 3, "y": 0},
- {"matrix": [0, 4], "x": 4, "y": 0},
- {"matrix": [0, 5], "x": 5, "y": 0},
- {"matrix": [0, 6], "x": 6, "y": 0},
- {"matrix": [0, 7], "x": 7, "y": 0},
- {"matrix": [0, 8], "x": 8, "y": 0},
- {"matrix": [0, 9], "x": 9, "y": 0},
- {"matrix": [0, 10], "x": 10, "y": 0},
- {"matrix": [0, 11], "x": 11, "y": 0},
- {"matrix": [0, 12], "x": 12, "y": 0},
- {"matrix": [0, 13], "x": 13, "y": 0},
- {"matrix": [0, 14], "x": 14, "y": 0},
-
- {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
- {"matrix": [1, 2], "x": 1.5, "y": 1},
- {"matrix": [1, 3], "x": 2.5, "y": 1},
- {"matrix": [1, 4], "x": 3.5, "y": 1},
- {"matrix": [1, 5], "x": 4.5, "y": 1},
- {"matrix": [1, 6], "x": 5.5, "y": 1},
- {"matrix": [1, 7], "x": 6.5, "y": 1},
- {"matrix": [1, 8], "x": 7.5, "y": 1},
- {"matrix": [1, 9], "x": 8.5, "y": 1},
- {"matrix": [1, 10], "x": 9.5, "y": 1},
- {"matrix": [1, 11], "x": 10.5, "y": 1},
- {"matrix": [1, 12], "x": 11.5, "y": 1},
- {"matrix": [1, 13], "x": 12.5, "y": 1},
- {"matrix": [1, 14], "x": 13.5, "y": 1, "w": 1.5},
-
- {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
- {"matrix": [2, 2], "x": 1.75, "y": 2},
- {"matrix": [2, 3], "x": 2.75, "y": 2},
- {"matrix": [2, 4], "x": 3.75, "y": 2},
- {"matrix": [2, 5], "x": 4.75, "y": 2},
- {"matrix": [2, 6], "x": 5.75, "y": 2},
- {"matrix": [2, 7], "x": 6.75, "y": 2},
- {"matrix": [2, 8], "x": 7.75, "y": 2},
- {"matrix": [2, 9], "x": 8.75, "y": 2},
- {"matrix": [2, 10], "x": 9.75, "y": 2},
- {"matrix": [2, 11], "x": 10.75, "y": 2},
- {"matrix": [2, 12], "x": 11.75, "y": 2},
- {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
-
- {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
- {"matrix": [3, 1], "x": 1.25, "y": 3},
- {"matrix": [3, 2], "x": 2.25, "y": 3},
- {"matrix": [3, 3], "x": 3.25, "y": 3},
- {"matrix": [3, 4], "x": 4.25, "y": 3},
- {"matrix": [3, 5], "x": 5.25, "y": 3},
- {"matrix": [3, 6], "x": 6.25, "y": 3},
- {"matrix": [3, 7], "x": 7.25, "y": 3},
- {"matrix": [3, 8], "x": 8.25, "y": 3},
- {"matrix": [3, 9], "x": 9.25, "y": 3},
- {"matrix": [3, 10], "x": 10.25, "y": 3},
- {"matrix": [3, 11], "x": 11.25, "y": 3},
- {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 1.75},
- {"matrix": [3, 14], "x": 14, "y": 3},
-
- {"matrix": [4, 1], "x": 1.5, "y": 4},
- {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.5},
- {"matrix": [4, 6], "x": 4, "y": 4, "w": 7},
- {"matrix": [4, 11], "x": 11, "y": 4, "w": 1.5},
- {"matrix": [4, 13], "x": 12.5, "y": 4}
- ]
- },
- "LAYOUT_true_hhkb": {
- "layout": [
- {"matrix": [0, 0], "x": 0, "y": 0},
- {"matrix": [0, 1], "x": 1, "y": 0},
- {"matrix": [0, 2], "x": 2, "y": 0},
- {"matrix": [0, 3], "x": 3, "y": 0},
- {"matrix": [0, 4], "x": 4, "y": 0},
- {"matrix": [0, 5], "x": 5, "y": 0},
- {"matrix": [0, 6], "x": 6, "y": 0},
- {"matrix": [0, 7], "x": 7, "y": 0},
- {"matrix": [0, 8], "x": 8, "y": 0},
- {"matrix": [0, 9], "x": 9, "y": 0},
- {"matrix": [0, 10], "x": 10, "y": 0},
- {"matrix": [0, 11], "x": 11, "y": 0},
- {"matrix": [0, 12], "x": 12, "y": 0},
- {"matrix": [0, 13], "x": 13, "y": 0},
- {"matrix": [0, 14], "x": 14, "y": 0},
-
- {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
- {"matrix": [1, 2], "x": 1.5, "y": 1},
- {"matrix": [1, 3], "x": 2.5, "y": 1},
- {"matrix": [1, 4], "x": 3.5, "y": 1},
- {"matrix": [1, 5], "x": 4.5, "y": 1},
- {"matrix": [1, 6], "x": 5.5, "y": 1},
- {"matrix": [1, 7], "x": 6.5, "y": 1},
- {"matrix": [1, 8], "x": 7.5, "y": 1},
- {"matrix": [1, 9], "x": 8.5, "y": 1},
- {"matrix": [1, 10], "x": 9.5, "y": 1},
- {"matrix": [1, 11], "x": 10.5, "y": 1},
- {"matrix": [1, 12], "x": 11.5, "y": 1},
- {"matrix": [1, 13], "x": 12.5, "y": 1},
- {"matrix": [1, 14], "x": 13.5, "y": 1, "w": 1.5},
-
- {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
- {"matrix": [2, 2], "x": 1.75, "y": 2},
- {"matrix": [2, 3], "x": 2.75, "y": 2},
- {"matrix": [2, 4], "x": 3.75, "y": 2},
- {"matrix": [2, 5], "x": 4.75, "y": 2},
- {"matrix": [2, 6], "x": 5.75, "y": 2},
- {"matrix": [2, 7], "x": 6.75, "y": 2},
- {"matrix": [2, 8], "x": 7.75, "y": 2},
- {"matrix": [2, 9], "x": 8.75, "y": 2},
- {"matrix": [2, 10], "x": 9.75, "y": 2},
- {"matrix": [2, 11], "x": 10.75, "y": 2},
- {"matrix": [2, 12], "x": 11.75, "y": 2},
- {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
-
- {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
- {"matrix": [3, 1], "x": 1.25, "y": 3},
- {"matrix": [3, 2], "x": 2.25, "y": 3},
- {"matrix": [3, 3], "x": 3.25, "y": 3},
- {"matrix": [3, 4], "x": 4.25, "y": 3},
- {"matrix": [3, 5], "x": 5.25, "y": 3},
- {"matrix": [3, 6], "x": 6.25, "y": 3},
- {"matrix": [3, 7], "x": 7.25, "y": 3},
- {"matrix": [3, 8], "x": 8.25, "y": 3},
- {"matrix": [3, 9], "x": 9.25, "y": 3},
- {"matrix": [3, 10], "x": 10.25, "y": 3},
- {"matrix": [3, 11], "x": 11.25, "y": 3},
- {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 1.75},
- {"matrix": [3, 14], "x": 14, "y": 3},
-
- {"matrix": [4, 1], "x": 1.5, "y": 4},
- {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.5},
- {"matrix": [4, 6], "x": 4, "y": 4, "w": 6},
- {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.5},
- {"matrix": [4, 11], "x": 11.5, "y": 4}
- ]
- },
- "LAYOUT_directional": {
- "layout": [
- {"matrix": [0, 0], "x": 0, "y": 0},
- {"matrix": [0, 1], "x": 1, "y": 0},
- {"matrix": [0, 2], "x": 2, "y": 0},
- {"matrix": [0, 3], "x": 3, "y": 0},
- {"matrix": [0, 4], "x": 4, "y": 0},
- {"matrix": [0, 5], "x": 5, "y": 0},
- {"matrix": [0, 6], "x": 6, "y": 0},
- {"matrix": [0, 7], "x": 7, "y": 0},
- {"matrix": [0, 8], "x": 8, "y": 0},
- {"matrix": [0, 9], "x": 9, "y": 0},
- {"matrix": [0, 10], "x": 10, "y": 0},
- {"matrix": [0, 11], "x": 11, "y": 0},
- {"matrix": [0, 12], "x": 12, "y": 0},
- {"matrix": [0, 13], "x": 13, "y": 0},
- {"matrix": [0, 14], "x": 14, "y": 0},
-
- {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
- {"matrix": [1, 2], "x": 1.5, "y": 1},
- {"matrix": [1, 3], "x": 2.5, "y": 1},
- {"matrix": [1, 4], "x": 3.5, "y": 1},
- {"matrix": [1, 5], "x": 4.5, "y": 1},
- {"matrix": [1, 6], "x": 5.5, "y": 1},
- {"matrix": [1, 7], "x": 6.5, "y": 1},
- {"matrix": [1, 8], "x": 7.5, "y": 1},
- {"matrix": [1, 9], "x": 8.5, "y": 1},
- {"matrix": [1, 10], "x": 9.5, "y": 1},
- {"matrix": [1, 11], "x": 10.5, "y": 1},
- {"matrix": [1, 12], "x": 11.5, "y": 1},
- {"matrix": [1, 13], "x": 12.5, "y": 1},
- {"matrix": [1, 14], "x": 13.5, "y": 1, "w": 1.5},
-
- {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
- {"matrix": [2, 2], "x": 1.75, "y": 2},
- {"matrix": [2, 3], "x": 2.75, "y": 2},
- {"matrix": [2, 4], "x": 3.75, "y": 2},
- {"matrix": [2, 5], "x": 4.75, "y": 2},
- {"matrix": [2, 6], "x": 5.75, "y": 2},
- {"matrix": [2, 7], "x": 6.75, "y": 2},
- {"matrix": [2, 8], "x": 7.75, "y": 2},
- {"matrix": [2, 9], "x": 8.75, "y": 2},
- {"matrix": [2, 10], "x": 9.75, "y": 2},
- {"matrix": [2, 11], "x": 10.75, "y": 2},
- {"matrix": [2, 12], "x": 11.75, "y": 2},
- {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
-
- {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
- {"matrix": [3, 1], "x": 1.25, "y": 3},
- {"matrix": [3, 2], "x": 2.25, "y": 3},
- {"matrix": [3, 3], "x": 3.25, "y": 3},
- {"matrix": [3, 4], "x": 4.25, "y": 3},
- {"matrix": [3, 5], "x": 5.25, "y": 3},
- {"matrix": [3, 6], "x": 6.25, "y": 3},
- {"matrix": [3, 7], "x": 7.25, "y": 3},
- {"matrix": [3, 8], "x": 8.25, "y": 3},
- {"matrix": [3, 9], "x": 9.25, "y": 3},
- {"matrix": [3, 10], "x": 10.25, "y": 3},
- {"matrix": [3, 12], "x": 11.25, "y": 3, "w": 1.75},
- {"matrix": [3, 13], "x": 13, "y": 3},
- {"matrix": [3, 14], "x": 14, "y": 3},
-
- {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
- {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
- {"matrix": [4, 3], "x": 2.5, "y": 4, "w": 1.25},
- {"matrix": [4, 4], "x": 3.75, "y": 4, "w": 2.25},
- {"matrix": [4, 6], "x": 6, "y": 4, "w": 1.25},
- {"matrix": [4, 8], "x": 7.25, "y": 4, "w": 2.75},
- {"matrix": [4, 10], "x": 10, "y": 4},
- {"matrix": [4, 11], "x": 11, "y": 4},
- {"matrix": [4, 12], "x": 12, "y": 4},
- {"matrix": [4, 13], "x": 13, "y": 4},
- {"matrix": [4, 14], "x": 14, "y": 4}
- ]
- },
- "LAYOUT_mitchsplit": {
+ "LAYOUT_60_ansi_split_space_split_rshift": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
diff --git a/keyboards/mechkeys/acr60/matrix_diagram.md b/keyboards/mechkeys/acr60/matrix_diagram.md
new file mode 100644
index 00000000000..27a38030afb
--- /dev/null
+++ b/keyboards/mechkeys/acr60/matrix_diagram.md
@@ -0,0 +1,57 @@
+# Matrix Diagram for MechKeys ACR60
+
+```
+ ┌───────┐
+ 2u Backspace │0E │
+ └───────┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0A │0B │0C │0D │0E │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ┌─────┐
+│10 │12 │13 │14 │15 │16 │17 │18 │19 │1A │1B │1C │1D │1E │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ ┌──┴┐2D │ ISO Enter
+│20 │22 │23 │24 │25 │26 │27 │28 │29 │2A │2B │2C │2D │ │1E │ │
+└──────┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴────────┘ └───┴────┘
+Shift Row Options:
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3C │3D │3E │
+└───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
+┌───────┐ ┌───────┐
+│30 │ 2u LShift 2u RShift │3D │
+└───────┘ └───────┘
+┌────┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬──────┬───┐
+│30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3A │3B │3D │3E │ Standard with Split Shifts
+└────┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴──────┴───┘ 1.25u/1u LShift + 1u/1.75u/1u RShift
+┌────────┐ ┌───┬──────────┐
+│30 │ 2.25u LShift │3B │3D │ 2.75u RShift
+└────────┘ └───┴──────────┘
+ ┌──────┬───┬───┐
+ │3C │3D │3E │ 1.75u/1u/1u RShift
+ └──────┴───┴───┘
+Bottom Row Options:
+┌────┬────┬────┬────────┬────┬──────────┬───┬───┬───┬───┬───┐
+│40 │41 │43 │44 │46 │48 │4A │4B │4C │4D │4E │ 5x 1u Mods
+└────┴────┴────┴────────┴────┴──────────┴───┴───┴───┴───┴───┘
+ Split Spacebar
+ [2.25/1.25/2.75] or [2.75/1.25/2.25]
+ ┌──────────┬────┬────────┐
+ │44 │46 │48 │
+ └──────────┴────┴────────┘
+┌────┬────┬────┬────────────────────────┬────┬────┬────┬────┐ ┐
+│40 │41 │43 │46 │4A │4B │4D │4E │ ├─ Standard
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ │ or
+┌─────┬───┬─────┬───────────────────────┬─────┬───┬───┬─────┐ │ Infinity/True HHKB
+│40 │41 │43 │46 │4A │4B │4D │4E │ │ (same matrix)
+└─────┴───┴─────┴───────────────────────┴─────┴───┴───┴─────┘ ┘
+┌─────┬───┬────┬────────────────────────┬───┬───┬───┬───┬───┐
+│40 │41 │43 │46 │4A │4B │4C │4D │4E │
+└─────┴───┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+┌─────┬─────┬───────────────────────────┬───┬───┬───┬───┬───┐
+│40 │41 │46 │4A │4B │4C │4D │4E │ LWKL
+└─────┴─────┴───────────────────────────┴───┴───┴───┴───┴───┘
+┌─────┬───┬─────┬───────────────────────────┬─────┬───┬─────┐
+│40 │41 │43 │46 │4B │4D │4E │ Tsangan/WKL/HHKB
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘
+┌─────┬───┬─────┬───────────────────────────┬───┬───┬───┬───┐
+│40 │41 │43 │46 │4B │4C │4D │4E │ Tsangan Arrow
+└─────┴───┴─────┴───────────────────────────┴───┴───┴───┴───┘
+```
diff --git a/keyboards/mechkeys/mechmini/v1/info.json b/keyboards/mechkeys/mechmini/v1/keyboard.json
similarity index 96%
rename from keyboards/mechkeys/mechmini/v1/info.json
rename to keyboards/mechkeys/mechmini/v1/keyboard.json
index 7dda26af254..8d3a4a9b84a 100644
--- a/keyboards/mechkeys/mechmini/v1/info.json
+++ b/keyboards/mechkeys/mechmini/v1/keyboard.json
@@ -8,6 +8,14 @@
"pid": "0xCA40",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "command": true,
+ "backlight": true,
+ "rgblight": true
+ },
"matrix_pins": {
"cols": ["A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "C7", "C6", "C5", "C4"],
"rows": ["B0", "B1", "B2", "B3"]
diff --git a/keyboards/mechkeys/mechmini/v1/rules.mk b/keyboards/mechkeys/mechmini/v1/rules.mk
deleted file mode 100644
index e1dfc317217..00000000000
--- a/keyboards/mechkeys/mechmini/v1/rules.mk
+++ /dev/null
@@ -1,10 +0,0 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes
-EXTRAKEY_ENABLE = yes
-CONSOLE_ENABLE = no
-COMMAND_ENABLE = yes
-BACKLIGHT_ENABLE = yes
-RGBLIGHT_ENABLE = yes
diff --git a/keyboards/mechkeys/mechmini/v2/info.json b/keyboards/mechkeys/mechmini/v2/keyboard.json
similarity index 98%
rename from keyboards/mechkeys/mechmini/v2/info.json
rename to keyboards/mechkeys/mechmini/v2/keyboard.json
index 26d0b930001..da53e842038 100644
--- a/keyboards/mechkeys/mechmini/v2/info.json
+++ b/keyboards/mechkeys/mechmini/v2/keyboard.json
@@ -8,6 +8,14 @@
"pid": "0xCA40",
"device_version": "0.0.2"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": false,
+ "extrakey": true,
+ "nkro": true,
+ "backlight": true,
+ "rgblight": true
+ },
"matrix_pins": {
"cols": ["F0", "F1", "F4", "F5", "F6", "F7", "B3", "B1", "B0", "D5", "B7", "C7"],
"rows": ["D0", "D1", "D2", "D3"]
diff --git a/keyboards/mechkeys/mechmini/v2/rules.mk b/keyboards/mechkeys/mechmini/v2/rules.mk
deleted file mode 100755
index 3a899c4650b..00000000000
--- a/keyboards/mechkeys/mechmini/v2/rules.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-AUDIO_ENABLE = no
-RGBLIGHT_ENABLE = yes
diff --git a/keyboards/mechlovin/adelais/info.json b/keyboards/mechlovin/adelais/info.json
index d8aae5a8da7..42b16d63984 100644
--- a/keyboards/mechlovin/adelais/info.json
+++ b/keyboards/mechlovin/adelais/info.json
@@ -2,14 +2,6 @@
"manufacturer": "Team.Mechlovin",
"url": "",
"maintainer": "mechlovin",
- "features": {
- "bootmagic": true,
- "command": true,
- "console": true,
- "extrakey": true,
- "mousekey": true,
- "nkro": true
- },
"usb": {
"vid": "0x4D4C",
"device_version": "0.0.1"
diff --git a/keyboards/mechlovin/adelais/rgb_led/rev1/info.json b/keyboards/mechlovin/adelais/rgb_led/rev1/keyboard.json
similarity index 98%
rename from keyboards/mechlovin/adelais/rgb_led/rev1/info.json
rename to keyboards/mechlovin/adelais/rgb_led/rev1/keyboard.json
index af68bb84574..01232b07e80 100644
--- a/keyboards/mechlovin/adelais/rgb_led/rev1/info.json
+++ b/keyboards/mechlovin/adelais/rgb_led/rev1/keyboard.json
@@ -3,6 +3,15 @@
"usb": {
"pid": "0xAEC1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
"rgb_matrix": {
"animations": {
"alphas_mods": true,
diff --git a/keyboards/mechlovin/adelais/rgb_led/rev1/rules.mk b/keyboards/mechlovin/adelais/rgb_led/rev1/rules.mk
deleted file mode 100644
index aad92997d0f..00000000000
--- a/keyboards/mechlovin/adelais/rgb_led/rev1/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-RGB_MATRIX_ENABLE = yes
diff --git a/keyboards/mechlovin/adelais/rgb_led/rev2/info.json b/keyboards/mechlovin/adelais/rgb_led/rev2/keyboard.json
similarity index 98%
rename from keyboards/mechlovin/adelais/rgb_led/rev2/info.json
rename to keyboards/mechlovin/adelais/rgb_led/rev2/keyboard.json
index fb88cb359db..a8633af5da2 100644
--- a/keyboards/mechlovin/adelais/rgb_led/rev2/info.json
+++ b/keyboards/mechlovin/adelais/rgb_led/rev2/keyboard.json
@@ -3,6 +3,17 @@
"usb": {
"pid": "0xAEC2"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "nkro": true,
+ "rgblight": true,
+ "rgb_matrix": true,
+ "encoder": true
+ },
"rgb_matrix": {
"animations": {
"alphas_mods": true,
diff --git a/keyboards/mechlovin/adelais/rgb_led/rev2/rules.mk b/keyboards/mechlovin/adelais/rgb_led/rev2/rules.mk
deleted file mode 100644
index e79b2862e60..00000000000
--- a/keyboards/mechlovin/adelais/rgb_led/rev2/rules.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-RGB_MATRIX_ENABLE = yes
-RGBLIGHT_ENABLE = yes
-ENCODER_ENABLE = yes
diff --git a/keyboards/mechlovin/adelais/rgb_led/rev3/info.json b/keyboards/mechlovin/adelais/rgb_led/rev3/keyboard.json
similarity index 98%
rename from keyboards/mechlovin/adelais/rgb_led/rev3/info.json
rename to keyboards/mechlovin/adelais/rgb_led/rev3/keyboard.json
index 62acf349c05..628eb404a5b 100644
--- a/keyboards/mechlovin/adelais/rgb_led/rev3/info.json
+++ b/keyboards/mechlovin/adelais/rgb_led/rev3/keyboard.json
@@ -3,6 +3,17 @@
"usb": {
"pid": "0xAEC3"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "rgblight": true,
+ "rgb_matrix": true,
+ "encoder": true
+ },
"rgb_matrix": {
"animations": {
"alphas_mods": true,
diff --git a/keyboards/mechlovin/adelais/rgb_led/rev3/rules.mk b/keyboards/mechlovin/adelais/rgb_led/rev3/rules.mk
deleted file mode 100644
index e144301381d..00000000000
--- a/keyboards/mechlovin/adelais/rgb_led/rev3/rules.mk
+++ /dev/null
@@ -1,8 +0,0 @@
-# Build Options
-# change yes to no to disable
-#
-RGB_MATRIX_ENABLE = yes
-RGBLIGHT_ENABLE = yes
-ENCODER_ENABLE = yes
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
diff --git a/keyboards/mechlovin/adelais/rgb_led/rules.mk b/keyboards/mechlovin/adelais/rgb_led/rules.mk
index 8a9bdd433d6..18047f12c7e 100644
--- a/keyboards/mechlovin/adelais/rgb_led/rules.mk
+++ b/keyboards/mechlovin/adelais/rgb_led/rules.mk
@@ -1,3 +1 @@
-
-
-DEFAULT_FOLDER = mechlovin/adelais/rgb_led/rev1
\ No newline at end of file
+DEFAULT_FOLDER = mechlovin/adelais/rgb_led/rev1
diff --git a/keyboards/mechlovin/adelais/standard_led/arm/rev2/keyboard.json b/keyboards/mechlovin/adelais/standard_led/arm/rev2/keyboard.json
index 9a2a280c10b..53005dfa339 100644
--- a/keyboards/mechlovin/adelais/standard_led/arm/rev2/keyboard.json
+++ b/keyboards/mechlovin/adelais/standard_led/arm/rev2/keyboard.json
@@ -2,6 +2,16 @@
"usb": {
"pid": "0xAD01"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "nkro": true,
+ "backlight": true,
+ "rgblight": true
+ },
"processor": "STM32F303",
"board": "QMK_PROTON_C",
"bootloader": "stm32-dfu",
diff --git a/keyboards/mechlovin/adelais/standard_led/arm/rev3/info.json b/keyboards/mechlovin/adelais/standard_led/arm/rev3/keyboard.json
similarity index 98%
rename from keyboards/mechlovin/adelais/standard_led/arm/rev3/info.json
rename to keyboards/mechlovin/adelais/standard_led/arm/rev3/keyboard.json
index 46907dc7a9d..11295007902 100644
--- a/keyboards/mechlovin/adelais/standard_led/arm/rev3/info.json
+++ b/keyboards/mechlovin/adelais/standard_led/arm/rev3/keyboard.json
@@ -2,6 +2,17 @@
"usb": {
"pid": "0xAD02"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "nkro": true,
+ "backlight": true,
+ "rgblight": true,
+ "encoder": true
+ },
"encoder": {
"rotary": [
{"pin_a": "A6", "pin_b": "A5"},
diff --git a/keyboards/mechlovin/adelais/standard_led/arm/rev3/rules.mk b/keyboards/mechlovin/adelais/standard_led/arm/rev3/rules.mk
deleted file mode 100644
index 5af1ba85367..00000000000
--- a/keyboards/mechlovin/adelais/standard_led/arm/rev3/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-ENCODER_ENABLE = yes
diff --git a/keyboards/mechlovin/adelais/standard_led/arm/rev4/apm32f103/keyboard.json b/keyboards/mechlovin/adelais/standard_led/arm/rev4/apm32f103/keyboard.json
index cf993be2471..f6b79e35d0d 100644
--- a/keyboards/mechlovin/adelais/standard_led/arm/rev4/apm32f103/keyboard.json
+++ b/keyboards/mechlovin/adelais/standard_led/arm/rev4/apm32f103/keyboard.json
@@ -1,4 +1,15 @@
{
"processor": "STM32F103",
- "bootloader": "stm32duino"
+ "bootloader": "stm32duino",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "nkro": true,
+ "backlight": true,
+ "rgblight": true,
+ "encoder": true
+ }
}
diff --git a/keyboards/mechlovin/adelais/standard_led/arm/rev4/info.json b/keyboards/mechlovin/adelais/standard_led/arm/rev4/info.json
index 17cf63fecf3..f0d10942adc 100644
--- a/keyboards/mechlovin/adelais/standard_led/arm/rev4/info.json
+++ b/keyboards/mechlovin/adelais/standard_led/arm/rev4/info.json
@@ -1,13 +1,4 @@
{
- "features": {
- "bootmagic": false,
- "command": false,
- "console": false,
- "encoder": true,
- "extrakey": false,
- "mousekey": false,
- "nkro": false
- },
"usb": {
"pid": "0xAD03"
},
diff --git a/keyboards/mechlovin/adelais/standard_led/arm/rev4/stm32f303/keyboard.json b/keyboards/mechlovin/adelais/standard_led/arm/rev4/stm32f303/keyboard.json
index 774c3dcf317..9e9748fa93a 100644
--- a/keyboards/mechlovin/adelais/standard_led/arm/rev4/stm32f303/keyboard.json
+++ b/keyboards/mechlovin/adelais/standard_led/arm/rev4/stm32f303/keyboard.json
@@ -1,5 +1,16 @@
{
"processor": "STM32F303",
"board": "QMK_PROTON_C",
- "bootloader": "stm32-dfu"
+ "bootloader": "stm32-dfu",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "nkro": true,
+ "backlight": true,
+ "rgblight": true,
+ "encoder": true
+ }
}
diff --git a/keyboards/mechlovin/adelais/standard_led/avr/rev1/info.json b/keyboards/mechlovin/adelais/standard_led/avr/rev1/keyboard.json
similarity index 98%
rename from keyboards/mechlovin/adelais/standard_led/avr/rev1/info.json
rename to keyboards/mechlovin/adelais/standard_led/avr/rev1/keyboard.json
index 95aac7b0d41..3758a8f085a 100644
--- a/keyboards/mechlovin/adelais/standard_led/avr/rev1/info.json
+++ b/keyboards/mechlovin/adelais/standard_led/avr/rev1/keyboard.json
@@ -3,6 +3,16 @@
"usb": {
"pid": "0xAD04"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "backlight": true,
+ "rgblight": true
+ },
"encoder": {
"rotary": [
{"pin_a": "D3", "pin_b": "D2"},
diff --git a/keyboards/mechlovin/adelais/standard_led/avr/rev1/rules.mk b/keyboards/mechlovin/adelais/standard_led/avr/rev1/rules.mk
index c807f2ad095..179d02c3c68 100644
--- a/keyboards/mechlovin/adelais/standard_led/avr/rev1/rules.mk
+++ b/keyboards/mechlovin/adelais/standard_led/avr/rev1/rules.mk
@@ -1,7 +1,3 @@
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
CUSTOM_MATRIX = lite
SRC += matrix.c
diff --git a/keyboards/mechlovin/adelais/standard_led/rules.mk b/keyboards/mechlovin/adelais/standard_led/rules.mk
index 271c6a9179e..a1d2ba038de 100644
--- a/keyboards/mechlovin/adelais/standard_led/rules.mk
+++ b/keyboards/mechlovin/adelais/standard_led/rules.mk
@@ -1,5 +1 @@
-
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
DEFAULT_FOLDER = mechlovin/adelais/standard_led/arm/rev2
diff --git a/keyboards/mechlovin/delphine/info.json b/keyboards/mechlovin/delphine/info.json
index e8f39b8d6d1..baeeab6f186 100644
--- a/keyboards/mechlovin/delphine/info.json
+++ b/keyboards/mechlovin/delphine/info.json
@@ -6,14 +6,6 @@
"usb": {
"vid": "0x4D4C"
},
- "features": {
- "bootmagic": true,
- "command": false,
- "console": false,
- "extrakey": true,
- "mousekey": true,
- "nkro": true
- },
"matrix_pins": {
"cols": ["F7", "D7", "D6", "D2"],
"rows": ["F0", "F1", "F4", "F5", "F6", "D3"]
diff --git a/keyboards/mechlovin/delphine/mono_led/info.json b/keyboards/mechlovin/delphine/mono_led/keyboard.json
similarity index 78%
rename from keyboards/mechlovin/delphine/mono_led/info.json
rename to keyboards/mechlovin/delphine/mono_led/keyboard.json
index e1b90d1191b..06fa071159e 100644
--- a/keyboards/mechlovin/delphine/mono_led/info.json
+++ b/keyboards/mechlovin/delphine/mono_led/keyboard.json
@@ -3,6 +3,14 @@
"pid": "0xDEF1",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "nkro": true,
+ "backlight": true,
+ "rgblight": true
+ },
"rgblight": {
"saturation_steps": 8,
"brightness_steps": 8,
diff --git a/keyboards/mechlovin/delphine/mono_led/rules.mk b/keyboards/mechlovin/delphine/mono_led/rules.mk
deleted file mode 100644
index ed572b0bbfc..00000000000
--- a/keyboards/mechlovin/delphine/mono_led/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
\ No newline at end of file
diff --git a/keyboards/mechlovin/delphine/rgb_led/info.json b/keyboards/mechlovin/delphine/rgb_led/keyboard.json
similarity index 93%
rename from keyboards/mechlovin/delphine/rgb_led/info.json
rename to keyboards/mechlovin/delphine/rgb_led/keyboard.json
index 6a0b8df2cf0..35a163c05f8 100644
--- a/keyboards/mechlovin/delphine/rgb_led/info.json
+++ b/keyboards/mechlovin/delphine/rgb_led/keyboard.json
@@ -3,6 +3,13 @@
"pid": "0xDEF2",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
"rgblight": {
"saturation_steps": 8,
"brightness_steps": 8,
diff --git a/keyboards/mechlovin/delphine/rgb_led/rules.mk b/keyboards/mechlovin/delphine/rgb_led/rules.mk
deleted file mode 100644
index 5c624bc68f6..00000000000
--- a/keyboards/mechlovin/delphine/rgb_led/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-RGB_MATRIX_ENABLE = yes # Use RGB matrix
diff --git a/keyboards/mechlovin/hannah60rgb/rev1/info.json b/keyboards/mechlovin/hannah60rgb/rev1/keyboard.json
similarity index 98%
rename from keyboards/mechlovin/hannah60rgb/rev1/info.json
rename to keyboards/mechlovin/hannah60rgb/rev1/keyboard.json
index 6a3510c7dfc..4fb4dc2eef5 100644
--- a/keyboards/mechlovin/hannah60rgb/rev1/info.json
+++ b/keyboards/mechlovin/hannah60rgb/rev1/keyboard.json
@@ -8,6 +8,15 @@
"pid": "0x6001",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
"ws2812": {
"pin": "A15"
},
diff --git a/keyboards/mechlovin/hannah60rgb/rev1/rules.mk b/keyboards/mechlovin/hannah60rgb/rev1/rules.mk
deleted file mode 100644
index aad92997d0f..00000000000
--- a/keyboards/mechlovin/hannah60rgb/rev1/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-RGB_MATRIX_ENABLE = yes
diff --git a/keyboards/mechlovin/hannah60rgb/rev2/info.json b/keyboards/mechlovin/hannah60rgb/rev2/keyboard.json
similarity index 98%
rename from keyboards/mechlovin/hannah60rgb/rev2/info.json
rename to keyboards/mechlovin/hannah60rgb/rev2/keyboard.json
index e6be250311c..06bb71a3482 100644
--- a/keyboards/mechlovin/hannah60rgb/rev2/info.json
+++ b/keyboards/mechlovin/hannah60rgb/rev2/keyboard.json
@@ -8,6 +8,16 @@
"pid": "0x6002",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "nkro": true,
+ "rgblight": true,
+ "rgb_matrix": true
+ },
"rgblight": {
"saturation_steps": 8,
"brightness_steps": 8,
diff --git a/keyboards/mechlovin/hannah60rgb/rev2/rules.mk b/keyboards/mechlovin/hannah60rgb/rev2/rules.mk
deleted file mode 100644
index e1f93c75251..00000000000
--- a/keyboards/mechlovin/hannah60rgb/rev2/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-RGB_MATRIX_ENABLE = yes
diff --git a/keyboards/mechlovin/hannah60rgb/rules.mk b/keyboards/mechlovin/hannah60rgb/rules.mk
index 65e5f070fb7..e876a56afb5 100644
--- a/keyboards/mechlovin/hannah60rgb/rules.mk
+++ b/keyboards/mechlovin/hannah60rgb/rules.mk
@@ -1,13 +1 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-
DEFAULT_FOLDER = mechlovin/hannah60rgb/rev1
diff --git a/keyboards/mechlovin/hannah65/info.json b/keyboards/mechlovin/hannah65/info.json
index f9adc729660..88a3f397192 100644
--- a/keyboards/mechlovin/hannah65/info.json
+++ b/keyboards/mechlovin/hannah65/info.json
@@ -3,15 +3,6 @@
"pin": "B8",
"breathing": true
},
- "features": {
- "backlight": true,
- "bootmagic": true,
- "command": true,
- "console": true,
- "extrakey": true,
- "mousekey": true,
- "nkro": true
- },
"matrix_pins": {
"cols": ["B11", "B10", "B2", "B1", "B0", "A7", "A6", "A0", "C15", "B4", "B5", "B3", "C13", "C14", "A13"],
"rows": ["A4", "A5", "A3", "A2", "A1"]
diff --git a/keyboards/mechlovin/hannah65/rev1/haus/keyboard.json b/keyboards/mechlovin/hannah65/rev1/haus/keyboard.json
index ac97de5f180..7a935fc1a53 100644
--- a/keyboards/mechlovin/hannah65/rev1/haus/keyboard.json
+++ b/keyboards/mechlovin/hannah65/rev1/haus/keyboard.json
@@ -8,6 +8,15 @@
"pid": "0x6500",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "nkro": true,
+ "backlight": true
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
diff --git a/keyboards/mechlovin/hannah910/rev1/info.json b/keyboards/mechlovin/hannah910/rev1/keyboard.json
similarity index 98%
rename from keyboards/mechlovin/hannah910/rev1/info.json
rename to keyboards/mechlovin/hannah910/rev1/keyboard.json
index af20cffd4fb..8f01f6f39b1 100644
--- a/keyboards/mechlovin/hannah910/rev1/info.json
+++ b/keyboards/mechlovin/hannah910/rev1/keyboard.json
@@ -8,6 +8,13 @@
"pid": "0x9101",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": false,
+ "extrakey": true,
+ "backlight": true,
+ "rgblight": true
+ },
"matrix_pins": {
"cols": ["E6", "B1", "B3", "F0", "F1", "F4", "F5", "F6", "F7", "D5", "D4", "B4", "D6", "D7", "B0"],
"rows": ["B5", "B6", "D3", "C6", "C7"]
diff --git a/keyboards/mechlovin/hannah910/rev1/rules.mk b/keyboards/mechlovin/hannah910/rev1/rules.mk
deleted file mode 100644
index 8a6e2c7b715..00000000000
--- a/keyboards/mechlovin/hannah910/rev1/rules.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/mechlovin/hannah910/rev2/info.json b/keyboards/mechlovin/hannah910/rev2/keyboard.json
similarity index 98%
rename from keyboards/mechlovin/hannah910/rev2/info.json
rename to keyboards/mechlovin/hannah910/rev2/keyboard.json
index a9cfe5f66be..c6fe19c34d1 100644
--- a/keyboards/mechlovin/hannah910/rev2/info.json
+++ b/keyboards/mechlovin/hannah910/rev2/keyboard.json
@@ -8,6 +8,13 @@
"pid": "0x9102",
"device_version": "0.0.2"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": false,
+ "extrakey": true,
+ "backlight": true,
+ "rgblight": true
+ },
"matrix_pins": {
"cols": ["E6", "B1", "B3", "F0", "F1", "F4", "F5", "F6", "F7", "D5", "D4", "B4", "D6", "D7", "B0"],
"rows": ["B5", "B6", "D3", "C6", "C7"]
diff --git a/keyboards/mechlovin/hannah910/rev2/rules.mk b/keyboards/mechlovin/hannah910/rev2/rules.mk
deleted file mode 100644
index 8a6e2c7b715..00000000000
--- a/keyboards/mechlovin/hannah910/rev2/rules.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/mechlovin/hannah910/rev3/info.json b/keyboards/mechlovin/hannah910/rev3/keyboard.json
similarity index 98%
rename from keyboards/mechlovin/hannah910/rev3/info.json
rename to keyboards/mechlovin/hannah910/rev3/keyboard.json
index abeaa1e1824..8a6ea4d1234 100644
--- a/keyboards/mechlovin/hannah910/rev3/info.json
+++ b/keyboards/mechlovin/hannah910/rev3/keyboard.json
@@ -8,6 +8,13 @@
"pid": "0x9103",
"device_version": "0.0.2"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": false,
+ "extrakey": true,
+ "backlight": true,
+ "rgblight": true
+ },
"matrix_pins": {
"cols": ["E6", "B1", "B3", "F0", "F1", "F4", "F5", "F6", "F7", "D5", "D4", "B4", "D6", "D7", "B0"],
"rows": ["B5", "B6", "D3", "C6", "C7"]
diff --git a/keyboards/mechlovin/hannah910/rev3/rules.mk b/keyboards/mechlovin/hannah910/rev3/rules.mk
deleted file mode 100644
index 8a6e2c7b715..00000000000
--- a/keyboards/mechlovin/hannah910/rev3/rules.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/mechlovin/hex4b/rev1/info.json b/keyboards/mechlovin/hex4b/rev1/keyboard.json
similarity index 82%
rename from keyboards/mechlovin/hex4b/rev1/info.json
rename to keyboards/mechlovin/hex4b/rev1/keyboard.json
index 1e9a7d57762..d3251f5808e 100644
--- a/keyboards/mechlovin/hex4b/rev1/info.json
+++ b/keyboards/mechlovin/hex4b/rev1/keyboard.json
@@ -3,6 +3,12 @@
"usb": {
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "backlight": true
+ },
"matrix_pins": {
"cols": ["B6", "B5", "B3", "B2", "B1", "B0", "A0", "A6", "A7", "C7", "C6", "C5", "C4", "D1", "D0"],
"rows": ["B7", "A2", "A1", "A3", "A4", "A5"]
diff --git a/keyboards/mechlovin/hex4b/rev1/rules.mk b/keyboards/mechlovin/hex4b/rev1/rules.mk
index 15d473397d4..c2ee0bc86f9 100644
--- a/keyboards/mechlovin/hex4b/rev1/rules.mk
+++ b/keyboards/mechlovin/hex4b/rev1/rules.mk
@@ -1,15 +1,2 @@
# Processor frequency
F_CPU = 16000000
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/mechlovin/hex4b/rev2/info.json b/keyboards/mechlovin/hex4b/rev2/keyboard.json
similarity index 75%
rename from keyboards/mechlovin/hex4b/rev2/info.json
rename to keyboards/mechlovin/hex4b/rev2/keyboard.json
index 8609be01c31..1bdda81c5ab 100644
--- a/keyboards/mechlovin/hex4b/rev2/info.json
+++ b/keyboards/mechlovin/hex4b/rev2/keyboard.json
@@ -3,6 +3,15 @@
"usb": {
"device_version": "0.0.2"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "nkro": true,
+ "backlight": true
+ },
"matrix_pins": {
"cols": ["B11", "B10", "B2", "B1", "B0", "A7", "A6", "A5", "A3", "C13", "B7", "B6", "B5", "B4", "B3"],
"rows": ["A4", "B12", "B13", "B14", "B15", "A1"]
diff --git a/keyboards/mechlovin/hex4b/rev2/rules.mk b/keyboards/mechlovin/hex4b/rev2/rules.mk
deleted file mode 100644
index a5089d51a5b..00000000000
--- a/keyboards/mechlovin/hex4b/rev2/rules.mk
+++ /dev/null
@@ -1,12 +0,0 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/mechlovin/infinity87/rev1/info.json b/keyboards/mechlovin/infinity87/rev1/info.json
index 249bbd5cb47..dbe7cb83f99 100644
--- a/keyboards/mechlovin/infinity87/rev1/info.json
+++ b/keyboards/mechlovin/infinity87/rev1/info.json
@@ -1,13 +1,4 @@
{
- "features": {
- "backlight": true,
- "bootmagic": false,
- "command": false,
- "console": false,
- "extrakey": false,
- "mousekey": false,
- "nkro": false
- },
"matrix_pins": {
"cols": ["C13", "B9", "B4", "B7", "B8", "B5", "B6", "A9", "A5", "A6", "A7", "B1", "B2", "B10", "B3", "B14", "B15"],
"rows": ["A10", "B13", "B12", "B11", "C14", "C15"]
diff --git a/keyboards/mechlovin/infinity87/rev1/rogue87/keyboard.json b/keyboards/mechlovin/infinity87/rev1/rogue87/keyboard.json
index 6fdc9d6e5d3..2ac0510dbf3 100644
--- a/keyboards/mechlovin/infinity87/rev1/rogue87/keyboard.json
+++ b/keyboards/mechlovin/infinity87/rev1/rogue87/keyboard.json
@@ -8,6 +8,12 @@
"pid": "0x8704",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": false,
+ "mousekey": false,
+ "extrakey": false,
+ "backlight": true
+ },
"layouts": {
"LAYOUT_all": {
"layout": [
diff --git a/keyboards/mechlovin/infinity87/rev1/rouge87/keyboard.json b/keyboards/mechlovin/infinity87/rev1/rouge87/keyboard.json
index 39a9f169258..6b947f0f1f1 100644
--- a/keyboards/mechlovin/infinity87/rev1/rouge87/keyboard.json
+++ b/keyboards/mechlovin/infinity87/rev1/rouge87/keyboard.json
@@ -8,6 +8,12 @@
"pid": "0x8703",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": false,
+ "mousekey": false,
+ "extrakey": false,
+ "backlight": true
+ },
"community_layouts": [
"tkl_ansi_tsangan",
"tkl_iso_tsangan"
diff --git a/keyboards/mechlovin/infinity87/rev1/standard/info.json b/keyboards/mechlovin/infinity87/rev1/standard/keyboard.json
similarity index 99%
rename from keyboards/mechlovin/infinity87/rev1/standard/info.json
rename to keyboards/mechlovin/infinity87/rev1/standard/keyboard.json
index 964a7a8cb9a..a0cb10fac22 100644
--- a/keyboards/mechlovin/infinity87/rev1/standard/info.json
+++ b/keyboards/mechlovin/infinity87/rev1/standard/keyboard.json
@@ -8,6 +8,16 @@
"pid": "0x8701",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "nkro": true,
+ "backlight": true,
+ "rgblight": true
+ },
"rgblight": {
"led_count": 26,
"sleep": true,
diff --git a/keyboards/mechlovin/infinity87/rev1/standard/rules.mk b/keyboards/mechlovin/infinity87/rev1/standard/rules.mk
deleted file mode 100644
index 1e3cebb1451..00000000000
--- a/keyboards/mechlovin/infinity87/rev1/standard/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-RGBLIGHT_ENABLE = yes
diff --git a/keyboards/mechlovin/infinity87/rev2/info.json b/keyboards/mechlovin/infinity87/rev2/keyboard.json
similarity index 99%
rename from keyboards/mechlovin/infinity87/rev2/info.json
rename to keyboards/mechlovin/infinity87/rev2/keyboard.json
index 42db9894ca1..fdc66869889 100644
--- a/keyboards/mechlovin/infinity87/rev2/info.json
+++ b/keyboards/mechlovin/infinity87/rev2/keyboard.json
@@ -8,6 +8,14 @@
"pid": "0x8702",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "nkro": true,
+ "backlight": true,
+ "rgblight": true
+ },
"backlight": {
"pin": "B6",
"breathing": true
diff --git a/keyboards/mechlovin/infinity87/rev2/rules.mk b/keyboards/mechlovin/infinity87/rev2/rules.mk
index ea7804f1585..179d02c3c68 100644
--- a/keyboards/mechlovin/infinity87/rev2/rules.mk
+++ b/keyboards/mechlovin/infinity87/rev2/rules.mk
@@ -1,11 +1,3 @@
-# Build Options
-# change yes to no to disable
-#
-CONSOLE_ENABLE = no
-COMMAND_ENABLE = no
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = yes
-RGBLIGHT_ENABLE = yes
CUSTOM_MATRIX = lite
SRC += matrix.c
diff --git a/keyboards/mechlovin/infinity87/rgb_rev1/info.json b/keyboards/mechlovin/infinity87/rgb_rev1/keyboard.json
similarity index 99%
rename from keyboards/mechlovin/infinity87/rgb_rev1/info.json
rename to keyboards/mechlovin/infinity87/rgb_rev1/keyboard.json
index 27a7b441e32..2d177949dc1 100644
--- a/keyboards/mechlovin/infinity87/rgb_rev1/info.json
+++ b/keyboards/mechlovin/infinity87/rgb_rev1/keyboard.json
@@ -8,6 +8,15 @@
"pid": "0x8710",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
"rgb_matrix": {
"animations": {
"alphas_mods": true,
diff --git a/keyboards/mechlovin/infinity87/rgb_rev1/rules.mk b/keyboards/mechlovin/infinity87/rgb_rev1/rules.mk
deleted file mode 100644
index e408bde91c4..00000000000
--- a/keyboards/mechlovin/infinity87/rgb_rev1/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-RGB_MATRIX_ENABLE = yes # Use RGB matrix
diff --git a/keyboards/mechlovin/infinity87/rules.mk b/keyboards/mechlovin/infinity87/rules.mk
index 251f8440aab..4aa072cae75 100644
--- a/keyboards/mechlovin/infinity87/rules.mk
+++ b/keyboards/mechlovin/infinity87/rules.mk
@@ -1,15 +1 @@
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
DEFAULT_FOLDER = mechlovin/infinity87/rgb_rev1
diff --git a/keyboards/mechlovin/infinity875/info.json b/keyboards/mechlovin/infinity875/keyboard.json
similarity index 99%
rename from keyboards/mechlovin/infinity875/info.json
rename to keyboards/mechlovin/infinity875/keyboard.json
index cb8154a713e..73bdb0af130 100644
--- a/keyboards/mechlovin/infinity875/info.json
+++ b/keyboards/mechlovin/infinity875/keyboard.json
@@ -8,6 +8,12 @@
"pid": "0x0875",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": false,
+ "extrakey": true,
+ "rgb_matrix": true
+ },
"rgb_matrix": {
"driver": "ws2812",
"max_brightness": 200,
diff --git a/keyboards/mechlovin/infinity875/rules.mk b/keyboards/mechlovin/infinity875/rules.mk
index 33f549f3aef..179d02c3c68 100644
--- a/keyboards/mechlovin/infinity875/rules.mk
+++ b/keyboards/mechlovin/infinity875/rules.mk
@@ -1,16 +1,3 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
CUSTOM_MATRIX = lite
-RGB_MATRIX_ENABLE = yes
SRC += matrix.c
diff --git a/keyboards/mechlovin/jay60/info.json b/keyboards/mechlovin/jay60/keyboard.json
similarity index 99%
rename from keyboards/mechlovin/jay60/info.json
rename to keyboards/mechlovin/jay60/keyboard.json
index 1f8d68a5411..37f25f36fe8 100644
--- a/keyboards/mechlovin/jay60/info.json
+++ b/keyboards/mechlovin/jay60/keyboard.json
@@ -8,6 +8,11 @@
"pid": "0x0600",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true
+ },
"matrix_pins": {
"cols": ["B6", "B5", "B3", "B2", "B1", "B0", "A0", "A6", "A7", "C7", "C6", "C5", "C4", "C3"],
"rows": ["C2", "C1", "C0", "D7", "A1"]
diff --git a/keyboards/mechlovin/jay60/rules.mk b/keyboards/mechlovin/jay60/rules.mk
index 1e9f9255447..c2ee0bc86f9 100644
--- a/keyboards/mechlovin/jay60/rules.mk
+++ b/keyboards/mechlovin/jay60/rules.mk
@@ -1,15 +1,2 @@
# Processor frequency
F_CPU = 16000000
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/mechlovin/mechlovin9/info.json b/keyboards/mechlovin/mechlovin9/info.json
index a5439f56a9d..41133813ef7 100644
--- a/keyboards/mechlovin/mechlovin9/info.json
+++ b/keyboards/mechlovin/mechlovin9/info.json
@@ -2,14 +2,6 @@
"manufacturer": "Mechlovin Studio",
"url": "",
"maintainer": "Team Mechlovin",
- "features": {
- "bootmagic": true,
- "command": false,
- "console": false,
- "extrakey": true,
- "mousekey": true,
- "nkro": false
- },
"usb": {
"vid": "0x4D4C"
},
diff --git a/keyboards/mechlovin/mechlovin9/rev1/info.json b/keyboards/mechlovin/mechlovin9/rev1/keyboard.json
similarity index 80%
rename from keyboards/mechlovin/mechlovin9/rev1/info.json
rename to keyboards/mechlovin/mechlovin9/rev1/keyboard.json
index 1ece8fc52d2..2aebe566398 100644
--- a/keyboards/mechlovin/mechlovin9/rev1/info.json
+++ b/keyboards/mechlovin/mechlovin9/rev1/keyboard.json
@@ -4,14 +4,20 @@
"pid": "0x6509",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "nkro": true,
+ "backlight": true
+ },
"matrix_pins": {
"cols": ["B11", "B10", "B2", "B1", "B0", "A7", "A6", "A0", "C15", "B4", "B5", "B3", "C13", "C14", "A13"],
"rows": ["A4", "A5", "A3", "A2", "A1"]
},
"diode_direction": "COL2ROW",
- "features": {
- "backlight": true
- },
"backlight": {
"pin": "B8",
"breathing": true
diff --git a/keyboards/mechlovin/mechlovin9/rev1/rules.mk b/keyboards/mechlovin/mechlovin9/rev1/rules.mk
deleted file mode 100644
index d6fa8455698..00000000000
--- a/keyboards/mechlovin/mechlovin9/rev1/rules.mk
+++ /dev/null
@@ -1,6 +0,0 @@
-# Build Options
-# change yes to no to disable
-#
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
diff --git a/keyboards/mechlovin/mechlovin9/rev2/info.json b/keyboards/mechlovin/mechlovin9/rev2/keyboard.json
similarity index 88%
rename from keyboards/mechlovin/mechlovin9/rev2/info.json
rename to keyboards/mechlovin/mechlovin9/rev2/keyboard.json
index 01e8d59579b..a9b45df59dd 100644
--- a/keyboards/mechlovin/mechlovin9/rev2/info.json
+++ b/keyboards/mechlovin/mechlovin9/rev2/keyboard.json
@@ -10,6 +10,9 @@
},
"diode_direction": "COL2ROW",
"features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
"backlight": true
},
"backlight": {
diff --git a/keyboards/mechlovin/mechlovin9/rev3/keyboard.json b/keyboards/mechlovin/mechlovin9/rev3/keyboard.json
index faa4cf0a877..aa2787c34c7 100644
--- a/keyboards/mechlovin/mechlovin9/rev3/keyboard.json
+++ b/keyboards/mechlovin/mechlovin9/rev3/keyboard.json
@@ -6,6 +6,11 @@
"pid": "0x6509",
"device_version": "0.0.3"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true
+ },
"bootmagic": {
"matrix": [0, 13]
},
diff --git a/keyboards/mechlovin/olly/bb/info.json b/keyboards/mechlovin/olly/bb/keyboard.json
similarity index 99%
rename from keyboards/mechlovin/olly/bb/info.json
rename to keyboards/mechlovin/olly/bb/keyboard.json
index fddb8931136..ac08e94c3ce 100644
--- a/keyboards/mechlovin/olly/bb/info.json
+++ b/keyboards/mechlovin/olly/bb/keyboard.json
@@ -8,6 +8,13 @@
"pid": "0xD181",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "backlight": true,
+ "rgblight": true
+ },
"backlight": {
"pin": "D4",
"breathing": true
diff --git a/keyboards/mechlovin/olly/bb/rules.mk b/keyboards/mechlovin/olly/bb/rules.mk
index 1d15495eef5..73681d1f1e0 100644
--- a/keyboards/mechlovin/olly/bb/rules.mk
+++ b/keyboards/mechlovin/olly/bb/rules.mk
@@ -1,18 +1,5 @@
# Processor frequency
F_CPU = 16000000
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
CUSTOM_MATRIX = lite
SRC += matrix.c
diff --git a/keyboards/mechlovin/olly/jf/info.json b/keyboards/mechlovin/olly/jf/info.json
index b67551a111b..315191e8408 100644
--- a/keyboards/mechlovin/olly/jf/info.json
+++ b/keyboards/mechlovin/olly/jf/info.json
@@ -5,15 +5,6 @@
"usb": {
"vid": "0x4D4C"
},
- "features": {
- "nkro": false,
- "bootmagic": true,
- "command": false,
- "console": false,
- "extrakey": true,
- "mousekey": true,
- "rgblight": true
- },
"diode_direction": "ROW2COL",
"rgblight": {
"led_count": 27,
diff --git a/keyboards/mechlovin/olly/jf/rev1/info.json b/keyboards/mechlovin/olly/jf/rev1/keyboard.json
similarity index 99%
rename from keyboards/mechlovin/olly/jf/rev1/info.json
rename to keyboards/mechlovin/olly/jf/rev1/keyboard.json
index 0b6aec094f8..69f092af07e 100644
--- a/keyboards/mechlovin/olly/jf/rev1/info.json
+++ b/keyboards/mechlovin/olly/jf/rev1/keyboard.json
@@ -5,7 +5,11 @@
"device_version": "0.0.1"
},
"features": {
- "backlight": true
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "backlight": true,
+ "rgblight": true
},
"matrix_pins": {
"cols": [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
diff --git a/keyboards/mechlovin/olly/jf/rev2/keyboard.json b/keyboards/mechlovin/olly/jf/rev2/keyboard.json
index 600bf8a3af3..3771188638b 100644
--- a/keyboards/mechlovin/olly/jf/rev2/keyboard.json
+++ b/keyboards/mechlovin/olly/jf/rev2/keyboard.json
@@ -7,10 +7,14 @@
}
},
"features": {
- "command": true,
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
"console": true,
+ "command": true,
+ "nkro": true,
"led_matrix": true,
- "nkro": true
+ "rgblight": true
},
"led_matrix": {
"animations": {
@@ -704,4 +708,4 @@
]
}
}
-}
\ No newline at end of file
+}
diff --git a/keyboards/mechlovin/serratus/info.json b/keyboards/mechlovin/serratus/keyboard.json
similarity index 99%
rename from keyboards/mechlovin/serratus/info.json
rename to keyboards/mechlovin/serratus/keyboard.json
index 780a369cb81..c283c48a350 100644
--- a/keyboards/mechlovin/serratus/info.json
+++ b/keyboards/mechlovin/serratus/keyboard.json
@@ -8,6 +8,14 @@
"pid": "0x0870",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "nkro": true,
+ "backlight": true,
+ "rgblight": true
+ },
"backlight": {
"pin": "B6",
"breathing": true
diff --git a/keyboards/mechlovin/serratus/rules.mk b/keyboards/mechlovin/serratus/rules.mk
index 03ea2f1bda0..179d02c3c68 100644
--- a/keyboards/mechlovin/serratus/rules.mk
+++ b/keyboards/mechlovin/serratus/rules.mk
@@ -1,15 +1,3 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
CUSTOM_MATRIX = lite
SRC += matrix.c
diff --git a/keyboards/mechlovin/th1800/info.json b/keyboards/mechlovin/th1800/keyboard.json
similarity index 98%
rename from keyboards/mechlovin/th1800/info.json
rename to keyboards/mechlovin/th1800/keyboard.json
index 001c73f6839..66b74875454 100644
--- a/keyboards/mechlovin/th1800/info.json
+++ b/keyboards/mechlovin/th1800/keyboard.json
@@ -8,6 +8,11 @@
"pid": "0x1800",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true
+ },
"matrix_pins": {
"cols": ["A3", "D7", "C0", "C1", "C2", "C3", "C4", "C5", "C6", "C7", "A7", "A6", "A5", "A4", "B3", "B2", "B0", "B1"],
"rows": ["B6", "B7", "D0", "D1", "D5", "D6"]
diff --git a/keyboards/mechlovin/th1800/rules.mk b/keyboards/mechlovin/th1800/rules.mk
index 1e9f9255447..c2ee0bc86f9 100644
--- a/keyboards/mechlovin/th1800/rules.mk
+++ b/keyboards/mechlovin/th1800/rules.mk
@@ -1,15 +1,2 @@
# Processor frequency
F_CPU = 16000000
-
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
diff --git a/keyboards/mechlovin/zed1800/info.json b/keyboards/mechlovin/zed1800/info.json
index 41179a6ef14..9de42c24424 100644
--- a/keyboards/mechlovin/zed1800/info.json
+++ b/keyboards/mechlovin/zed1800/info.json
@@ -17,15 +17,6 @@
"backing_size": 4096
}
},
- "features": {
- "bootmagic": true,
- "command": true,
- "console": true,
- "extrakey": true,
- "mousekey": true,
- "rgblight": true,
- "audio": false
- },
"rgblight": {
"sleep": true,
"animations": {
diff --git a/keyboards/mechlovin/zed1800/oreum/keyboard.json b/keyboards/mechlovin/zed1800/oreum/keyboard.json
index 4a15f61ce49..c5652213d62 100644
--- a/keyboards/mechlovin/zed1800/oreum/keyboard.json
+++ b/keyboards/mechlovin/zed1800/oreum/keyboard.json
@@ -3,6 +3,14 @@
"usb": {
"pid": "0x1802"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "rgblight": true
+ },
"matrix_pins": {
"cols": ["A8", "B15", "B14", "B13", "B12", "B11", "B10", "B2", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "A2", "A1", "A0", "C13"],
"rows": ["B8", "B7", "B6", "B5", "B4", "B3"]
diff --git a/keyboards/mechlovin/zed1800/rules.mk b/keyboards/mechlovin/zed1800/rules.mk
index d007da3fa20..e0088c95c39 100644
--- a/keyboards/mechlovin/zed1800/rules.mk
+++ b/keyboards/mechlovin/zed1800/rules.mk
@@ -1 +1 @@
-DEFAULT_FOLDER = mechlovin/zed1800/saber
\ No newline at end of file
+DEFAULT_FOLDER = mechlovin/zed1800/saber
diff --git a/keyboards/mechlovin/zed1800/saber/keyboard.json b/keyboards/mechlovin/zed1800/saber/keyboard.json
index d921d95a950..a3d236e5112 100644
--- a/keyboards/mechlovin/zed1800/saber/keyboard.json
+++ b/keyboards/mechlovin/zed1800/saber/keyboard.json
@@ -3,6 +3,14 @@
"usb": {
"pid": "0x1803"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "rgblight": true
+ },
"matrix_pins": {
"cols": ["A8", "A15", "B14", "B13", "B12", "B11", "B10", "B2", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "A2", "A1", "A0", "C13"],
"rows": ["B8", "B7", "B6", "B5", "B4", "B3"]
diff --git a/keyboards/mechlovin/zed1800/zepsody/keyboard.json b/keyboards/mechlovin/zed1800/zepsody/keyboard.json
index dab92b26d7e..8a973d181fa 100644
--- a/keyboards/mechlovin/zed1800/zepsody/keyboard.json
+++ b/keyboards/mechlovin/zed1800/zepsody/keyboard.json
@@ -3,6 +3,14 @@
"usb": {
"pid": "0x1801"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "rgblight": true
+ },
"matrix_pins": {
"cols": ["A10", "A9", "A8", "A15", "B14", "B13", "B12", "B11", "B10", "B2", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "A2", "A1", "A0"],
"rows": ["B8", "B7", "B6", "B5", "B4", "B3"]
diff --git a/keyboards/mechlovin/zed65/910/keyboard.json b/keyboards/mechlovin/zed65/910/keyboard.json
index 3b1472014d7..36f1a1ed3bc 100644
--- a/keyboards/mechlovin/zed65/910/keyboard.json
+++ b/keyboards/mechlovin/zed65/910/keyboard.json
@@ -9,6 +9,11 @@
"device_version": "0.0.1"
},
"features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
"nkro": true,
"rgblight": true
},
diff --git a/keyboards/mechlovin/zed65/info.json b/keyboards/mechlovin/zed65/info.json
index c255dd23c6e..cf993be2471 100644
--- a/keyboards/mechlovin/zed65/info.json
+++ b/keyboards/mechlovin/zed65/info.json
@@ -1,11 +1,4 @@
{
"processor": "STM32F103",
- "bootloader": "stm32duino",
- "features": {
- "bootmagic": true,
- "command": true,
- "console": true,
- "extrakey": true,
- "mousekey": true
- },
+ "bootloader": "stm32duino"
}
diff --git a/keyboards/mechlovin/zed65/mono_led/info.json b/keyboards/mechlovin/zed65/mono_led/keyboard.json
similarity index 98%
rename from keyboards/mechlovin/zed65/mono_led/info.json
rename to keyboards/mechlovin/zed65/mono_led/keyboard.json
index aa46b1bd8bc..0cf13002d9a 100644
--- a/keyboards/mechlovin/zed65/mono_led/info.json
+++ b/keyboards/mechlovin/zed65/mono_led/keyboard.json
@@ -8,6 +8,16 @@
"pid": "0x6503",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "nkro": true,
+ "led_matrix": true,
+ "rgblight": true
+ },
"rgblight": {
"saturation_steps": 8,
"brightness_steps": 8,
diff --git a/keyboards/mechlovin/zed65/mono_led/rules.mk b/keyboards/mechlovin/zed65/mono_led/rules.mk
deleted file mode 100644
index 55d38a7b91d..00000000000
--- a/keyboards/mechlovin/zed65/mono_led/rules.mk
+++ /dev/null
@@ -1,4 +0,0 @@
-
-NKRO_ENABLE = yes # Enable N-Key Rollover
-LED_MATRIX_ENABLE = yes
-RGBLIGHT_ENABLE = yes
\ No newline at end of file
diff --git a/keyboards/mechlovin/zed65/no_backlight/retro66/info.json b/keyboards/mechlovin/zed65/no_backlight/retro66/keyboard.json
similarity index 97%
rename from keyboards/mechlovin/zed65/no_backlight/retro66/info.json
rename to keyboards/mechlovin/zed65/no_backlight/retro66/keyboard.json
index 0709014f76b..49ed44f0a1f 100644
--- a/keyboards/mechlovin/zed65/no_backlight/retro66/info.json
+++ b/keyboards/mechlovin/zed65/no_backlight/retro66/keyboard.json
@@ -8,6 +8,14 @@
"pid": "0x6601",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "encoder": true
+ },
"matrix_pins": {
"cols": ["B11", "B12", "B10", "B2", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "A2", "B3", "A15", "B5"],
"rows": ["B13", "B14", "A8", "A1", "A0"]
diff --git a/keyboards/mechlovin/zed65/no_backlight/retro66/rules.mk b/keyboards/mechlovin/zed65/no_backlight/retro66/rules.mk
deleted file mode 100644
index 5af1ba85367..00000000000
--- a/keyboards/mechlovin/zed65/no_backlight/retro66/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-ENCODER_ENABLE = yes
diff --git a/keyboards/mechlovin/zed65/no_backlight/rules.mk b/keyboards/mechlovin/zed65/no_backlight/rules.mk
index b0b388db500..a699765498b 100644
--- a/keyboards/mechlovin/zed65/no_backlight/rules.mk
+++ b/keyboards/mechlovin/zed65/no_backlight/rules.mk
@@ -1,3 +1 @@
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-
DEFAULT_FOLDER = mechlovin/zed65/no_backlight/wearhaus66
diff --git a/keyboards/mechlovin/zed65/no_backlight/wearhaus66/info.json b/keyboards/mechlovin/zed65/no_backlight/wearhaus66/keyboard.json
similarity index 98%
rename from keyboards/mechlovin/zed65/no_backlight/wearhaus66/info.json
rename to keyboards/mechlovin/zed65/no_backlight/wearhaus66/keyboard.json
index 5b0df671dfc..c9c9e0ddb1e 100644
--- a/keyboards/mechlovin/zed65/no_backlight/wearhaus66/info.json
+++ b/keyboards/mechlovin/zed65/no_backlight/wearhaus66/keyboard.json
@@ -8,6 +8,14 @@
"pid": "0x6602",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "rgblight": true
+ },
"matrix_pins": {
"cols": ["B11", "B12", "B10", "B2", "B1", "B0", "A7", "A6", "A5", "A4", "A3", "A2", "B3", "A15", "B5"],
"rows": ["B13", "B14", "A8", "A1", "A0"]
diff --git a/keyboards/mechlovin/zed65/no_backlight/wearhaus66/rules.mk b/keyboards/mechlovin/zed65/no_backlight/wearhaus66/rules.mk
deleted file mode 100644
index 84ef473c02e..00000000000
--- a/keyboards/mechlovin/zed65/no_backlight/wearhaus66/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
diff --git a/keyboards/mechlovin/zed65/rev1/keyboard.json b/keyboards/mechlovin/zed65/rev1/keyboard.json
index 20f04dbe655..99de5d53f2a 100644
--- a/keyboards/mechlovin/zed65/rev1/keyboard.json
+++ b/keyboards/mechlovin/zed65/rev1/keyboard.json
@@ -9,6 +9,11 @@
"device_version": "0.0.1"
},
"features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
"nkro": true,
"rgblight": true
},
diff --git a/keyboards/mechstudio/chapter1/info.json b/keyboards/mechstudio/chapter1/keyboard.json
similarity index 100%
rename from keyboards/mechstudio/chapter1/info.json
rename to keyboards/mechstudio/chapter1/keyboard.json
diff --git a/keyboards/mechstudio/ud_40_ortho/info.json b/keyboards/mechstudio/ud_40_ortho/keyboard.json
similarity index 96%
rename from keyboards/mechstudio/ud_40_ortho/info.json
rename to keyboards/mechstudio/ud_40_ortho/keyboard.json
index 6b301e69e40..31955239f5f 100644
--- a/keyboards/mechstudio/ud_40_ortho/info.json
+++ b/keyboards/mechstudio/ud_40_ortho/keyboard.json
@@ -8,6 +8,12 @@
"pid": "0x0002",
"device_version": "0.0.2"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "rgblight": true
+ },
"matrix_pins": {
"cols": ["C5", "D0", "B3", "B2", "B1", "B0", "D6", "D5", "D4", "D3", "D2", "D1"],
"rows": ["C2", "B4", "B5", "B6"]
diff --git a/keyboards/mechstudio/ud_40_ortho/rules.mk b/keyboards/mechstudio/ud_40_ortho/rules.mk
index 585ce414dcd..4df55cd2206 100644
--- a/keyboards/mechstudio/ud_40_ortho/rules.mk
+++ b/keyboards/mechstudio/ud_40_ortho/rules.mk
@@ -1,16 +1,3 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
# Disable unsupported hardware
AUDIO_SUPPORTED = no
BACKLIGHT_SUPPORTED = no
diff --git a/keyboards/mechwild/bb65/config.h b/keyboards/mechwild/bb65/config.h
new file mode 100644
index 00000000000..0792ca7f590
--- /dev/null
+++ b/keyboards/mechwild/bb65/config.h
@@ -0,0 +1,10 @@
+// Copyright 2023 Kyle McCreery (@kylemccreery)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define WS2812_PWM_DRIVER PWMD5
+#define WS2812_PWM_CHANNEL 2
+#define WS2812_PWM_PAL_MODE 2
+#define WS2812_DMA_STREAM STM32_DMA1_STREAM6
+#define WS2812_DMA_CHANNEL 6
diff --git a/keyboards/mechwild/bb65/f401/info.json b/keyboards/mechwild/bb65/f401/info.json
new file mode 100644
index 00000000000..797e9900595
--- /dev/null
+++ b/keyboards/mechwild/bb65/f401/info.json
@@ -0,0 +1,3 @@
+{
+ "development_board": "blackpill_f401"
+}
diff --git a/keyboards/mechwild/bb65/f401/rules.mk b/keyboards/mechwild/bb65/f401/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/mechwild/bb65/f401/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/mechwild/bb65/f411/info.json b/keyboards/mechwild/bb65/f411/info.json
new file mode 100644
index 00000000000..a41c5f4dd14
--- /dev/null
+++ b/keyboards/mechwild/bb65/f411/info.json
@@ -0,0 +1,3 @@
+{
+ "development_board": "blackpill_f411"
+}
diff --git a/keyboards/mechwild/bb65/f411/rules.mk b/keyboards/mechwild/bb65/f411/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/mechwild/bb65/f411/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/mechwild/bb65/halconf.h b/keyboards/mechwild/bb65/halconf.h
new file mode 100644
index 00000000000..d9ca9492565
--- /dev/null
+++ b/keyboards/mechwild/bb65/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2023 Kyle McCreery (@kylemccreery)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/mechwild/bb65/info.json b/keyboards/mechwild/bb65/info.json
new file mode 100644
index 00000000000..a9d812d827f
--- /dev/null
+++ b/keyboards/mechwild/bb65/info.json
@@ -0,0 +1,192 @@
+{
+ "manufacturer": "MechWild",
+ "keyboard_name": "BB65",
+ "bootloader_instructions": "Hold down the BOOT button, then tap the NRST button on the BlackPill. Avoid touching the A11 and A12 pins.",
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "A3", "pin_b": "A2"}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["B14", "B15", "A8", "A15", "B4", "B5", "B8", "B9", "B0"],
+ "rows": ["B13", "B3", "B10", "A7", "A6", "B12", "B1", "A5"]
+ },
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "brightness_steps": 8,
+ "led_count": 10,
+ "saturation_steps": 8
+ },
+ "url": "https://mechwild.com/product/bb65/",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x1712",
+ "vid": "0x6D77"
+ },
+ "ws2812": {
+ "driver": "pwm",
+ "pin": "A1"
+ },
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [5, 8], "x": 9, "y": 0},
+ {"matrix": [5, 7], "x": 10, "y": 0},
+ {"matrix": [5, 6], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [5, 4], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [6, 8], "x": 9.5, "y": 1},
+ {"matrix": [6, 7], "x": 10.5, "y": 1},
+ {"matrix": [6, 6], "x": 11.5, "y": 1},
+ {"matrix": [6, 5], "x": 12.5, "y": 1},
+ {"matrix": [6, 4], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [7, 0], "x": 9.75, "y": 2},
+ {"matrix": [6, 0], "x": 10.75, "y": 2},
+ {"matrix": [6, 1], "x": 11.75, "y": 2},
+ {"matrix": [6, 2], "x": 12.75, "y": 2},
+ {"matrix": [6, 3], "x": 13.75, "y": 2, "w": 1.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [7, 8], "x": 9.25, "y": 3},
+ {"matrix": [7, 7], "x": 10.25, "y": 3},
+ {"matrix": [7, 6], "x": 11.25, "y": 3},
+ {"matrix": [7, 5], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [7, 4], "x": 15.5, "y": 3},
+ {"matrix": [7, 3], "x": 14.25, "y": 3.25},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 5], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 3], "x": 10, "y": 4},
+ {"matrix": [4, 4], "x": 11, "y": 4},
+ {"matrix": [4, 6], "x": 12, "y": 4},
+ {"matrix": [4, 7], "x": 13.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 14.25, "y": 4.25},
+ {"matrix": [7, 2], "x": 15.25, "y": 4.25}
+ ]
+ },
+ "LAYOUT_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [5, 8], "x": 9, "y": 0},
+ {"matrix": [5, 7], "x": 10, "y": 0},
+ {"matrix": [5, 6], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [5, 4], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [6, 8], "x": 9.5, "y": 1},
+ {"matrix": [6, 7], "x": 10.5, "y": 1},
+ {"matrix": [6, 6], "x": 11.5, "y": 1},
+ {"matrix": [6, 5], "x": 12.5, "y": 1},
+ {"matrix": [6, 4], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [7, 0], "x": 9.75, "y": 2},
+ {"matrix": [6, 0], "x": 10.75, "y": 2},
+ {"matrix": [6, 1], "x": 11.75, "y": 2},
+ {"matrix": [6, 3], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [7, 8], "x": 9.25, "y": 3},
+ {"matrix": [7, 7], "x": 10.25, "y": 3},
+ {"matrix": [7, 6], "x": 11.25, "y": 3},
+ {"matrix": [7, 5], "x": 12.25, "y": 3, "w": 1.75},
+ {"matrix": [7, 4], "x": 15.5, "y": 3},
+ {"matrix": [7, 3], "x": 14.25, "y": 3.25},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 5], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 3], "x": 10, "y": 4},
+ {"matrix": [4, 4], "x": 11, "y": 4},
+ {"matrix": [4, 6], "x": 12, "y": 4},
+ {"matrix": [4, 7], "x": 13.25, "y": 4.25},
+ {"matrix": [4, 8], "x": 14.25, "y": 4.25},
+ {"matrix": [7, 2], "x": 15.25, "y": 4.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/mechwild/bb65/keymaps/default/keymap.json b/keyboards/mechwild/bb65/keymaps/default/keymap.json
new file mode 100644
index 00000000000..31d55e5f95a
--- /dev/null
+++ b/keyboards/mechwild/bb65/keymaps/default/keymap.json
@@ -0,0 +1,31 @@
+{
+ "keyboard": "mechwild/bb65/f401",
+ "keymap": "default",
+ "version": 1,
+ "layout": "LAYOUT_all",
+ "layers": [
+ [
+ "QK_GESC", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_MINS", "KC_EQL", "KC_BSPC",
+ "KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_LBRC", "KC_RBRC", "KC_BSLS",
+ "MO(1)", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT", "KC_TRNS", "KC_ENT",
+ "KC_LSFT", "KC_TRNS", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT", "KC_UP", "RGB_TOG",
+ "RGB_RMOD", "KC_LGUI", "RGB_MOD", "KC_SPC", "KC_RALT", "KC_RGUI", "KC_RCTL", "KC_LEFT", "KC_DOWN", "KC_RGHT"
+ ],
+ [
+ "KC_TRNS", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_F12", "KC_DEL",
+ "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
+ "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
+ "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_PGUP", "KC_TRNS",
+ "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_HOME", "KC_PGDN", "KC_END"
+ ]
+ ],
+ "config": {
+ "features": {
+ "encoder_map": true
+ }
+ },
+ "encoders": [
+ [{"ccw": "KC_VOLD", "cw": "KC_VOLU"}],
+ [{"ccw": "KC_TRNS", "cw": "KC_TRNS"}]
+ ]
+}
diff --git a/keyboards/mechwild/bb65/keymaps/via/keymap.json b/keyboards/mechwild/bb65/keymaps/via/keymap.json
new file mode 100644
index 00000000000..1e6ebcb717c
--- /dev/null
+++ b/keyboards/mechwild/bb65/keymaps/via/keymap.json
@@ -0,0 +1,32 @@
+{
+ "keyboard": "mechwild/bb65/f401",
+ "keymap": "via",
+ "version": 1,
+ "layout": "LAYOUT_all",
+ "layers": [
+ [
+ "QK_GESC", "KC_1", "KC_2", "KC_3", "KC_4", "KC_5", "KC_6", "KC_7", "KC_8", "KC_9", "KC_0", "KC_MINS", "KC_EQL", "KC_BSPC",
+ "KC_TAB", "KC_Q", "KC_W", "KC_E", "KC_R", "KC_T", "KC_Y", "KC_U", "KC_I", "KC_O", "KC_P", "KC_LBRC", "KC_RBRC", "KC_BSLS",
+ "MO(1)", "KC_A", "KC_S", "KC_D", "KC_F", "KC_G", "KC_H", "KC_J", "KC_K", "KC_L", "KC_SCLN", "KC_QUOT", "KC_TRNS", "KC_ENT",
+ "KC_LSFT", "KC_TRNS", "KC_Z", "KC_X", "KC_C", "KC_V", "KC_B", "KC_N", "KC_M", "KC_COMM", "KC_DOT", "KC_SLSH", "KC_RSFT", "KC_UP", "RGB_TOG",
+ "RGB_RMOD", "KC_LGUI", "RGB_MOD", "KC_SPC", "KC_RALT", "KC_RGUI", "KC_RCTL", "KC_LEFT", "KC_DOWN", "KC_RGHT"
+ ],
+ [
+ "KC_TRNS", "KC_F1", "KC_F2", "KC_F3", "KC_F4", "KC_F5", "KC_F6", "KC_F7", "KC_F8", "KC_F9", "KC_F10", "KC_F11", "KC_F12", "KC_DEL",
+ "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
+ "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS",
+ "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_PGUP", "KC_TRNS",
+ "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_TRNS", "KC_HOME", "KC_PGDN", "KC_END"
+ ]
+ ],
+ "config": {
+ "features": {
+ "encoder_map": true,
+ "via": true
+ }
+ },
+ "encoders": [
+ [{"ccw": "KC_VOLD", "cw": "KC_VOLU"}],
+ [{"ccw": "KC_TRNS", "cw": "KC_TRNS"}]
+ ]
+}
diff --git a/keyboards/mechwild/bb65/mcuconf.h b/keyboards/mechwild/bb65/mcuconf.h
new file mode 100644
index 00000000000..f9e61e737de
--- /dev/null
+++ b/keyboards/mechwild/bb65/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2023 Kyle McCreery (@kylemccreery)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_TIM5
+#define STM32_PWM_USE_TIM5 TRUE
diff --git a/keyboards/mechwild/bb65/readme.md b/keyboards/mechwild/bb65/readme.md
new file mode 100644
index 00000000000..43416f90c1b
--- /dev/null
+++ b/keyboards/mechwild/bb65/readme.md
@@ -0,0 +1,23 @@
+# BB65
+
+
+
+BB65 is a completely normal BlackPill-powered 65% DIY kit. It’s got all the letters, a number row, and arrow keys. Basic as it can be.
+
+The `f401` version is the standard for this kit, using an STM32F401 BlackPill. The `f411` version will not run on an STM32F401 BlackPill; if in doubt, use `f401`.
+
+* Keyboard Maintainer: [Kyle McCreery](https://github.com/kylemccreery)
+* Hardware Supported: BB65 v1.0
+* Hardware Availability: [BB65 on MechWild](https://mechwild.com/product/bb65/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make mechwild/bb65/f401:default
+ make mechwild/bb65/f411:default
+
+Flashing example for this keyboard:
+
+ make mechwild/bb65/f401:default:flash
+ make mechwild/bb65/f411:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
diff --git a/keyboards/mechwild/bbs/info.json b/keyboards/mechwild/bbs/keyboard.json
similarity index 100%
rename from keyboards/mechwild/bbs/info.json
rename to keyboards/mechwild/bbs/keyboard.json
diff --git a/keyboards/mechwild/bde/info.json b/keyboards/mechwild/bde/info.json
index e2389455633..918c792aa70 100644
--- a/keyboards/mechwild/bde/info.json
+++ b/keyboards/mechwild/bde/info.json
@@ -8,16 +8,6 @@
"build": {
"lto": true
},
- "features": {
- "bootmagic": true,
- "command": false,
- "console": false,
- "debug": false,
- "extrakey": true,
- "mousekey": true,
- "rgblight": true,
- "nkro": true
- },
"development_board": "promicro",
"rgblight": {
"sleep": true,
diff --git a/keyboards/mechwild/bde/lefty/keyboard.json b/keyboards/mechwild/bde/lefty/keyboard.json
index c9bcd051954..751a65b1a45 100644
--- a/keyboards/mechwild/bde/lefty/keyboard.json
+++ b/keyboards/mechwild/bde/lefty/keyboard.json
@@ -4,6 +4,13 @@
"pid": "0x1701",
"device_version": "2.0.3"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "nkro": true,
+ "rgblight": true
+ },
"matrix_pins": {
"rows": ["D1", "D7", "D3"],
"cols": ["F7", "B1", "B6", "B2", "B3", "F6", "F5", "F4", "D0", "D4", "C6", "E6", "B5", "B4"]
diff --git a/keyboards/mechwild/bde/rev2/info.json b/keyboards/mechwild/bde/rev2/keyboard.json
similarity index 94%
rename from keyboards/mechwild/bde/rev2/info.json
rename to keyboards/mechwild/bde/rev2/keyboard.json
index b8b7fc39d06..beb2624f3e3 100644
--- a/keyboards/mechwild/bde/rev2/info.json
+++ b/keyboards/mechwild/bde/rev2/keyboard.json
@@ -4,6 +4,15 @@
"pid": "0x170A",
"device_version": "1.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "nkro": true,
+ "rgblight": true,
+ "encoder": true,
+ "oled": true
+ },
"encoder": {
"rotary": [
{"pin_a": "D2", "pin_b": "D3"}
diff --git a/keyboards/mechwild/bde/rev2/rules.mk b/keyboards/mechwild/bde/rev2/rules.mk
deleted file mode 100644
index bade0749fc9..00000000000
--- a/keyboards/mechwild/bde/rev2/rules.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-ENCODER_ENABLE = yes # Enable encoder
-OLED_ENABLE = yes # Enable OLED Screen
diff --git a/keyboards/mechwild/bde/righty/keyboard.json b/keyboards/mechwild/bde/righty/keyboard.json
index 3f254da2861..54a7a4459f0 100644
--- a/keyboards/mechwild/bde/righty/keyboard.json
+++ b/keyboards/mechwild/bde/righty/keyboard.json
@@ -4,6 +4,13 @@
"pid": "0x1702",
"device_version": "2.0.3"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "nkro": true,
+ "rgblight": true
+ },
"matrix_pins": {
"rows": ["D1", "D7", "D3"],
"cols": ["B4", "B5", "E6", "C6", "D4", "D0", "F4", "F5", "F6", "B3", "B2", "B6", "B1", "F7"]
diff --git a/keyboards/mechwild/mokulua/mirrored/info.json b/keyboards/mechwild/mokulua/mirrored/keyboard.json
similarity index 96%
rename from keyboards/mechwild/mokulua/mirrored/info.json
rename to keyboards/mechwild/mokulua/mirrored/keyboard.json
index ccc2d02b637..be74fabbd32 100644
--- a/keyboards/mechwild/mokulua/mirrored/info.json
+++ b/keyboards/mechwild/mokulua/mirrored/keyboard.json
@@ -8,6 +8,14 @@
"pid": "0x170C",
"device_version": "1.0.3"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "rgblight": true,
+ "encoder": true,
+ "oled": true
+ },
"matrix_pins": {
"cols": ["D4", "C6", "D7", "E6", "B4", "B5"],
"rows": ["F4", "F5", "F6", "F7", "B1", "B3"]
diff --git a/keyboards/mechwild/mokulua/mirrored/rules.mk b/keyboards/mechwild/mokulua/mirrored/rules.mk
deleted file mode 100644
index 1a9045155ba..00000000000
--- a/keyboards/mechwild/mokulua/mirrored/rules.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-ENCODER_ENABLE = yes # Enable encoder
-OLED_ENABLE = yes # Enable OLED Screen
diff --git a/keyboards/mechwild/mokulua/standard/info.json b/keyboards/mechwild/mokulua/standard/keyboard.json
similarity index 96%
rename from keyboards/mechwild/mokulua/standard/info.json
rename to keyboards/mechwild/mokulua/standard/keyboard.json
index 5b22023cce3..044573d82c5 100644
--- a/keyboards/mechwild/mokulua/standard/info.json
+++ b/keyboards/mechwild/mokulua/standard/keyboard.json
@@ -8,6 +8,14 @@
"pid": "0x170B",
"device_version": "1.0.3"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "rgblight": true,
+ "encoder": true,
+ "oled": true
+ },
"matrix_pins": {
"cols": ["D4", "C6", "D7", "E6", "B4", "B5"],
"rows": ["F4", "F5", "F6", "F7", "B1", "B3"]
@@ -22,7 +30,7 @@
"tap_keycode_delay": 10
},
"split": {
- "enabled": true
+ "enabled": true,
"soft_serial_pin": "D3",
"transport": {
"sync": {
diff --git a/keyboards/mechwild/mokulua/standard/rules.mk b/keyboards/mechwild/mokulua/standard/rules.mk
deleted file mode 100644
index 1a9045155ba..00000000000
--- a/keyboards/mechwild/mokulua/standard/rules.mk
+++ /dev/null
@@ -1,14 +0,0 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-ENCODER_ENABLE = yes # Enable encoder
-OLED_ENABLE = yes # Enable OLED Screen
diff --git a/keyboards/mechwild/puckbuddy/info.json b/keyboards/mechwild/puckbuddy/keyboard.json
similarity index 88%
rename from keyboards/mechwild/puckbuddy/info.json
rename to keyboards/mechwild/puckbuddy/keyboard.json
index b430c4af450..4e827d1ba87 100644
--- a/keyboards/mechwild/puckbuddy/info.json
+++ b/keyboards/mechwild/puckbuddy/keyboard.json
@@ -8,6 +8,17 @@
"pid": "0x170F",
"device_version": "1.0.0"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "rgblight": true,
+ "encoder": true,
+ "oled": true,
+ "dip_switch": true,
+ "pointing_device": true,
+ "dynamic_tapping_term": true
+ },
"matrix_pins": {
"cols": ["B10", "A8", "B4", "B5"],
"rows": ["B12", "B13", "B14", "B15"]
diff --git a/keyboards/mechwild/puckbuddy/rules.mk b/keyboards/mechwild/puckbuddy/rules.mk
index 980fe281cff..fb5d6497359 100644
--- a/keyboards/mechwild/puckbuddy/rules.mk
+++ b/keyboards/mechwild/puckbuddy/rules.mk
@@ -1,20 +1 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-ENCODER_ENABLE = yes # Encoder Enabled
-OLED_ENABLE = yes # OLED Enabled
-DIP_SWITCH_ENABLE = yes # Dip Switch Enabled
-
-POINTING_DEVICE_ENABLE = yes # Pointing Device Enabled
-POINTING_DEVICE_DRIVER = cirque_pinnacle_spi # Pointing Device Driver
-
-DYNAMIC_TAPPING_TERM_ENABLE = yes # Enable Dynamic Tapping Term to control the Tap term for the Cirque Pad easily
+POINTING_DEVICE_DRIVER = cirque_pinnacle_spi
diff --git a/keyboards/mechwild/sugarglider/f401/keyboard.json b/keyboards/mechwild/sugarglider/f401/keyboard.json
index 797e9900595..7bf58c1b45e 100644
--- a/keyboards/mechwild/sugarglider/f401/keyboard.json
+++ b/keyboards/mechwild/sugarglider/f401/keyboard.json
@@ -1,3 +1,18 @@
{
- "development_board": "blackpill_f401"
+ "development_board": "blackpill_f401",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "rgblight": true,
+ "encoder": true,
+ "dip_switch": true,
+ "steno": true,
+ "oled": true,
+ "pointing_device": true,
+ "dynamic_tapping_term": true
+ }
}
diff --git a/keyboards/mechwild/sugarglider/f411/keyboard.json b/keyboards/mechwild/sugarglider/f411/keyboard.json
index a41c5f4dd14..dd76af1f10e 100644
--- a/keyboards/mechwild/sugarglider/f411/keyboard.json
+++ b/keyboards/mechwild/sugarglider/f411/keyboard.json
@@ -1,3 +1,18 @@
{
- "development_board": "blackpill_f411"
+ "development_board": "blackpill_f411",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "rgblight": true,
+ "encoder": true,
+ "dip_switch": true,
+ "steno": true,
+ "oled": true,
+ "pointing_device": true,
+ "dynamic_tapping_term": true
+ }
}
diff --git a/keyboards/mechwild/sugarglider/info.json b/keyboards/mechwild/sugarglider/info.json
index 749b0952cbd..80004f35d14 100644
--- a/keyboards/mechwild/sugarglider/info.json
+++ b/keyboards/mechwild/sugarglider/info.json
@@ -3,23 +3,14 @@
"keyboard_name": "Sugar Glider",
"maintainer": "kylemccreery",
"url": "https://mechwild.com/product/sugar-glider/",
- "features": {
- "bootmagic": true,
- "command": false,
- "console": false,
- "extrakey": true,
- "mousekey": true,
- "nkro": true,
- "encoder": true,
- "rgblight": true,
- "dip_switch": true,
- "steno": true
- },
"usb": {
"vid": "0x6D77",
"pid": "0x1710",
"device_version": "0.2.0",
- "force_nkro": true
+ "force_nkro": true,
+ "shared_endpoint": {
+ "keyboard": true
+ }
},
"diode_direction": "COL2ROW",
"dynamic_keymap": {
diff --git a/keyboards/mechwild/sugarglider/rules.mk b/keyboards/mechwild/sugarglider/rules.mk
index 6fd0836a733..a01a95a8685 100644
--- a/keyboards/mechwild/sugarglider/rules.mk
+++ b/keyboards/mechwild/sugarglider/rules.mk
@@ -1,12 +1,5 @@
-# Build Options
-# change yes to no to disable
-#
-OLED_ENABLE = yes # OLED Enabled
-
# Cirque touchpad settings
-POINTING_DEVICE_ENABLE = yes # Pointing Device Enabled
POINTING_DEVICE_DRIVER = cirque_pinnacle_spi # Pointing Device Driver
-DYNAMIC_TAPPING_TERM_ENABLE = yes # Enable Dynamic Tapping Term to control the Tap term for the Cirque Pad easily
# Custom matrix setup
CUSTOM_MATRIX = lite
@@ -16,6 +9,3 @@ SRC += mcp23018.c matrix.c
I2C_DRIVER_REQUIRED = yes
DEFAULT_FOLDER = mechwild/sugarglider/wide_oled
-
-# Necessary for stenography functionality
-KEYBOARD_SHARED_EP = yes # Needed to free up an endpoint in blackpill
diff --git a/keyboards/mechwild/sugarglider/wide_oled/f401/keyboard.json b/keyboards/mechwild/sugarglider/wide_oled/f401/keyboard.json
index 797e9900595..7bf58c1b45e 100644
--- a/keyboards/mechwild/sugarglider/wide_oled/f401/keyboard.json
+++ b/keyboards/mechwild/sugarglider/wide_oled/f401/keyboard.json
@@ -1,3 +1,18 @@
{
- "development_board": "blackpill_f401"
+ "development_board": "blackpill_f401",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "rgblight": true,
+ "encoder": true,
+ "dip_switch": true,
+ "steno": true,
+ "oled": true,
+ "pointing_device": true,
+ "dynamic_tapping_term": true
+ }
}
diff --git a/keyboards/mechwild/sugarglider/wide_oled/f411/keyboard.json b/keyboards/mechwild/sugarglider/wide_oled/f411/keyboard.json
index a41c5f4dd14..dd76af1f10e 100644
--- a/keyboards/mechwild/sugarglider/wide_oled/f411/keyboard.json
+++ b/keyboards/mechwild/sugarglider/wide_oled/f411/keyboard.json
@@ -1,3 +1,18 @@
{
- "development_board": "blackpill_f411"
+ "development_board": "blackpill_f411",
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "console": false,
+ "command": false,
+ "nkro": true,
+ "rgblight": true,
+ "encoder": true,
+ "dip_switch": true,
+ "steno": true,
+ "oled": true,
+ "pointing_device": true,
+ "dynamic_tapping_term": true
+ }
}
diff --git a/keyboards/mechwild/sugarglider/wide_oled/rules.mk b/keyboards/mechwild/sugarglider/wide_oled/rules.mk
index 193169239b2..23e6cab873a 100644
--- a/keyboards/mechwild/sugarglider/wide_oled/rules.mk
+++ b/keyboards/mechwild/sugarglider/wide_oled/rules.mk
@@ -3,4 +3,4 @@
#
WIDE_OLED_ENABLE = yes
-DEFAULT_FOLDER = mechwild/sugarglider/wide_oled/f401
\ No newline at end of file
+DEFAULT_FOLDER = mechwild/sugarglider/wide_oled/f401
diff --git a/keyboards/mechwild/waka60/config.h b/keyboards/mechwild/waka60/config.h
index d9eed88676a..db91eb667e6 100644
--- a/keyboards/mechwild/waka60/config.h
+++ b/keyboards/mechwild/waka60/config.h
@@ -17,23 +17,10 @@ along with this program. If not, see .
#pragma once
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
+#define AUDIO_PIN B5
+#define AUDIO_PWM_DRIVER PWMD1
+#define AUDIO_PWM_CHANNEL 1
+#define AUDIO_STATE_TIMER GPTD4
-/*
- * Feature disable options
- * These options are also useful to firmware size reduction.
- */
-
-/* disable debug print */
-//#define NO_DEBUG
-
-/* disable print */
-//#define NO_PRINT
-
-/* disable action features */
-//#define NO_ACTION_LAYER
-//#define NO_ACTION_TAPPING
-//#define NO_ACTION_ONESHOT
+#define AUDIO_CLICKY
+#define AUDIO_INIT_DELAY
diff --git a/keyboards/mechwild/waka60/info.json b/keyboards/mechwild/waka60/info.json
index f7a0300a6a9..f8b8cad5100 100644
--- a/keyboards/mechwild/waka60/info.json
+++ b/keyboards/mechwild/waka60/info.json
@@ -1,47 +1,12 @@
{
- "keyboard_name": "Waka60",
"manufacturer": "MechWild",
- "url": "mechwild.com",
+ "keyboard_name": "Waka60",
"maintainer": "Kyle McCreery",
- "usb": {
- "vid": "0x6D77",
- "pid": "0x1709",
- "device_version": "1.0.1"
- },
- "rgblight": {
- "saturation_steps": 8,
- "brightness_steps": 8,
- "led_count": 3,
- "sleep": true,
- "animations": {
- "breathing": true,
- "rainbow_mood": true,
- "rainbow_swirl": true,
- "snake": true,
- "knight": true,
- "christmas": true,
- "static_gradient": true,
- "rgb_test": true,
- "alternating": true,
- "twinkle": true
- }
- },
- "ws2812": {
- "pin": "A1"
- },
- "features": {
- "bootmagic": true,
- "command": false,
- "console": false,
- "encoder": true,
- "extrakey": true,
- "mousekey": true,
- "nkro": false,
- "rgblight": true
- },
- "matrix_pins": {
- "cols": ["B10", "B1", "B0", "A7", "A6", "A5", "A4"],
- "rows": ["B8", "B4", "B3", "B9", "A15", "B12", "B13", "B14", "B15", "A8"]
+ "audio": {
+ "default": {
+ "clicky": false
+ },
+ "driver": "pwm_software"
},
"diode_direction": "COL2ROW",
"encoder": {
@@ -49,11 +14,84 @@
{"pin_a": "A3", "pin_b": "A2"}
]
},
+ "features": {
+ "audio": true,
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["B10", "B1", "B0", "A7", "A6", "A5", "A4"],
+ "rows": ["B8", "B4", "B3", "B9", "A15", "B12", "B13", "B14", "B15", "A8"]
+ },
"qmk": {
+ "locking": {
+ "enabled": true,
+ "resync": true
+ },
"tap_keycode_delay": 10
},
+ "rgb_matrix": {
+ "animations": {
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_out_in": true,
+ "cycle_up_down": true,
+ "gradient_up_down": true,
+ "hue_breathing": true,
+ "jellybean_raindrops": true,
+ "pixel_flow": true,
+ "pixel_rain": true,
+ "rainbow_beacon": true,
+ "raindrops": true
+ },
+ "center_point": [112, 40],
+ "driver": "ws2812",
+ "layout": [
+ {"x": 112, "y": 12, "flags": 8},
+ {"x": 112, "y": 27, "flags": 8},
+ {"x": 112, "y": 40, "flags": 8}
+ ],
+ "sat_steps": 8,
+ "sleep": true,
+ "val_steps": 8
+ },
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "christmas": true,
+ "knight": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "rgb_test": true,
+ "snake": true,
+ "static_gradient": true,
+ "twinkle": true
+ },
+ "brightness_steps": 8,
+ "led_count": 3,
+ "saturation_steps": 8,
+ "sleep": true
+ },
+ "url": "mechwild.com",
+ "usb": {
+ "device_version": "1.0.1",
+ "pid": "0x1709",
+ "vid": "0x6D77"
+ },
+ "ws2812": {
+ "pin": "A1"
+ },
+ "layout_aliases": {
+ "LAYOUT": "LAYOUT_all"
+ },
"layouts": {
- "LAYOUT": {
+ "LAYOUT_1u_1u_1u_1u_1u_2u": {
"layout": [
{"matrix": [0, 0], "x": 0, "y": 0},
{"matrix": [0, 1], "x": 1, "y": 0},
@@ -61,56 +99,1191 @@
{"matrix": [0, 3], "x": 3, "y": 0},
{"matrix": [0, 4], "x": 4, "y": 0},
{"matrix": [0, 5], "x": 5, "y": 0},
-
{"matrix": [5, 0], "x": 7, "y": 0},
{"matrix": [5, 1], "x": 8, "y": 0},
{"matrix": [5, 2], "x": 9, "y": 0},
{"matrix": [5, 3], "x": 10, "y": 0},
{"matrix": [5, 4], "x": 11, "y": 0},
{"matrix": [5, 5], "x": 12, "y": 0},
-
{"matrix": [1, 0], "x": 0, "y": 1},
{"matrix": [1, 1], "x": 1, "y": 1},
{"matrix": [1, 2], "x": 2, "y": 1},
{"matrix": [1, 3], "x": 3, "y": 1},
{"matrix": [1, 4], "x": 4, "y": 1},
{"matrix": [1, 5], "x": 5, "y": 1},
-
{"matrix": [6, 0], "x": 7, "y": 1},
{"matrix": [6, 1], "x": 8, "y": 1},
{"matrix": [6, 2], "x": 9, "y": 1},
{"matrix": [6, 3], "x": 10, "y": 1},
{"matrix": [6, 4], "x": 11, "y": 1},
{"matrix": [6, 5], "x": 12, "y": 1},
-
{"matrix": [2, 0], "x": 0, "y": 2},
{"matrix": [2, 1], "x": 1, "y": 2},
{"matrix": [2, 2], "x": 2, "y": 2},
{"matrix": [2, 3], "x": 3, "y": 2},
{"matrix": [2, 4], "x": 4, "y": 2},
{"matrix": [2, 5], "x": 5, "y": 2},
-
{"matrix": [7, 0], "x": 7, "y": 2},
{"matrix": [7, 1], "x": 8, "y": 2},
{"matrix": [7, 2], "x": 9, "y": 2},
{"matrix": [7, 3], "x": 10, "y": 2},
{"matrix": [7, 4], "x": 11, "y": 2},
{"matrix": [7, 5], "x": 12, "y": 2},
-
{"matrix": [3, 0], "x": 0, "y": 3},
{"matrix": [3, 1], "x": 1, "y": 3},
{"matrix": [3, 2], "x": 2, "y": 3},
{"matrix": [3, 3], "x": 3, "y": 3},
{"matrix": [3, 4], "x": 4, "y": 3},
{"matrix": [3, 5], "x": 5, "y": 3},
- {"matrix": [3, 6], "x": 6, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "encoder": 0},
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4},
+ {"matrix": [4, 4], "x": 4, "y": 4},
+ {"matrix": [4, 5], "x": 5, "y": 4},
+ {"matrix": [4, 6], "x": 6, "y": 4},
+ {"matrix": [9, 0], "x": 7, "y": 4},
+ {"matrix": [9, 2], "x": 8, "y": 4, "w": 2},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_1u_1u_1u_1u_2u_1u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "encoder": 0},
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4},
+ {"matrix": [4, 4], "x": 4, "y": 4},
+ {"matrix": [4, 5], "x": 5, "y": 4},
+ {"matrix": [4, 6], "x": 6, "y": 4},
+ {"matrix": [9, 1], "x": 7, "y": 4, "w": 2},
+ {"matrix": [9, 2], "x": 9, "y": 4},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_1u_1u_1u_1u_3u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "encoder": 0},
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4},
+ {"matrix": [4, 4], "x": 4, "y": 4},
+ {"matrix": [4, 5], "x": 5, "y": 4},
+ {"matrix": [4, 6], "x": 6, "y": 4},
+ {"matrix": [9, 1], "x": 7, "y": 4, "w": 3},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_1u_1u_3u_1u_1u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "encoder": 0},
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4},
+ {"matrix": [4, 4], "x": 4, "y": 4},
+ {"matrix": [4, 6], "x": 5, "y": 4, "w": 3},
+ {"matrix": [9, 1], "x": 8, "y": 4},
+ {"matrix": [9, 2], "x": 9, "y": 4},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_1u_1u_3u_2u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "encoder": 0},
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4},
+ {"matrix": [4, 4], "x": 4, "y": 4},
+ {"matrix": [4, 6], "x": 5, "y": 4, "w": 3},
+ {"matrix": [9, 2], "x": 8, "y": 4, "w": 2},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_1u_2u_1u_1u_1u_1u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "encoder": 0},
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4},
+ {"matrix": [4, 5], "x": 4, "y": 4, "w": 2},
+ {"matrix": [4, 6], "x": 6, "y": 4},
+ {"matrix": [9, 0], "x": 7, "y": 4},
+ {"matrix": [9, 1], "x": 8, "y": 4},
+ {"matrix": [9, 2], "x": 9, "y": 4},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_1u_2u_1u_2u_1u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "encoder": 0},
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4},
+ {"matrix": [4, 5], "x": 4, "y": 4, "w": 2},
+ {"matrix": [4, 6], "x": 6, "y": 4},
+ {"matrix": [9, 1], "x": 7, "y": 4, "w": 2},
+ {"matrix": [9, 2], "x": 9, "y": 4},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_1u_2u_1u_3u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "encoder": 0},
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4},
+ {"matrix": [4, 5], "x": 4, "y": 4, "w": 2},
+ {"matrix": [4, 6], "x": 6, "y": 4},
+ {"matrix": [9, 1], "x": 7, "y": 4, "w": 3},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_2u_1u_1u_1u_1u_1u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "encoder": 0},
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4, "w": 2},
+ {"matrix": [4, 5], "x": 5, "y": 4},
+ {"matrix": [4, 6], "x": 6, "y": 4},
+ {"matrix": [9, 0], "x": 7, "y": 4},
+ {"matrix": [9, 1], "x": 8, "y": 4},
+ {"matrix": [9, 2], "x": 9, "y": 4},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_2u_1u_1u_1u_2u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "encoder": 0},
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4, "w": 2},
+ {"matrix": [4, 5], "x": 5, "y": 4},
+ {"matrix": [4, 6], "x": 6, "y": 4},
+ {"matrix": [9, 0], "x": 7, "y": 4},
+ {"matrix": [9, 2], "x": 8, "y": 4, "w": 2},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_2u_1u_1u_3u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "encoder": 0},
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4, "w": 2},
+ {"matrix": [4, 5], "x": 5, "y": 4},
+ {"matrix": [4, 6], "x": 6, "y": 4},
+ {"matrix": [9, 1], "x": 7, "y": 4, "w": 3},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_2u_3u_1u_1u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "encoder": 0},
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4, "w": 2},
+ {"matrix": [4, 6], "x": 5, "y": 4, "w": 3},
+ {"matrix": [9, 1], "x": 8, "y": 4},
+ {"matrix": [9, 2], "x": 9, "y": 4},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_2u_3u_2u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "encoder": 0},
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 3], "x": 3, "y": 4, "w": 2},
+ {"matrix": [4, 6], "x": 5, "y": 4, "w": 3},
+ {"matrix": [9, 2], "x": 8, "y": 4, "w": 2},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_3u_1u_1u_1u_1u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "encoder": 0},
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 4], "x": 3, "y": 4, "w": 3},
+ {"matrix": [4, 6], "x": 6, "y": 4},
+ {"matrix": [9, 0], "x": 7, "y": 4},
+ {"matrix": [9, 1], "x": 8, "y": 4},
+ {"matrix": [9, 2], "x": 9, "y": 4},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_3u_1u_1u_2u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "encoder": 0},
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 4], "x": 3, "y": 4, "w": 3},
+ {"matrix": [4, 6], "x": 6, "y": 4},
+ {"matrix": [9, 0], "x": 7, "y": 4},
+ {"matrix": [9, 2], "x": 8, "y": 4, "w": 2},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_3u_1u_2u_1u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "encoder": 0},
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 4], "x": 3, "y": 4, "w": 3},
+ {"matrix": [4, 6], "x": 6, "y": 4},
+ {"matrix": [9, 1], "x": 7, "y": 4, "w": 2},
+ {"matrix": [9, 2], "x": 9, "y": 4},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_3u_1u_3u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "encoder": 0},
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 4], "x": 3, "y": 4, "w": 3},
+ {"matrix": [4, 6], "x": 6, "y": 4},
+ {"matrix": [9, 1], "x": 7, "y": 4, "w": 3},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_7u": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "encoder": 0},
+ {"matrix": [8, 0], "x": 7, "y": 3},
+ {"matrix": [8, 1], "x": 8, "y": 3},
+ {"matrix": [8, 2], "x": 9, "y": 3},
+ {"matrix": [8, 3], "x": 10, "y": 3},
+ {"matrix": [8, 4], "x": 11, "y": 3},
+ {"matrix": [8, 5], "x": 12, "y": 3},
+ {"matrix": [4, 0], "x": 0, "y": 4},
+ {"matrix": [4, 1], "x": 1, "y": 4},
+ {"matrix": [4, 2], "x": 2, "y": 4},
+ {"matrix": [4, 6], "x": 3, "y": 4, "w": 7},
+ {"matrix": [9, 3], "x": 10, "y": 4},
+ {"matrix": [9, 4], "x": 11, "y": 4},
+ {"matrix": [9, 5], "x": 12, "y": 4}
+ ]
+ },
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [5, 0], "x": 7, "y": 0},
+ {"matrix": [5, 1], "x": 8, "y": 0},
+ {"matrix": [5, 2], "x": 9, "y": 0},
+ {"matrix": [5, 3], "x": 10, "y": 0},
+ {"matrix": [5, 4], "x": 11, "y": 0},
+ {"matrix": [5, 5], "x": 12, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [6, 0], "x": 7, "y": 1},
+ {"matrix": [6, 1], "x": 8, "y": 1},
+ {"matrix": [6, 2], "x": 9, "y": 1},
+ {"matrix": [6, 3], "x": 10, "y": 1},
+ {"matrix": [6, 4], "x": 11, "y": 1},
+ {"matrix": [6, 5], "x": 12, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [7, 0], "x": 7, "y": 2},
+ {"matrix": [7, 1], "x": 8, "y": 2},
+ {"matrix": [7, 2], "x": 9, "y": 2},
+ {"matrix": [7, 3], "x": 10, "y": 2},
+ {"matrix": [7, 4], "x": 11, "y": 2},
+ {"matrix": [7, 5], "x": 12, "y": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3},
+ {"matrix": [3, 1], "x": 1, "y": 3},
+ {"matrix": [3, 2], "x": 2, "y": 3},
+ {"matrix": [3, 3], "x": 3, "y": 3},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3, "encoder": 0},
{"matrix": [8, 0], "x": 7, "y": 3},
{"matrix": [8, 1], "x": 8, "y": 3},
{"matrix": [8, 2], "x": 9, "y": 3},
{"matrix": [8, 3], "x": 10, "y": 3},
{"matrix": [8, 4], "x": 11, "y": 3},
{"matrix": [8, 5], "x": 12, "y": 3},
-
{"matrix": [4, 0], "x": 0, "y": 4},
{"matrix": [4, 1], "x": 1, "y": 4},
{"matrix": [4, 2], "x": 2, "y": 4},
diff --git a/keyboards/mechwild/waka60/keymaps/default/keymap.c b/keyboards/mechwild/waka60/keymaps/default/keymap.c
index beb2d9e9e2f..3a7df5d3280 100644
--- a/keyboards/mechwild/waka60/keymaps/default/keymap.c
+++ b/keyboards/mechwild/waka60/keymaps/default/keymap.c
@@ -19,48 +19,30 @@
// Defines names for use in layer keycodes and the keymap
enum layer_names {
_BASE,
- _FN1,
- _FN2,
- _FN3
+ _FN1
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
- [_BASE] = LAYOUT(
+ [_BASE] = LAYOUT_all(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, MO(1), KC_RALT, KC_RGUI, KC_RCTL
),
- [_FN1] = LAYOUT(
- KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,
- KC_TRNS, KC_TRNS, RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, RGB_RMOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
- [_FN2] = LAYOUT(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
- [_FN3] = LAYOUT(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ [_FN1] = LAYOUT_all(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,
+ KC_TRNS, AU_TOGG, CK_UP, RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, MU_TOGG, MU_NEXT, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, CK_TOGG, CK_DOWN, RGB_RMOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
- [_FN1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
- [_FN2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
- [_FN3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ [_FN1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }
};
#endif
diff --git a/keyboards/mechwild/waka60/keymaps/via/keymap.c b/keyboards/mechwild/waka60/keymaps/via/keymap.c
index 4d29baea78a..3a7df5d3280 100644
--- a/keyboards/mechwild/waka60/keymaps/via/keymap.c
+++ b/keyboards/mechwild/waka60/keymaps/via/keymap.c
@@ -19,48 +19,30 @@
// Defines names for use in layer keycodes and the keymap
enum layer_names {
_BASE,
- _FN1,
- _FN2,
- _FN3
+ _FN1
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Base */
- [_BASE] = LAYOUT(
+ [_BASE] = LAYOUT_all(
QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSLS,
MO(1), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT, KC_ENT,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_MUTE, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
KC_LCTL, KC_LGUI, KC_LALT, MO(1), KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, MO(1), KC_RALT, KC_RGUI, KC_RCTL
),
- [_FN1] = LAYOUT(
- KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,
- KC_TRNS, AU_TOGG, RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, MU_TOGG, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, MU_NEXT, RGB_RMOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
- [_FN2] = LAYOUT(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
- ),
- [_FN3] = LAYOUT(
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
- KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ [_FN1] = LAYOUT_all(
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_DEL,
+ KC_TRNS, AU_TOGG, CK_UP, RGB_TOG, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, MU_TOGG, MU_NEXT, RGB_MOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, CK_TOGG, CK_DOWN, RGB_RMOD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
)
};
#ifdef ENCODER_MAP_ENABLE
const uint16_t PROGMEM encoder_map[][NUM_ENCODERS][NUM_DIRECTIONS] = {
[_BASE] = { ENCODER_CCW_CW(KC_VOLD, KC_VOLU) },
- [_FN1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
- [_FN2] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
- [_FN3] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) },
+ [_FN1] = { ENCODER_CCW_CW(KC_TRNS, KC_TRNS) }
};
#endif
diff --git a/keyboards/mecxlabs/mp1/info.json b/keyboards/mecxlabs/mp1/keyboard.json
similarity index 100%
rename from keyboards/mecxlabs/mp1/info.json
rename to keyboards/mecxlabs/mp1/keyboard.json
diff --git a/keyboards/meetlab/kafkasplit/info.json b/keyboards/meetlab/kafkasplit/keyboard.json
similarity index 100%
rename from keyboards/meetlab/kafkasplit/info.json
rename to keyboards/meetlab/kafkasplit/keyboard.json
diff --git a/keyboards/merge/uma/info.json b/keyboards/merge/uma/keyboard.json
similarity index 99%
rename from keyboards/merge/uma/info.json
rename to keyboards/merge/uma/keyboard.json
index 6413480391e..d5fea75fb49 100644
--- a/keyboards/merge/uma/info.json
+++ b/keyboards/merge/uma/keyboard.json
@@ -8,6 +8,18 @@
"pid": "0x3232",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "nkro": true,
+ "backlight": true,
+ "encoder": true,
+ "oled": true
+ },
+ "build": {
+ "lto": true
+ },
"matrix_pins": {
"cols": ["F0", "F1", "F4", "F5", "F6", "F7", "D6", "D4"],
"rows": ["B0", "B1", "B2", "B3", "B7"]
diff --git a/keyboards/merge/uma/rules.mk b/keyboards/merge/uma/rules.mk
deleted file mode 100644
index e146f96ce6f..00000000000
--- a/keyboards/merge/uma/rules.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-ENCODER_ENABLE = yes
-LTO_ENABLE = yes
-OLED_ENABLE = yes
diff --git a/keyboards/mexsistor/ludmila/info.json b/keyboards/mexsistor/ludmila/keyboard.json
similarity index 88%
rename from keyboards/mexsistor/ludmila/info.json
rename to keyboards/mexsistor/ludmila/keyboard.json
index 6e44d33913c..71202208c5f 100644
--- a/keyboards/mexsistor/ludmila/info.json
+++ b/keyboards/mexsistor/ludmila/keyboard.json
@@ -8,6 +8,13 @@
"pid": "0x6BF6",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "mousekey": true,
+ "extrakey": true,
+ "rgblight": true,
+ "encoder": true
+ },
"encoder": {
"rotary": [
{"pin_a": "F6", "pin_b": "F5"}
diff --git a/keyboards/mexsistor/ludmila/rules.mk b/keyboards/mexsistor/ludmila/rules.mk
index 547c4ad49c9..73766740561 100644
--- a/keyboards/mexsistor/ludmila/rules.mk
+++ b/keyboards/mexsistor/ludmila/rules.mk
@@ -1,15 +1,2 @@
-# Build Options
-# change yes to no to disable
-#
CUSTOM_MATRIX = lite
SRC = matrix.c
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-ENCODER_ENABLE = yes
diff --git a/keyboards/minimon/bartlesplit/info.json b/keyboards/minimon/bartlesplit/keyboard.json
similarity index 100%
rename from keyboards/minimon/bartlesplit/info.json
rename to keyboards/minimon/bartlesplit/keyboard.json
diff --git a/keyboards/mitosis/info.json b/keyboards/mitosis/keyboard.json
similarity index 93%
rename from keyboards/mitosis/info.json
rename to keyboards/mitosis/keyboard.json
index feab60b7fb8..c69d1d30cd4 100644
--- a/keyboards/mitosis/info.json
+++ b/keyboards/mitosis/keyboard.json
@@ -8,6 +8,15 @@
"pid": "0x6060",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": false,
+ "mousekey": true,
+ "extrakey": true,
+ "console": true,
+ "command": true,
+ "nkro": true,
+ "unicode": true
+ },
"processor": "atmega32u4",
"bootloader": "caterina",
"layouts": {
diff --git a/keyboards/mitosis/mitosis.c b/keyboards/mitosis/mitosis.c
index ea3d1c99d75..2d3627b56bf 100644
--- a/keyboards/mitosis/mitosis.c
+++ b/keyboards/mitosis/mitosis.c
@@ -1,10 +1,12 @@
#include "mitosis.h"
void led_init(void) {
- DDRD |= (1<<1); // Pin to green, set as output
- PORTD |= (1<<1); // Turn it off
- DDRF |= (1<<4) | (1<<5); // Pins to red and blue, set as output
- PORTF |= (1<<4) | (1<<5); // Turn them off
+ gpio_set_pin_output(MITOSIS_GREEN_LED_PIN);
+ gpio_write_pin_high(MITOSIS_GREEN_LED_PIN);
+ gpio_set_pin_output(MITOSIS_BLUE_LED_PIN);
+ gpio_write_pin_high(MITOSIS_BLUE_LED_PIN);
+ gpio_set_pin_output(MITOSIS_RED_LED_PIN);
+ gpio_write_pin_high(MITOSIS_RED_LED_PIN);
}
void matrix_init_kb(void) {
diff --git a/keyboards/mitosis/mitosis.h b/keyboards/mitosis/mitosis.h
index 04ef56503ff..b1941157035 100644
--- a/keyboards/mitosis/mitosis.h
+++ b/keyboards/mitosis/mitosis.h
@@ -2,12 +2,16 @@
#include "quantum.h"
-#define red_led_off PORTF |= (1<<5)
-#define red_led_on PORTF &= ~(1<<5)
-#define blu_led_off PORTF |= (1<<4)
-#define blu_led_on PORTF &= ~(1<<4)
-#define grn_led_off PORTD |= (1<<1)
-#define grn_led_on PORTD &= ~(1<<1)
+#define MITOSIS_RED_LED_PIN F5
+#define MITOSIS_GREEN_LED_PIN D1
+#define MITOSIS_BLUE_LED_PIN F4
+
+#define red_led_off gpio_write_pin_high(MITOSIS_RED_LED_PIN)
+#define red_led_on gpio_write_pin_low(MITOSIS_RED_LED_PIN)
+#define blu_led_off gpio_write_pin_high(MITOSIS_BLUE_LED_PIN)
+#define blu_led_on gpio_write_pin_low(MITOSIS_BLUE_LED_PIN)
+#define grn_led_off gpio_write_pin_high(MITOSIS_GREEN_LED_PIN)
+#define grn_led_on gpio_write_pin_low(MITOSIS_GREEN_LED_PIN)
#define set_led_off red_led_off; grn_led_off; blu_led_off
#define set_led_red red_led_on; grn_led_off; blu_led_off
@@ -17,27 +21,3 @@
#define set_led_magenta red_led_on; grn_led_off; blu_led_on
#define set_led_cyan red_led_off; grn_led_on; blu_led_on
#define set_led_white red_led_on; grn_led_on; blu_led_on
-
-/*
-#define LED_B 5
-#define LED_R 6
-#define LED_G 7
-
-#define all_leds_off PORTF &= ~(1<.
+ */
+
+#include "quantum.h"
+
+#ifdef OLED_ENABLE
+static void render_bongo1(void) {
+ static const char PROGMEM data[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0xc0, 0x40, 0x60, 0x20, 0x30, 0x30, 0x18, 0x1c, 0x0e, 0x03, 0x01, 0x03, 0x07, 0x1c, 0x38, 0x30, 0x60, 0x60, 0x60, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xe0, 0x30, 0x18, 0x18, 0x08, 0x18, 0x98, 0x30, 0x70, 0xf0, 0xb0, 0x18, 0x0c, 0x06, 0x07, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x06, 0x06, 0x0c, 0x0c, 0x18, 0x18, 0x30, 0x60, 0x60, 0x60, 0xc0, 0x60, 0x60, 0x30, 0x30, 0x30, 0xf8, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x18, 0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x80, 0x80, 0xff, 0xff, 0xc0, 0x80, 0x80, 0x8e, 0x06, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1e, 0x1e, 0x0e, 0x00, 0x10, 0x38, 0x70, 0x70, 0x70, 0x70, 0xe0, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf8, 0x3f, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x03, 0x03, 0x06, 0x06, 0x06, 0x06, 0x0c, 0x0c, 0x0c, 0x1c, 0x18, 0x18, 0x18, 0x38, 0x30, 0x30, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0xe0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x80, 0x00, 0x87, 0xc7, 0xc7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x0f, 0x3c, 0xf0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+ oled_write_raw_P(data, sizeof(data));
+}
+
+static void render_bongo2(void) {
+ static const char PROGMEM data[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0xc0, 0x40, 0x60, 0x20, 0x20, 0x30, 0x10, 0x18, 0x0e, 0x07, 0x03, 0x01, 0x07, 0x0e, 0x1c, 0x30, 0x20, 0x60, 0x60, 0x40, 0xc0, 0xc0, 0x80, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xc0, 0x60, 0x70, 0x30, 0x18, 0x0c, 0x06, 0x06, 0x03, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x03, 0x03, 0x03, 0x06, 0x06, 0x06, 0x0c, 0x08, 0x18, 0x30, 0x30, 0x60, 0x60, 0xc0, 0x60, 0x60, 0x20, 0x30, 0x30, 0x18, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x08, 0x08, 0x08, 0x08, 0x18, 0x10, 0x10, 0x10, 0x10, 0x20, 0x20, 0x20, 0x20, 0x40, 0x40, 0x40, 0x40, 0xc0, 0x80, 0x80, 0xc0, 0xe0, 0x38, 0x1c, 0x06, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x1f, 0x0e, 0x04, 0x00, 0x38, 0x30, 0x70, 0x30, 0x70, 0xe0, 0xe0, 0xc0, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x80, 0x00, 0x00, 0xc0, 0xe0, 0x60, 0x60, 0x70, 0x60, 0x60, 0xe0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfc, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x60, 0x30, 0x90, 0x00, 0x1f, 0x31, 0x60, 0x60, 0x60, 0x60, 0x60, 0x60, 0x20, 0x30, 0x30, 0x10, 0x18, 0x18, 0x08, 0x0c, 0x0c, 0x0c, 0x0c, 0x18, 0x18, 0x18, 0x18, 0x38, 0x30, 0x30, 0x30, 0x30, 0x60, 0x60, 0x60, 0x60, 0xc0, 0xc0, 0xc0, 0xc0, 0x80, 0x80, 0x80, 0x80, 0x03, 0x07, 0x07, 0x00, 0xff, 0xff, 0x00, 0x08, 0x01, 0x38, 0x38, 0x02, 0x00, 0x01, 0x03, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x1c, 0x78, 0xe0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
+ oled_write_raw_P(data, sizeof(data));
+}
+
+/* This code switches the shown image on the oled on every 350th call of this function */
+bool showBongo1 = true;
+int calls = 0;
+bool oled_task_kb(void) {
+ if (!oled_task_user()) {
+ return false;
+ }
+ if (calls++ > 350) {
+ showBongo1 = !showBongo1;
+ calls = 0;
+ }
+ if (showBongo1) {
+ render_bongo1();
+ } else {
+ render_bongo2();
+ }
+ return false;
+}
+#endif
diff --git a/keyboards/rarepotato8de/3x3macropad/info.json b/keyboards/rarepotato8de/3x3macropad/info.json
new file mode 100644
index 00000000000..607c6509966
--- /dev/null
+++ b/keyboards/rarepotato8de/3x3macropad/info.json
@@ -0,0 +1,63 @@
+{
+ "manufacturer": "RarePotato8DE",
+ "keyboard_name": "3x3macropad",
+ "maintainer": "RarePotato8DE",
+ "development_board": "promicro",
+ "build": {
+ "lto": true
+ },
+ "diode_direction": "COL2ROW",
+ "encoder": {
+ "rotary": [
+ {"pin_a": "F4", "pin_b": "B1"}
+ ]
+ },
+ "features": {
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "nkro": true,
+ "oled": true,
+ "rgblight": true
+ },
+ "matrix_pins": {
+ "cols": ["D7", "B3", "B2"],
+ "rows": ["F7", "B5", "B6"]
+ },
+ "rgblight": {
+ "animations": {
+ "alternating": true,
+ "breathing": true,
+ "rainbow_mood": true,
+ "rainbow_swirl": true,
+ "snake": true,
+ "static_gradient": true
+ },
+ "led_count": 6
+ },
+ "url": "https://github.com/rarepotato8de/3x3macropad",
+ "usb": {
+ "device_version": "0.0.1",
+ "pid": "0x0001",
+ "vid": "0x5353"
+ },
+ "ws2812": {
+ "pin": "E6"
+ },
+ "community_layouts": ["ortho_3x3"],
+ "layouts": {
+ "LAYOUT_ortho_3x3": {
+ "layout": [
+ {"label": "k00", "matrix": [0, 0], "x": 0, "y": 0},
+ {"label": "k01", "matrix": [0, 1], "x": 1, "y": 0},
+ {"label": "k02", "matrix": [0, 2], "x": 2, "y": 0},
+ {"label": "k10", "matrix": [1, 0], "x": 0, "y": 1},
+ {"label": "k11", "matrix": [1, 1], "x": 1, "y": 1},
+ {"label": "k12", "matrix": [1, 2], "x": 2, "y": 1},
+ {"label": "k20", "matrix": [2, 0], "x": 0, "y": 2},
+ {"label": "k21", "matrix": [2, 1], "x": 1, "y": 2},
+ {"label": "k22", "matrix": [2, 2], "x": 2, "y": 2}
+ ]
+ }
+ }
+}
diff --git a/keyboards/rarepotato8de/3x3macropad/keymaps/default/keymap.c b/keyboards/rarepotato8de/3x3macropad/keymaps/default/keymap.c
new file mode 100644
index 00000000000..7f68e145e73
--- /dev/null
+++ b/keyboards/rarepotato8de/3x3macropad/keymaps/default/keymap.c
@@ -0,0 +1,25 @@
+/* Copyright 2024 RarePotato8DE
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_ortho_3x3(
+ KC_1, KC_2, KC_3,
+ KC_4, KC_5, KC_6,
+ KC_7, KC_8, KC_9
+ )
+};
diff --git a/keyboards/rarepotato8de/3x3macropad/readme.md b/keyboards/rarepotato8de/3x3macropad/readme.md
new file mode 100644
index 00000000000..60a5caa2220
--- /dev/null
+++ b/keyboards/rarepotato8de/3x3macropad/readme.md
@@ -0,0 +1,28 @@
+# 3x3macropad
+
+
+
+The 3x3macropad is a small macropad with a cool OLED screen and rotary encoder.
+It was inspired by stacked FR4 keyboards like the Discipline65.
+
+* Keyboard Maintainer: [RarePotato8DE](https://github.com/rarepotato8de)
+* Hardware Supported: 3x3macropad
+* Hardware Availability: [Open source!](https://github.com/rarepotato8de/3x3macropad)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make rarepotato8de/3x3macropad:default
+
+Flashing example for this keyboard:
+
+ make rarepotato8de/3x3macropad:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,1) in the matrix (the top left one below the OLED) and plug in the keyboard
+* **Physical reset button**: Short the two through hole pins on the back of the PCB (positioned at the rotary encoder)
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
\ No newline at end of file
diff --git a/keyboards/rarepotato8de/3x3macropad/rules.mk b/keyboards/rarepotato8de/3x3macropad/rules.mk
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/keyboards/rgbkb/pan/pan.c b/keyboards/rgbkb/pan/pan.c
index 191ff1ac1fb..401831e0e20 100644
--- a/keyboards/rgbkb/pan/pan.c
+++ b/keyboards/rgbkb/pan/pan.c
@@ -42,7 +42,7 @@ static inline void setled(int i, uint8_t r, uint8_t g, uint8_t b) {
rgb_matrix_ws2812_array[i].g = g;
rgb_matrix_ws2812_array[i].b = b;
}
-# ifdef RGBW
+# ifdef WS2812_RGBW
convert_rgb_to_rgbw(&rgb_matrix_ws2812_array[i]);
# endif
}
diff --git a/keyboards/rgbkb/pan/rev1/32a/info.json b/keyboards/rgbkb/pan/rev1/32a/keyboard.json
similarity index 100%
rename from keyboards/rgbkb/pan/rev1/32a/info.json
rename to keyboards/rgbkb/pan/rev1/32a/keyboard.json
diff --git a/keyboards/rgbkb/sol/rev1/info.json b/keyboards/rgbkb/sol/rev1/keyboard.json
similarity index 100%
rename from keyboards/rgbkb/sol/rev1/info.json
rename to keyboards/rgbkb/sol/rev1/keyboard.json
diff --git a/keyboards/rgbkb/sol/rev2/info.json b/keyboards/rgbkb/sol/rev2/keyboard.json
similarity index 100%
rename from keyboards/rgbkb/sol/rev2/info.json
rename to keyboards/rgbkb/sol/rev2/keyboard.json
diff --git a/keyboards/rgbkb/sol3/rev1/keyboard.json b/keyboards/rgbkb/sol3/rev1/keyboard.json
index 3b8b7d060c8..83e0a7a9275 100644
--- a/keyboards/rgbkb/sol3/rev1/keyboard.json
+++ b/keyboards/rgbkb/sol3/rev1/keyboard.json
@@ -24,6 +24,9 @@
"twinkle": true
}
},
+ "audio": {
+ "driver": "dac_additive"
+ },
"ws2812": {
"pin": "B5",
"driver": "pwm"
diff --git a/keyboards/rgbkb/sol3/rules.mk b/keyboards/rgbkb/sol3/rules.mk
index bf22130a55a..0c48b5d30e4 100644
--- a/keyboards/rgbkb/sol3/rules.mk
+++ b/keyboards/rgbkb/sol3/rules.mk
@@ -14,7 +14,6 @@ CONSOLE_ENABLE = no # Console for debug
COMMAND_ENABLE = no # Commands for debug and configuration
NKRO_ENABLE = yes # Enable N-Key Rollover
AUDIO_ENABLE = yes # Audio output
-AUDIO_DRIVER = dac_additive
DYNAMIC_MACRO_ENABLE = yes
DIP_SWITCH_ENABLE = yes
diff --git a/keyboards/rgbkb/zen/rev2/info.json b/keyboards/rgbkb/zen/rev2/keyboard.json
similarity index 100%
rename from keyboards/rgbkb/zen/rev2/info.json
rename to keyboards/rgbkb/zen/rev2/keyboard.json
diff --git a/keyboards/ristretto/keyboard.json b/keyboards/ristretto/keyboard.json
index b28f3c1dc10..e8e812b7d2f 100644
--- a/keyboards/ristretto/keyboard.json
+++ b/keyboards/ristretto/keyboard.json
@@ -6,7 +6,8 @@
"usb": {
"vid": "0x666B",
"pid": "0x7273",
- "device_version": "0.0.1"
+ "device_version": "0.0.1",
+ "wait_for_enumeration": true
},
"features": {
"bootmagic": false,
diff --git a/keyboards/ristretto/rules.mk b/keyboards/ristretto/rules.mk
deleted file mode 100644
index 908e5e972ec..00000000000
--- a/keyboards/ristretto/rules.mk
+++ /dev/null
@@ -1 +0,0 @@
-WAIT_FOR_USB = yes
diff --git a/keyboards/salicylic_acid3/7skb/rev1/keyboard.json b/keyboards/salicylic_acid3/7skb/rev1/keyboard.json
index 3ea79da589d..5b5e63b7ca2 100644
--- a/keyboards/salicylic_acid3/7skb/rev1/keyboard.json
+++ b/keyboards/salicylic_acid3/7skb/rev1/keyboard.json
@@ -8,6 +8,14 @@
"pid": "0xEB5F",
"device_version": "0.0.7"
},
+ "features": {
+ "bootmagic": false,
+ "command": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false,
+ "rgblight": true
+ },
"matrix_pins": {
"cols": ["F4", "F5", "F6", "F7", "B1", "B3", "B2", "B5"],
"rows": ["D4", "C6", "D7", "E6", "B4"]
diff --git a/keyboards/salicylic_acid3/7skb/rules.mk b/keyboards/salicylic_acid3/7skb/rules.mk
index 09cad7556c4..15364c29a51 100644
--- a/keyboards/salicylic_acid3/7skb/rules.mk
+++ b/keyboards/salicylic_acid3/7skb/rules.mk
@@ -1,14 +1 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
-
DEFAULT_FOLDER = salicylic_acid3/7skb/rev1
diff --git a/keyboards/salicylic_acid3/getta25/rev1/keyboard.json b/keyboards/salicylic_acid3/getta25/rev1/keyboard.json
index e2148f9302a..3399f9e081b 100644
--- a/keyboards/salicylic_acid3/getta25/rev1/keyboard.json
+++ b/keyboards/salicylic_acid3/getta25/rev1/keyboard.json
@@ -8,6 +8,14 @@
"pid": "0x3060",
"device_version": "0.1.3"
},
+ "features": {
+ "bootmagic": false,
+ "command": true,
+ "extrakey": true,
+ "mousekey": false,
+ "nkro": false,
+ "rgblight": true
+ },
"rgblight": {
"hue_steps": 10,
"led_count": 9,
diff --git a/keyboards/salicylic_acid3/getta25/rules.mk b/keyboards/salicylic_acid3/getta25/rules.mk
index dae9b6ae3bd..069fe74b142 100644
--- a/keyboards/salicylic_acid3/getta25/rules.mk
+++ b/keyboards/salicylic_acid3/getta25/rules.mk
@@ -1,15 +1 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
-OLED_ENABLE = no
-
DEFAULT_FOLDER = salicylic_acid3/getta25/rev1
diff --git a/keyboards/salicylic_acid3/jisplit89/rev1/keyboard.json b/keyboards/salicylic_acid3/jisplit89/rev1/keyboard.json
index ccfe99ad18f..7c72c9b17aa 100644
--- a/keyboards/salicylic_acid3/jisplit89/rev1/keyboard.json
+++ b/keyboards/salicylic_acid3/jisplit89/rev1/keyboard.json
@@ -8,6 +8,14 @@
"pid": "0xEB4F",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "command": true,
+ "extrakey": true,
+ "mousekey": false,
+ "nkro": false,
+ "rgblight": true
+ },
"matrix_pins": {
"cols": ["F4", "F5", "F6", "F7", "B1", "B3", "B2", "B5"],
"rows": ["D1", "D0", "D4", "C6", "D7", "E6", "B4"]
diff --git a/keyboards/salicylic_acid3/jisplit89/rules.mk b/keyboards/salicylic_acid3/jisplit89/rules.mk
index f90f3d9c07c..d54d2ccef4d 100644
--- a/keyboards/salicylic_acid3/jisplit89/rules.mk
+++ b/keyboards/salicylic_acid3/jisplit89/rules.mk
@@ -1,14 +1 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
DEFAULT_FOLDER = salicylic_acid3/jisplit89/rev1
diff --git a/keyboards/salicylic_acid3/naked48/rev1/keyboard.json b/keyboards/salicylic_acid3/naked48/rev1/keyboard.json
index da82c1a16c1..f390db51f14 100644
--- a/keyboards/salicylic_acid3/naked48/rev1/keyboard.json
+++ b/keyboards/salicylic_acid3/naked48/rev1/keyboard.json
@@ -8,6 +8,13 @@
"pid": "0xE8BA",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false,
+ "rgblight": true
+ },
"rgb_matrix": {
"driver": "ws2812"
},
diff --git a/keyboards/salicylic_acid3/naked48/rules.mk b/keyboards/salicylic_acid3/naked48/rules.mk
index fd9a93f5030..dadfa7a2579 100644
--- a/keyboards/salicylic_acid3/naked48/rules.mk
+++ b/keyboards/salicylic_acid3/naked48/rules.mk
@@ -1,15 +1 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-RGB_MATRIX_ENABLE = no
-
DEFAULT_FOLDER = salicylic_acid3/naked48/rev1
diff --git a/keyboards/salicylic_acid3/naked60/rev1/keyboard.json b/keyboards/salicylic_acid3/naked60/rev1/keyboard.json
index f5d53c001d4..1916b01eb21 100644
--- a/keyboards/salicylic_acid3/naked60/rev1/keyboard.json
+++ b/keyboards/salicylic_acid3/naked60/rev1/keyboard.json
@@ -8,6 +8,12 @@
"pid": "0xEB5C",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false
+ },
"matrix_pins": {
"cols": ["F4", "F5", "F6", "F7", "B1", "B3", "B2", "D7", "E6", "B4", "B5", "D3"],
"rows": ["B6", "D1", "D0", "D4", "C6"]
diff --git a/keyboards/salicylic_acid3/naked60/rules.mk b/keyboards/salicylic_acid3/naked60/rules.mk
index 2210ae765c9..904309ea356 100644
--- a/keyboards/salicylic_acid3/naked60/rules.mk
+++ b/keyboards/salicylic_acid3/naked60/rules.mk
@@ -1,14 +1 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
DEFAULT_FOLDER = salicylic_acid3/naked60/rev1
diff --git a/keyboards/salicylic_acid3/naked64/rev1/keyboard.json b/keyboards/salicylic_acid3/naked64/rev1/keyboard.json
index 2034b7d9ab4..8dc9a49c7a6 100644
--- a/keyboards/salicylic_acid3/naked64/rev1/keyboard.json
+++ b/keyboards/salicylic_acid3/naked64/rev1/keyboard.json
@@ -8,6 +8,14 @@
"pid": "0x3060",
"device_version": "0.0.3"
},
+ "features": {
+ "bootmagic": false,
+ "command": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false,
+ "rgblight": true
+ },
"matrix_pins": {
"cols": ["F4", "F5", "F6", "F7", "B1", "B3", "B2", "D3"],
"rows": ["D1", "D0", "D4", "C6", "D7", "E6", "B4", "B5"]
diff --git a/keyboards/salicylic_acid3/naked64/rules.mk b/keyboards/salicylic_acid3/naked64/rules.mk
index 03a0fe22c08..0ac8d83bfcc 100644
--- a/keyboards/salicylic_acid3/naked64/rules.mk
+++ b/keyboards/salicylic_acid3/naked64/rules.mk
@@ -1,16 +1 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
-OLED_ENABLE = no
-USE_I2C = no
-
DEFAULT_FOLDER = salicylic_acid3/naked64/rev1
diff --git a/keyboards/salicylic_acid3/setta21/rev1/keyboard.json b/keyboards/salicylic_acid3/setta21/rev1/keyboard.json
index d510c2c3b2a..0d20c99f269 100644
--- a/keyboards/salicylic_acid3/setta21/rev1/keyboard.json
+++ b/keyboards/salicylic_acid3/setta21/rev1/keyboard.json
@@ -8,6 +8,13 @@
"pid": "0x3060",
"device_version": "0.1.1"
},
+ "features": {
+ "bootmagic": false,
+ "extrakey": false,
+ "mousekey": false,
+ "nkro": false,
+ "rgblight": true
+ },
"rgblight": {
"hue_steps": 10,
"led_count": 21,
diff --git a/keyboards/salicylic_acid3/setta21/rules.mk b/keyboards/salicylic_acid3/setta21/rules.mk
index d4aab3ee3f0..02e68b57487 100644
--- a/keyboards/salicylic_acid3/setta21/rules.mk
+++ b/keyboards/salicylic_acid3/setta21/rules.mk
@@ -1,17 +1 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = no # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
-OLED_ENABLE = no
-USE_I2C = no
-RGB_MATRIX_ENABLE = no
-
DEFAULT_FOLDER = salicylic_acid3/setta21/rev1
diff --git a/keyboards/satt/comet46/keymaps/default-rgbled/keymap.c b/keyboards/satt/comet46/keymaps/default-rgbled/keymap.c
index 1e96bd7fbce..f6fb0440493 100644
--- a/keyboards/satt/comet46/keymaps/default-rgbled/keymap.c
+++ b/keyboards/satt/comet46/keymaps/default-rgbled/keymap.c
@@ -146,18 +146,20 @@ layer_state_t layer_state_set_user(layer_state_t state) {
// settings for LED on receiver
void led_init(void) {
- DDRD |= (1<<1);
- PORTD |= (1<<1);
- DDRF |= (1<<4) | (1<<5);
- PORTF |= (1<<4) | (1<<5);
+ gpio_set_pin_output(D1);
+ gpio_write_pin_high(D1);
+ gpio_set_pin_output(F4);
+ gpio_write_pin_high(F4);
+ gpio_set_pin_output(F5);
+ gpio_write_pin_high(F5);
}
-#define red_led_off PORTF |= (1<<5)
-#define red_led_on PORTF &= ~(1<<5)
-#define blu_led_off PORTF |= (1<<4)
-#define blu_led_on PORTF &= ~(1<<4)
-#define grn_led_off PORTD |= (1<<1)
-#define grn_led_on PORTD &= ~(1<<1)
+#define red_led_off gpio_write_pin_high(F5)
+#define red_led_on gpio_write_pin_low(F5)
+#define blu_led_off gpio_write_pin_high(F4)
+#define blu_led_on gpio_write_pin_low(F4)
+#define grn_led_off gpio_write_pin_high(D1)
+#define grn_led_on gpio_write_pin_low(D1)
#define set_led_off red_led_off; grn_led_off; blu_led_off
#define set_led_red red_led_on; grn_led_off; blu_led_off
diff --git a/keyboards/sawnsprojects/krush/krush60/solder/keyboard.json b/keyboards/sawnsprojects/krush/krush60/solder/keyboard.json
index b3d4f8f97c6..4f5ca808ceb 100644
--- a/keyboards/sawnsprojects/krush/krush60/solder/keyboard.json
+++ b/keyboards/sawnsprojects/krush/krush60/solder/keyboard.json
@@ -48,7 +48,7 @@
"LAYOUT_60_ansi_arrow_split_bs_7u_spc": "LAYOUT_60_ansi_arrow_tsangan_split_bs",
"LAYOUT_60_ansi_arrow_7u_spc": "LAYOUT_60_ansi_arrow_tsangan"
},
- "community_layouts": ["60_ansi", "60_ansi_arrow", "60_ansi_arrow_split_bs_7u_spc"],
+ "community_layouts": ["60_ansi", "60_ansi_arrow"],
"layouts": {
"LAYOUT_all": {
"layout": [
diff --git a/keyboards/scottokeebs/scottowing/info.json b/keyboards/scottokeebs/scottowing/info.json
new file mode 100644
index 00000000000..770e2fd18ec
--- /dev/null
+++ b/keyboards/scottokeebs/scottowing/info.json
@@ -0,0 +1,75 @@
+{
+ "manufacturer": "ScottoKeebs",
+ "keyboard_name": "ScottoWing (PCB Edition)",
+ "maintainer": "joe-scotto",
+ "bootloader": "rp2040",
+ "bootmagic": {
+ "matrix": [0, 1]
+ },
+ "diode_direction": "COL2ROW",
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true
+ },
+ "matrix_pins": {
+ "cols": ["GP2", "GP3", "GP4", "GP5", "GP6", "GP7", "GP20", "GP22", "GP26", "GP27", "GP28", "GP29"],
+ "rows": ["GP8", "GP9", "GP23", "GP21"]
+ },
+ "processor": "RP2040",
+ "url": "https://scottokeebs.com",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x1026",
+ "vid": "0x534B"
+ },
+ "layouts": {
+ "LAYOUT_split_3x6_2": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [1, 0], "x": 0, "y": 1},
+ {"matrix": [1, 1], "x": 1, "y": 1},
+ {"matrix": [1, 2], "x": 2, "y": 1},
+ {"matrix": [1, 3], "x": 3, "y": 1},
+ {"matrix": [1, 4], "x": 4, "y": 1},
+ {"matrix": [1, 5], "x": 5, "y": 1},
+ {"matrix": [1, 6], "x": 6, "y": 1},
+ {"matrix": [1, 7], "x": 7, "y": 1},
+ {"matrix": [1, 8], "x": 8, "y": 1},
+ {"matrix": [1, 9], "x": 9, "y": 1},
+ {"matrix": [1, 10], "x": 10, "y": 1},
+ {"matrix": [1, 11], "x": 11, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2},
+ {"matrix": [2, 1], "x": 1, "y": 2},
+ {"matrix": [2, 2], "x": 2, "y": 2},
+ {"matrix": [2, 3], "x": 3, "y": 2},
+ {"matrix": [2, 4], "x": 4, "y": 2},
+ {"matrix": [2, 5], "x": 5, "y": 2},
+ {"matrix": [2, 6], "x": 6, "y": 2},
+ {"matrix": [2, 7], "x": 7, "y": 2},
+ {"matrix": [2, 8], "x": 8, "y": 2},
+ {"matrix": [2, 9], "x": 9, "y": 2},
+ {"matrix": [2, 10], "x": 10, "y": 2},
+ {"matrix": [2, 11], "x": 11, "y": 2},
+ {"matrix": [3, 4], "x": 4, "y": 3},
+ {"matrix": [3, 5], "x": 5, "y": 3},
+ {"matrix": [3, 6], "x": 6, "y": 3},
+ {"matrix": [3, 7], "x": 7, "y": 3}
+ ]
+ }
+ }
+}
diff --git a/keyboards/cipulot/kallos/config.h b/keyboards/scottokeebs/scottowing/keymaps/default/config.h
similarity index 68%
rename from keyboards/cipulot/kallos/config.h
rename to keyboards/scottokeebs/scottowing/keymaps/default/config.h
index dfe6b13b066..eb03070d83a 100644
--- a/keyboards/cipulot/kallos/config.h
+++ b/keyboards/scottokeebs/scottowing/keymaps/default/config.h
@@ -1,5 +1,5 @@
/*
-Copyright 2022 Cipulot
+Copyright 2024 Joe Scotto
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -8,7 +8,7 @@ the Free Software Foundation, either version 2 of the License, or
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
@@ -17,7 +17,7 @@ along with this program. If not, see .
#pragma once
-/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
-#define LOCKING_SUPPORT_ENABLE
-/* Locking resynchronize hack */
-#define LOCKING_RESYNC_ENABLE
+// Define options
+#define TAPPING_TERM 135
+#define PERMISSIVE_HOLD
+#define TAPPING_TERM_PER_KEY
diff --git a/keyboards/scottokeebs/scottowing/keymaps/default/keymap.c b/keyboards/scottokeebs/scottowing/keymaps/default/keymap.c
new file mode 100644
index 00000000000..9a1c7daef30
--- /dev/null
+++ b/keyboards/scottokeebs/scottowing/keymaps/default/keymap.c
@@ -0,0 +1,45 @@
+/*
+Copyright 2024 Joe Scotto
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 2 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see .
+*/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_split_3x6_2(
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
+ KC_ENT, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_BSPC, KC_QUOT,
+ KC_LSFT, LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, RSFT_T(KC_SLSH), KC_RSFT,
+ KC_LALT, LGUI_T(KC_SPC), LT(1, KC_TAB), LT(2, KC_ENT)
+ ),
+ [1] = LAYOUT_split_3x6_2(
+ KC_TRNS, KC_UNDS, KC_MINS, KC_PLUS, KC_EQL, KC_COLN, KC_GRV, KC_MRWD, KC_MPLY, KC_MFFD, KC_DEL, KC_TRNS,
+ KC_TRNS, KC_LCBR, KC_LPRN, KC_RPRN, KC_RCBR, KC_PIPE, KC_ESC, KC_LEFT, KC_UP, KC_DOWN, KC_RGHT, KC_TRNS,
+ KC_TRNS, LSFT_T(KC_LBRC), KC_QUOT, KC_DQUO, KC_RBRC, KC_SCLN, KC_TILDE, KC_VOLD, KC_MUTE, KC_VOLU, RSFT_T(KC_BSLS), KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [2] = LAYOUT_split_3x6_2(
+ KC_TRNS, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_CIRC, KC_AMPR, KC_ASTR, KC_CAPS, KC_BSPC, KC_TRNS,
+ KC_TRNS, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_TRNS,
+ KC_TRNS, KC_LSFT, KC_NO, KC_NO, KC_NO, MO(3), KC_NO, KC_NO, KC_COMM, KC_DOT, RSFT_T(KC_SLSH), KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ ),
+ [3] = LAYOUT_split_3x6_2(
+ KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_TRNS,
+ KC_TRNS, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_TRNS,
+ KC_TRNS, KC_F11, KC_NO, KC_NO, QK_BOOT, KC_TRNS, KC_NO, KC_NO, KC_NO, KC_NO, KC_F12, KC_TRNS,
+ KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
+ )
+};
\ No newline at end of file
diff --git a/keyboards/scottokeebs/scottowing/readme.md b/keyboards/scottokeebs/scottowing/readme.md
new file mode 100644
index 00000000000..bf20164e666
--- /dev/null
+++ b/keyboards/scottokeebs/scottowing/readme.md
@@ -0,0 +1,29 @@
+# ScottoWing (PCB Edition)
+
+
+
+The ScottoWing (PCB Edition) is a 3x5 (34-keys) or 3x6 (40-keys) split monoblock ergonomic column-staggered keyboard.
+
+* Keyboard Maintainer: [Joe Scotto](https://github.com/joe-scotto)
+* Hardware Supported: RP2040 Pro Micro, nice!nano
+* Hardware Availability: [ScottoKeebs](https://scottokeebs.com), [Amazon](https://amazon.com), [AliExpress](https://aliexpress.com)
+
+# Compiling
+
+Make example for this keyboard (after setting up your build environment):
+
+ make scottokeebs/scottowing:default
+
+Flashing example for this keyboard:
+
+ make scottokeebs/scottowing:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+# Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,1) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/scottokeebs/scottowing/rules.mk b/keyboards/scottokeebs/scottowing/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/scottokeebs/scottowing/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/sharkoon/skiller_sgk50_s4/config.h b/keyboards/sharkoon/skiller_sgk50_s4/config.h
new file mode 100644
index 00000000000..1d0f8f9a901
--- /dev/null
+++ b/keyboards/sharkoon/skiller_sgk50_s4/config.h
@@ -0,0 +1,13 @@
+// Copyright 2024 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+/* SPI Config for spi flash*/
+#define SPI_DRIVER SPIDQ
+#define SPI_SCK_PIN B3
+#define SPI_MOSI_PIN B5
+#define SPI_MISO_PIN B4
+#define SPI_MOSI_PAL_MODE 5
+
+#define EXTERNAL_FLASH_SPI_SLAVE_SELECT_PIN C12
diff --git a/keyboards/sharkoon/skiller_sgk50_s4/halconf.h b/keyboards/sharkoon/skiller_sgk50_s4/halconf.h
new file mode 100644
index 00000000000..9d456a5106f
--- /dev/null
+++ b/keyboards/sharkoon/skiller_sgk50_s4/halconf.h
@@ -0,0 +1,10 @@
+// Copyright 2024 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_SPI TRUE
+#define SPI_USE_WAIT TRUE
+#define SPI_SELECT_MODE SPI_SELECT_MODE_PAD
+
+#include_next
diff --git a/keyboards/sharkoon/skiller_sgk50_s4/info.json b/keyboards/sharkoon/skiller_sgk50_s4/info.json
new file mode 100644
index 00000000000..7d36616e52b
--- /dev/null
+++ b/keyboards/sharkoon/skiller_sgk50_s4/info.json
@@ -0,0 +1,356 @@
+{
+ "manufacturer": "Sharkoon Technologies GmbH",
+ "keyboard_name": "SKILLER SGK50 S4",
+ "maintainer": "JoyLee",
+ "bootloader": "wb32-dfu",
+ "diode_direction": "ROW2COL",
+ "eeprom": {
+ "driver": "wear_leveling",
+ "wear_leveling": {
+ "backing_size": 4096,
+ "driver": "spi_flash"
+ }
+ },
+ "features": {
+ "bootmagic": true,
+ "command": false,
+ "console": false,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["C0", "C1", "C2", "C3", "A6", "B1", "B10", "B11", "B12", "B13", "B14", "B15", "C6", "C7"],
+ "rows": ["A0", "A1", "A2", "A3", "C13"]
+ },
+ "processor": "WB32FQ95",
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_sat": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "band_val": true,
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "cycle_up_down": true,
+ "digital_rain": true,
+ "dual_beacon": true,
+ "gradient_left_right": true,
+ "gradient_up_down": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "jellybean_raindrops": true,
+ "multisplash": true,
+ "pixel_flow": true,
+ "pixel_fractal": true,
+ "pixel_rain": true,
+ "rainbow_beacon": true,
+ "rainbow_moving_chevron": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "solid_multisplash": true,
+ "solid_reactive": true,
+ "solid_reactive_cross": true,
+ "solid_reactive_multicross": true,
+ "solid_reactive_multinexus": true,
+ "solid_reactive_multiwide": true,
+ "solid_reactive_nexus": true,
+ "solid_reactive_simple": true,
+ "solid_reactive_wide": true,
+ "solid_splash": true,
+ "splash": true,
+ "typing_heatmap": true
+ },
+ "default": {
+ "val": 80
+ },
+ "driver": "ws2812",
+ "layout": [
+ {"matrix": [4, 6], "x": 103, "y": 64, "flags": 4},
+ {"matrix": [4, 10], "x": 172, "y": 64, "flags": 4},
+ {"matrix": [4, 11], "x": 190, "y": 64, "flags": 4},
+ {"matrix": [4, 12], "x": 207, "y": 64, "flags": 4},
+ {"matrix": [4, 13], "x": 224, "y": 64, "flags": 4},
+ {"matrix": [3, 13], "x": 224, "y": 48, "flags": 4},
+ {"matrix": [3, 11], "x": 190, "y": 48, "flags": 4},
+ {"matrix": [3, 10], "x": 172, "y": 48, "flags": 4},
+ {"matrix": [3, 9], "x": 155, "y": 48, "flags": 4},
+ {"matrix": [3, 8], "x": 138, "y": 48, "flags": 4},
+ {"matrix": [3, 7], "x": 121, "y": 48, "flags": 4},
+ {"matrix": [3, 6], "x": 103, "y": 48, "flags": 4},
+ {"matrix": [3, 5], "x": 86, "y": 48, "flags": 4},
+ {"matrix": [3, 4], "x": 69, "y": 48, "flags": 4},
+ {"matrix": [3, 3], "x": 52, "y": 48, "flags": 4},
+ {"matrix": [3, 2], "x": 34, "y": 48, "flags": 4},
+ {"matrix": [3, 1], "x": 17, "y": 48, "flags": 4},
+ {"matrix": [4, 2], "x": 34, "y": 64, "flags": 4},
+ {"matrix": [4, 1], "x": 17, "y": 64, "flags": 4},
+ {"matrix": [4, 0], "x": 0, "y": 64, "flags": 4},
+ {"matrix": [3, 0], "x": 0, "y": 48, "flags": 4},
+ {"matrix": [2, 0], "x": 0, "y": 32, "flags": 4},
+ {"matrix": [2, 1], "x": 17, "y": 32, "flags": 4},
+ {"matrix": [2, 2], "x": 34, "y": 32, "flags": 4},
+ {"matrix": [2, 3], "x": 52, "y": 32, "flags": 4},
+ {"matrix": [2, 4], "x": 69, "y": 32, "flags": 4},
+ {"matrix": [2, 5], "x": 86, "y": 32, "flags": 4},
+ {"matrix": [2, 6], "x": 103, "y": 32, "flags": 4},
+ {"matrix": [2, 7], "x": 121, "y": 32, "flags": 4},
+ {"matrix": [2, 8], "x": 138, "y": 32, "flags": 4},
+ {"matrix": [2, 9], "x": 155, "y": 32, "flags": 4},
+ {"matrix": [2, 10], "x": 172, "y": 32, "flags": 4},
+ {"matrix": [2, 11], "x": 190, "y": 32, "flags": 4},
+ {"matrix": [2, 13], "x": 207, "y": 32, "flags": 4},
+ {"matrix": [2, 12], "x": 224, "y": 16, "flags": 4},
+ {"matrix": [1, 12], "x": 207, "y": 16, "flags": 4},
+ {"matrix": [1, 11], "x": 190, "y": 16, "flags": 4},
+ {"matrix": [1, 10], "x": 172, "y": 16, "flags": 4},
+ {"matrix": [1, 9], "x": 155, "y": 16, "flags": 4},
+ {"matrix": [1, 8], "x": 138, "y": 16, "flags": 4},
+ {"matrix": [1, 7], "x": 121, "y": 16, "flags": 4},
+ {"matrix": [1, 6], "x": 103, "y": 16, "flags": 4},
+ {"matrix": [1, 5], "x": 86, "y": 16, "flags": 4},
+ {"matrix": [1, 4], "x": 69, "y": 16, "flags": 4},
+ {"matrix": [1, 3], "x": 52, "y": 16, "flags": 4},
+ {"matrix": [1, 2], "x": 34, "y": 16, "flags": 4},
+ {"matrix": [1, 1], "x": 17, "y": 16, "flags": 4},
+ {"matrix": [1, 0], "x": 0, "y": 16, "flags": 4},
+ {"matrix": [0, 0], "x": 0, "y": 0, "flags": 4},
+ {"matrix": [0, 1], "x": 17, "y": 0, "flags": 4},
+ {"matrix": [0, 2], "x": 34, "y": 0, "flags": 4},
+ {"matrix": [0, 3], "x": 52, "y": 0, "flags": 4},
+ {"matrix": [0, 4], "x": 69, "y": 0, "flags": 4},
+ {"matrix": [0, 5], "x": 86, "y": 0, "flags": 4},
+ {"matrix": [0, 6], "x": 103, "y": 0, "flags": 4},
+ {"matrix": [0, 7], "x": 121, "y": 0, "flags": 4},
+ {"matrix": [0, 8], "x": 138, "y": 0, "flags": 4},
+ {"matrix": [0, 9], "x": 155, "y": 0, "flags": 4},
+ {"matrix": [0, 10], "x": 172, "y": 0, "flags": 4},
+ {"matrix": [0, 11], "x": 190, "y": 0, "flags": 4},
+ {"matrix": [0, 12], "x": 207, "y": 0, "flags": 4},
+ {"matrix": [0, 13], "x": 224, "y": 0, "flags": 4}
+ ],
+ "max_brightness": 110,
+ "sleep": true,
+ "val_steps": 28
+ },
+ "url": "",
+ "usb": {
+ "device_version": "1.0.0",
+ "pid": "0x1020",
+ "suspend_wakeup_delay": 1000,
+ "vid": "0x6332"
+ },
+ "ws2812": {
+ "pin": "A8"
+ },
+ "community_layouts": ["60_ansi", "60_iso"],
+ "layouts": {
+ "LAYOUT_all": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 2.75},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_ansi": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 12], "x": 13.5, "y": 1, "w": 1.5},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2, "w": 2.25},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 2.25},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 2.75},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ },
+ "LAYOUT_60_iso": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 12], "x": 12.75, "y": 2},
+ {"matrix": [2, 13], "x": 13.75, "y": 1, "w": 1.25, "h": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 2.75},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 10], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 12], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/sharkoon/skiller_sgk50_s4/keymaps/default/keymap.c b/keyboards/sharkoon/skiller_sgk50_s4/keymaps/default/keymap.c
new file mode 100644
index 00000000000..84e72510d79
--- /dev/null
+++ b/keyboards/sharkoon/skiller_sgk50_s4/keymaps/default/keymap.c
@@ -0,0 +1,22 @@
+// Copyright 2024 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL
+ ),
+
+ [1] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, _______, _______, _______, _______, _______, KC_INS, _______, KC_UP, KC_PAUS, KC_PGUP, KC_HOME, KC_PSCR, RGB_VAI,
+ _______, _______, _______, _______, _______, _______, KC_SCRL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, RGB_VAD, _______,
+ _______, GU_TOGG, _______, _______, _______, _______, RGB_HUI, RGB_MOD
+ )
+};
diff --git a/keyboards/sharkoon/skiller_sgk50_s4/keymaps/via/keymap.c b/keyboards/sharkoon/skiller_sgk50_s4/keymaps/via/keymap.c
new file mode 100644
index 00000000000..84e72510d79
--- /dev/null
+++ b/keyboards/sharkoon/skiller_sgk50_s4/keymaps/via/keymap.c
@@ -0,0 +1,22 @@
+// Copyright 2024 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ [0] = LAYOUT_all(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_APP, KC_RCTL
+ ),
+
+ [1] = LAYOUT_all(
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL,
+ _______, _______, _______, _______, _______, _______, KC_INS, _______, KC_UP, KC_PAUS, KC_PGUP, KC_HOME, KC_PSCR, RGB_VAI,
+ _______, _______, _______, _______, _______, _______, KC_SCRL, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_END, _______,
+ _______, _______, _______, _______, _______, _______, _______, _______, KC_MUTE, KC_VOLD, KC_VOLU, RGB_VAD, _______,
+ _______, GU_TOGG, _______, _______, _______, _______, RGB_HUI, RGB_MOD
+ )
+};
diff --git a/keyboards/sharkoon/skiller_sgk50_s4/keymaps/via/rules.mk b/keyboards/sharkoon/skiller_sgk50_s4/keymaps/via/rules.mk
new file mode 100644
index 00000000000..1e5b99807cb
--- /dev/null
+++ b/keyboards/sharkoon/skiller_sgk50_s4/keymaps/via/rules.mk
@@ -0,0 +1 @@
+VIA_ENABLE = yes
diff --git a/keyboards/sharkoon/skiller_sgk50_s4/mcuconf.h b/keyboards/sharkoon/skiller_sgk50_s4/mcuconf.h
new file mode 100644
index 00000000000..ae7ee58001a
--- /dev/null
+++ b/keyboards/sharkoon/skiller_sgk50_s4/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2024 JoyLee (@itarze)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef WB32_SPI_USE_QSPI
+#define WB32_SPI_USE_QSPI TRUE
diff --git a/keyboards/sharkoon/skiller_sgk50_s4/readme.md b/keyboards/sharkoon/skiller_sgk50_s4/readme.md
new file mode 100644
index 00000000000..db6650546ed
--- /dev/null
+++ b/keyboards/sharkoon/skiller_sgk50_s4/readme.md
@@ -0,0 +1,24 @@
+# SHARKOON SKILLER SGK50 S4
+
+
+
+* Keyboard Maintainer: [JoyLee](https://github.com/itarze)
+* Hardware Supported: [SHARKOON SKILLER SGK50 S4 PCB](http://www.sharkoon.com/)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make sharkoon/skiller_sgk50_s4:default
+
+Flashing example for this keyboard:
+
+ make sharkoon/skiller_sgk50_s4:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Briefly press the button on the back of the PCB - some may have pads you must short instead
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
diff --git a/keyboards/sharkoon/skiller_sgk50_s4/rules.mk b/keyboards/sharkoon/skiller_sgk50_s4/rules.mk
new file mode 100644
index 00000000000..6e7633bfe01
--- /dev/null
+++ b/keyboards/sharkoon/skiller_sgk50_s4/rules.mk
@@ -0,0 +1 @@
+# This file intentionally left blank
diff --git a/keyboards/sirius/uni660/rev1/rev1.c b/keyboards/sirius/uni660/rev1/rev1.c
index 7cc75ee22a4..9bfc46c37e7 100644
--- a/keyboards/sirius/uni660/rev1/rev1.c
+++ b/keyboards/sirius/uni660/rev1/rev1.c
@@ -1,12 +1,12 @@
#include "rev1.h"
void led_init(void) {
- setPinOutput(D1); // Pin to green, set as output
- writePinHigh(D1); // Turn it off
- setPinOutput(F4); // Pins to red and blue, set as output
- setPinOutput(F5);
- writePinHigh(F4); // Turn them off
- writePinHigh(F5);
+ gpio_set_pin_output(UNI660_GREEN_LED_PIN);
+ gpio_write_pin_high(UNI660_GREEN_LED_PIN);
+ gpio_set_pin_output(UNI660_BLUE_LED_PIN);
+ gpio_write_pin_high(UNI660_BLUE_LED_PIN);
+ gpio_set_pin_output(UNI660_RED_LED_PIN);
+ gpio_write_pin_high(UNI660_RED_LED_PIN);
}
void matrix_init_kb(void) {
diff --git a/keyboards/sirius/uni660/rev1/rev1.h b/keyboards/sirius/uni660/rev1/rev1.h
index 06a7176fbd8..5baf9d4236e 100644
--- a/keyboards/sirius/uni660/rev1/rev1.h
+++ b/keyboards/sirius/uni660/rev1/rev1.h
@@ -2,12 +2,16 @@
#include "quantum.h"
-#define red_led_off writePinHigh(F5)
-#define red_led_on writePinLow(F5)
-#define blu_led_off writePinHigh(F4)
-#define blu_led_on writePinLow(F4)
-#define grn_led_off writePinHigh(D1)
-#define grn_led_on writePinLow(D1)
+#define UNI660_RED_LED_PIN F5
+#define UNI660_GREEN_LED_PIN D1
+#define UNI660_BLUE_LED_PIN F4
+
+#define red_led_off gpio_write_pin_high(UNI660_RED_LED_PIN)
+#define red_led_on gpio_write_pin_low(UNI660_RED_LED_PIN)
+#define blu_led_off gpio_write_pin_high(UNI660_BLUE_LED_PIN)
+#define blu_led_on gpio_write_pin_low(UNI660_BLUE_LED_PIN)
+#define grn_led_off gpio_write_pin_high(UNI660_GREEN_LED_PIN)
+#define grn_led_on gpio_write_pin_low(UNI660_GREEN_LED_PIN)
#define set_led_off red_led_off; grn_led_off; blu_led_off
#define set_led_red red_led_on; grn_led_off; blu_led_off
@@ -17,27 +21,3 @@
#define set_led_magenta red_led_on; grn_led_off; blu_led_on
#define set_led_cyan red_led_off; grn_led_on; blu_led_on
#define set_led_white red_led_on; grn_led_on; blu_led_on
-
-/*
-#define LED_B 5
-#define LED_R 6
-#define LED_G 7
-
-#define all_leds_off PORTF &= ~(1<
#include
#include
-#include
// LUFA
#include "lufa.h"
@@ -9,6 +7,8 @@
#include "sendchar.h"
#include "debug.h"
#include "keyboard.h"
+#include "gpio.h"
+#include "wait.h"
#include "led.h"
/* LED ping configuration */
@@ -16,16 +16,16 @@
//#define LEONARDO_LED
#if defined(TMK_LED)
// For TMK converter and Teensy
-#define LED_TX_INIT (DDRD |= (1<<6))
-#define LED_TX_ON (PORTD |= (1<<6))
-#define LED_TX_OFF (PORTD &= ~(1<<6))
-#define LED_TX_TOGGLE (PORTD ^= (1<<6))
+#define LED_TX_INIT gpio_set_pin_output(D6)
+#define LED_TX_ON gpio_write_pin_high(D6)
+#define LED_TX_OFF gpio_write_pin_low(D6)
+#define LED_TX_TOGGLE gpio_toggle_pin(D6)
#elif defined(LEONARDO_LED)
// For Leonardo(TX LED)
-#define LED_TX_INIT (DDRD |= (1<<5))
-#define LED_TX_ON (PORTD &= ~(1<<5))
-#define LED_TX_OFF (PORTD |= (1<<5))
-#define LED_TX_TOGGLE (PORTD ^= (1<<5))
+#define LED_TX_INIT gpio_set_pin_output(D5)
+#define LED_TX_ON gpio_write_pin_low(D5)
+#define LED_TX_OFF gpio_write_pin_high(D5)
+#define LED_TX_TOGGLE gpio_toggle_pin(D5)
#else
#define LED_TX_INIT
#define LED_TX_ON
diff --git a/keyboards/sixkeyboard/matrix.c b/keyboards/sixkeyboard/matrix.c
index ddbd41ac553..24cb647297e 100644
--- a/keyboards/sixkeyboard/matrix.c
+++ b/keyboards/sixkeyboard/matrix.c
@@ -71,13 +71,12 @@ uint8_t matrix_cols(void)
void matrix_init(void)
{
-
- DDRC &= ~(1<<7);
- PORTC |= (1<<7);
- DDRB &= ~(1<<7 | 1<<5);
- PORTB |= (1<<7 | 1<<5);
- DDRD &= ~(1<<6 | 1<<4 | 1<<1);
- PORTD |= (1<<6 | 1<<4 | 1<<1);
+ gpio_set_pin_input_high(C7);
+ gpio_set_pin_input_high(B5);
+ gpio_set_pin_input_high(B7);
+ gpio_set_pin_input_high(D1);
+ gpio_set_pin_input_high(D4);
+ gpio_set_pin_input_high(D6);
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
matrix[i] = 0;
diff --git a/keyboards/sixkeyboard/sixkeyboard.c b/keyboards/sixkeyboard/sixkeyboard.c
index 7667ee7f44b..5a5c818d13f 100644
--- a/keyboards/sixkeyboard/sixkeyboard.c
+++ b/keyboards/sixkeyboard/sixkeyboard.c
@@ -4,27 +4,26 @@ void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
- DDRC |= (1<<4);
- PORTC &= ~(1<<4);
+ gpio_set_pin_output(C4);
+ gpio_write_pin_low(C4);
+ gpio_set_pin_output(C6);
+ gpio_write_pin_low(C6);
- DDRC |= (1<<6);
- PORTC &= ~(1<<6);
+ gpio_set_pin_output(B6);
+ gpio_write_pin_low(B6);
- DDRB |= (1<<6);
- PORTB &= ~(1<<6);
+ gpio_set_pin_output(B4);
+ gpio_write_pin_low(B4);
- DDRB |= (1<<4);
- PORTB &= ~(1<<4);
+ gpio_set_pin_output(D5);
+ gpio_write_pin_low(D5);
- DDRD |= (1<<5);
- PORTD &= ~(1<<5);
+ gpio_set_pin_output(D2);
+ gpio_write_pin_low(D2);
- DDRD |= (1<<2);
- PORTD &= ~(1<<2);
-
- DDRD |= (1<<3);
- PORTD &= ~(1<<3);
+ gpio_set_pin_output(D3);
+ gpio_write_pin_low(D3);
matrix_init_user();
};
\ No newline at end of file
diff --git a/keyboards/spaceholdings/nebula12/rules.mk b/keyboards/spaceholdings/nebula12/rules.mk
index dd548eee148..edd7b800ef2 100755
--- a/keyboards/spaceholdings/nebula12/rules.mk
+++ b/keyboards/spaceholdings/nebula12/rules.mk
@@ -1,7 +1,7 @@
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+NO_SUSPEND_POWER_DOWN = yes
CIE1931_CURVE = yes
I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/spaceholdings/nebula68/rules.mk b/keyboards/spaceholdings/nebula68/rules.mk
index c2507bf03df..60dc97f0586 100755
--- a/keyboards/spaceholdings/nebula68/rules.mk
+++ b/keyboards/spaceholdings/nebula68/rules.mk
@@ -1,7 +1,7 @@
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+NO_SUSPEND_POWER_DOWN = yes
CIE1931_CURVE = yes
I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/splitkb/kyria/rev1/info.json b/keyboards/splitkb/kyria/rev1/info.json
index 38a2e6bf3fa..3d84b37b311 100644
--- a/keyboards/splitkb/kyria/rev1/info.json
+++ b/keyboards/splitkb/kyria/rev1/info.json
@@ -4,6 +4,15 @@
"pid": "0x9D9D",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": false,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": false,
+ "nkro": false,
+ "oled": true,
+ "rgblight": true
+ },
"rgblight": {
"led_count": 20,
"split_count": [10, 10]
diff --git a/keyboards/splitkb/kyria/rev1/proton_c/info.json b/keyboards/splitkb/kyria/rev1/proton_c/keyboard.json
similarity index 100%
rename from keyboards/splitkb/kyria/rev1/proton_c/info.json
rename to keyboards/splitkb/kyria/rev1/proton_c/keyboard.json
diff --git a/keyboards/splitkb/kyria/rev1/rules.mk b/keyboards/splitkb/kyria/rev1/rules.mk
index c4c82d05aa4..3a8bfbe0896 100644
--- a/keyboards/splitkb/kyria/rev1/rules.mk
+++ b/keyboards/splitkb/kyria/rev1/rules.mk
@@ -1,13 +1 @@
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-
-OLED_ENABLE = yes # Enables the use of OLED displays
-ENCODER_ENABLE = yes # Enables the use of one or more encoders
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-RGB_MATRIX_ENABLE = no # Enable keyboard RGB matrix (do not use together with RGBLIGHT_ENABLE)
+DEFAULT_FOLDER = splitkb/kyria/rev1/base
diff --git a/keyboards/splitkb/kyria/rev2/info.json b/keyboards/splitkb/kyria/rev2/info.json
index 0290153f4ad..80f801e3d15 100644
--- a/keyboards/splitkb/kyria/rev2/info.json
+++ b/keyboards/splitkb/kyria/rev2/info.json
@@ -4,6 +4,15 @@
"pid": "0x9D9D",
"device_version": "0.0.2"
},
+ "features": {
+ "bootmagic": false,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": false,
+ "nkro": false,
+ "oled": true,
+ "rgblight": true
+ },
"rgblight": {
"led_count": 20,
"split_count": [10, 10]
diff --git a/keyboards/splitkb/kyria/rev2/proton_c/info.json b/keyboards/splitkb/kyria/rev2/proton_c/keyboard.json
similarity index 100%
rename from keyboards/splitkb/kyria/rev2/proton_c/info.json
rename to keyboards/splitkb/kyria/rev2/proton_c/keyboard.json
diff --git a/keyboards/splitkb/kyria/rev2/rules.mk b/keyboards/splitkb/kyria/rev2/rules.mk
index c4c82d05aa4..fb808070bf8 100644
--- a/keyboards/splitkb/kyria/rev2/rules.mk
+++ b/keyboards/splitkb/kyria/rev2/rules.mk
@@ -1,13 +1 @@
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = no # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-AUDIO_ENABLE = no # Audio output
-
-OLED_ENABLE = yes # Enables the use of OLED displays
-ENCODER_ENABLE = yes # Enables the use of one or more encoders
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-RGB_MATRIX_ENABLE = no # Enable keyboard RGB matrix (do not use together with RGBLIGHT_ENABLE)
+DEFAULT_FOLDER = splitkb/kyria/rev2/base
diff --git a/keyboards/stront/keyboard.json b/keyboards/stront/keyboard.json
index d2726c85f0e..5055a4fb30e 100644
--- a/keyboards/stront/keyboard.json
+++ b/keyboards/stront/keyboard.json
@@ -80,13 +80,15 @@
]
},
"features": {
+ "backlight": true,
"bootmagic": true,
"console": false,
"encoder": true,
- "backlight": true,
"extrakey": true,
- "rgb_matrix": true,
- "nkro": false
+ "nkro": false,
+ "pointing_device": true,
+ "quantum_painter": true,
+ "rgb_matrix": true
},
"backlight": {
"pin": "GP14"
diff --git a/keyboards/stront/rules.mk b/keyboards/stront/rules.mk
index c6cdeb5bfca..61d59017cb7 100644
--- a/keyboards/stront/rules.mk
+++ b/keyboards/stront/rules.mk
@@ -1,9 +1,7 @@
SERIAL_DRIVER = vendor
-POINTING_DEVICE_ENABLE = yes
POINTING_DEVICE_DRIVER = cirque_pinnacle_spi
-QUANTUM_PAINTER_ENABLE = yes
QUANTUM_PAINTER_DRIVERS += st7789_spi
QUANTUM_PAINTER_LVGL_INTEGRATION = yes
diff --git a/keyboards/suikagiken/suika85ergo/info.json b/keyboards/suikagiken/suika85ergo/keyboard.json
similarity index 100%
rename from keyboards/suikagiken/suika85ergo/info.json
rename to keyboards/suikagiken/suika85ergo/keyboard.json
diff --git a/keyboards/teleport/native/info.json b/keyboards/teleport/native/info.json
index 3cd857a55dc..756764ff6f0 100644
--- a/keyboards/teleport/native/info.json
+++ b/keyboards/teleport/native/info.json
@@ -38,7 +38,8 @@
"console": false,
"extrakey": true,
"mousekey": true,
- "nkro": true
+ "nkro": true,
+ "rgb_matrix": true
},
"diode_direction": "ROW2COL",
"matrix_pins": {
diff --git a/keyboards/teleport/native/rules.mk b/keyboards/teleport/native/rules.mk
index 2a3743fa755..53dc2b17475 100644
--- a/keyboards/teleport/native/rules.mk
+++ b/keyboards/teleport/native/rules.mk
@@ -1,4 +1,3 @@
-RGB_MATRIX_ENABLE = yes
RGB_MATRIX_CUSTOM_KB = yes
DEFAULT_FOLDER = teleport/native/iso
diff --git a/keyboards/tkw/grandiceps/rev2/config.h b/keyboards/tkw/grandiceps/rev2/config.h
index 5810fe75bc9..83f1b561574 100644
--- a/keyboards/tkw/grandiceps/rev2/config.h
+++ b/keyboards/tkw/grandiceps/rev2/config.h
@@ -15,5 +15,4 @@
*/
#pragma once
-#define SPLIT_HAND_PIN B3
#define EEPROM_I2C_24LC64
diff --git a/keyboards/tkw/grandiceps/rev2/keyboard.json b/keyboards/tkw/grandiceps/rev2/keyboard.json
index cd809481965..b0f9970bcdc 100644
--- a/keyboards/tkw/grandiceps/rev2/keyboard.json
+++ b/keyboards/tkw/grandiceps/rev2/keyboard.json
@@ -5,5 +5,13 @@
},
"eeprom": {
"driver": "i2c"
+ },
+ "features": {
+ "pointing_device": true
+ },
+ "split": {
+ "handedness": {
+ "pin": "B3"
+ }
}
}
diff --git a/keyboards/tkw/grandiceps/rev2/rules.mk b/keyboards/tkw/grandiceps/rev2/rules.mk
index 20f28719241..0cac88f7f7d 100644
--- a/keyboards/tkw/grandiceps/rev2/rules.mk
+++ b/keyboards/tkw/grandiceps/rev2/rules.mk
@@ -1,2 +1 @@
-POINTING_DEVICE_ENABLE = yes
POINTING_DEVICE_DRIVER = pimoroni_trackball
diff --git a/keyboards/tmo50/tmo50.c b/keyboards/tmo50/tmo50.c
index 80eb286f45c..635b9db0036 100644
--- a/keyboards/tmo50/tmo50.c
+++ b/keyboards/tmo50/tmo50.c
@@ -19,14 +19,14 @@ void matrix_init_kb(void) {
// put your keyboard start-up code here
// runs once when the firmware starts up
- DDRB |= (1 << PB0); //init B0
- PORTB &= ~(1 << PB0); //turn on B0
- DDRB |= (1 << PB1);
- PORTB |= (1<.
#define RGB_STEP 16
-#define RGB_RED_PIN PF6
-#define RGB_GREEN_PIN PF5
-#define RGB_BLUE_PIN PF4
+#define RGB_RED_PIN F6
+#define RGB_GREEN_PIN F5
+#define RGB_BLUE_PIN F4
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
diff --git a/keyboards/v60_type_r/v60_type_r.c b/keyboards/v60_type_r/v60_type_r.c
index 540c5ec6ecf..6bace804e2b 100644
--- a/keyboards/v60_type_r/v60_type_r.c
+++ b/keyboards/v60_type_r/v60_type_r.c
@@ -115,18 +115,22 @@ void rgb_timer_init(void) {
}
void rgb_init(void) {
- DDRF |= (_BV(PF6) | _BV(PF5) | _BV(PF4));
- PORTF |= (_BV(PF6) | _BV(PF5) | _BV(PF4));
+ gpio_set_pin_output(F4);
+ gpio_set_pin_output(F5);
+ gpio_set_pin_output(F6);
+ gpio_write_pin_high(F4);
+ gpio_write_pin_high(F5);
+ gpio_write_pin_high(F6);
rgb_timer_init();
}
-void set_rgb_pin_on(uint8_t pin) {
- PORTF &= ~_BV(pin);
+void set_rgb_pin_on(pin_t pin) {
+ gpio_write_pin_low(pin);
}
-void set_rgb_pin_off(uint8_t pin) {
- PORTF |= _BV(pin);
+void set_rgb_pin_off(pin_t pin) {
+ gpio_write_pin_high(pin);
}
ISR(TIMER3_COMPA_vect)
diff --git a/keyboards/viktus/omnikey_bh/keymaps/default/keymap.c b/keyboards/viktus/omnikey_bh/keymaps/default/keymap.c
index e5fb6bf9025..ad63d050233 100644
--- a/keyboards/viktus/omnikey_bh/keymaps/default/keymap.c
+++ b/keyboards/viktus/omnikey_bh/keymaps/default/keymap.c
@@ -23,24 +23,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
};
bool led_update_user(led_t led_state) {
- DDRB |= (1 << 4) | (1 << 5) | (1 << 6);
+ gpio_set_pin_output(B4);
+ gpio_set_pin_output(B5);
+ gpio_set_pin_output(B6);
- if (led_state.num_lock) {
- PORTB |= (1 << 4);
- } else {
- PORTB &= ~(1 << 4);
- }
+ gpio_write_pin(B4, led_state.num_lock);
+ gpio_write_pin(B5, led_state.caps_lock);
+ gpio_write_pin(B6, led_state.scroll_lock);
- if (led_state.caps_lock) {
- PORTB |= (1 << 5);
- } else {
- PORTB &= ~(1 << 5);
- }
-
- if (led_state.scroll_lock) {
- PORTB |= (1 << 6);
- } else {
- PORTB &= ~(1 << 6);
- }
return false;
}
diff --git a/keyboards/westfoxtrot/aanzee/config.h b/keyboards/westfoxtrot/aanzee/config.h
index c024f9d8d91..cd1f84bc1fc 100644
--- a/keyboards/westfoxtrot/aanzee/config.h
+++ b/keyboards/westfoxtrot/aanzee/config.h
@@ -17,8 +17,6 @@ along with this program. If not, see .
#pragma once
-#define RGBW
-
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
#define LOCKING_SUPPORT_ENABLE
/* Locking resynchronize hack */
diff --git a/keyboards/westfoxtrot/aanzee/keyboard.json b/keyboards/westfoxtrot/aanzee/keyboard.json
index 7a12a3e52e3..898fe9e62b3 100644
--- a/keyboards/westfoxtrot/aanzee/keyboard.json
+++ b/keyboards/westfoxtrot/aanzee/keyboard.json
@@ -52,7 +52,8 @@
}
},
"ws2812": {
- "pin": "E6"
+ "pin": "E6",
+ "rgbw": true
},
"processor": "atmega32u4",
"bootloader": "atmel-dfu",
diff --git a/keyboards/westm/westm68/info.json b/keyboards/westm/westm68/info.json
index c71d47a41d8..85dd61bf86b 100644
--- a/keyboards/westm/westm68/info.json
+++ b/keyboards/westm/westm68/info.json
@@ -7,6 +7,15 @@
"vid": "0x574D",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "command": true,
+ "console": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgblight": true
+ },
"matrix_pins": {
"cols": ["B14", "B13", "B12", "B11", "B10", "B2", "B1", "B8", "B7", "B6", "B5", "B4", "B3", "A15", "A14"],
"rows": ["A13", "B9", "F1", "A10", "A9"]
diff --git a/keyboards/westm/westm68/rules.mk b/keyboards/westm/westm68/rules.mk
index 6174653422b..2a716f41c4a 100644
--- a/keyboards/westm/westm68/rules.mk
+++ b/keyboards/westm/westm68/rules.mk
@@ -1,17 +1,4 @@
# Wildcard to allow APM32 MCU
DFU_SUFFIX_ARGS = -v FFFF -p FFFF
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = yes # Console for debug
-COMMAND_ENABLE = yes # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
DEFAULT_FOLDER = westm/westm68/rev2
diff --git a/keyboards/westm/westm9/info.json b/keyboards/westm/westm9/info.json
index 1a132137911..43f12b17add 100644
--- a/keyboards/westm/westm9/info.json
+++ b/keyboards/westm/westm9/info.json
@@ -7,6 +7,14 @@
"vid": "0x574D",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "oled": true,
+ "rgblight": true
+ },
"matrix_pins": {
"cols": ["B8", "B5", "B4"],
"rows": ["A14", "A15", "B3"]
diff --git a/keyboards/westm/westm9/rules.mk b/keyboards/westm/westm9/rules.mk
index e522c525602..3ff78857b35 100644
--- a/keyboards/westm/westm9/rules.mk
+++ b/keyboards/westm/westm9/rules.mk
@@ -1,19 +1,4 @@
# Wildcard to allow APM32 MCU
DFU_SUFFIX_ARGS = -v FFFF -p FFFF
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
-OLED_ENABLE = yes # Enable the OLED feature
-
DEFAULT_FOLDER = westm/westm9/rev2
diff --git a/keyboards/wilba_tech/rama_works_kara/rules.mk b/keyboards/wilba_tech/rama_works_kara/rules.mk
index 34e6eaa45b8..cab0ca57e8c 100644
--- a/keyboards/wilba_tech/rama_works_kara/rules.mk
+++ b/keyboards/wilba_tech/rama_works_kara/rules.mk
@@ -1,7 +1,7 @@
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+NO_SUSPEND_POWER_DOWN = yes
CIE1931_CURVE = yes
I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/wilba_tech/rama_works_koyu/rules.mk b/keyboards/wilba_tech/rama_works_koyu/rules.mk
index 34e6eaa45b8..cab0ca57e8c 100644
--- a/keyboards/wilba_tech/rama_works_koyu/rules.mk
+++ b/keyboards/wilba_tech/rama_works_koyu/rules.mk
@@ -1,7 +1,7 @@
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+NO_SUSPEND_POWER_DOWN = yes
CIE1931_CURVE = yes
I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/wilba_tech/rama_works_m10_c/rules.mk b/keyboards/wilba_tech/rama_works_m10_c/rules.mk
index 34e6eaa45b8..cab0ca57e8c 100644
--- a/keyboards/wilba_tech/rama_works_m10_c/rules.mk
+++ b/keyboards/wilba_tech/rama_works_m10_c/rules.mk
@@ -1,7 +1,7 @@
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+NO_SUSPEND_POWER_DOWN = yes
CIE1931_CURVE = yes
I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/wilba_tech/rama_works_m50_a/rules.mk b/keyboards/wilba_tech/rama_works_m50_a/rules.mk
index 34e6eaa45b8..cab0ca57e8c 100644
--- a/keyboards/wilba_tech/rama_works_m50_a/rules.mk
+++ b/keyboards/wilba_tech/rama_works_m50_a/rules.mk
@@ -1,7 +1,7 @@
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+NO_SUSPEND_POWER_DOWN = yes
CIE1931_CURVE = yes
I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/wilba_tech/rama_works_m60_a/rules.mk b/keyboards/wilba_tech/rama_works_m60_a/rules.mk
index 34e6eaa45b8..cab0ca57e8c 100644
--- a/keyboards/wilba_tech/rama_works_m60_a/rules.mk
+++ b/keyboards/wilba_tech/rama_works_m60_a/rules.mk
@@ -1,7 +1,7 @@
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+NO_SUSPEND_POWER_DOWN = yes
CIE1931_CURVE = yes
I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/wilba_tech/rama_works_m65_b/rules.mk b/keyboards/wilba_tech/rama_works_m65_b/rules.mk
index 34e6eaa45b8..cab0ca57e8c 100644
--- a/keyboards/wilba_tech/rama_works_m65_b/rules.mk
+++ b/keyboards/wilba_tech/rama_works_m65_b/rules.mk
@@ -1,7 +1,7 @@
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+NO_SUSPEND_POWER_DOWN = yes
CIE1931_CURVE = yes
I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/wilba_tech/rama_works_m65_bx/rules.mk b/keyboards/wilba_tech/rama_works_m65_bx/rules.mk
index 34e6eaa45b8..cab0ca57e8c 100644
--- a/keyboards/wilba_tech/rama_works_m65_bx/rules.mk
+++ b/keyboards/wilba_tech/rama_works_m65_bx/rules.mk
@@ -1,7 +1,7 @@
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+NO_SUSPEND_POWER_DOWN = yes
CIE1931_CURVE = yes
I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/wilba_tech/rama_works_m6_a/rules.mk b/keyboards/wilba_tech/rama_works_m6_a/rules.mk
index 806a82e12af..5cde06a483e 100644
--- a/keyboards/wilba_tech/rama_works_m6_a/rules.mk
+++ b/keyboards/wilba_tech/rama_works_m6_a/rules.mk
@@ -1,4 +1,4 @@
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+NO_SUSPEND_POWER_DOWN = yes
diff --git a/keyboards/wilba_tech/rama_works_m6_b/rules.mk b/keyboards/wilba_tech/rama_works_m6_b/rules.mk
index 4650d7a6ea2..67495c9835f 100644
--- a/keyboards/wilba_tech/rama_works_m6_b/rules.mk
+++ b/keyboards/wilba_tech/rama_works_m6_b/rules.mk
@@ -1,7 +1,7 @@
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+NO_SUSPEND_POWER_DOWN = yes
CIE1931_CURVE = yes
I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/wilba_tech/wt60_b/rules.mk b/keyboards/wilba_tech/wt60_b/rules.mk
index 34e6eaa45b8..cab0ca57e8c 100644
--- a/keyboards/wilba_tech/wt60_b/rules.mk
+++ b/keyboards/wilba_tech/wt60_b/rules.mk
@@ -1,7 +1,7 @@
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+NO_SUSPEND_POWER_DOWN = yes
CIE1931_CURVE = yes
I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/wilba_tech/wt60_bx/rules.mk b/keyboards/wilba_tech/wt60_bx/rules.mk
index 34e6eaa45b8..cab0ca57e8c 100644
--- a/keyboards/wilba_tech/wt60_bx/rules.mk
+++ b/keyboards/wilba_tech/wt60_bx/rules.mk
@@ -1,7 +1,7 @@
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+NO_SUSPEND_POWER_DOWN = yes
CIE1931_CURVE = yes
I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/wilba_tech/wt60_c/rules.mk b/keyboards/wilba_tech/wt60_c/rules.mk
index 34e6eaa45b8..cab0ca57e8c 100644
--- a/keyboards/wilba_tech/wt60_c/rules.mk
+++ b/keyboards/wilba_tech/wt60_c/rules.mk
@@ -1,7 +1,7 @@
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+NO_SUSPEND_POWER_DOWN = yes
CIE1931_CURVE = yes
I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/wilba_tech/wt_rgb_backlight.c b/keyboards/wilba_tech/wt_rgb_backlight.c
index 02bcdd610be..936286c2eef 100644
--- a/keyboards/wilba_tech/wt_rgb_backlight.c
+++ b/keyboards/wilba_tech/wt_rgb_backlight.c
@@ -2629,15 +2629,12 @@ void backlight_debug_led( bool state )
{
if (state)
{
- // Output high.
- DDRE |= (1<<6);
- PORTE |= (1<<6);
+ gpio_set_pin_output(E6);
+ gpio_write_pin_high(E6);
}
else
{
- // Output low.
- DDRE &= ~(1<<6);
- PORTE &= ~(1<<6);
+ gpio_set_pin_input(E6);
}
}
#endif // defined(RGB_DEBUGGING_ONLY)
diff --git a/keyboards/wilba_tech/zeal60/rules.mk b/keyboards/wilba_tech/zeal60/rules.mk
index 34e6eaa45b8..cab0ca57e8c 100644
--- a/keyboards/wilba_tech/zeal60/rules.mk
+++ b/keyboards/wilba_tech/zeal60/rules.mk
@@ -1,7 +1,7 @@
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+NO_SUSPEND_POWER_DOWN = yes
CIE1931_CURVE = yes
I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/wilba_tech/zeal65/rules.mk b/keyboards/wilba_tech/zeal65/rules.mk
index 34e6eaa45b8..cab0ca57e8c 100644
--- a/keyboards/wilba_tech/zeal65/rules.mk
+++ b/keyboards/wilba_tech/zeal65/rules.mk
@@ -1,7 +1,7 @@
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+NO_SUSPEND_POWER_DOWN = yes
CIE1931_CURVE = yes
I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/woodkeys/meira/featherble/keyboard.json b/keyboards/woodkeys/meira/featherble/keyboard.json
index 8dc946dd571..416b788c904 100644
--- a/keyboards/woodkeys/meira/featherble/keyboard.json
+++ b/keyboards/woodkeys/meira/featherble/keyboard.json
@@ -3,5 +3,8 @@
"bootloader": "caterina",
"bluetooth": {
"driver": "bluefruit_le"
+ },
+ "features": {
+ "bluetooth": true
}
}
diff --git a/keyboards/woodkeys/meira/featherble/rules.mk b/keyboards/woodkeys/meira/featherble/rules.mk
index 174947ff399..3437a35bdf1 100644
--- a/keyboards/woodkeys/meira/featherble/rules.mk
+++ b/keyboards/woodkeys/meira/featherble/rules.mk
@@ -1,4 +1,2 @@
# Processor frequency
F_CPU = 8000000
-
-BLUETOOTH_ENABLE = yes
diff --git a/keyboards/work_louder/loop/info.json b/keyboards/work_louder/loop/info.json
index 3c395e057a1..771a31d105c 100644
--- a/keyboards/work_louder/loop/info.json
+++ b/keyboards/work_louder/loop/info.json
@@ -8,6 +8,18 @@
"pid": "0x1DF9",
"max_power": 100
},
+ "build": {
+ "lto": true
+ },
+ "features": {
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true,
+ "rgblight": true
+ },
"rgb_matrix": {
"animations": {
"alphas_mods": true,
diff --git a/keyboards/work_louder/loop/rules.mk b/keyboards/work_louder/loop/rules.mk
index b68ae20d145..53c3227972d 100644
--- a/keyboards/work_louder/loop/rules.mk
+++ b/keyboards/work_louder/loop/rules.mk
@@ -1,21 +1,3 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-ENCODER_ENABLE = yes
-LTO_ENABLE = yes
-
-RGB_MATRIX_ENABLE = yes
-LTO_ENABLE = yes
-
SRC += rgb_functions.c
DEFAULT_FOLDER = work_louder/loop/rev3
diff --git a/keyboards/xelus/dawn60/rev1/rules.mk b/keyboards/xelus/dawn60/rev1/rules.mk
index 879710e8e7a..69c283a207d 100644
--- a/keyboards/xelus/dawn60/rev1/rules.mk
+++ b/keyboards/xelus/dawn60/rev1/rules.mk
@@ -1,7 +1,7 @@
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+NO_SUSPEND_POWER_DOWN = yes
CIE1931_CURVE = yes
I2C_DRIVER_REQUIRED = yes
diff --git a/keyboards/xelus/dawn60/rev1_qmk/rules.mk b/keyboards/xelus/dawn60/rev1_qmk/rules.mk
index 5a17af39fcd..16816a5bdf0 100644
--- a/keyboards/xelus/dawn60/rev1_qmk/rules.mk
+++ b/keyboards/xelus/dawn60/rev1_qmk/rules.mk
@@ -1,7 +1,7 @@
# Do not put the microcontroller into power saving mode
# when we get USB suspend event. We want it to keep updating
# backlight effects.
-OPT_DEFS += -DNO_SUSPEND_POWER_DOWN
+NO_SUSPEND_POWER_DOWN = yes
I2C_DRIVER_REQUIRED = yes
WS2812_DRIVER_REQUIRED = yes
diff --git a/keyboards/xiudi/xd60/xd60.h b/keyboards/xiudi/xd60/xd60.h
index 3d3c1ae885c..c399b2965d3 100644
--- a/keyboards/xiudi/xd60/xd60.h
+++ b/keyboards/xiudi/xd60/xd60.h
@@ -2,6 +2,9 @@
#include "quantum.h"
+#define XD60_CAPS_LOCK_LED_PIN B2
+#define XD60_BACKLIGHT_PIN F5
+
/* XD60 LEDs
* GPIO pads
* 0 F7 not connected
@@ -11,8 +14,18 @@
* B2 Capslock LED
* B0 not connected
*/
-inline void xd60_caps_led_on(void) { DDRB |= (1<<2); PORTB &= ~(1<<2); }
-inline void xd60_bl_led_on(void) { DDRF |= (1<<5); PORTF &= ~(1<<5); }
+inline void xd60_caps_led_on(void) {
+ gpio_set_pin_output(XD60_CAPS_LOCK_LED_PIN);
+ gpio_write_pin_low(XD60_CAPS_LOCK_LED_PIN);
+}
+inline void xd60_bl_led_on(void) {
+ gpio_set_pin_output(XD60_BACKLIGHT_PIN);
+ gpio_write_pin_low(XD60_BACKLIGHT_PIN);
+}
-inline void xd60_caps_led_off(void) { DDRB &= ~(1<<2); PORTB &= ~(1<<2); }
-inline void xd60_bl_led_off(void) { DDRF &= ~(1<<5); PORTF &= ~(1<<5); }
+inline void xd60_caps_led_off(void) {
+ gpio_set_pin_input(XD60_CAPS_LOCK_LED_PIN);
+}
+inline void xd60_bl_led_off(void) {
+ gpio_set_pin_input(XD60_BACKLIGHT_PIN);
+}
diff --git a/keyboards/yanghu/unicorne/info.json b/keyboards/yanghu/unicorne/info.json
index 26d54c2c827..1b890dcabaf 100644
--- a/keyboards/yanghu/unicorne/info.json
+++ b/keyboards/yanghu/unicorne/info.json
@@ -8,6 +8,19 @@
"pid": "0x0204",
"device_version": "0.0.1"
},
+ "features": {
+ "audio": true,
+ "bootmagic": false,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "oled": true,
+ "rgblight": true
+ },
+ "audio": {
+ "driver": "pwm_hardware"
+ },
"rgblight": {
"led_count": 8,
"animations": {
diff --git a/keyboards/yanghu/unicorne/rules.mk b/keyboards/yanghu/unicorne/rules.mk
index 014f5d4d422..96852c8abfe 100644
--- a/keyboards/yanghu/unicorne/rules.mk
+++ b/keyboards/yanghu/unicorne/rules.mk
@@ -1,20 +1 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = no # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = yes # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = yes # Audio output
-ENCODER_ENABLE = yes
-OLED_ENABLE = yes
-
-AUDIO_DRIVER = pwm_hardware
-
-RGB_MATRIX_ENABLE = no # Do not enable with RGBLIGHT
-
DEFAULT_FOLDER = yanghu/unicorne/f411
diff --git a/keyboards/ydkb/yd68/keymaps/default/keymap.c b/keyboards/ydkb/yd68/keymaps/default/keymap.c
index 45b3144b9c1..44fe57da6af 100644
--- a/keyboards/ydkb/yd68/keymaps/default/keymap.c
+++ b/keyboards/ydkb/yd68/keymaps/default/keymap.c
@@ -43,7 +43,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case YD68_RGB_PWR:
if (record->event.pressed) {
// when keycode YD68_RGB_PWR is pressed
- PORTE ^= (1<<2);
+ gpio_toggle_pin(E2);
} else {
// when keycode YD68_RGB_PWR is released
}
diff --git a/keyboards/ymdk/ymd62/config.h b/keyboards/ymdk/ymd62/config.h
new file mode 100644
index 00000000000..5f1f3f3a2a5
--- /dev/null
+++ b/keyboards/ymdk/ymd62/config.h
@@ -0,0 +1,11 @@
+// Copyright 2021 Mike Tsao
+// Copyright 2024 Richard Dawe (@richdawe)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define WS2812_PWM_DRIVER PWMD4
+#define WS2812_PWM_CHANNEL 4
+#define WS2812_PWM_PAL_MODE 2
+#define WS2812_DMA_STREAM STM32_DMA1_STREAM7
+#define WS2812_DMA_CHANNEL 7
\ No newline at end of file
diff --git a/keyboards/ymdk/ymd62/halconf.h b/keyboards/ymdk/ymd62/halconf.h
new file mode 100644
index 00000000000..89073b2f3c1
--- /dev/null
+++ b/keyboards/ymdk/ymd62/halconf.h
@@ -0,0 +1,8 @@
+// Copyright 2024 Richard Dawe (@richdawe)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#define HAL_USE_PWM TRUE
+
+#include_next
diff --git a/keyboards/ymdk/ymd62/info.json b/keyboards/ymdk/ymd62/info.json
new file mode 100644
index 00000000000..92ed13d2606
--- /dev/null
+++ b/keyboards/ymdk/ymd62/info.json
@@ -0,0 +1,217 @@
+{
+ "manufacturer": "YMDK",
+ "keyboard_name": "YMD62 ISO QMK",
+ "maintainer": "richdawe",
+ "bootloader": "uf2boot",
+ "diode_direction": "ROW2COL",
+ "features": {
+ "bootmagic": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": true,
+ "rgb_matrix": true
+ },
+ "matrix_pins": {
+ "cols": ["A7", "B0", "B1", "B2", "B10", "B11", "A5", "A15", "B3", "B12", "B13", "B14", "B15", "A8"],
+ "rows": ["A4", "A3", "A2", "A1", "A0"]
+ },
+ "processor": "STM32F103",
+ "rgb_matrix": {
+ "animations": {
+ "alphas_mods": true,
+ "band_pinwheel_sat": true,
+ "band_pinwheel_val": true,
+ "band_sat": true,
+ "band_spiral_sat": true,
+ "band_spiral_val": true,
+ "band_val": true,
+ "breathing": true,
+ "cycle_all": true,
+ "cycle_left_right": true,
+ "cycle_out_in": true,
+ "cycle_out_in_dual": true,
+ "cycle_pinwheel": true,
+ "cycle_spiral": true,
+ "cycle_up_down": true,
+ "dual_beacon": true,
+ "flower_blooming": true,
+ "gradient_left_right": true,
+ "gradient_up_down": true,
+ "hue_breathing": true,
+ "hue_pendulum": true,
+ "hue_wave": true,
+ "jellybean_raindrops": true,
+ "pixel_flow": true,
+ "pixel_fractal": true,
+ "pixel_rain": true,
+ "rainbow_beacon": true,
+ "rainbow_moving_chevron": true,
+ "rainbow_pinwheels": true,
+ "raindrops": true,
+ "riverflow": true,
+ "starlight": true,
+ "starlight_dual_hue": true,
+ "starlight_dual_sat": true
+ },
+ "default": {
+ "animation": "rainbow_moving_chevron"
+ },
+ "driver": "ws2812",
+ "layout": [
+ {"matrix": [0, 0], "x": 1, "y": 1, "flags": 4},
+ {"matrix": [0, 1], "x": 14, "y": 1, "flags": 4},
+ {"matrix": [0, 2], "x": 28, "y": 1, "flags": 4},
+ {"matrix": [0, 3], "x": 44, "y": 1, "flags": 4},
+ {"matrix": [0, 4], "x": 58, "y": 1, "flags": 4},
+ {"matrix": [0, 5], "x": 75, "y": 1, "flags": 4},
+ {"matrix": [0, 6], "x": 89, "y": 1, "flags": 4},
+ {"matrix": [0, 7], "x": 103, "y": 1, "flags": 4},
+ {"matrix": [0, 8], "x": 117, "y": 1, "flags": 4},
+ {"matrix": [0, 9], "x": 129, "y": 1, "flags": 4},
+ {"matrix": [0, 10], "x": 147, "y": 1, "flags": 4},
+ {"matrix": [0, 11], "x": 167, "y": 1, "flags": 4},
+ {"matrix": [0, 12], "x": 183, "y": 1, "flags": 4},
+ {"matrix": [0, 13], "x": 200, "y": 1, "flags": 4},
+ {"matrix": [1, 0], "x": 3, "y": 16, "flags": 4},
+ {"matrix": [1, 1], "x": 16, "y": 16, "flags": 4},
+ {"matrix": [1, 2], "x": 33, "y": 16, "flags": 4},
+ {"matrix": [1, 3], "x": 47, "y": 16, "flags": 4},
+ {"matrix": [1, 4], "x": 60, "y": 16, "flags": 4},
+ {"matrix": [1, 5], "x": 77, "y": 16, "flags": 4},
+ {"matrix": [1, 6], "x": 91, "y": 16, "flags": 4},
+ {"matrix": [1, 7], "x": 106, "y": 16, "flags": 4},
+ {"matrix": [1, 8], "x": 120, "y": 16, "flags": 4},
+ {"matrix": [1, 9], "x": 131, "y": 16, "flags": 4},
+ {"matrix": [1, 10], "x": 149, "y": 16, "flags": 4},
+ {"matrix": [1, 11], "x": 169, "y": 16, "flags": 4},
+ {"matrix": [1, 12], "x": 185, "y": 16, "flags": 4},
+ {"matrix": [1, 13], "x": 205, "y": 26, "flags": 4},
+ {"matrix": [2, 0], "x": 5, "y": 32, "flags": 4},
+ {"matrix": [2, 1], "x": 20, "y": 32, "flags": 4},
+ {"matrix": [2, 2], "x": 35, "y": 32, "flags": 4},
+ {"matrix": [2, 3], "x": 49, "y": 32, "flags": 4},
+ {"matrix": [2, 4], "x": 62, "y": 32, "flags": 4},
+ {"matrix": [2, 5], "x": 79, "y": 32, "flags": 4},
+ {"matrix": [2, 6], "x": 93, "y": 32, "flags": 4},
+ {"matrix": [2, 7], "x": 108, "y": 32, "flags": 4},
+ {"matrix": [2, 8], "x": 122, "y": 32, "flags": 4},
+ {"matrix": [2, 9], "x": 133, "y": 32, "flags": 4},
+ {"matrix": [2, 10], "x": 151, "y": 32, "flags": 4},
+ {"matrix": [2, 11], "x": 171, "y": 32, "flags": 4},
+ {"matrix": [2, 13], "x": 199, "y": 32, "flags": 4},
+ {"matrix": [3, 0], "x": 8, "y": 49, "flags": 4},
+ {"matrix": [3, 1], "x": 23, "y": 49, "flags": 4},
+ {"matrix": [3, 2], "x": 38, "y": 49, "flags": 4},
+ {"matrix": [3, 3], "x": 51, "y": 49, "flags": 4},
+ {"matrix": [3, 4], "x": 64, "y": 49, "flags": 4},
+ {"matrix": [3, 5], "x": 81, "y": 49, "flags": 4},
+ {"matrix": [3, 6], "x": 95, "y": 49, "flags": 4},
+ {"matrix": [3, 7], "x": 110, "y": 49, "flags": 4},
+ {"matrix": [3, 8], "x": 124, "y": 49, "flags": 4},
+ {"matrix": [3, 9], "x": 135, "y": 49, "flags": 4},
+ {"matrix": [3, 10], "x": 153, "y": 49, "flags": 4},
+ {"matrix": [3, 11], "x": 189, "y": 49, "flags": 4},
+ {"matrix": [3, 13], "x": 212, "y": 49, "flags": 4},
+ {"matrix": [4, 0], "x": 2, "y": 63, "flags": 4},
+ {"matrix": [4, 1], "x": 15, "y": 63, "flags": 4},
+ {"matrix": [4, 2], "x": 33, "y": 63, "flags": 4},
+ {"matrix": [4, 6], "x": 92, "y": 63, "flags": 4},
+ {"matrix": [4, 9], "x": 149, "y": 63, "flags": 4},
+ {"matrix": [4, 10], "x": 170, "y": 63, "flags": 4},
+ {"matrix": [4, 11], "x": 188, "y": 63, "flags": 4},
+ {"matrix": [4, 13], "x": 200, "y": 63, "flags": 4},
+ {"x": 60, "y": 5, "flags": 2},
+ {"x": 90, "y": 5, "flags": 2},
+ {"x": 120, "y": 5, "flags": 2},
+ {"x": 150, "y": 5, "flags": 2},
+ {"x": 180, "y": 5, "flags": 2},
+ {"x": 210, "y": 5, "flags": 2},
+ {"x": 210, "y": 60, "flags": 2},
+ {"x": 180, "y": 60, "flags": 2},
+ {"x": 150, "y": 60, "flags": 2},
+ {"x": 120, "y": 60, "flags": 2},
+ {"x": 90, "y": 60, "flags": 2},
+ {"x": 60, "y": 60, "flags": 2}
+ ],
+ "max_brightness": 128
+ },
+ "url": "https://ymdkey.com/products/ymd62-iso-rgb-hot-swap-pcb-fully-programmable-support-via-vial",
+ "usb": {
+ "device_version": "0.0.4",
+ "pid": "0x0062",
+ "vid": "0x45D4"
+ },
+ "ws2812": {
+ "driver": "pwm",
+ "pin": "B9"
+ },
+ "community_layouts": ["60_iso"],
+ "layouts": {
+ "LAYOUT_60_iso": {
+ "layout": [
+ {"matrix": [0, 0], "x": 0, "y": 0},
+ {"matrix": [0, 1], "x": 1, "y": 0},
+ {"matrix": [0, 2], "x": 2, "y": 0},
+ {"matrix": [0, 3], "x": 3, "y": 0},
+ {"matrix": [0, 4], "x": 4, "y": 0},
+ {"matrix": [0, 5], "x": 5, "y": 0},
+ {"matrix": [0, 6], "x": 6, "y": 0},
+ {"matrix": [0, 7], "x": 7, "y": 0},
+ {"matrix": [0, 8], "x": 8, "y": 0},
+ {"matrix": [0, 9], "x": 9, "y": 0},
+ {"matrix": [0, 10], "x": 10, "y": 0},
+ {"matrix": [0, 11], "x": 11, "y": 0},
+ {"matrix": [0, 12], "x": 12, "y": 0},
+ {"matrix": [0, 13], "x": 13, "y": 0, "w": 2},
+ {"matrix": [1, 0], "x": 0, "y": 1, "w": 1.5},
+ {"matrix": [1, 1], "x": 1.5, "y": 1},
+ {"matrix": [1, 2], "x": 2.5, "y": 1},
+ {"matrix": [1, 3], "x": 3.5, "y": 1},
+ {"matrix": [1, 4], "x": 4.5, "y": 1},
+ {"matrix": [1, 5], "x": 5.5, "y": 1},
+ {"matrix": [1, 6], "x": 6.5, "y": 1},
+ {"matrix": [1, 7], "x": 7.5, "y": 1},
+ {"matrix": [1, 8], "x": 8.5, "y": 1},
+ {"matrix": [1, 9], "x": 9.5, "y": 1},
+ {"matrix": [1, 10], "x": 10.5, "y": 1},
+ {"matrix": [1, 11], "x": 11.5, "y": 1},
+ {"matrix": [1, 12], "x": 12.5, "y": 1},
+ {"matrix": [2, 0], "x": 0, "y": 2, "w": 1.75},
+ {"matrix": [2, 1], "x": 1.75, "y": 2},
+ {"matrix": [2, 2], "x": 2.75, "y": 2},
+ {"matrix": [2, 3], "x": 3.75, "y": 2},
+ {"matrix": [2, 4], "x": 4.75, "y": 2},
+ {"matrix": [2, 5], "x": 5.75, "y": 2},
+ {"matrix": [2, 6], "x": 6.75, "y": 2},
+ {"matrix": [2, 7], "x": 7.75, "y": 2},
+ {"matrix": [2, 8], "x": 8.75, "y": 2},
+ {"matrix": [2, 9], "x": 9.75, "y": 2},
+ {"matrix": [2, 10], "x": 10.75, "y": 2},
+ {"matrix": [2, 11], "x": 11.75, "y": 2},
+ {"matrix": [2, 13], "x": 12.75, "y": 2},
+ {"matrix": [1, 13], "x": 13.5, "y": 1, "w": 1.5, "h": 2},
+ {"matrix": [3, 0], "x": 0, "y": 3, "w": 1.25},
+ {"matrix": [3, 1], "x": 1.25, "y": 3},
+ {"matrix": [3, 2], "x": 2.25, "y": 3},
+ {"matrix": [3, 3], "x": 3.25, "y": 3},
+ {"matrix": [3, 4], "x": 4.25, "y": 3},
+ {"matrix": [3, 5], "x": 5.25, "y": 3},
+ {"matrix": [3, 6], "x": 6.25, "y": 3},
+ {"matrix": [3, 7], "x": 7.25, "y": 3},
+ {"matrix": [3, 8], "x": 8.25, "y": 3},
+ {"matrix": [3, 9], "x": 9.25, "y": 3},
+ {"matrix": [3, 10], "x": 10.25, "y": 3},
+ {"matrix": [3, 11], "x": 11.25, "y": 3},
+ {"matrix": [3, 13], "x": 12.25, "y": 3, "w": 2.75},
+ {"matrix": [4, 0], "x": 0, "y": 4, "w": 1.25},
+ {"matrix": [4, 1], "x": 1.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 2], "x": 2.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 6], "x": 3.75, "y": 4, "w": 6.25},
+ {"matrix": [4, 9], "x": 10, "y": 4, "w": 1.25},
+ {"matrix": [4, 10], "x": 11.25, "y": 4, "w": 1.25},
+ {"matrix": [4, 11], "x": 12.5, "y": 4, "w": 1.25},
+ {"matrix": [4, 13], "x": 13.75, "y": 4, "w": 1.25}
+ ]
+ }
+ }
+}
diff --git a/keyboards/ymdk/ymd62/keymaps/default/keymap.c b/keyboards/ymdk/ymd62/keymaps/default/keymap.c
new file mode 100644
index 00000000000..79c128295ef
--- /dev/null
+++ b/keyboards/ymdk/ymd62/keymaps/default/keymap.c
@@ -0,0 +1,19 @@
+// Copyright 2024 Richard Dawe (@richdawe)
+// SPDX-License-Identifier: GPL-2.0-or-later
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+[0] = LAYOUT_60_iso( /* Base */
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1) , KC_APP, KC_RCTL),
+
+[1] = LAYOUT_60_iso( /* FN */
+ KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL ,
+ KC_TRNS, KC_TRNS, KC_UP, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, QK_BOOT ,
+ KC_TRNS, KC_LEFT, KC_DOWN, KC_RGHT, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
+ KC_TRNS, RGB_TOG, RGB_MOD, RGB_RMOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, RGB_M_P, KC_TRNS, KC_TRNS,
+ KC_VOLU, KC_VOLD, KC_MUTE, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS)
+};
\ No newline at end of file
diff --git a/keyboards/ymdk/ymd62/mcuconf.h b/keyboards/ymdk/ymd62/mcuconf.h
new file mode 100644
index 00000000000..3c076403711
--- /dev/null
+++ b/keyboards/ymdk/ymd62/mcuconf.h
@@ -0,0 +1,9 @@
+// Copyright 2024 Richard Dawe (@richdawe)
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_TIM4
+#define STM32_PWM_USE_TIM4 TRUE
\ No newline at end of file
diff --git a/keyboards/ymdk/ymd62/readme.md b/keyboards/ymdk/ymd62/readme.md
new file mode 100644
index 00000000000..73eeed3dbb9
--- /dev/null
+++ b/keyboards/ymdk/ymd62/readme.md
@@ -0,0 +1,28 @@
+# YMDK YMD62 ISO
+
+A 60% PCB supporting the ISO layout, with hotswap sockets, backlit keys and underglow.
+
+* Keyboard Maintainer: [Richard Dawe](https://github.com/richdawe)
+* Hardware Supported: YMD62 PCB
+* Hardware Availability: [YMDK](https://ymdkey.com/products/ymd62-iso-rgb-hot-swap-pcb-fully-programmable-support-via-vial)
+
+Make example for this keyboard (after setting up your build environment):
+
+ make ymdk/ymd62:default
+
+Flashing example for this keyboard:
+
+ make ymdk/ymd62:default:flash
+
+See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
+
+## Bootloader
+
+Enter the bootloader in 3 ways:
+
+* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (usually the top left key or Escape) and plug in the keyboard
+* **Physical reset button**: Double-tap the reset button on the back of the PCB
+* **Keycode in layout**: Press the key mapped to `QK_BOOT` if it is available
+
+Note: The device does not reconnect automatically after the QMK firmware has been flashed.
+Wait for the USB device to disappear after writing firmware, then unplug and re-plug it.
\ No newline at end of file
diff --git a/keyboards/ymdk/ymd62/rules.mk b/keyboards/ymdk/ymd62/rules.mk
new file mode 100644
index 00000000000..ef4364b06ac
--- /dev/null
+++ b/keyboards/ymdk/ymd62/rules.mk
@@ -0,0 +1,2 @@
+# Configure for 128K flash
+MCU_LDSCRIPT = STM32F103xB
\ No newline at end of file
diff --git a/keyboards/yushakobo/navpad/10/info.json b/keyboards/yushakobo/navpad/10/info.json
index ef0cdf5cbed..e28a2e2cb17 100644
--- a/keyboards/yushakobo/navpad/10/info.json
+++ b/keyboards/yushakobo/navpad/10/info.json
@@ -7,6 +7,14 @@
"vid": "0x3265",
"pid": "0x0008"
},
+ "features": {
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false,
+ "rgblight": true
+ },
"encoder": {
"rotary": [
{"pin_a": "B5", "pin_b": "B6"}
diff --git a/keyboards/yushakobo/navpad/10/rev0/rules.mk b/keyboards/yushakobo/navpad/10/rev0/rules.mk
new file mode 100644
index 00000000000..e8ffcca7a6d
--- /dev/null
+++ b/keyboards/yushakobo/navpad/10/rev0/rules.mk
@@ -0,0 +1 @@
+SRC += navpad_prefs.c
diff --git a/keyboards/yushakobo/navpad/10/rev1/rules.mk b/keyboards/yushakobo/navpad/10/rev1/rules.mk
new file mode 100644
index 00000000000..e8ffcca7a6d
--- /dev/null
+++ b/keyboards/yushakobo/navpad/10/rev1/rules.mk
@@ -0,0 +1 @@
+SRC += navpad_prefs.c
diff --git a/keyboards/yushakobo/navpad/10/rules.mk b/keyboards/yushakobo/navpad/10/rules.mk
index 61cbbf351dc..32daeef814d 100644
--- a/keyboards/yushakobo/navpad/10/rules.mk
+++ b/keyboards/yushakobo/navpad/10/rules.mk
@@ -1,17 +1 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
-ENCODER_ENABLE = yes
-
-SRC += navpad_prefs.c
DEFAULT_FOLDER = yushakobo/navpad/10/rev1
diff --git a/keyboards/yushakobo/navpad/10_helix_r/info.json b/keyboards/yushakobo/navpad/10_helix_r/keyboard.json
similarity index 96%
rename from keyboards/yushakobo/navpad/10_helix_r/info.json
rename to keyboards/yushakobo/navpad/10_helix_r/keyboard.json
index 8084f1f7bd8..81854128da5 100644
--- a/keyboards/yushakobo/navpad/10_helix_r/info.json
+++ b/keyboards/yushakobo/navpad/10_helix_r/keyboard.json
@@ -8,6 +8,14 @@
"pid": "0x0008",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false,
+ "rgblight": true
+ },
"matrix_pins": {
"cols": ["F5", "F6", "B2", "B3", "B1", "F7", null],
"rows": ["D4", "C6", "D7", "E6", "B4", "F4"]
diff --git a/keyboards/yushakobo/navpad/10_helix_r/rules.mk b/keyboards/yushakobo/navpad/10_helix_r/rules.mk
index f30c00650ce..e8ffcca7a6d 100644
--- a/keyboards/yushakobo/navpad/10_helix_r/rules.mk
+++ b/keyboards/yushakobo/navpad/10_helix_r/rules.mk
@@ -1,16 +1 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-
-ENCODER_ENABLE = yes
-
SRC += navpad_prefs.c
diff --git a/keyboards/yushakobo/quick17/info.json b/keyboards/yushakobo/quick17/keyboard.json
similarity index 92%
rename from keyboards/yushakobo/quick17/info.json
rename to keyboards/yushakobo/quick17/keyboard.json
index 51c41a6e82a..aa0d39756d9 100644
--- a/keyboards/yushakobo/quick17/info.json
+++ b/keyboards/yushakobo/quick17/keyboard.json
@@ -8,6 +8,14 @@
"pid": "0x0006",
"device_version": "0.0.1"
},
+ "features": {
+ "bootmagic": true,
+ "encoder": true,
+ "extrakey": true,
+ "mousekey": true,
+ "nkro": false,
+ "rgb_matrix": true
+ },
"rgb_matrix": {
"driver": "ws2812",
"max_brightness": 150,
diff --git a/keyboards/yushakobo/quick17/rules.mk b/keyboards/yushakobo/quick17/rules.mk
index 70ab5e27442..083da9448c6 100644
--- a/keyboards/yushakobo/quick17/rules.mk
+++ b/keyboards/yushakobo/quick17/rules.mk
@@ -1,18 +1,3 @@
-# Build Options
-# change yes to no to disable
-#
-BOOTMAGIC_ENABLE = yes # Enable Bootmagic Lite
-MOUSEKEY_ENABLE = yes # Mouse keys
-EXTRAKEY_ENABLE = yes # Audio control and System control
-CONSOLE_ENABLE = no # Console for debug
-COMMAND_ENABLE = no # Commands for debug and configuration
-NKRO_ENABLE = no # Enable N-Key Rollover
-BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
-RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
-AUDIO_ENABLE = no # Audio output
-ENCODER_ENABLE = yes
-
-RGB_MATRIX_ENABLE = yes
RGB_MATRIX_CUSTOM_KB = yes
SRC += quick17_prefs.c
diff --git a/keyboards/zsa/moonlander/keyboard.json b/keyboards/zsa/moonlander/keyboard.json
index 233cb46bba7..08864fe2d77 100644
--- a/keyboards/zsa/moonlander/keyboard.json
+++ b/keyboards/zsa/moonlander/keyboard.json
@@ -22,6 +22,9 @@
"rgb_matrix": true,
"swap_hands": true
},
+ "audio": {
+ "driver": "dac_additive"
+ },
"dynamic_keymap": {
"layer_count": 8
},
diff --git a/keyboards/zsa/moonlander/rules.mk b/keyboards/zsa/moonlander/rules.mk
index 46375584890..10928ea0611 100644
--- a/keyboards/zsa/moonlander/rules.mk
+++ b/keyboards/zsa/moonlander/rules.mk
@@ -1,4 +1,3 @@
-AUDIO_DRIVER = dac_additive
CUSTOM_MATRIX = lite
# project specific files
diff --git a/keyboards/zsa/voyager/info.json b/keyboards/zsa/voyager/keyboard.json
similarity index 100%
rename from keyboards/zsa/voyager/info.json
rename to keyboards/zsa/voyager/keyboard.json
diff --git a/layouts/community/60_ansi_arrow_split_bs/readme.md b/layouts/community/60_ansi_arrow_split_bs/readme.md
new file mode 100644
index 00000000000..c008b4a6dec
--- /dev/null
+++ b/layouts/community/60_ansi_arrow_split_bs/readme.md
@@ -0,0 +1,3 @@
+# 60_ansi_arrow_split_bs
+
+ LAYOUT_60_ansi_arrow_split_bs
diff --git a/layouts/community/60_ansi_arrow_split_bs_7u_spc/readme.md b/layouts/community/60_ansi_arrow_split_bs_7u_spc/readme.md
deleted file mode 100644
index d60387a000b..00000000000
--- a/layouts/community/60_ansi_arrow_split_bs_7u_spc/readme.md
+++ /dev/null
@@ -1,3 +0,0 @@
-# 60_ansi_arrow_split_bs_7u_spc
-
- LAYOUT_60_ansi_arrow_split_bs_7u_spc
diff --git a/layouts/community/60_iso_arrow/readme.md b/layouts/community/60_iso_arrow/readme.md
new file mode 100644
index 00000000000..73015ab248e
--- /dev/null
+++ b/layouts/community/60_iso_arrow/readme.md
@@ -0,0 +1,3 @@
+# 60_iso_arrow
+
+ LAYOUT_60_iso_arrow
diff --git a/layouts/community/60_iso_arrow_split_bs/readme.md b/layouts/community/60_iso_arrow_split_bs/readme.md
new file mode 100644
index 00000000000..8f47644fe23
--- /dev/null
+++ b/layouts/community/60_iso_arrow_split_bs/readme.md
@@ -0,0 +1,3 @@
+# 60_iso_arrow_split_bs
+
+ LAYOUT_60_iso_arrow_split_bs
diff --git a/layouts/community/tkl_ansi_wkl/readme.md b/layouts/community/tkl_ansi_wkl/readme.md
new file mode 100644
index 00000000000..6541a0f23ab
--- /dev/null
+++ b/layouts/community/tkl_ansi_wkl/readme.md
@@ -0,0 +1,3 @@
+# tkl_ansi_wkl
+
+ LAYOUT_tkl_ansi_wkl
diff --git a/layouts/community/tkl_ansi_wkl_split_bs_rshift/readme.md b/layouts/community/tkl_ansi_wkl_split_bs_rshift/readme.md
new file mode 100644
index 00000000000..35235603728
--- /dev/null
+++ b/layouts/community/tkl_ansi_wkl_split_bs_rshift/readme.md
@@ -0,0 +1,3 @@
+# tkl_ansi_wkl_split_bs_rshift
+
+ LAYOUT_tkl_ansi_wkl_split_bs_rshift
diff --git a/layouts/community/tkl_f13_ansi_wkl/readme.md b/layouts/community/tkl_f13_ansi_wkl/readme.md
new file mode 100644
index 00000000000..607692c2392
--- /dev/null
+++ b/layouts/community/tkl_f13_ansi_wkl/readme.md
@@ -0,0 +1,3 @@
+# tkl_f13_ansi_wkl
+
+ LAYOUT_tkl_f13_ansi_wkl
diff --git a/layouts/community/tkl_f13_ansi_wkl_split_bs_rshift/readme.md b/layouts/community/tkl_f13_ansi_wkl_split_bs_rshift/readme.md
new file mode 100644
index 00000000000..614c0913f62
--- /dev/null
+++ b/layouts/community/tkl_f13_ansi_wkl_split_bs_rshift/readme.md
@@ -0,0 +1,3 @@
+# tkl_f13_ansi_wkl_split_bs_rshift
+
+ LAYOUT_tkl_f13_ansi_wkl_split_bs_rshift
diff --git a/layouts/community/tkl_f13_iso_wkl/readme.md b/layouts/community/tkl_f13_iso_wkl/readme.md
new file mode 100644
index 00000000000..46c44195923
--- /dev/null
+++ b/layouts/community/tkl_f13_iso_wkl/readme.md
@@ -0,0 +1,3 @@
+# tkl_f13_iso_wkl
+
+ LAYOUT_tkl_f13_iso_wkl
diff --git a/layouts/community/tkl_f13_iso_wkl_split_bs_rshift/readme.md b/layouts/community/tkl_f13_iso_wkl_split_bs_rshift/readme.md
new file mode 100644
index 00000000000..a9059abfba2
--- /dev/null
+++ b/layouts/community/tkl_f13_iso_wkl_split_bs_rshift/readme.md
@@ -0,0 +1,3 @@
+# tkl_f13_iso_wkl_split_bs_rshift
+
+ LAYOUT_tkl_f13_iso_wkl_split_bs_rshift
diff --git a/layouts/community/tkl_iso_wkl/readme.md b/layouts/community/tkl_iso_wkl/readme.md
new file mode 100644
index 00000000000..56fe1e91473
--- /dev/null
+++ b/layouts/community/tkl_iso_wkl/readme.md
@@ -0,0 +1,3 @@
+# tkl_iso_wkl
+
+ LAYOUT_tkl_iso_wkl
diff --git a/layouts/community/tkl_iso_wkl_split_bs_rshift/readme.md b/layouts/community/tkl_iso_wkl_split_bs_rshift/readme.md
new file mode 100644
index 00000000000..ec820424a5b
--- /dev/null
+++ b/layouts/community/tkl_iso_wkl_split_bs_rshift/readme.md
@@ -0,0 +1,3 @@
+# tkl_iso_wkl_split_bs_rshift
+
+ LAYOUT_tkl_iso_split_bs_rshift
diff --git a/layouts/default/60_ansi_arrow/default_60_ansi_arrow/keymap.c b/layouts/default/60_ansi_arrow/default_60_ansi_arrow/keymap.c
index c0baf9f47a7..5ad94501d06 100644
--- a/layouts/default/60_ansi_arrow/default_60_ansi_arrow/keymap.c
+++ b/layouts/default/60_ansi_arrow/default_60_ansi_arrow/keymap.c
@@ -6,15 +6,15 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/*
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
- * │Esc│1 │2 │3 │4 │5 │6 │7 │8 │9 │0 │- │+ │Bspc │
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
- * │Tab │Q │W │E │R │T │Y │U │I │O │P │[ │] │\ │
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │Caps │A │S │D │F │G │H │J │K │L │; │' │Enter │
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┬───┤
- * │Shift │Z │X │C │V │B │N │M │, │. │Shift │↑ │/ │
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ Shift│ ↑ │ / │
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬───┼───┼───┤
- * │Ctrl│GUI │Alt │Space │Alt│GUI│← │↓ │→ │
+ * │Ctrl│GUI │Alt │Space │Alt│GUI│ ← │ ↓ │ → │
* └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
*/
[0] = LAYOUT_60_ansi_arrow(
diff --git a/layouts/default/60_ansi_arrow_split_bs/default_60_ansi_arrow_split_bs/keymap.c b/layouts/default/60_ansi_arrow_split_bs/default_60_ansi_arrow_split_bs/keymap.c
new file mode 100644
index 00000000000..e95baa6f4db
--- /dev/null
+++ b/layouts/default/60_ansi_arrow_split_bs/default_60_ansi_arrow_split_bs/keymap.c
@@ -0,0 +1,27 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ + │ \ │ ` │
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ Bspc│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┬───┤
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ Shift│ ↑ │ / │
+ * ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬───┼───┼───┤
+ * │Ctrl│GUI │Alt │ │Alt│GUI│ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+ */
+ [0] = LAYOUT_60_ansi_arrow_split_bs(
+ KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_GRV,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, KC_SLSH,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/60_ansi_arrow_split_bs_7u_spc/info.json b/layouts/default/60_ansi_arrow_split_bs/info.json
similarity index 85%
rename from layouts/default/60_ansi_arrow_split_bs_7u_spc/info.json
rename to layouts/default/60_ansi_arrow_split_bs/info.json
index bf30205f3d3..23e4b6937d4 100644
--- a/layouts/default/60_ansi_arrow_split_bs_7u_spc/info.json
+++ b/layouts/default/60_ansi_arrow_split_bs/info.json
@@ -1,9 +1,9 @@
{
- "keyboard_name": "60% ANSI Arrow Split Backspace & 7U Space Layout",
- "url": "https://mr.sendyyk.com",
- "maintainer": "Sendy YK ",
+ "keyboard_name": "60% ANSI Arrow Layout with Split Backspace",
+ "url": "",
+ "maintainer": "qmk",
"layouts": {
- "LAYOUT_60_ansi_arrow_split_bs_7u_spc": {
+ "LAYOUT_60_ansi_arrow_split_bs": {
"layout": [
{"x": 0, "y": 0},
{"x": 1, "y": 0},
@@ -64,10 +64,11 @@
{"x": 13, "y": 3},
{"x": 14, "y": 3},
- {"x": 0, "y": 4, "w": 1.5},
- {"x": 1.5, "y": 4},
- {"x": 2.5, "y": 4, "w": 1.5},
- {"x": 4, "y": 4, "w": 7},
+ {"x": 0, "y": 4, "w": 1.25},
+ {"x": 1.25, "y": 4, "w": 1.25},
+ {"x": 2.5, "y": 4, "w": 1.25},
+ {"x": 3.75, "y": 4, "w": 6.25},
+ {"x": 10, "y": 4},
{"x": 11, "y": 4},
{"x": 12, "y": 4},
{"x": 13, "y": 4},
diff --git a/layouts/default/60_ansi_arrow_split_bs_7u_spc/layout.json b/layouts/default/60_ansi_arrow_split_bs/layout.json
similarity index 78%
rename from layouts/default/60_ansi_arrow_split_bs_7u_spc/layout.json
rename to layouts/default/60_ansi_arrow_split_bs/layout.json
index db9c8d167b5..595b88bb558 100644
--- a/layouts/default/60_ansi_arrow_split_bs_7u_spc/layout.json
+++ b/layouts/default/60_ansi_arrow_split_bs/layout.json
@@ -2,4 +2,4 @@
[{w:1.5},"","","","","","","","","","","","","",{w:1.5},""],
[{w:1.75},"","","","","","","","","","","","",{w:2.25},""],
[{w:2.25},"","","","","","","","","","",{w:1.75},"","",""],
-[{w:1.5},"","",{w:1.5},"",{w:7},"","","","",""]
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:6.25},"","","","","",""]
diff --git a/layouts/default/60_ansi_arrow_split_bs/readme.md b/layouts/default/60_ansi_arrow_split_bs/readme.md
new file mode 100644
index 00000000000..c008b4a6dec
--- /dev/null
+++ b/layouts/default/60_ansi_arrow_split_bs/readme.md
@@ -0,0 +1,3 @@
+# 60_ansi_arrow_split_bs
+
+ LAYOUT_60_ansi_arrow_split_bs
diff --git a/layouts/default/60_ansi_arrow_split_bs_7u_spc/default_60_ansi_arrow_split_bs_7u_spc/keymap.c b/layouts/default/60_ansi_arrow_split_bs_7u_spc/default_60_ansi_arrow_split_bs_7u_spc/keymap.c
deleted file mode 100644
index 409f415318b..00000000000
--- a/layouts/default/60_ansi_arrow_split_bs_7u_spc/default_60_ansi_arrow_split_bs_7u_spc/keymap.c
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright 2020 QMK / Sendy YK
-// SPDX-License-Identifier: GPL-2.0-or-later
-
-#include QMK_KEYBOARD_H
-
-const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
- /*
- * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
- * │Esc│1 │2 │3 │4 │5 │6 │7 │8 │9 │0 │- │+ │\ │Del│
- * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
- * │Tab │Q │W │E │R │T │Y │U │I │O │P │[ │] │Bspc │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │Caps │A │S │D │F │G │H │J │K │L │; │' │Enter │
- * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┬───┤
- * │Shift │Z │X │C │V │B │N │M │, │. │Shift │↑ │/ │
- * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴──┬───┼───┼───┤
- * │Ctrl │GUI│Alt │Space │Alt│← │↓ │→ │
- * └─────┴───┴─────┴───────────────────────────┴───┴───┴───┴───┘
- */
- [0] = LAYOUT_60_ansi_arrow_split_bs_7u_spc(
- QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS, KC_DEL,
- KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSPC,
- KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
- KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, KC_SLSH,
- KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_LEFT, KC_DOWN, KC_RGHT
- )
-};
diff --git a/layouts/default/60_ansi_arrow_split_bs_7u_spc/readme.md b/layouts/default/60_ansi_arrow_split_bs_7u_spc/readme.md
deleted file mode 100644
index 30292abb90d..00000000000
--- a/layouts/default/60_ansi_arrow_split_bs_7u_spc/readme.md
+++ /dev/null
@@ -1,30 +0,0 @@
-# 60_ansi_arrow_split_bs_7u_spc Keymap
-
-Default 60 ANSI Arrow Split Backspace & 7U Space Keymap by [Sendy YK](https://mr.sendyyk.com).
-
-```c
- /*
- * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
- * │Esc│1 │2 │3 │4 │5 │6 │7 │8 │9 │0 │- │+ │\ │Del│
- * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
- * │Tab │Q │W │E │R │T │Y │U │I │O │P │[ │] │Bspc │
- * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
- * │Caps │A │S │D │F │G │H │J │K │L │; │' │Enter │
- * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┬───┤
- * │Shift │Z │X │C │V │B │N │M │, │. │Shift │↑ │/ │
- * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴──┬───┼───┼───┤
- * │Ctrl │GUI│Alt │Space │Alt│← │↓ │→ │
- * └─────┴───┴─────┴───────────────────────────┴───┴───┴───┴───┘
- */
-```
-
-## Build The Firmware
-
-Make example for keyboard (after setting up your build environment):
-
- make :default_60_ansi_arrow_split_bs_7u_spc
-
-More information:
-* [Setting Up Your QMK Environment](https://docs.qmk.fm/#/getting_started_build_tools)
-* [More Detailed make Instructions](https://docs.qmk.fm/#/getting_started_make_guide)
-* [The Complete Newbs Guide To QMK](https://docs.qmk.fm/#/newbs)
diff --git a/layouts/default/60_iso_arrow/default_60_iso_arrow/keymap.c b/layouts/default/60_iso_arrow/default_60_iso_arrow/keymap.c
new file mode 100644
index 00000000000..d3eaa478685
--- /dev/null
+++ b/layouts/default/60_iso_arrow/default_60_iso_arrow/keymap.c
@@ -0,0 +1,27 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ + │ Backsp│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬──┴┬───┤
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ Shift│ ↑ │ / │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬───┼───┼───┤
+ * │Ctrl│GUI │Alt │ │Alt│GUI│ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+ */
+ [0] = LAYOUT_60_iso_arrow(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, KC_SLSH,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/60_iso_arrow/info.json b/layouts/default/60_iso_arrow/info.json
new file mode 100644
index 00000000000..a14008b14f7
--- /dev/null
+++ b/layouts/default/60_iso_arrow/info.json
@@ -0,0 +1,79 @@
+{
+ "keyboard_name": "60% ISO Arrow Layout",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_60_iso_arrow": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+ {"x": 4, "y": 0},
+ {"x": 5, "y": 0},
+ {"x": 6, "y": 0},
+ {"x": 7, "y": 0},
+ {"x": 8, "y": 0},
+ {"x": 9, "y": 0},
+ {"x": 10, "y": 0},
+ {"x": 11, "y": 0},
+ {"x": 12, "y": 0},
+ {"x": 13, "y": 0, "w": 2},
+
+ {"x": 0, "y": 1, "w": 1.5},
+ {"x": 1.5, "y": 1},
+ {"x": 2.5, "y": 1},
+ {"x": 3.5, "y": 1},
+ {"x": 4.5, "y": 1},
+ {"x": 5.5, "y": 1},
+ {"x": 6.5, "y": 1},
+ {"x": 7.5, "y": 1},
+ {"x": 8.5, "y": 1},
+ {"x": 9.5, "y": 1},
+ {"x": 10.5, "y": 1},
+ {"x": 11.5, "y": 1},
+ {"x": 12.5, "y": 1},
+
+ {"x": 0, "y": 2, "w": 1.75},
+ {"x": 1.75, "y": 2},
+ {"x": 2.75, "y": 2},
+ {"x": 3.75, "y": 2},
+ {"x": 4.75, "y": 2},
+ {"x": 5.75, "y": 2},
+ {"x": 6.75, "y": 2},
+ {"x": 7.75, "y": 2},
+ {"x": 8.75, "y": 2},
+ {"x": 9.75, "y": 2},
+ {"x": 10.75, "y": 2},
+ {"x": 11.75, "y": 2},
+ {"x": 12.75, "y": 2},
+ {"x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"x": 0, "y": 3, "w": 1.25},
+ {"x": 1.25, "y": 3},
+ {"x": 2.25, "y": 3},
+ {"x": 3.25, "y": 3},
+ {"x": 4.25, "y": 3},
+ {"x": 5.25, "y": 3},
+ {"x": 6.25, "y": 3},
+ {"x": 7.25, "y": 3},
+ {"x": 8.25, "y": 3},
+ {"x": 9.25, "y": 3},
+ {"x": 10.25, "y": 3},
+ {"x": 11.25, "y": 3, "w": 1.75},
+ {"x": 13, "y": 3},
+ {"x": 14, "y": 3},
+
+ {"x": 0, "y": 4, "w": 1.25},
+ {"x": 1.25, "y": 4, "w": 1.25},
+ {"x": 2.5, "y": 4, "w": 1.25},
+ {"x": 3.75, "y": 4, "w": 6.25},
+ {"x": 10, "y": 4},
+ {"x": 11, "y": 4},
+ {"x": 12, "y": 4},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/60_iso_arrow/layout.json b/layouts/default/60_iso_arrow/layout.json
new file mode 100644
index 00000000000..90f25c3ca8c
--- /dev/null
+++ b/layouts/default/60_iso_arrow/layout.json
@@ -0,0 +1,5 @@
+[{a:7},"","","","","","","","","","","","","",{w:2},""],
+[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},""],
+[{w:1.75},"","","","","","","","","","","","",""],
+[{w:1.25},"","","","","","","","","","","",{w:1.75},"","",""],
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:6.25},"","","","","",""]
diff --git a/layouts/default/60_iso_arrow/readme.md b/layouts/default/60_iso_arrow/readme.md
new file mode 100644
index 00000000000..73015ab248e
--- /dev/null
+++ b/layouts/default/60_iso_arrow/readme.md
@@ -0,0 +1,3 @@
+# 60_iso_arrow
+
+ LAYOUT_60_iso_arrow
diff --git a/layouts/default/60_iso_arrow_split_bs/default_60_iso_arrow_split_bs/keymap.c b/layouts/default/60_iso_arrow_split_bs/default_60_iso_arrow_split_bs/keymap.c
new file mode 100644
index 00000000000..651c97366c2
--- /dev/null
+++ b/layouts/default/60_iso_arrow_split_bs/default_60_iso_arrow_split_bs/keymap.c
@@ -0,0 +1,27 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later/
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+ * │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ + │Bsp│Del│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬──┴┬───┤
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ Shift│ ↑ │ / │
+ * ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬───┼───┼───┤
+ * │Ctrl│GUI │Alt │ │Alt│GUI│ ← │ ↓ │ → │
+ * └────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+ */
+ [0] = LAYOUT_60_iso_arrow_split_bs(
+ QK_GESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_DEL,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT, KC_UP, KC_SLSH,
+ KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/60_iso_arrow_split_bs/info.json b/layouts/default/60_iso_arrow_split_bs/info.json
new file mode 100644
index 00000000000..5a7b78e40d5
--- /dev/null
+++ b/layouts/default/60_iso_arrow_split_bs/info.json
@@ -0,0 +1,80 @@
+{
+ "keyboard_name": "60% ISO Arrow Layout with Split Backspace",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_60_iso_arrow_split_bs": {
+ "layout": [
+ {"x": 0, "y": 0},
+ {"x": 1, "y": 0},
+ {"x": 2, "y": 0},
+ {"x": 3, "y": 0},
+ {"x": 4, "y": 0},
+ {"x": 5, "y": 0},
+ {"x": 6, "y": 0},
+ {"x": 7, "y": 0},
+ {"x": 8, "y": 0},
+ {"x": 9, "y": 0},
+ {"x": 10, "y": 0},
+ {"x": 11, "y": 0},
+ {"x": 12, "y": 0},
+ {"x": 13, "y": 0},
+ {"x": 14, "y": 0},
+
+ {"x": 0, "y": 1, "w": 1.5},
+ {"x": 1.5, "y": 1},
+ {"x": 2.5, "y": 1},
+ {"x": 3.5, "y": 1},
+ {"x": 4.5, "y": 1},
+ {"x": 5.5, "y": 1},
+ {"x": 6.5, "y": 1},
+ {"x": 7.5, "y": 1},
+ {"x": 8.5, "y": 1},
+ {"x": 9.5, "y": 1},
+ {"x": 10.5, "y": 1},
+ {"x": 11.5, "y": 1},
+ {"x": 12.5, "y": 1},
+
+ {"x": 0, "y": 2, "w": 1.75},
+ {"x": 1.75, "y": 2},
+ {"x": 2.75, "y": 2},
+ {"x": 3.75, "y": 2},
+ {"x": 4.75, "y": 2},
+ {"x": 5.75, "y": 2},
+ {"x": 6.75, "y": 2},
+ {"x": 7.75, "y": 2},
+ {"x": 8.75, "y": 2},
+ {"x": 9.75, "y": 2},
+ {"x": 10.75, "y": 2},
+ {"x": 11.75, "y": 2},
+ {"x": 12.75, "y": 2},
+ {"x": 13.75, "y": 1, "w": 1.25, "h": 2},
+
+ {"x": 0, "y": 3, "w": 1.25},
+ {"x": 1.25, "y": 3},
+ {"x": 2.25, "y": 3},
+ {"x": 3.25, "y": 3},
+ {"x": 4.25, "y": 3},
+ {"x": 5.25, "y": 3},
+ {"x": 6.25, "y": 3},
+ {"x": 7.25, "y": 3},
+ {"x": 8.25, "y": 3},
+ {"x": 9.25, "y": 3},
+ {"x": 10.25, "y": 3},
+ {"x": 11.25, "y": 3, "w": 1.75},
+ {"x": 13, "y": 3},
+ {"x": 14, "y": 3},
+
+ {"x": 0, "y": 4, "w": 1.25},
+ {"x": 1.25, "y": 4, "w": 1.25},
+ {"x": 2.5, "y": 4, "w": 1.25},
+ {"x": 3.75, "y": 4, "w": 6.25},
+ {"x": 10, "y": 4},
+ {"x": 11, "y": 4},
+ {"x": 12, "y": 4},
+ {"x": 13, "y": 4},
+ {"x": 14, "y": 4}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/60_iso_arrow_split_bs/layout.json b/layouts/default/60_iso_arrow_split_bs/layout.json
new file mode 100644
index 00000000000..bf494ab25f1
--- /dev/null
+++ b/layouts/default/60_iso_arrow_split_bs/layout.json
@@ -0,0 +1,5 @@
+[{a:7},"","","","","","","","","","","","","","",""],
+[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},""],
+[{w:1.75},"","","","","","","","","","","","",""],
+[{w:1.25},"","","","","","","","","","","",{w:1.75},"","",""],
+[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:6.25},"","","","","",""]
diff --git a/layouts/default/60_iso_arrow_split_bs/readme.md b/layouts/default/60_iso_arrow_split_bs/readme.md
new file mode 100644
index 00000000000..8f47644fe23
--- /dev/null
+++ b/layouts/default/60_iso_arrow_split_bs/readme.md
@@ -0,0 +1,3 @@
+# 60_iso_arrow_split_bs
+
+ LAYOUT_60_iso_arrow_split_bs
diff --git a/layouts/default/60_jis/info.json b/layouts/default/60_jis/info.json
index 56972148bda..039ced42f4a 100644
--- a/layouts/default/60_jis/info.json
+++ b/layouts/default/60_jis/info.json
@@ -34,7 +34,6 @@
{"x": 10.5, "y": 1},
{"x": 11.5, "y": 1},
{"x": 12.5, "y": 1},
- {"x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"x": 0, "y": 2, "w": 1.75},
{"x": 1.75, "y": 2},
@@ -49,6 +48,7 @@
{"x": 10.75, "y": 2},
{"x": 11.75, "y": 2},
{"x": 12.75, "y": 2},
+ {"x": 13.75, "y": 1, "w": 1.25, "h": 2},
{"x": 0, "y": 3, "w": 2.25},
{"x": 2.25, "y": 3},
diff --git a/layouts/default/readme.md b/layouts/default/readme.md
index 892dbf1e034..2460f64701f 100644
--- a/layouts/default/readme.md
+++ b/layouts/default/readme.md
@@ -49,6 +49,21 @@ LAYOUT_60_ansi_arrow
└────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
```
+```
+LAYOUT_60_ansi_arrow_split_bs
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┬───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │
+└────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+```
+
```
LAYOUT_60_ansi_arrow_split_bs_7u_spc
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
@@ -154,6 +169,36 @@ LAYOUT_60_iso
└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
```
+```
+LAYOUT_60_iso_arrow
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬──┴┬───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │
+└────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+```
+
+```
+LAYOUT_60_iso_arrow_split_bs
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬──┴┬───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴──┬┴──┬───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │
+└────┴────┴────┴────────────────────────┴───┴───┴───┴───┴───┘
+```
+
```
LAYOUT_60_iso_split_bs_rshift
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
@@ -641,6 +686,42 @@ LAYOUT_tkl_ansi_tsangan_split_bs_rshift
└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘ └───┴───┴───┘
```
+```
+LAYOUT_tkl_ansi_wkl
+┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+└───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─────┤ ┌───┼───┼───┐
+│ │ │ │ │ │ │ │ │ │ │ │
+└─────┘ └─────┴───────────────────────────┴─────┘ └─────┘ └───┴───┴───┘
+```
+
+```
+LAYOUT_tkl_ansi_wkl_split_bs_rshift
+┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+└───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤ ┌───┼───┼───┐
+│ │ │ │ │ │ │ │ │ │ │ │
+└─────┘ └─────┴───────────────────────────┴─────┘ └─────┘ └───┴───┴───┘
+```
+
```
LAYOUT_tkl_iso
┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
@@ -713,6 +794,42 @@ LAYOUT_tkl_iso_tsangan_split_bs_rshift
└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘ └───┴───┴───┘
```
+```
+LAYOUT_tkl_iso_wkl
+┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+└───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ └───┴───┴───┘
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ ┌───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─────┤ ┌───┼───┼───┐
+│ │ │ │ │ │ │ │ │ │ │ │
+└─────┘ └─────┴───────────────────────────┴─────┘ └─────┘ └───┴───┴───┘
+```
+
+```
+LAYOUT_tkl_iso_wkl_split_bs_rshift
+┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+└───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ └───┴───┴───┘
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤ ┌───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤ ┌───┼───┼───┐
+│ │ │ │ │ │ │ │ │ │ │ │
+└─────┘ └─────┴───────────────────────────┴─────┘ └─────┘ └───┴───┴───┘
+```
+
```
LAYOUT_tkl_jis
┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
@@ -787,20 +904,56 @@ LAYOUT_tkl_f13_ansi_tsangan
```
LAYOUT_tkl_f13_ansi_tsangan_split_bs_rshift
-┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
-│ ││ │ │ │ ││ │ │ │ ││ │ │ │ ││ ││ │ │ │
-└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
-┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐
-│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
-├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤
-│ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
-├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤└───┴───┴───┘
+┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐
+│ ││ │ │ │ ││ │ │ │ ││ │ │ │ ││ │ │ │ │ │
+└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘
│ │ │ │ │ │ │ │ │ │ │ │ │ │
-├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐
-│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
-├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤┌───┼───┼───┐
-│ │ │ │ │ │ │ ││ │ │ │
-└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘└───┴───┴───┘
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤ ┌───┼───┼───┐
+│ │ │ │ │ │ │ │ │ │ │ │
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘ └───┴───┴───┘
+```
+
+```
+LAYOUT_tkl_f13_ansi_wkl
+┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐
+│ ││ │ │ │ ││ │ │ │ ││ │ │ │ ││ │ │ │ │ │
+└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─────┤ ┌───┼───┼───┐
+│ │ │ │ │ │ │ │ │ │ │ │
+└─────┘ └─────┴───────────────────────────┴─────┘ └─────┘ └───┴───┴───┘
+```
+
+```
+LAYOUT_tkl_f13_ansi_wkl_split_bs_rshift
+┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐
+│ ││ │ │ │ ││ │ │ │ ││ │ │ │ ││ │ │ │ │ │
+└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘
+│ │ │ │ │ │ │ │ │ │ │ │ │ │
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤ ┌───┼───┼───┐
+│ │ │ │ │ │ │ │ │ │ │ │
+└─────┘ └─────┴───────────────────────────┴─────┘ └─────┘ └───┴───┴───┘
```
```
@@ -823,20 +976,20 @@ LAYOUT_tkl_f13_iso
```
LAYOUT_tkl_f13_iso_split_bs_rshift
-┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
-│ ││ │ │ │ ││ │ │ │ ││ │ │ │ ││ ││ │ │ │
-└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
-┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐
-│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
-├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤
-│ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
-├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │└───┴───┴───┘
+┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐
+│ ││ │ │ │ ││ │ │ │ ││ │ │ │ ││ │ │ │ │ │
+└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ └───┴───┴───┘
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
-├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤ ┌───┐
-│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
-├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤┌───┼───┼───┐
-│ │ │ │ │ │ │ │ ││ │ │ │
-└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘└───┴───┴───┘
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤ ┌───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬┴───┤ ┌───┼───┼───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │
+└────┴────┴────┴────────────────────────┴────┴────┴────┴────┘ └───┴───┴───┘
```
```
@@ -859,39 +1012,74 @@ LAYOUT_tkl_f13_iso_tsangan
```
LAYOUT_tkl_f13_iso_tsangan_split_bs_rshift
-┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
-│ ││ │ │ │ ││ │ │ │ ││ │ │ │ ││ ││ │ │ │
-└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
-┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐
-│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
-├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤
-│ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
-├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │└───┴───┴───┘
+┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐
+│ ││ │ │ │ ││ │ │ │ ││ │ │ │ ││ │ │ │ │ │
+└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ └───┴───┴───┘
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
-├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤ ┌───┐
-│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
-├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤┌───┼───┼───┐
-│ │ │ │ │ │ │ ││ │ │ │
-└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘└───┴───┴───┘
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤ ┌───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤ ┌───┼───┼───┐
+│ │ │ │ │ │ │ │ │ │ │ │
+└─────┴───┴─────┴───────────────────────────┴─────┴───┴─────┘ └───┴───┴───┘
+```
+
+```
+LAYOUT_tkl_f13_iso_wkl
+┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐
+│ ││ │ │ │ ││ │ │ │ ││ │ │ │ ││ │ │ │ │ │
+└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ └───┴───┴───┘
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ ┌───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─────┤ ┌───┼───┼───┐
+│ │ │ │ │ │ │ │ │ │ │ │
+└─────┘ └─────┴───────────────────────────┴─────┘ └─────┘ └───┴───┴───┘
+```
+
+```
+LAYOUT_tkl_f13_iso_wkl_split_bs_rshift
+┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐
+│ ││ │ │ │ ││ │ │ │ ││ │ │ │ ││ │ │ │ │ │
+└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ └───┴───┴───┘
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤ ┌───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤ ┌───┼───┼───┐
+│ │ │ │ │ │ │ │ │ │ │ │
+└─────┘ └─────┴───────────────────────────┴─────┘ └─────┘ └───┴───┴───┘
```
```
LAYOUT_tkl_f13_jis
-┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐┌───┬───┬───┐
-│ ││ │ │ │ ││ │ │ │ ││ │ │ │ ││ ││ │ │ │
-└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘└───┴───┴───┘
-┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐┌───┬───┬───┐
-│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
-├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤├───┼───┼───┤
-│ │ │ │ │ │ │ │ │ │ │ │ │ │ ││ │ │ │
-├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │└───┴───┴───┘
+┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐
+│ ││ │ │ │ ││ │ │ │ ││ │ │ │ ││ │ │ │ │ │
+└───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘
+┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │ └───┴───┴───┘
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
-├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐
-│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
-├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤┌───┼───┼───┐
-│ │ │ │ │ │ │ │ │ │ ││ │ │ │
-└────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘└───┴───┴───┘
-
+├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤ ┌───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+├────┬───┴┬──┴─┬─┴──┬┴───┴───┴───┴─┬─┴──┬┴───┼───┴┬──┴─┬────┤ ┌───┼───┼───┐
+│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
+└────┴────┴────┴────┴──────────────┴────┴────┴────┴────┴────┘ └───┴───┴───┘
```
```
diff --git a/layouts/default/tkl_ansi_wkl/default_tkl_ansi_wkl/keymap.c b/layouts/default/tkl_ansi_wkl/default_tkl_ansi_wkl/keymap.c
new file mode 100644
index 00000000000..3d8cef64fc2
--- /dev/null
+++ b/layouts/default/tkl_ansi_wkl/default_tkl_ansi_wkl/keymap.c
@@ -0,0 +1,32 @@
+// Copyright 2022 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+ * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│
+ * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │
+ * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─────┤ ┌───┼───┼───┐
+ * │Ctrl │ │Alt │ │ Alt│ │ Ctrl│ │ ← │ ↓ │ → │
+ * └─────┘ └─────┴───────────────────────────┴─────┘ └─────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT_tkl_ansi_wkl(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/tkl_ansi_wkl/info.json b/layouts/default/tkl_ansi_wkl/info.json
new file mode 100644
index 00000000000..eb08eacd370
--- /dev/null
+++ b/layouts/default/tkl_ansi_wkl/info.json
@@ -0,0 +1,105 @@
+{
+ "keyboard_name": "Tenkeyless ANSI Windows keyless layout",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_tkl_ansi_wkl": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6.5, "y":0},
+ {"x":7.5, "y":0},
+ {"x":8.5, "y":0},
+ {"x":9.5, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0},
+ {"x":14, "y":0},
+
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+ {"x":17.25, "y":0},
+
+ {"x":0, "y":1.25},
+ {"x":1, "y":1.25},
+ {"x":2, "y":1.25},
+ {"x":3, "y":1.25},
+ {"x":4, "y":1.25},
+ {"x":5, "y":1.25},
+ {"x":6, "y":1.25},
+ {"x":7, "y":1.25},
+ {"x":8, "y":1.25},
+ {"x":9, "y":1.25},
+ {"x":10, "y":1.25},
+ {"x":11, "y":1.25},
+ {"x":12, "y":1.25},
+ {"x":13, "y":1.25, "w":2},
+
+ {"x":15.25, "y":1.25},
+ {"x":16.25, "y":1.25},
+ {"x":17.25, "y":1.25},
+
+ {"x":0, "y":2.25, "w":1.5},
+ {"x":1.5, "y":2.25},
+ {"x":2.5, "y":2.25},
+ {"x":3.5, "y":2.25},
+ {"x":4.5, "y":2.25},
+ {"x":5.5, "y":2.25},
+ {"x":6.5, "y":2.25},
+ {"x":7.5, "y":2.25},
+ {"x":8.5, "y":2.25},
+ {"x":9.5, "y":2.25},
+ {"x":10.5, "y":2.25},
+ {"x":11.5, "y":2.25},
+ {"x":12.5, "y":2.25},
+ {"x":13.5, "y":2.25, "w":1.5},
+
+ {"x":15.25, "y":2.25},
+ {"x":16.25, "y":2.25},
+ {"x":17.25, "y":2.25},
+
+ {"x":0, "y":3.25, "w":1.75},
+ {"x":1.75, "y":3.25},
+ {"x":2.75, "y":3.25},
+ {"x":3.75, "y":3.25},
+ {"x":4.75, "y":3.25},
+ {"x":5.75, "y":3.25},
+ {"x":6.75, "y":3.25},
+ {"x":7.75, "y":3.25},
+ {"x":8.75, "y":3.25},
+ {"x":9.75, "y":3.25},
+ {"x":10.75, "y":3.25},
+ {"x":11.75, "y":3.25},
+ {"x":12.75, "y":3.25, "w":2.25},
+
+ {"x":0, "y":4.25, "w":2.25},
+ {"x":2.25, "y":4.25},
+ {"x":3.25, "y":4.25},
+ {"x":4.25, "y":4.25},
+ {"x":5.25, "y":4.25},
+ {"x":6.25, "y":4.25},
+ {"x":7.25, "y":4.25},
+ {"x":8.25, "y":4.25},
+ {"x":9.25, "y":4.25},
+ {"x":10.25, "y":4.25},
+ {"x":11.25, "y":4.25},
+ {"x":12.25, "y":4.25, "w":2.75},
+
+ {"x":16.25, "y":4.25},
+
+ {"x":0, "y":5.25, "w":1.5},
+ {"x":2.5, "y":5.25, "w":1.5},
+ {"x":4, "y":5.25, "w":7},
+ {"x":11, "y":5.25, "w":1.5},
+ {"x":13.5, "y":5.25, "w":1.5},
+
+ {"x":15.25, "y":5.25},
+ {"x":16.25, "y":5.25},
+ {"x":17.25, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/tkl_ansi_wkl/layout.json b/layouts/default/tkl_ansi_wkl/layout.json
new file mode 100644
index 00000000000..b6d3505b159
--- /dev/null
+++ b/layouts/default/tkl_ansi_wkl/layout.json
@@ -0,0 +1,6 @@
+[{a:7},"",{x:1},"","","","",{x:0.5},"","","","",{x:0.5},"","","","",{x:0.25},"","",""],
+[{y:0.25},"","","","","","","","","","","","","",{w:2},"",{x:0.25},"","",""],
+[{w:1.5},"","","","","","","","","","","","","",{w:1.5},"",{x:0.25},"","",""],
+[{w:1.75},"","","","","","","","","","","","",{w:2.25},""],
+[{w:2.25},"","","","","","","","","","","",{w:2.75},"",{x:1.25},""],
+[{w:1.5},"",{x:1,w:1.5},"",{w:7},"",{w:1.5},"",{x:1,w:1.5},"",{x:0.25},"","",""]
diff --git a/layouts/default/tkl_ansi_wkl/readme.md b/layouts/default/tkl_ansi_wkl/readme.md
new file mode 100644
index 00000000000..6541a0f23ab
--- /dev/null
+++ b/layouts/default/tkl_ansi_wkl/readme.md
@@ -0,0 +1,3 @@
+# tkl_ansi_wkl
+
+ LAYOUT_tkl_ansi_wkl
diff --git a/layouts/default/tkl_ansi_wkl_split_bs_rshift/default_tkl_ansi_wkl_split_bs_rshift/keymap.c b/layouts/default/tkl_ansi_wkl_split_bs_rshift/default_tkl_ansi_wkl_split_bs_rshift/keymap.c
new file mode 100644
index 00000000000..a5b27ee42bb
--- /dev/null
+++ b/layouts/default/tkl_ansi_wkl_split_bs_rshift/default_tkl_ansi_wkl_split_bs_rshift/keymap.c
@@ -0,0 +1,32 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+ * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│
+ * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│Bsp│ │Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│Sft│ │ ↑ │
+ * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤ ┌───┼───┼───┐
+ * │Ctrl │ │Alt │ │ Alt│ │ Ctrl│ │ ← │ ↓ │ → │
+ * └─────┘ └─────┴───────────────────────────┴─────┘ └─────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT_tkl_ansi_wkl_split_bs_rshift(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/tkl_ansi_wkl_split_bs_rshift/info.json b/layouts/default/tkl_ansi_wkl_split_bs_rshift/info.json
new file mode 100644
index 00000000000..62b48e3bc84
--- /dev/null
+++ b/layouts/default/tkl_ansi_wkl_split_bs_rshift/info.json
@@ -0,0 +1,107 @@
+{
+ "keyboard_name": "Tenkeyless ANSI Windows keyless layout with split Backspace and split Right Shift",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_tkl_ansi_wkl_split_bs_rshift": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6.5, "y":0},
+ {"x":7.5, "y":0},
+ {"x":8.5, "y":0},
+ {"x":9.5, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0},
+ {"x":14, "y":0},
+
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+ {"x":17.25, "y":0},
+
+ {"x":0, "y":1.25},
+ {"x":1, "y":1.25},
+ {"x":2, "y":1.25},
+ {"x":3, "y":1.25},
+ {"x":4, "y":1.25},
+ {"x":5, "y":1.25},
+ {"x":6, "y":1.25},
+ {"x":7, "y":1.25},
+ {"x":8, "y":1.25},
+ {"x":9, "y":1.25},
+ {"x":10, "y":1.25},
+ {"x":11, "y":1.25},
+ {"x":12, "y":1.25},
+ {"x":13, "y":1.25},
+ {"x":14, "y":1.25},
+
+ {"x":15.25, "y":1.25},
+ {"x":16.25, "y":1.25},
+ {"x":17.25, "y":1.25},
+
+ {"x":0, "y":2.25, "w":1.5},
+ {"x":1.5, "y":2.25},
+ {"x":2.5, "y":2.25},
+ {"x":3.5, "y":2.25},
+ {"x":4.5, "y":2.25},
+ {"x":5.5, "y":2.25},
+ {"x":6.5, "y":2.25},
+ {"x":7.5, "y":2.25},
+ {"x":8.5, "y":2.25},
+ {"x":9.5, "y":2.25},
+ {"x":10.5, "y":2.25},
+ {"x":11.5, "y":2.25},
+ {"x":12.5, "y":2.25},
+ {"x":13.5, "y":2.25, "w":1.5},
+
+ {"x":15.25, "y":2.25},
+ {"x":16.25, "y":2.25},
+ {"x":17.25, "y":2.25},
+
+ {"x":0, "y":3.25, "w":1.75},
+ {"x":1.75, "y":3.25},
+ {"x":2.75, "y":3.25},
+ {"x":3.75, "y":3.25},
+ {"x":4.75, "y":3.25},
+ {"x":5.75, "y":3.25},
+ {"x":6.75, "y":3.25},
+ {"x":7.75, "y":3.25},
+ {"x":8.75, "y":3.25},
+ {"x":9.75, "y":3.25},
+ {"x":10.75, "y":3.25},
+ {"x":11.75, "y":3.25},
+ {"x":12.75, "y":3.25, "w":2.25},
+
+ {"x":0, "y":4.25, "w":2.25},
+ {"x":2.25, "y":4.25},
+ {"x":3.25, "y":4.25},
+ {"x":4.25, "y":4.25},
+ {"x":5.25, "y":4.25},
+ {"x":6.25, "y":4.25},
+ {"x":7.25, "y":4.25},
+ {"x":8.25, "y":4.25},
+ {"x":9.25, "y":4.25},
+ {"x":10.25, "y":4.25},
+ {"x":11.25, "y":4.25},
+ {"x":12.25, "y":4.25, "w":1.75},
+ {"x":14, "y":4.25},
+
+ {"x":16.25, "y":4.25},
+
+ {"x":0, "y":5.25, "w":1.5},
+ {"x":2.5, "y":5.25, "w":1.5},
+ {"x":4, "y":5.25, "w":7},
+ {"x":11, "y":5.25, "w":1.5},
+ {"x":13.5, "y":5.25, "w":1.5},
+
+ {"x":15.25, "y":5.25},
+ {"x":16.25, "y":5.25},
+ {"x":17.25, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/tkl_ansi_wkl_split_bs_rshift/layout.json b/layouts/default/tkl_ansi_wkl_split_bs_rshift/layout.json
new file mode 100644
index 00000000000..0fba13348bb
--- /dev/null
+++ b/layouts/default/tkl_ansi_wkl_split_bs_rshift/layout.json
@@ -0,0 +1,6 @@
+[{a:7},"",{x:1},"","","","",{x:0.5},"","","","",{x:0.5},"","","","",{x:0.25},"","",""],
+[{y:0.25},"","","","","","","","","","","","","","","",{x:0.25},"","",""],
+[{w:1.5},"","","","","","","","","","","","","",{w:1.5},"",{x:0.25},"","",""],
+[{w:1.75},"","","","","","","","","","","","",{w:2.25},""],
+[{w:2.25},"","","","","","","","","","","",{w:1.75},"","",{x:1.25},""],
+[{w:1.5},"",{x:1,w:1.5},"",{w:7},"",{w:1.5},"",{x:1,w:1.5},"",{x:0.25},"","",""]
diff --git a/layouts/default/tkl_ansi_wkl_split_bs_rshift/readme.md b/layouts/default/tkl_ansi_wkl_split_bs_rshift/readme.md
new file mode 100644
index 00000000000..35235603728
--- /dev/null
+++ b/layouts/default/tkl_ansi_wkl_split_bs_rshift/readme.md
@@ -0,0 +1,3 @@
+# tkl_ansi_wkl_split_bs_rshift
+
+ LAYOUT_tkl_ansi_wkl_split_bs_rshift
diff --git a/layouts/default/tkl_f13_ansi_wkl/default_tkl_f13_ansi_wkl/keymap.c b/layouts/default/tkl_f13_ansi_wkl/default_tkl_f13_ansi_wkl/keymap.c
new file mode 100644
index 00000000000..709988ac76d
--- /dev/null
+++ b/layouts/default/tkl_f13_ansi_wkl/default_tkl_f13_ansi_wkl/keymap.c
@@ -0,0 +1,32 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐
+ * │Esc││F1 │F2 │F3 │F4 ││F5 │F6 │F7 │F8 ││F9 │F10│F11│F12││F13│ │PSc│Scr│Pse│
+ * └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤ ┌───┐
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │
+ * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─────┤ ┌───┼───┼───┐
+ * │Ctrl │ │Alt │ │ Alt│ │ Ctrl│ │ ← │ ↓ │ → │
+ * └─────┘ └─────┴───────────────────────────┴─────┘ └─────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT_tkl_f13_ansi_wkl(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/tkl_f13_ansi_wkl/info.json b/layouts/default/tkl_f13_ansi_wkl/info.json
new file mode 100644
index 00000000000..ca03585d00a
--- /dev/null
+++ b/layouts/default/tkl_f13_ansi_wkl/info.json
@@ -0,0 +1,106 @@
+{
+ "keyboard_name": "Tenkeyless ANSI Windows keyless layout with F13 key",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_tkl_f13_ansi_wkl": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1.25, "y":0},
+ {"x":2.25, "y":0},
+ {"x":3.25, "y":0},
+ {"x":4.25, "y":0},
+ {"x":5.5, "y":0},
+ {"x":6.5, "y":0},
+ {"x":7.5, "y":0},
+ {"x":8.5, "y":0},
+ {"x":9.75, "y":0},
+ {"x":10.75, "y":0},
+ {"x":11.75, "y":0},
+ {"x":12.75, "y":0},
+ {"x":14, "y":0},
+
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+ {"x":17.25, "y":0},
+
+ {"x":0, "y":1.25},
+ {"x":1, "y":1.25},
+ {"x":2, "y":1.25},
+ {"x":3, "y":1.25},
+ {"x":4, "y":1.25},
+ {"x":5, "y":1.25},
+ {"x":6, "y":1.25},
+ {"x":7, "y":1.25},
+ {"x":8, "y":1.25},
+ {"x":9, "y":1.25},
+ {"x":10, "y":1.25},
+ {"x":11, "y":1.25},
+ {"x":12, "y":1.25},
+ {"x":13, "y":1.25, "w":2},
+
+ {"x":15.25, "y":1.25},
+ {"x":16.25, "y":1.25},
+ {"x":17.25, "y":1.25},
+
+ {"x":0, "y":2.25, "w":1.5},
+ {"x":1.5, "y":2.25},
+ {"x":2.5, "y":2.25},
+ {"x":3.5, "y":2.25},
+ {"x":4.5, "y":2.25},
+ {"x":5.5, "y":2.25},
+ {"x":6.5, "y":2.25},
+ {"x":7.5, "y":2.25},
+ {"x":8.5, "y":2.25},
+ {"x":9.5, "y":2.25},
+ {"x":10.5, "y":2.25},
+ {"x":11.5, "y":2.25},
+ {"x":12.5, "y":2.25},
+ {"x":13.5, "y":2.25, "w":1.5},
+
+ {"x":15.25, "y":2.25},
+ {"x":16.25, "y":2.25},
+ {"x":17.25, "y":2.25},
+
+ {"x":0, "y":3.25, "w":1.75},
+ {"x":1.75, "y":3.25},
+ {"x":2.75, "y":3.25},
+ {"x":3.75, "y":3.25},
+ {"x":4.75, "y":3.25},
+ {"x":5.75, "y":3.25},
+ {"x":6.75, "y":3.25},
+ {"x":7.75, "y":3.25},
+ {"x":8.75, "y":3.25},
+ {"x":9.75, "y":3.25},
+ {"x":10.75, "y":3.25},
+ {"x":11.75, "y":3.25},
+ {"x":12.75, "y":3.25, "w":2.25},
+
+ {"x":0, "y":4.25, "w":2.25},
+ {"x":2.25, "y":4.25},
+ {"x":3.25, "y":4.25},
+ {"x":4.25, "y":4.25},
+ {"x":5.25, "y":4.25},
+ {"x":6.25, "y":4.25},
+ {"x":7.25, "y":4.25},
+ {"x":8.25, "y":4.25},
+ {"x":9.25, "y":4.25},
+ {"x":10.25, "y":4.25},
+ {"x":11.25, "y":4.25},
+ {"x":12.25, "y":4.25, "w":2.75},
+
+ {"x":16.25, "y":4.25},
+
+ {"x":0, "y":5.25, "w":1.5},
+ {"x":2.5, "y":5.25, "w":1.5},
+ {"x":4, "y":5.25, "w":7},
+ {"x":11, "y":5.25, "w":1.5},
+ {"x":13.5, "y":5.25, "w":1.5},
+
+ {"x":15.25, "y":5.25},
+ {"x":16.25, "y":5.25},
+ {"x":17.25, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/tkl_f13_ansi_wkl/layout.json b/layouts/default/tkl_f13_ansi_wkl/layout.json
new file mode 100644
index 00000000000..850ffc9bdc9
--- /dev/null
+++ b/layouts/default/tkl_f13_ansi_wkl/layout.json
@@ -0,0 +1,6 @@
+[{a:7},"",{x:0.25},"","","","",{x:0.25},"","","","",{x:0.25},"","","","",{x:0.25},"",{x:0.25},"","",""],
+[{y:0.25},"","","","","","","","","","","","","",{w:2},"",{x:0.25},"","",""],
+[{w:1.5},"","","","","","","","","","","","","",{w:1.5},"",{x:0.25},"","",""],
+[{w:1.75},"","","","","","","","","","","","",{w:2.25},""],
+[{w:2.25},"","","","","","","","","","","",{w:2.75},"",{x:1.25},""],
+[{w:1.5},"",{x:1,w:1.5},"",{w:7},"",{w:1.5},"",{x:1,w:1.5},"",{x:0.25},"","",""]
diff --git a/layouts/default/tkl_f13_ansi_wkl/readme.md b/layouts/default/tkl_f13_ansi_wkl/readme.md
new file mode 100644
index 00000000000..607692c2392
--- /dev/null
+++ b/layouts/default/tkl_f13_ansi_wkl/readme.md
@@ -0,0 +1,3 @@
+# tkl_f13_ansi_wkl
+
+ LAYOUT_tkl_f13_ansi_wkl
diff --git a/layouts/default/tkl_f13_ansi_wkl_split_bs_rshift/default_tkl_f13_ansi_wkl_split_bs_rshift/keymap.c b/layouts/default/tkl_f13_ansi_wkl_split_bs_rshift/default_tkl_f13_ansi_wkl_split_bs_rshift/keymap.c
new file mode 100644
index 00000000000..6089b7681f9
--- /dev/null
+++ b/layouts/default/tkl_f13_ansi_wkl_split_bs_rshift/default_tkl_f13_ansi_wkl_split_bs_rshift/keymap.c
@@ -0,0 +1,32 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐
+ * │Esc││F1 │F2 │F3 │F4 ││F5 │F6 │F7 │F8 ││F9 │F10│F11│F12││F13│ │PSc│Scr│Pse│
+ * └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│Bsp│ │Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │ │Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤ └───┴───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │
+ * ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┤ ┌───┐
+ * │ Shift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │Shift │Sft│ │ ↑ │
+ * ├─────┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤ ┌───┼───┼───┐
+ * │Ctrl │ │Alt │ │ Alt│ │ Ctrl│ │ ← │ ↓ │ → │
+ * └─────┘ └─────┴───────────────────────────┴─────┘ └─────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT_tkl_f13_ansi_wkl_split_bs_rshift(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
+ KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/tkl_f13_ansi_wkl_split_bs_rshift/info.json b/layouts/default/tkl_f13_ansi_wkl_split_bs_rshift/info.json
new file mode 100644
index 00000000000..755e7a80d78
--- /dev/null
+++ b/layouts/default/tkl_f13_ansi_wkl_split_bs_rshift/info.json
@@ -0,0 +1,108 @@
+{
+ "keyboard_name": "Tenkeyless ANSI Windows keyless layout with F13 key, split Backspace, and split Right Shift",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_tkl_f13_ansi_wkl_split_bs_rshift": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1.25, "y":0},
+ {"x":2.25, "y":0},
+ {"x":3.25, "y":0},
+ {"x":4.25, "y":0},
+ {"x":5.5, "y":0},
+ {"x":6.5, "y":0},
+ {"x":7.5, "y":0},
+ {"x":8.5, "y":0},
+ {"x":9.75, "y":0},
+ {"x":10.75, "y":0},
+ {"x":11.75, "y":0},
+ {"x":12.75, "y":0},
+ {"x":14, "y":0},
+
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+ {"x":17.25, "y":0},
+
+ {"x":0, "y":1.25},
+ {"x":1, "y":1.25},
+ {"x":2, "y":1.25},
+ {"x":3, "y":1.25},
+ {"x":4, "y":1.25},
+ {"x":5, "y":1.25},
+ {"x":6, "y":1.25},
+ {"x":7, "y":1.25},
+ {"x":8, "y":1.25},
+ {"x":9, "y":1.25},
+ {"x":10, "y":1.25},
+ {"x":11, "y":1.25},
+ {"x":12, "y":1.25},
+ {"x":13, "y":1.25},
+ {"x":14, "y":1.25},
+
+ {"x":15.25, "y":1.25},
+ {"x":16.25, "y":1.25},
+ {"x":17.25, "y":1.25},
+
+ {"x":0, "y":2.25, "w":1.5},
+ {"x":1.5, "y":2.25},
+ {"x":2.5, "y":2.25},
+ {"x":3.5, "y":2.25},
+ {"x":4.5, "y":2.25},
+ {"x":5.5, "y":2.25},
+ {"x":6.5, "y":2.25},
+ {"x":7.5, "y":2.25},
+ {"x":8.5, "y":2.25},
+ {"x":9.5, "y":2.25},
+ {"x":10.5, "y":2.25},
+ {"x":11.5, "y":2.25},
+ {"x":12.5, "y":2.25},
+ {"x":13.5, "y":2.25, "w":1.5},
+
+ {"x":15.25, "y":2.25},
+ {"x":16.25, "y":2.25},
+ {"x":17.25, "y":2.25},
+
+ {"x":0, "y":3.25, "w":1.75},
+ {"x":1.75, "y":3.25},
+ {"x":2.75, "y":3.25},
+ {"x":3.75, "y":3.25},
+ {"x":4.75, "y":3.25},
+ {"x":5.75, "y":3.25},
+ {"x":6.75, "y":3.25},
+ {"x":7.75, "y":3.25},
+ {"x":8.75, "y":3.25},
+ {"x":9.75, "y":3.25},
+ {"x":10.75, "y":3.25},
+ {"x":11.75, "y":3.25},
+ {"x":12.75, "y":3.25, "w":2.25},
+
+ {"x":0, "y":4.25, "w":2.25},
+ {"x":2.25, "y":4.25},
+ {"x":3.25, "y":4.25},
+ {"x":4.25, "y":4.25},
+ {"x":5.25, "y":4.25},
+ {"x":6.25, "y":4.25},
+ {"x":7.25, "y":4.25},
+ {"x":8.25, "y":4.25},
+ {"x":9.25, "y":4.25},
+ {"x":10.25, "y":4.25},
+ {"x":11.25, "y":4.25},
+ {"x":12.25, "y":4.25, "w":1.75},
+ {"x":14, "y":4.25},
+
+ {"x":16.25, "y":4.25},
+
+ {"x":0, "y":5.25, "w":1.5},
+ {"x":2.5, "y":5.25, "w":1.5},
+ {"x":4, "y":5.25, "w":7},
+ {"x":11, "y":5.25, "w":1.5},
+ {"x":13.5, "y":5.25, "w":1.5},
+
+ {"x":15.25, "y":5.25},
+ {"x":16.25, "y":5.25},
+ {"x":17.25, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/tkl_f13_ansi_wkl_split_bs_rshift/layout.json b/layouts/default/tkl_f13_ansi_wkl_split_bs_rshift/layout.json
new file mode 100644
index 00000000000..6992dff912b
--- /dev/null
+++ b/layouts/default/tkl_f13_ansi_wkl_split_bs_rshift/layout.json
@@ -0,0 +1,6 @@
+[{a:7},"",{x:0.25},"","","","",{x:0.25},"","","","",{x:0.25},"","","","",{x:0.25},"",{x:0.25},"","",""],
+[{y:0.25},"","","","","","","","","","","","","","","",{x:0.25},"","",""],
+[{w:1.5},"","","","","","","","","","","","","",{w:1.5},"",{x:0.25},"","",""],
+[{w:1.75},"","","","","","","","","","","","",{w:2.25},""],
+[{w:2.25},"","","","","","","","","","","",{w:1.75},"","",{x:1.25},""],
+[{w:1.5},"",{x:1,w:1.5},"",{w:7},"",{w:1.5},"",{x:1,w:1.5},"",{x:0.25},"","",""]
diff --git a/layouts/default/tkl_f13_ansi_wkl_split_bs_rshift/readme.md b/layouts/default/tkl_f13_ansi_wkl_split_bs_rshift/readme.md
new file mode 100644
index 00000000000..614c0913f62
--- /dev/null
+++ b/layouts/default/tkl_f13_ansi_wkl_split_bs_rshift/readme.md
@@ -0,0 +1,3 @@
+# tkl_f13_ansi_wkl_split_bs_rshift
+
+ LAYOUT_tkl_f13_ansi_wkl_split_bs_rshift
diff --git a/layouts/default/tkl_f13_iso_wkl/default_tkl_f13_iso_wkl/keymap.c b/layouts/default/tkl_f13_iso_wkl/default_tkl_f13_iso_wkl/keymap.c
new file mode 100644
index 00000000000..5a32e674e8d
--- /dev/null
+++ b/layouts/default/tkl_f13_iso_wkl/default_tkl_f13_iso_wkl/keymap.c
@@ -0,0 +1,32 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐
+ * │Esc││F1 │F2 │F3 │F4 ││F5 │F6 │F7 │F8 ││F9 │F10│F11│F12││F13│ │PSc│Scr│Pse│
+ * └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │ │Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│ └───┴───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ ┌───┐
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │
+ * ├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─────┤ ┌───┼───┼───┐
+ * │Ctrl │ │Alt │ │ Alt│ │ Ctrl│ │ ← │ ↓ │ → │
+ * └─────┘ └─────┴───────────────────────────┴─────┘ └─────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT_tkl_f13_iso_wkl(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/tkl_f13_iso_wkl/info.json b/layouts/default/tkl_f13_iso_wkl/info.json
new file mode 100644
index 00000000000..e597716b5dc
--- /dev/null
+++ b/layouts/default/tkl_f13_iso_wkl/info.json
@@ -0,0 +1,107 @@
+{
+ "keyboard_name": "Tenkeyless ISO Windows keyless layout",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_tkl_f13_iso_wkl": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1.25, "y":0},
+ {"x":2.25, "y":0},
+ {"x":3.25, "y":0},
+ {"x":4.25, "y":0},
+ {"x":5.5, "y":0},
+ {"x":6.5, "y":0},
+ {"x":7.5, "y":0},
+ {"x":8.5, "y":0},
+ {"x":9.75, "y":0},
+ {"x":10.75, "y":0},
+ {"x":11.75, "y":0},
+ {"x":12.75, "y":0},
+ {"x":14, "y":0},
+
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+ {"x":17.25, "y":0},
+
+ {"x":0, "y":1.25},
+ {"x":1, "y":1.25},
+ {"x":2, "y":1.25},
+ {"x":3, "y":1.25},
+ {"x":4, "y":1.25},
+ {"x":5, "y":1.25},
+ {"x":6, "y":1.25},
+ {"x":7, "y":1.25},
+ {"x":8, "y":1.25},
+ {"x":9, "y":1.25},
+ {"x":10, "y":1.25},
+ {"x":11, "y":1.25},
+ {"x":12, "y":1.25},
+ {"x":13, "y":1.25, "w":2},
+
+ {"x":15.25, "y":1.25},
+ {"x":16.25, "y":1.25},
+ {"x":17.25, "y":1.25},
+
+ {"x":0, "y":2.25, "w":1.5},
+ {"x":1.5, "y":2.25},
+ {"x":2.5, "y":2.25},
+ {"x":3.5, "y":2.25},
+ {"x":4.5, "y":2.25},
+ {"x":5.5, "y":2.25},
+ {"x":6.5, "y":2.25},
+ {"x":7.5, "y":2.25},
+ {"x":8.5, "y":2.25},
+ {"x":9.5, "y":2.25},
+ {"x":10.5, "y":2.25},
+ {"x":11.5, "y":2.25},
+ {"x":12.5, "y":2.25},
+
+ {"x":15.25, "y":2.25},
+ {"x":16.25, "y":2.25},
+ {"x":17.25, "y":2.25},
+
+ {"x":0, "y":3.25, "w":1.75},
+ {"x":1.75, "y":3.25},
+ {"x":2.75, "y":3.25},
+ {"x":3.75, "y":3.25},
+ {"x":4.75, "y":3.25},
+ {"x":5.75, "y":3.25},
+ {"x":6.75, "y":3.25},
+ {"x":7.75, "y":3.25},
+ {"x":8.75, "y":3.25},
+ {"x":9.75, "y":3.25},
+ {"x":10.75, "y":3.25},
+ {"x":11.75, "y":3.25},
+ {"x":12.75, "y":3.25},
+ {"x":13.75, "y":2.25, "w":1.25, "h":2},
+
+ {"x":0, "y":4.25, "w":1.25},
+ {"x":1.25, "y":4.25},
+ {"x":2.25, "y":4.25},
+ {"x":3.25, "y":4.25},
+ {"x":4.25, "y":4.25},
+ {"x":5.25, "y":4.25},
+ {"x":6.25, "y":4.25},
+ {"x":7.25, "y":4.25},
+ {"x":8.25, "y":4.25},
+ {"x":9.25, "y":4.25},
+ {"x":10.25, "y":4.25},
+ {"x":11.25, "y":4.25},
+ {"x":12.25, "y":4.25, "w":2.75},
+
+ {"x":16.25, "y":4.25},
+
+ {"x":0, "y":5.25, "w":1.5},
+ {"x":2.5, "y":5.25, "w":1.5},
+ {"x":4, "y":5.25, "w":7},
+ {"x":11, "y":5.25, "w":1.5},
+ {"x":13.5, "y":5.25, "w":1.5},
+
+ {"x":15.25, "y":5.25},
+ {"x":16.25, "y":5.25},
+ {"x":17.25, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/tkl_f13_iso_wkl/layout.json b/layouts/default/tkl_f13_iso_wkl/layout.json
new file mode 100644
index 00000000000..0c6f178b452
--- /dev/null
+++ b/layouts/default/tkl_f13_iso_wkl/layout.json
@@ -0,0 +1,6 @@
+[{a:7},"",{x:0.25},"","","","",{x:0.25},"","","","",{x:0.25},"","","","",{x:0.25},"",{x:0.25},"","",""],
+[{y:0.25},"","","","","","","","","","","","","",{w:2},"",{x:0.25},"","",""],
+[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"",{x:0.25},"","",""],
+[{w:1.75},"","","","","","","","","","","","",""],
+[{w:1.25},"","","","","","","","","","","","",{w:2.75},"",{x:1.25},""],
+[{w:1.5},"",{x:1,w:1.5},"",{w:7},"",{w:1.5},"",{x:1,w:1.5},"",{x:0.25},"","",""]
diff --git a/layouts/default/tkl_f13_iso_wkl/readme.md b/layouts/default/tkl_f13_iso_wkl/readme.md
new file mode 100644
index 00000000000..46c44195923
--- /dev/null
+++ b/layouts/default/tkl_f13_iso_wkl/readme.md
@@ -0,0 +1,3 @@
+# tkl_f13_iso_wkl
+
+ LAYOUT_tkl_f13_iso_wkl
diff --git a/layouts/default/tkl_f13_iso_wkl_split_bs_rshift/default_tkl_f13_iso_wkl_split_bs_rshift/keymap.c b/layouts/default/tkl_f13_iso_wkl_split_bs_rshift/default_tkl_f13_iso_wkl_split_bs_rshift/keymap.c
new file mode 100644
index 00000000000..7642de46e2f
--- /dev/null
+++ b/layouts/default/tkl_f13_iso_wkl_split_bs_rshift/default_tkl_f13_iso_wkl_split_bs_rshift/keymap.c
@@ -0,0 +1,32 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┬───┬───┬───┐┌───┐ ┌───┬───┬───┐
+ * │Esc││F1 │F2 │F3 │F4 ││F5 │F6 │F7 │F8 ││F9 │F10│F11│F12││F13│ │PSc│Scr│Pse│
+ * └───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┴───┴───┴───┘└───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│Bsp│ │Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │ │Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│ └───┴───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤ ┌───┐
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│Sft│ │ ↑ │
+ * ├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤ ┌───┼───┼───┐
+ * │Ctrl │ │Alt │ │ Alt│ │ Ctrl│ │ ← │ ↓ │ → │
+ * └─────┘ └─────┴───────────────────────────┴─────┘ └─────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT_tkl_f13_iso_wkl_split_bs_rshift(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_F13, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/tkl_f13_iso_wkl_split_bs_rshift/info.json b/layouts/default/tkl_f13_iso_wkl_split_bs_rshift/info.json
new file mode 100644
index 00000000000..4ccde283690
--- /dev/null
+++ b/layouts/default/tkl_f13_iso_wkl_split_bs_rshift/info.json
@@ -0,0 +1,109 @@
+{
+ "keyboard_name": "Tenkeyless ISO Windows keyless layout with F13 key, split Backspace, and split Right Shift",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_tkl_f13_iso_wkl_split_bs_rshift": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":1.25, "y":0},
+ {"x":2.25, "y":0},
+ {"x":3.25, "y":0},
+ {"x":4.25, "y":0},
+ {"x":5.5, "y":0},
+ {"x":6.5, "y":0},
+ {"x":7.5, "y":0},
+ {"x":8.5, "y":0},
+ {"x":9.75, "y":0},
+ {"x":10.75, "y":0},
+ {"x":11.75, "y":0},
+ {"x":12.75, "y":0},
+ {"x":14, "y":0},
+
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+ {"x":17.25, "y":0},
+
+ {"x":0, "y":1.25},
+ {"x":1, "y":1.25},
+ {"x":2, "y":1.25},
+ {"x":3, "y":1.25},
+ {"x":4, "y":1.25},
+ {"x":5, "y":1.25},
+ {"x":6, "y":1.25},
+ {"x":7, "y":1.25},
+ {"x":8, "y":1.25},
+ {"x":9, "y":1.25},
+ {"x":10, "y":1.25},
+ {"x":11, "y":1.25},
+ {"x":12, "y":1.25},
+ {"x":13, "y":1.25},
+ {"x":14, "y":1.25},
+
+ {"x":15.25, "y":1.25},
+ {"x":16.25, "y":1.25},
+ {"x":17.25, "y":1.25},
+
+ {"x":0, "y":2.25, "w":1.5},
+ {"x":1.5, "y":2.25},
+ {"x":2.5, "y":2.25},
+ {"x":3.5, "y":2.25},
+ {"x":4.5, "y":2.25},
+ {"x":5.5, "y":2.25},
+ {"x":6.5, "y":2.25},
+ {"x":7.5, "y":2.25},
+ {"x":8.5, "y":2.25},
+ {"x":9.5, "y":2.25},
+ {"x":10.5, "y":2.25},
+ {"x":11.5, "y":2.25},
+ {"x":12.5, "y":2.25},
+
+ {"x":15.25, "y":2.25},
+ {"x":16.25, "y":2.25},
+ {"x":17.25, "y":2.25},
+
+ {"x":0, "y":3.25, "w":1.75},
+ {"x":1.75, "y":3.25},
+ {"x":2.75, "y":3.25},
+ {"x":3.75, "y":3.25},
+ {"x":4.75, "y":3.25},
+ {"x":5.75, "y":3.25},
+ {"x":6.75, "y":3.25},
+ {"x":7.75, "y":3.25},
+ {"x":8.75, "y":3.25},
+ {"x":9.75, "y":3.25},
+ {"x":10.75, "y":3.25},
+ {"x":11.75, "y":3.25},
+ {"x":12.75, "y":3.25},
+ {"x":13.75, "y":2.25, "w":1.25, "h":2},
+
+ {"x":0, "y":4.25, "w":1.25},
+ {"x":1.25, "y":4.25},
+ {"x":2.25, "y":4.25},
+ {"x":3.25, "y":4.25},
+ {"x":4.25, "y":4.25},
+ {"x":5.25, "y":4.25},
+ {"x":6.25, "y":4.25},
+ {"x":7.25, "y":4.25},
+ {"x":8.25, "y":4.25},
+ {"x":9.25, "y":4.25},
+ {"x":10.25, "y":4.25},
+ {"x":11.25, "y":4.25},
+ {"x":12.25, "y":4.25, "w":1.75},
+ {"x":14, "y":4.25},
+
+ {"x":16.25, "y":4.25},
+
+ {"x":0, "y":5.25, "w":1.5},
+ {"x":2.5, "y":5.25, "w":1.5},
+ {"x":4, "y":5.25, "w":7},
+ {"x":11, "y":5.25, "w":1.5},
+ {"x":13.5, "y":5.25, "w":1.5},
+
+ {"x":15.25, "y":5.25},
+ {"x":16.25, "y":5.25},
+ {"x":17.25, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/tkl_f13_iso_wkl_split_bs_rshift/layout.json b/layouts/default/tkl_f13_iso_wkl_split_bs_rshift/layout.json
new file mode 100644
index 00000000000..a07a1307e77
--- /dev/null
+++ b/layouts/default/tkl_f13_iso_wkl_split_bs_rshift/layout.json
@@ -0,0 +1,6 @@
+[{a:7},"",{x:0.25},"","","","",{x:0.25},"","","","",{x:0.25},"","","","",{x:0.25},"",{x:0.25},"","",""],
+[{y:0.25},"","","","","","","","","","","","","","","",{x:0.25},"","",""],
+[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"",{x:0.25},"","",""],
+[{w:1.75},"","","","","","","","","","","","",""],
+[{w:1.25},"","","","","","","","","","","","",{w:1.75},"","",{x:1.25},""],
+[{w:1.5},"",{x:1,w:1.5},"",{w:7},"",{w:1.5},"",{x:1,w:1.5},"",{x:0.25},"","",""]
diff --git a/layouts/default/tkl_f13_iso_wkl_split_bs_rshift/readme.md b/layouts/default/tkl_f13_iso_wkl_split_bs_rshift/readme.md
new file mode 100644
index 00000000000..a9059abfba2
--- /dev/null
+++ b/layouts/default/tkl_f13_iso_wkl_split_bs_rshift/readme.md
@@ -0,0 +1,3 @@
+# tkl_f13_iso_wkl_split_bs_rshift
+
+ LAYOUT_tkl_f13_iso_wkl_split_bs_rshift
diff --git a/layouts/default/tkl_f13_jis/info.json b/layouts/default/tkl_f13_jis/info.json
index 97f5bd3880e..20ff38f6117 100644
--- a/layouts/default/tkl_f13_jis/info.json
+++ b/layouts/default/tkl_f13_jis/info.json
@@ -55,7 +55,6 @@
{"x": 10.5, "y": 2.25},
{"x": 11.5, "y": 2.25},
{"x": 12.5, "y": 2.25},
- {"x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
{"x": 15.25, "y": 2.25},
{"x": 16.25, "y": 2.25},
{"x": 17.25, "y": 2.25},
@@ -73,6 +72,7 @@
{"x": 10.75, "y": 3.25},
{"x": 11.75, "y": 3.25},
{"x": 12.75, "y": 3.25},
+ {"x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
{"x": 0, "y": 4.25, "w": 2.25},
{"x": 2.25, "y": 4.25},
diff --git a/layouts/default/tkl_iso_wkl/default_tkl_iso_wkl/keymap.c b/layouts/default/tkl_iso_wkl/default_tkl_iso_wkl/keymap.c
new file mode 100644
index 00000000000..940c968917b
--- /dev/null
+++ b/layouts/default/tkl_iso_wkl/default_tkl_iso_wkl/keymap.c
@@ -0,0 +1,32 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+ * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│
+ * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐ ┌───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ Backsp│ │Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤ ├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │ │Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│ └───┴───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤ ┌───┐
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift │ │ ↑ │
+ * ├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─────┤ ┌───┼───┼───┐
+ * │Ctrl │ │Alt │ │ Alt│ │ Ctrl│ │ ← │ ↓ │ → │
+ * └─────┘ └─────┴───────────────────────────┴─────┘ └─────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT_tkl_iso_wkl(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/tkl_iso_wkl/info.json b/layouts/default/tkl_iso_wkl/info.json
new file mode 100644
index 00000000000..07f3311296d
--- /dev/null
+++ b/layouts/default/tkl_iso_wkl/info.json
@@ -0,0 +1,106 @@
+{
+ "keyboard_name": "Tenkeyless ISO Windows keyless layout",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_tkl_iso_wkl": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6.5, "y":0},
+ {"x":7.5, "y":0},
+ {"x":8.5, "y":0},
+ {"x":9.5, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0},
+ {"x":14, "y":0},
+
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+ {"x":17.25, "y":0},
+
+ {"x":0, "y":1.25},
+ {"x":1, "y":1.25},
+ {"x":2, "y":1.25},
+ {"x":3, "y":1.25},
+ {"x":4, "y":1.25},
+ {"x":5, "y":1.25},
+ {"x":6, "y":1.25},
+ {"x":7, "y":1.25},
+ {"x":8, "y":1.25},
+ {"x":9, "y":1.25},
+ {"x":10, "y":1.25},
+ {"x":11, "y":1.25},
+ {"x":12, "y":1.25},
+ {"x":13, "y":1.25, "w":2},
+
+ {"x":15.25, "y":1.25},
+ {"x":16.25, "y":1.25},
+ {"x":17.25, "y":1.25},
+
+ {"x":0, "y":2.25, "w":1.5},
+ {"x":1.5, "y":2.25},
+ {"x":2.5, "y":2.25},
+ {"x":3.5, "y":2.25},
+ {"x":4.5, "y":2.25},
+ {"x":5.5, "y":2.25},
+ {"x":6.5, "y":2.25},
+ {"x":7.5, "y":2.25},
+ {"x":8.5, "y":2.25},
+ {"x":9.5, "y":2.25},
+ {"x":10.5, "y":2.25},
+ {"x":11.5, "y":2.25},
+ {"x":12.5, "y":2.25},
+
+ {"x":15.25, "y":2.25},
+ {"x":16.25, "y":2.25},
+ {"x":17.25, "y":2.25},
+
+ {"x":0, "y":3.25, "w":1.75},
+ {"x":1.75, "y":3.25},
+ {"x":2.75, "y":3.25},
+ {"x":3.75, "y":3.25},
+ {"x":4.75, "y":3.25},
+ {"x":5.75, "y":3.25},
+ {"x":6.75, "y":3.25},
+ {"x":7.75, "y":3.25},
+ {"x":8.75, "y":3.25},
+ {"x":9.75, "y":3.25},
+ {"x":10.75, "y":3.25},
+ {"x":11.75, "y":3.25},
+ {"x":12.75, "y":3.25},
+ {"x":13.75, "y":2.25, "w":1.25, "h":2},
+
+ {"x":0, "y":4.25, "w":1.25},
+ {"x":1.25, "y":4.25},
+ {"x":2.25, "y":4.25},
+ {"x":3.25, "y":4.25},
+ {"x":4.25, "y":4.25},
+ {"x":5.25, "y":4.25},
+ {"x":6.25, "y":4.25},
+ {"x":7.25, "y":4.25},
+ {"x":8.25, "y":4.25},
+ {"x":9.25, "y":4.25},
+ {"x":10.25, "y":4.25},
+ {"x":11.25, "y":4.25},
+ {"x":12.25, "y":4.25, "w":2.75},
+
+ {"x":16.25, "y":4.25},
+
+ {"x":0, "y":5.25, "w":1.5},
+ {"x":2.5, "y":5.25, "w":1.5},
+ {"x":4, "y":5.25, "w":7},
+ {"x":11, "y":5.25, "w":1.5},
+ {"x":13.5, "y":5.25, "w":1.5},
+
+ {"x":15.25, "y":5.25},
+ {"x":16.25, "y":5.25},
+ {"x":17.25, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/tkl_iso_wkl/layout.json b/layouts/default/tkl_iso_wkl/layout.json
new file mode 100644
index 00000000000..8d51a4064da
--- /dev/null
+++ b/layouts/default/tkl_iso_wkl/layout.json
@@ -0,0 +1,6 @@
+[{a:7},"",{x:1},"","","","",{x:0.5},"","","","",{x:0.5},"","","","",{x:0.25},"","",""],
+[{y:0.25},"","","","","","","","","","","","","",{w:2},"",{x:0.25},"","",""],
+[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"",{x:0.25},"","",""],
+[{w:1.75},"","","","","","","","","","","","",""],
+[{w:1.25},"","","","","","","","","","","","",{w:2.75},"",{x:1.25},""],
+[{w:1.5},"",{x:1,w:1.5},"",{w:7},"",{w:1.5},"",{x:1,w:1.5},"",{x:0.25},"","",""]
diff --git a/layouts/default/tkl_iso_wkl/readme.md b/layouts/default/tkl_iso_wkl/readme.md
new file mode 100644
index 00000000000..56fe1e91473
--- /dev/null
+++ b/layouts/default/tkl_iso_wkl/readme.md
@@ -0,0 +1,3 @@
+# tkl_iso_wkl
+
+ LAYOUT_tkl_iso_wkl
diff --git a/layouts/default/tkl_iso_wkl_split_bs_rshift/default_tkl_iso_wkl_split_bs_rshift/keymap.c b/layouts/default/tkl_iso_wkl_split_bs_rshift/default_tkl_iso_wkl_split_bs_rshift/keymap.c
new file mode 100644
index 00000000000..5b9474863bc
--- /dev/null
+++ b/layouts/default/tkl_iso_wkl_split_bs_rshift/default_tkl_iso_wkl_split_bs_rshift/keymap.c
@@ -0,0 +1,32 @@
+// Copyright 2023 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include QMK_KEYBOARD_H
+
+const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
+ /*
+ * ┌───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┬───┐ ┌───┬───┬───┐
+ * │Esc│ │F1 │F2 │F3 │F4 │ │F5 │F6 │F7 │F8 │ │F9 │F10│F11│F12│ │PSc│Scr│Pse│
+ * └───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┴───┘ └───┴───┴───┘
+ * ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐ ┌───┬───┬───┐
+ * │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bsp│Bsp│ │Ins│Hom│PgU│
+ * ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┤ ├───┼───┼───┤
+ * │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ │ │Del│End│PgD│
+ * ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ Ent│ └───┴───┴───┘
+ * │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ # │ │
+ * ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴┬───┤ ┌───┐
+ * │Shft│ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │ Shift│Sft│ │ ↑ │
+ * ├────┴┬──┴┬──┴──┬┴───┴───┴───┴───┴───┴───┴──┬┴───┴┬───┬─┴───┤ ┌───┼───┼───┐
+ * │Ctrl │ │Alt │ │ Alt│ │ Ctrl│ │ ← │ ↓ │ → │
+ * └─────┘ └─────┴───────────────────────────┴─────┘ └─────┘ └───┴───┴───┘
+ */
+ [0] = LAYOUT_tkl_iso_wkl_split_bs_rshift(
+ KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_PSCR, KC_SCRL, KC_PAUS,
+
+ KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_BSPC, KC_INS, KC_HOME, KC_PGUP,
+ KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_DEL, KC_END, KC_PGDN,
+ KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_NUHS, KC_ENT,
+ KC_LSFT, KC_NUBS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_RSFT, KC_UP,
+ KC_LCTL, KC_LALT, KC_SPC, KC_RALT, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
+ )
+};
diff --git a/layouts/default/tkl_iso_wkl_split_bs_rshift/info.json b/layouts/default/tkl_iso_wkl_split_bs_rshift/info.json
new file mode 100644
index 00000000000..aa0ebce31ed
--- /dev/null
+++ b/layouts/default/tkl_iso_wkl_split_bs_rshift/info.json
@@ -0,0 +1,108 @@
+{
+ "keyboard_name": "Tenkeyless ISO Windows keyless layout with split Backspace and split Right Shift",
+ "url": "",
+ "maintainer": "qmk",
+ "layouts": {
+ "LAYOUT_tkl_iso_wkl_split_bs_rshift": {
+ "layout": [
+ {"x":0, "y":0},
+ {"x":2, "y":0},
+ {"x":3, "y":0},
+ {"x":4, "y":0},
+ {"x":5, "y":0},
+ {"x":6.5, "y":0},
+ {"x":7.5, "y":0},
+ {"x":8.5, "y":0},
+ {"x":9.5, "y":0},
+ {"x":11, "y":0},
+ {"x":12, "y":0},
+ {"x":13, "y":0},
+ {"x":14, "y":0},
+
+ {"x":15.25, "y":0},
+ {"x":16.25, "y":0},
+ {"x":17.25, "y":0},
+
+ {"x":0, "y":1.25},
+ {"x":1, "y":1.25},
+ {"x":2, "y":1.25},
+ {"x":3, "y":1.25},
+ {"x":4, "y":1.25},
+ {"x":5, "y":1.25},
+ {"x":6, "y":1.25},
+ {"x":7, "y":1.25},
+ {"x":8, "y":1.25},
+ {"x":9, "y":1.25},
+ {"x":10, "y":1.25},
+ {"x":11, "y":1.25},
+ {"x":12, "y":1.25},
+ {"x":13, "y":1.25},
+ {"x":14, "y":1.25},
+
+ {"x":15.25, "y":1.25},
+ {"x":16.25, "y":1.25},
+ {"x":17.25, "y":1.25},
+
+ {"x":0, "y":2.25, "w":1.5},
+ {"x":1.5, "y":2.25},
+ {"x":2.5, "y":2.25},
+ {"x":3.5, "y":2.25},
+ {"x":4.5, "y":2.25},
+ {"x":5.5, "y":2.25},
+ {"x":6.5, "y":2.25},
+ {"x":7.5, "y":2.25},
+ {"x":8.5, "y":2.25},
+ {"x":9.5, "y":2.25},
+ {"x":10.5, "y":2.25},
+ {"x":11.5, "y":2.25},
+ {"x":12.5, "y":2.25},
+
+ {"x":15.25, "y":2.25},
+ {"x":16.25, "y":2.25},
+ {"x":17.25, "y":2.25},
+
+ {"x":0, "y":3.25, "w":1.75},
+ {"x":1.75, "y":3.25},
+ {"x":2.75, "y":3.25},
+ {"x":3.75, "y":3.25},
+ {"x":4.75, "y":3.25},
+ {"x":5.75, "y":3.25},
+ {"x":6.75, "y":3.25},
+ {"x":7.75, "y":3.25},
+ {"x":8.75, "y":3.25},
+ {"x":9.75, "y":3.25},
+ {"x":10.75, "y":3.25},
+ {"x":11.75, "y":3.25},
+ {"x":12.75, "y":3.25},
+ {"x":13.75, "y":2.25, "w":1.25, "h":2},
+
+ {"x":0, "y":4.25, "w":1.25},
+ {"x":1.25, "y":4.25},
+ {"x":2.25, "y":4.25},
+ {"x":3.25, "y":4.25},
+ {"x":4.25, "y":4.25},
+ {"x":5.25, "y":4.25},
+ {"x":6.25, "y":4.25},
+ {"x":7.25, "y":4.25},
+ {"x":8.25, "y":4.25},
+ {"x":9.25, "y":4.25},
+ {"x":10.25, "y":4.25},
+ {"x":11.25, "y":4.25},
+ {"x":12.25, "y":4.25, "w":1.75},
+ {"x":14, "y":4.25},
+
+ {"x":16.25, "y":4.25},
+
+ {"x":0, "y":5.25, "w":1.5},
+ {"x":2.5, "y":5.25, "w":1.5},
+ {"x":4, "y":5.25, "w":7},
+ {"x":11, "y":5.25, "w":1.5},
+ {"x":13.5, "y":5.25, "w":1.5},
+
+ {"x":15.25, "y":5.25},
+ {"x":16.25, "y":5.25},
+ {"x":17.25, "y":5.25}
+ ]
+ }
+ }
+}
diff --git a/layouts/default/tkl_iso_wkl_split_bs_rshift/layout.json b/layouts/default/tkl_iso_wkl_split_bs_rshift/layout.json
new file mode 100644
index 00000000000..09c79e0f4a4
--- /dev/null
+++ b/layouts/default/tkl_iso_wkl_split_bs_rshift/layout.json
@@ -0,0 +1,6 @@
+[{a:7},"",{x:1},"","","","",{x:0.5},"","","","",{x:0.5},"","","","",{x:0.25},"","",""],
+[{y:0.25},"","","","","","","","","","","","","","","",{x:0.25},"","",""],
+[{w:1.5},"","","","","","","","","","","","","",{x:0.25,w:1.25,h:2,w2:1.5,h2:1,x2:-0.25},"",{x:0.25},"","",""],
+[{w:1.75},"","","","","","","","","","","","",""],
+[{w:1.25},"","","","","","","","","","","","",{w:1.75},"","",{x:1.25},""],
+[{w:1.5},"",{x:1,w:1.5},"",{w:7},"",{w:1.5},"",{x:1,w:1.5},"",{x:0.25},"","",""]
diff --git a/layouts/default/tkl_iso_wkl_split_bs_rshift/readme.md b/layouts/default/tkl_iso_wkl_split_bs_rshift/readme.md
new file mode 100644
index 00000000000..ec820424a5b
--- /dev/null
+++ b/layouts/default/tkl_iso_wkl_split_bs_rshift/readme.md
@@ -0,0 +1,3 @@
+# tkl_iso_wkl_split_bs_rshift
+
+ LAYOUT_tkl_iso_split_bs_rshift
diff --git a/layouts/default/tkl_jis/info.json b/layouts/default/tkl_jis/info.json
index 513852193a5..e1d16e2beb7 100644
--- a/layouts/default/tkl_jis/info.json
+++ b/layouts/default/tkl_jis/info.json
@@ -54,7 +54,6 @@
{"x": 10.5, "y": 2.25},
{"x": 11.5, "y": 2.25},
{"x": 12.5, "y": 2.25},
- {"x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
{"x": 15.25, "y": 2.25},
{"x": 16.25, "y": 2.25},
{"x": 17.25, "y": 2.25},
@@ -72,6 +71,7 @@
{"x": 10.75, "y": 3.25},
{"x": 11.75, "y": 3.25},
{"x": 12.75, "y": 3.25},
+ {"x": 13.75, "y": 2.25, "w": 1.25, "h": 2},
{"x": 0, "y": 4.25, "w": 2.25},
{"x": 2.25, "y": 4.25},
diff --git a/lib/python/qmk/cli/generate/compilation_database.py b/lib/python/qmk/cli/generate/compilation_database.py
index a2190fee66c..b9c716bf0c5 100755
--- a/lib/python/qmk/cli/generate/compilation_database.py
+++ b/lib/python/qmk/cli/generate/compilation_database.py
@@ -25,7 +25,6 @@ def system_libs(binary: str) -> List[Path]:
"""Find the system include directory that the given build tool uses.
"""
cli.log.debug("searching for system library directory for binary: %s", binary)
- bin_path = shutil.which(binary)
# Actually query xxxxxx-gcc to find its include paths.
if binary.endswith("gcc") or binary.endswith("g++"):
@@ -37,7 +36,31 @@ def system_libs(binary: str) -> List[Path]:
paths.append(Path(line.strip()).resolve())
return paths
- return list(Path(bin_path).resolve().parent.parent.glob("*/include")) if bin_path else []
+ return list(Path(binary).resolve().parent.parent.glob("*/include")) if binary else []
+
+
+@lru_cache(maxsize=10)
+def cpu_defines(binary: str, compiler_args: str) -> List[str]:
+ cli.log.debug("gathering definitions for compilation: %s %s", binary, compiler_args)
+ if binary.endswith("gcc") or binary.endswith("g++"):
+ invocation = [binary, '-dM', '-E']
+ if binary.endswith("gcc"):
+ invocation.extend(['-x', 'c'])
+ elif binary.endswith("g++"):
+ invocation.extend(['-x', 'c++'])
+ compiler_args = shlex.split(compiler_args)
+ invocation.extend(compiler_args)
+ invocation.append('-')
+ result = cli.run(invocation, capture_output=True, check=True, stdin=None, input='\n')
+ define_args = []
+ for line in result.stdout.splitlines():
+ line_args = line.split(' ', 2)
+ if len(line_args) == 3 and line_args[0] == '#define':
+ define_args.append(f'-D{line_args[1]}={line_args[2]}')
+ elif len(line_args) == 2 and line_args[0] == '#define':
+ define_args.append(f'-D{line_args[1]}')
+ return list(sorted(set(define_args)))
+ return []
file_re = re.compile(r'printf "Compiling: ([^"]+)')
@@ -68,9 +91,12 @@ def parse_make_n(f: Iterator[str]) -> List[Dict[str, str]]:
# we have a hit!
this_cmd = m.group(1)
args = shlex.split(this_cmd)
- for s in system_libs(args[0]):
+ binary = shutil.which(args[0])
+ compiler_args = set(filter(lambda x: x.startswith('-m') or x.startswith('-f'), args))
+ for s in system_libs(binary):
args += ['-isystem', '%s' % s]
- new_cmd = ' '.join(shlex.quote(s) for s in args if s != '-mno-thumb-interwork')
+ args.extend(cpu_defines(binary, ' '.join(shlex.quote(s) for s in compiler_args)))
+ new_cmd = ' '.join(shlex.quote(s) for s in args)
records.append({"directory": str(QMK_FIRMWARE.resolve()), "command": new_cmd, "file": this_file})
state = 'start'
diff --git a/lib/python/qmk/cli/lint.py b/lib/python/qmk/cli/lint.py
index 7ebb0cf9c45..ba0c3f274cf 100644
--- a/lib/python/qmk/cli/lint.py
+++ b/lib/python/qmk/cli/lint.py
@@ -6,9 +6,9 @@ from milc import cli
from qmk.decorators import automagic_keyboard, automagic_keymap
from qmk.info import info_json
-from qmk.keyboard import keyboard_completer, list_keyboards
+from qmk.keyboard import keyboard_completer, keyboard_folder_or_all, is_all_keyboards, list_keyboards
from qmk.keymap import locate_keymap, list_keymaps
-from qmk.path import is_keyboard, keyboard
+from qmk.path import keyboard
from qmk.git import git_get_ignored_files
from qmk.c_parse import c_source_files
@@ -198,39 +198,34 @@ def keyboard_check(kb):
@cli.argument('--strict', action='store_true', help='Treat warnings as errors')
-@cli.argument('-kb', '--keyboard', completer=keyboard_completer, help='Comma separated list of keyboards to check')
+@cli.argument('-kb', '--keyboard', action='append', type=keyboard_folder_or_all, completer=keyboard_completer, help='Keyboard to check. May be passed multiple times.')
@cli.argument('-km', '--keymap', help='The keymap to check')
-@cli.argument('--all-kb', action='store_true', arg_only=True, help='Check all keyboards')
-@cli.argument('--all-km', action='store_true', arg_only=True, help='Check all keymaps')
@cli.subcommand('Check keyboard and keymap for common mistakes.')
@automagic_keyboard
@automagic_keymap
def lint(cli):
"""Check keyboard and keymap for common mistakes.
"""
- failed = []
-
# Determine our keyboard list
- if cli.args.all_kb:
- if cli.args.keyboard:
- cli.log.warning('Both --all-kb and --keyboard passed, --all-kb takes precedence.')
-
- keyboard_list = list_keyboards()
- elif not cli.config.lint.keyboard:
- cli.log.error('Missing required arguments: --keyboard or --all-kb')
+ if not cli.config.lint.keyboard:
+ cli.log.error('Missing required arguments: --keyboard')
cli.print_help()
return False
+
+ if isinstance(cli.config.lint.keyboard, str):
+ # if provided via config - string not array
+ keyboard_list = [cli.config.lint.keyboard]
+ elif is_all_keyboards(cli.args.keyboard[0]):
+ keyboard_list = list_keyboards()
else:
- keyboard_list = cli.config.lint.keyboard.split(',')
+ keyboard_list = cli.config.lint.keyboard
+
+ failed = []
# Lint each keyboard
for kb in keyboard_list:
- if not is_keyboard(kb):
- cli.log.error('No such keyboard: %s', kb)
- continue
-
# Determine keymaps to also check
- if cli.args.all_km:
+ if cli.args.keymap == 'all':
keymaps = list_keymaps(kb)
elif cli.config.lint.keymap:
keymaps = {cli.config.lint.keymap}
diff --git a/lib/python/qmk/keyboard.py b/lib/python/qmk/keyboard.py
index b5578cf3d97..d82ce5261fe 100644
--- a/lib/python/qmk/keyboard.py
+++ b/lib/python/qmk/keyboard.py
@@ -101,6 +101,8 @@ def find_keyboard_from_dir():
keymap_index = len(current_path.parts) - current_path.parts.index('keymaps') - 1
current_path = current_path.parents[keymap_index]
+ current_path = resolve_keyboard(current_path)
+
if qmk.path.is_keyboard(current_path):
return str(current_path)
diff --git a/platforms/avr/drivers/ws2812_i2c.c b/platforms/avr/drivers/ws2812_i2c.c
index 60b466c32a9..86a5ac8394e 100644
--- a/platforms/avr/drivers/ws2812_i2c.c
+++ b/platforms/avr/drivers/ws2812_i2c.c
@@ -1,7 +1,7 @@
#include "ws2812.h"
#include "i2c_master.h"
-#ifdef RGBW
+#ifdef WS2812_RGBW
# error "RGBW not supported"
#endif
diff --git a/platforms/chibios/drivers/vendor/RP/RP2040/ws2812_vendor.c b/platforms/chibios/drivers/vendor/RP/RP2040/ws2812_vendor.c
index 95a827e4b8a..41a5311719f 100644
--- a/platforms/chibios/drivers/vendor/RP/RP2040/ws2812_vendor.c
+++ b/platforms/chibios/drivers/vendor/RP/RP2040/ws2812_vendor.c
@@ -161,7 +161,7 @@ static void ws2812_dma_callback(void* p, uint32_t ct) {
// FIFO is already empty.
rtcnt_t time_to_completion = (pio_sm_get_tx_fifo_level(pio, STATE_MACHINE) + 1) * MAX(WS2812_T1H + WS2812_T1L, WS2812_T0H + WS2812_T0L);
-#if defined(RGBW)
+#if defined(WS2812_RGBW)
time_to_completion *= 32;
#else
time_to_completion *= 24;
@@ -222,7 +222,7 @@ void ws2812_init(void) {
sm_config_set_sideset(&config, 1, false, false);
#endif
-#if defined(RGBW)
+#if defined(WS2812_RGBW)
sm_config_set_out_shift(&config, false, true, 32);
#else
sm_config_set_out_shift(&config, false, true, 24);
@@ -270,7 +270,7 @@ void ws2812_setleds(rgb_led_t* ledarray, uint16_t leds) {
sync_ws2812_transfer();
for (int i = 0; i < leds; i++) {
-#if defined(RGBW)
+#if defined(WS2812_RGBW)
WS2812_BUFFER[i] = rgbw8888_to_u32(ledarray[i].r, ledarray[i].g, ledarray[i].b, ledarray[i].w);
#else
WS2812_BUFFER[i] = rgbw8888_to_u32(ledarray[i].r, ledarray[i].g, ledarray[i].b, 0);
diff --git a/platforms/chibios/drivers/ws2812_bitbang.c b/platforms/chibios/drivers/ws2812_bitbang.c
index 9ed6bacd5ad..96378ec0ac5 100644
--- a/platforms/chibios/drivers/ws2812_bitbang.c
+++ b/platforms/chibios/drivers/ws2812_bitbang.c
@@ -101,7 +101,7 @@ void ws2812_setleds(rgb_led_t *ledarray, uint16_t leds) {
sendByte(ledarray[i].r);
#endif
-#ifdef RGBW
+#ifdef WS2812_RGBW
sendByte(ledarray[i].w);
#endif
}
diff --git a/platforms/chibios/drivers/ws2812_pwm.c b/platforms/chibios/drivers/ws2812_pwm.c
index 7dc3414eade..1e9d2ebb410 100644
--- a/platforms/chibios/drivers/ws2812_pwm.c
+++ b/platforms/chibios/drivers/ws2812_pwm.c
@@ -16,7 +16,7 @@
/* Adapted from https://github.com/joewa/WS2812-LED-Driver_ChibiOS/ */
-#ifdef RGBW
+#ifdef WS2812_RGBW
# define WS2812_CHANNELS 4
#else
# define WS2812_CHANNELS 3
@@ -262,7 +262,7 @@
# define WS2812_BLUE_BIT(led, bit) WS2812_BIT((led), 0, (bit))
#endif
-#ifdef RGBW
+#ifdef WS2812_RGBW
/**
* @brief Determine the index in @ref ws2812_frame_buffer "the frame buffer" of a given white bit
*
@@ -381,7 +381,7 @@ void ws2812_write_led_rgbw(uint16_t led_number, uint8_t r, uint8_t g, uint8_t b,
ws2812_frame_buffer[WS2812_RED_BIT(led_number, bit)] = ((r >> bit) & 0x01) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
ws2812_frame_buffer[WS2812_GREEN_BIT(led_number, bit)] = ((g >> bit) & 0x01) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
ws2812_frame_buffer[WS2812_BLUE_BIT(led_number, bit)] = ((b >> bit) & 0x01) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
-#ifdef RGBW
+#ifdef WS2812_RGBW
ws2812_frame_buffer[WS2812_WHITE_BIT(led_number, bit)] = ((w >> bit) & 0x01) ? WS2812_DUTYCYCLE_1 : WS2812_DUTYCYCLE_0;
#endif
}
@@ -390,7 +390,7 @@ void ws2812_write_led_rgbw(uint16_t led_number, uint8_t r, uint8_t g, uint8_t b,
// Setleds for standard RGB
void ws2812_setleds(rgb_led_t* ledarray, uint16_t leds) {
for (uint16_t i = 0; i < leds; i++) {
-#ifdef RGBW
+#ifdef WS2812_RGBW
ws2812_write_led_rgbw(i, ledarray[i].r, ledarray[i].g, ledarray[i].b, ledarray[i].w);
#else
ws2812_write_led(i, ledarray[i].r, ledarray[i].g, ledarray[i].b);
diff --git a/platforms/chibios/drivers/ws2812_spi.c b/platforms/chibios/drivers/ws2812_spi.c
index 5b990ccaa06..ad2e87781c4 100644
--- a/platforms/chibios/drivers/ws2812_spi.c
+++ b/platforms/chibios/drivers/ws2812_spi.c
@@ -76,7 +76,7 @@
#endif
#define BYTES_FOR_LED_BYTE 4
-#ifdef RGBW
+#ifdef WS2812_RGBW
# define WS2812_CHANNELS 4
#else
# define WS2812_CHANNELS 3
@@ -131,7 +131,7 @@ static void set_led_color_rgb(rgb_led_t color, int pos) {
for (int j = 0; j < 4; j++)
tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 2 + j] = get_protocol_eq(color.r, j);
#endif
-#ifdef RGBW
+#ifdef WS2812_RGBW
for (int j = 0; j < 4; j++)
tx_start[BYTES_FOR_LED * pos + BYTES_FOR_LED_BYTE * 4 + j] = get_protocol_eq(color.w, j);
#endif
diff --git a/quantum/color.c b/quantum/color.c
index 395383f428e..96d548a33cc 100644
--- a/quantum/color.c
+++ b/quantum/color.c
@@ -109,7 +109,7 @@ RGB hsv_to_rgb_nocie(HSV hsv) {
return hsv_to_rgb_impl(hsv, false);
}
-#ifdef RGBW
+#ifdef WS2812_RGBW
void convert_rgb_to_rgbw(rgb_led_t *led) {
// Determine lowest value in all three colors, put that into
// the white channel and then shift all colors by that amount
diff --git a/quantum/color.h b/quantum/color.h
index 00a3bfb3f84..b6a9dd0641c 100644
--- a/quantum/color.h
+++ b/quantum/color.h
@@ -96,7 +96,7 @@ typedef struct PACKED rgb_led_t {
uint8_t g;
uint8_t r;
#endif
-#ifdef RGBW
+#ifdef WS2812_RGBW
uint8_t w;
#endif
} rgb_led_t;
@@ -111,6 +111,6 @@ typedef struct PACKED HSV {
RGB hsv_to_rgb(HSV hsv);
RGB hsv_to_rgb_nocie(HSV hsv);
-#ifdef RGBW
+#ifdef WS2812_RGBW
void convert_rgb_to_rgbw(rgb_led_t *led);
#endif
diff --git a/quantum/encoder.c b/quantum/encoder.c
index 0a48ac9a07b..2ddbf3ee1e0 100644
--- a/quantum/encoder.c
+++ b/quantum/encoder.c
@@ -83,7 +83,7 @@ bool encoder_task(void) {
}
bool encoder_queue_full_advanced(encoder_events_t *events) {
- return events->head == (events->tail - 1) % MAX_QUEUED_ENCODER_EVENTS;
+ return events->tail == (events->head + 1) % MAX_QUEUED_ENCODER_EVENTS;
}
bool encoder_queue_full(void) {
diff --git a/quantum/keymap_extras/keymap_czech_mac_ansi.h b/quantum/keymap_extras/keymap_czech_mac_ansi.h
new file mode 100644
index 00000000000..ac2f078d980
--- /dev/null
+++ b/quantum/keymap_extras/keymap_czech_mac_ansi.h
@@ -0,0 +1,162 @@
+// Copyright 2024 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/*******************************************************************************
+ 88888888888 888 d8b .d888 d8b 888 d8b
+ 888 888 Y8P d88P" Y8P 888 Y8P
+ 888 888 888 888
+ 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
+ 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
+ 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
+ 888 888 888 888 X88 888 888 888 Y8b. 888 X88
+ 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
+ 888 888
+ 888 888
+ 888 888
+ .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
+ d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
+ 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
+ Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
+ "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
+ 888
+ Y8b d88P
+ "Y88P"
+*******************************************************************************/
+
+#pragma once
+#include "keycodes.h"
+// clang-format off
+
+// Aliases
+#define CZ_BSLS KC_GRV // (backslash)
+#define CZ_PLUS KC_1 // +
+#define CZ_ECAR KC_2 // ě
+#define CZ_SCAR KC_3 // š
+#define CZ_CCAR KC_4 // č
+#define CZ_RCAR KC_5 // ř
+#define CZ_ZCAR KC_6 // ž
+#define CZ_YACU KC_7 // ý
+#define CZ_AACU KC_8 // á
+#define CZ_IACU KC_9 // í
+#define CZ_EACU KC_0 // é
+#define CZ_EQL KC_MINS // =
+#define CZ_ACUT KC_EQL // ' (dead)
+#define CZ_Q KC_Q // Q
+#define CZ_W KC_W // W
+#define CZ_E KC_E // E
+#define CZ_R KC_R // R
+#define CZ_T KC_T // T
+#define CZ_Z KC_Y // Z
+#define CZ_U KC_U // U
+#define CZ_I KC_I // I
+#define CZ_O KC_O // O
+#define CZ_P KC_P // P
+#define CZ_UACU KC_LBRC // ú
+#define CZ_RPRN KC_RBRC // )
+#define CZ_DIAE KC_NUHS // ¨ (dead)
+#define CZ_A KC_A // A
+#define CZ_S KC_S // S
+#define CZ_D KC_D // D
+#define CZ_F KC_F // F
+#define CZ_G KC_G // G
+#define CZ_H KC_H // H
+#define CZ_J KC_J // J
+#define CZ_K KC_K // K
+#define CZ_L KC_L // L
+#define CZ_URNG KC_SCLN // ů
+#define CZ_SECT KC_QUOT // §
+#define CZ_Y KC_Z // Y
+#define CZ_X KC_X // X
+#define CZ_C KC_C // C
+#define CZ_V KC_V // V
+#define CZ_B KC_B // B
+#define CZ_N KC_N // N
+#define CZ_M KC_M // M
+#define CZ_COMM KC_COMM // ,
+#define CZ_DOT KC_DOT // .
+#define CZ_MINS KC_SLSH // -
+#define CZ_PIPE S(CZ_BSLS) // |
+#define CZ_1 S(CZ_PLUS) // 1
+#define CZ_2 S(CZ_ECAR) // 2
+#define CZ_3 S(CZ_SCAR) // 3
+#define CZ_4 S(CZ_CCAR) // 4
+#define CZ_5 S(CZ_RCAR) // 5
+#define CZ_6 S(CZ_ZCAR) // 6
+#define CZ_7 S(CZ_YACU) // 7
+#define CZ_8 S(CZ_AACU) // 8
+#define CZ_9 S(CZ_IACU) // 9
+#define CZ_0 S(CZ_EACU) // 0
+#define CZ_PERC S(CZ_EQL) // %
+#define CZ_CARN S(CZ_ACUT) // ˇ (dead)
+#define CZ_SLSH S(CZ_UACU) // /
+#define CZ_LPRN S(CZ_RPRN) // (
+#define CZ_GRV S(CZ_DIAE) // `
+#define CZ_DQUO S(CZ_URNG) // "
+#define CZ_EXLM S(CZ_SECT) // !
+#define CZ_QUES S(CZ_COMM) // ?
+#define CZ_COLN S(CZ_DOT) // :
+#define CZ_UNDS S(CZ_MINS) // _
+#define CZ_AT A(CZ_ECAR) // @
+#define CZ_HASH A(CZ_SCAR) // #
+#define CZ_DLR A(CZ_CCAR) // $
+#define CZ_TILD A(CZ_RCAR) // ~
+#define CZ_CIRC A(CZ_ZCAR) // ^
+#define CZ_AMPR A(CZ_YACU) // &
+#define CZ_ASTR A(CZ_AACU) // *
+#define CZ_LCBR A(CZ_IACU) // {
+#define CZ_RCBR A(CZ_EACU) // }
+#define CZ_RNGA A(CZ_EQL) // ° (dead)
+#define CZ_DCIR A(CZ_ACUT) // ^ (dead)
+#define CZ_LEDT A(CZ_W) // ė
+#define CZ_LEOG A(CZ_E) // ę
+#define CZ_EURO A(CZ_R) // €
+#define CZ_LZDT A(CZ_Z) // ż
+#define CZ_LBRC A(CZ_UACU) // [
+#define CZ_RBRC A(CZ_RPRN) // ]
+#define CZ_LAOG A(CZ_A) // ą
+#define CZ_SS A(CZ_S) // ß
+#define CZ_PDIF A(CZ_D) // ∂
+#define CZ_LSQU A(CZ_H) // ‘
+#define CZ_RSQU A(CZ_J) // ’
+#define CZ_LLST A(CZ_L) // ł
+#define CZ_SCLN A(CZ_URNG) // ;
+#define CZ_QUOT A(CZ_SECT) // '
+#define CZ_SLQU A(CZ_N) // ‚
+#define CZ_LABK A(CZ_COMM) // <
+#define CZ_RABK A(CZ_DOT) // >
+#define CZ_NDSH A(CZ_MINS) // –
+#define CZ_NOT S(A(CZ_1)) // ¬
+#define CZ_BULT S(A(CZ_2)) // •
+#define CZ_NEQL S(A(CZ_3)) // ≠
+#define CZ_PND S(A(CZ_4)) // £
+#define CZ_LOZN S(A(CZ_5)) // ◊
+#define CZ_DAGG S(A(CZ_6)) // †
+#define CZ_PARA S(A(CZ_7)) // ¶
+#define CZ_DIV S(A(CZ_8)) // ÷
+#define CZ_LDAQ S(A(CZ_9)) // «
+#define CZ_RDAQ S(A(CZ_0)) // »
+#define CZ_DCOM S(A(CZ_EQL)) // , (dead)
+#define CZ_DHPN S(A(CZ_ACUT)) // - (dead)
+#define CZ_CEDT S(A(CZ_W)) // Ė
+#define CZ_CEOG S(A(CZ_E)) // Ę
+#define CZ_REGD S(A(CZ_R)) // ®
+#define CZ_TM S(A(CZ_T)) // ™
+#define CZ_CZDT S(A(CZ_Z)) // Ż
+#define CZ_LSAQ S(A(CZ_UACU)) // ‹
+#define CZ_RSAQ S(A(CZ_RPRN)) // ›
+#define CZ_DDQT S(A(CZ_DIAE)) // " (dead)
+#define CZ_CAOG S(A(CZ_A)) // Ą
+#define CZ_NARS S(A(CZ_S)) // ∑
+#define CZ_INCR S(A(CZ_D)) // ∆
+#define CZ_LDQU S(A(CZ_H)) // “
+#define CZ_RDQU S(A(CZ_J)) // ”
+#define CZ_CLST S(A(CZ_L)) // Ł
+#define CZ_ELLP S(A(CZ_URNG)) // …
+#define CZ_DTIL S(A(CZ_SECT)) // ~ (dead)
+#define CZ_COPY S(A(CZ_C)) // ©
+#define CZ_SQRT S(A(CZ_V)) // √
+#define CZ_DLQU S(A(CZ_N)) // „
+#define CZ_LEQL S(A(CZ_COMM)) // ≤
+#define CZ_GEQL S(A(CZ_DOT)) // ≥
+#define CZ_MDSH S(A(CZ_MINS)) // —
+
diff --git a/quantum/keymap_extras/keymap_czech_mac_iso.h b/quantum/keymap_extras/keymap_czech_mac_iso.h
new file mode 100644
index 00000000000..4b56e15df13
--- /dev/null
+++ b/quantum/keymap_extras/keymap_czech_mac_iso.h
@@ -0,0 +1,162 @@
+// Copyright 2024 QMK
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+/*******************************************************************************
+ 88888888888 888 d8b .d888 d8b 888 d8b
+ 888 888 Y8P d88P" Y8P 888 Y8P
+ 888 888 888 888
+ 888 88888b. 888 .d8888b 888888 888 888 .d88b. 888 .d8888b
+ 888 888 "88b 888 88K 888 888 888 d8P Y8b 888 88K
+ 888 888 888 888 "Y8888b. 888 888 888 88888888 888 "Y8888b.
+ 888 888 888 888 X88 888 888 888 Y8b. 888 X88
+ 888 888 888 888 88888P' 888 888 888 "Y8888 888 88888P'
+ 888 888
+ 888 888
+ 888 888
+ .d88b. .d88b. 88888b. .d88b. 888d888 8888b. 888888 .d88b. .d88888
+ d88P"88b d8P Y8b 888 "88b d8P Y8b 888P" "88b 888 d8P Y8b d88" 888
+ 888 888 88888888 888 888 88888888 888 .d888888 888 88888888 888 888
+ Y88b 888 Y8b. 888 888 Y8b. 888 888 888 Y88b. Y8b. Y88b 888
+ "Y88888 "Y8888 888 888 "Y8888 888 "Y888888 "Y888 "Y8888 "Y88888
+ 888
+ Y8b d88P
+ "Y88P"
+*******************************************************************************/
+
+#pragma once
+#include "keycodes.h"
+// clang-format off
+
+// Aliases
+#define CZ_PLUS KC_1 // +
+#define CZ_ECAR KC_2 // ě
+#define CZ_SCAR KC_3 // š
+#define CZ_CCAR KC_4 // č
+#define CZ_RCAR KC_5 // ř
+#define CZ_ZCAR KC_6 // ž
+#define CZ_YACU KC_7 // ý
+#define CZ_AACU KC_8 // á
+#define CZ_IACU KC_9 // í
+#define CZ_EACU KC_0 // é
+#define CZ_EQL KC_MINS // =
+#define CZ_ACUT KC_EQL // ' (dead)
+#define CZ_Q KC_Q // Q
+#define CZ_W KC_W // W
+#define CZ_E KC_E // E
+#define CZ_R KC_R // R
+#define CZ_T KC_T // T
+#define CZ_Z KC_Y // Z
+#define CZ_U KC_U // U
+#define CZ_I KC_I // I
+#define CZ_O KC_O // O
+#define CZ_P KC_P // P
+#define CZ_UACU KC_LBRC // ú
+#define CZ_RPRN KC_RBRC // )
+#define CZ_A KC_A // A
+#define CZ_S KC_S // S
+#define CZ_D KC_D // D
+#define CZ_F KC_F // F
+#define CZ_G KC_G // G
+#define CZ_H KC_H // H
+#define CZ_J KC_J // J
+#define CZ_K KC_K // K
+#define CZ_L KC_L // L
+#define CZ_URNG KC_SCLN // ů
+#define CZ_SECT KC_QUOT // §
+#define CZ_DIAE KC_NUHS // ¨ (dead)
+#define CZ_BSLS KC_NUBS // (backslash)
+#define CZ_Y KC_Z // Y
+#define CZ_X KC_X // X
+#define CZ_C KC_C // C
+#define CZ_V KC_V // V
+#define CZ_B KC_B // B
+#define CZ_N KC_N // N
+#define CZ_M KC_M // M
+#define CZ_COMM KC_COMM // ,
+#define CZ_DOT KC_DOT // .
+#define CZ_MINS KC_SLSH // -
+#define CZ_1 S(CZ_PLUS) // 1
+#define CZ_2 S(CZ_ECAR) // 2
+#define CZ_3 S(CZ_SCAR) // 3
+#define CZ_4 S(CZ_CCAR) // 4
+#define CZ_5 S(CZ_RCAR) // 5
+#define CZ_6 S(CZ_ZCAR) // 6
+#define CZ_7 S(CZ_YACU) // 7
+#define CZ_8 S(CZ_AACU) // 8
+#define CZ_9 S(CZ_IACU) // 9
+#define CZ_0 S(CZ_EACU) // 0
+#define CZ_PERC S(CZ_EQL) // %
+#define CZ_CARN S(CZ_ACUT) // ˇ (dead)
+#define CZ_SLSH S(CZ_UACU) // /
+#define CZ_LPRN S(CZ_RPRN) // (
+#define CZ_DQUO S(CZ_URNG) // "
+#define CZ_EXLM S(CZ_SECT) // !
+#define CZ_GRV S(CZ_DIAE) // `
+#define CZ_PIPE S(CZ_BSLS) // |
+#define CZ_QUES S(CZ_COMM) // ?
+#define CZ_COLN S(CZ_DOT) // :
+#define CZ_UNDS S(CZ_MINS) // _
+#define CZ_AT A(CZ_ECAR) // @
+#define CZ_HASH A(CZ_SCAR) // #
+#define CZ_DLR A(CZ_CCAR) // $
+#define CZ_TILD A(CZ_RCAR) // ~
+#define CZ_CIRC A(CZ_ZCAR) // ^
+#define CZ_AMPR A(CZ_YACU) // &
+#define CZ_ASTR A(CZ_AACU) // *
+#define CZ_LCBR A(CZ_IACU) // {
+#define CZ_RCBR A(CZ_EACU) // }
+#define CZ_RNGA A(CZ_EQL) // ° (dead)
+#define CZ_DCIR A(CZ_ACUT) // ^ (dead)
+#define CZ_LEDT A(CZ_W) // ė
+#define CZ_LEOG A(CZ_E) // ę
+#define CZ_EURO A(CZ_R) // €
+#define CZ_LZDT A(CZ_Z) // ż
+#define CZ_LBRC A(CZ_UACU) // [
+#define CZ_RBRC A(CZ_RPRN) // ]
+#define CZ_LAOG A(CZ_A) // ą
+#define CZ_SS A(CZ_S) // ß
+#define CZ_PDIF A(CZ_D) // ∂
+#define CZ_LSQU A(CZ_H) // ‘
+#define CZ_RSQU A(CZ_J) // ’
+#define CZ_LLST A(CZ_L) // ł
+#define CZ_SCLN A(CZ_URNG) // ;
+#define CZ_QUOT A(CZ_SECT) // '
+#define CZ_SLQU A(CZ_N) // ‚
+#define CZ_LABK A(CZ_COMM) // <
+#define CZ_RABK A(CZ_DOT) // >
+#define CZ_NDSH A(CZ_MINS) // –
+#define CZ_NOT S(A(CZ_1)) // ¬
+#define CZ_BULT S(A(CZ_2)) // •
+#define CZ_NEQL S(A(CZ_3)) // ≠
+#define CZ_PND S(A(CZ_4)) // £
+#define CZ_LOZN S(A(CZ_5)) // ◊
+#define CZ_DAGG S(A(CZ_6)) // †
+#define CZ_PARA S(A(CZ_7)) // ¶
+#define CZ_DIV S(A(CZ_8)) // ÷
+#define CZ_LDAQ S(A(CZ_9)) // «
+#define CZ_RDAQ S(A(CZ_0)) // »
+#define CZ_DCOM S(A(CZ_EQL)) // , (dead)
+#define CZ_DHPN S(A(CZ_ACUT)) // - (dead)
+#define CZ_CEDT S(A(CZ_W)) // Ė
+#define CZ_CEOG S(A(CZ_E)) // Ę
+#define CZ_REGD S(A(CZ_R)) // ®
+#define CZ_TM S(A(CZ_T)) // ™
+#define CZ_CZDT S(A(CZ_Z)) // Ż
+#define CZ_LSAQ S(A(CZ_UACU)) // ‹
+#define CZ_RSAQ S(A(CZ_RPRN)) // ›
+#define CZ_CAOG S(A(CZ_A)) // Ą
+#define CZ_NARS S(A(CZ_S)) // ∑
+#define CZ_INCR S(A(CZ_D)) // ∆
+#define CZ_LDQU S(A(CZ_H)) // “
+#define CZ_RDQU S(A(CZ_J)) // ”
+#define CZ_CLST S(A(CZ_L)) // Ł
+#define CZ_ELLP S(A(CZ_URNG)) // …
+#define CZ_DTIL S(A(CZ_SECT)) // ~ (dead)
+#define CZ_DDQT S(A(CZ_DIAE)) // " (dead)
+#define CZ_COPY S(A(CZ_C)) // ©
+#define CZ_SQRT S(A(CZ_V)) // √
+#define CZ_DLQU S(A(CZ_N)) // „
+#define CZ_LEQL S(A(CZ_COMM)) // ≤
+#define CZ_GEQL S(A(CZ_DOT)) // ≥
+#define CZ_MDSH S(A(CZ_MINS)) // —
+
diff --git a/quantum/keymap_extras/sendstring_czech_mac_ansi.h b/quantum/keymap_extras/sendstring_czech_mac_ansi.h
new file mode 100644
index 00000000000..a60faa3237b
--- /dev/null
+++ b/quantum/keymap_extras/sendstring_czech_mac_ansi.h
@@ -0,0 +1,120 @@
+/* Copyright 2024 Tabonx
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+// Sendstring lookup tables for macOS Czech ANSI layouts
+
+#pragma once
+
+#include "keymap_czech_mac_ansi.h"
+#include "send_string.h"
+
+// clang-format off
+
+const uint8_t ascii_to_shift_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 1, 1, 0, 0, 1, 0, 0),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
+ KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 1, 0, 0, 0)
+};
+
+const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 0, 0, 1, 1, 0, 1, 1),
+ KCLUT_ENTRY(0, 0, 1, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 1, 0, 1, 0),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 1, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 1, 0),
+};
+
+const uint8_t ascii_to_dead_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0)
+};
+
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // ! " # $ % & '
+ KC_SPC, CZ_SECT, CZ_URNG, CZ_SCAR, CZ_CCAR, CZ_EQL, CZ_YACU, CZ_SECT,
+ // ( ) * + , - . /
+ CZ_RPRN, CZ_RPRN, CZ_AACU, CZ_PLUS, CZ_COMM, CZ_MINS, CZ_DOT, CZ_UACU,
+ // 0 1 2 3 4 5 6 7
+ CZ_EACU, CZ_PLUS, CZ_ECAR, CZ_SCAR, CZ_CCAR, CZ_RCAR, CZ_ZCAR, CZ_YACU,
+ // 8 9 : ; < = > ?
+ CZ_AACU, CZ_IACU, CZ_DOT, CZ_URNG, CZ_COMM, CZ_EQL, CZ_DOT, CZ_COMM,
+ // @ A B C D E F G
+ CZ_ECAR, CZ_A, CZ_B, CZ_C, CZ_D, CZ_E, CZ_F, CZ_G,
+ // H I J K L M N O
+ CZ_H, CZ_I, CZ_J, CZ_K, CZ_L, CZ_M, CZ_N, CZ_O,
+ // P Q R S T U V W
+ CZ_P, CZ_Q, CZ_R, CZ_S, CZ_T, CZ_U, CZ_V, CZ_W,
+ // X Y Z [ \ ] ^ _
+ CZ_X, CZ_Y, CZ_Z, CZ_UACU, CZ_BSLS, CZ_RPRN, CZ_ZCAR, CZ_MINS,
+ // ` a b c d e f g
+ CZ_DIAE, CZ_A, CZ_B, CZ_C, CZ_D, CZ_E, CZ_F, CZ_G,
+ // h i j k l m n o
+ CZ_H, CZ_I, CZ_J, CZ_K, CZ_L, CZ_M, CZ_N, CZ_O,
+ // p q r s t u v w
+ CZ_P, CZ_Q, CZ_R, CZ_S, CZ_T, CZ_U, CZ_V, CZ_W,
+ // x y z { | } ~ DEL
+ CZ_X, CZ_Y, CZ_Z, CZ_IACU, CZ_BSLS, CZ_EACU, CZ_RCAR, KC_DEL
+};
diff --git a/quantum/keymap_extras/sendstring_czech_mac_iso.h b/quantum/keymap_extras/sendstring_czech_mac_iso.h
new file mode 100644
index 00000000000..9d47087da05
--- /dev/null
+++ b/quantum/keymap_extras/sendstring_czech_mac_iso.h
@@ -0,0 +1,120 @@
+/* Copyright 2024 Tabonx
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+// Sendstring lookup tables for macOS Czech ISO layouts
+
+#pragma once
+
+#include "keymap_czech_mac_iso.h"
+#include "send_string.h"
+
+// clang-format off
+
+const uint8_t ascii_to_shift_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 1, 1, 0, 0, 1, 0, 0),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
+ KCLUT_ENTRY(0, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 1, 1, 1, 1, 1),
+ KCLUT_ENTRY(1, 1, 1, 0, 0, 0, 0, 1),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 1, 0, 0, 0)
+};
+
+const uint8_t ascii_to_altgr_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 0, 0, 1, 1, 0, 1, 1),
+ KCLUT_ENTRY(0, 0, 1, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 1, 0, 1, 0),
+ KCLUT_ENTRY(1, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 1, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 1, 0, 1, 1, 0),
+};
+
+const uint8_t ascii_to_dead_lut[16] PROGMEM = {
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0),
+ KCLUT_ENTRY(0, 0, 0, 0, 0, 0, 0, 0)
+};
+
+const uint8_t ascii_to_keycode_lut[128] PROGMEM = {
+ // NUL SOH STX ETX EOT ENQ ACK BEL
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // BS TAB LF VT FF CR SO SI
+ KC_BSPC, KC_TAB, KC_ENT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // DLE DC1 DC2 DC3 DC4 NAK SYN ETB
+ XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+ // CAN EM SUB ESC FS GS RS US
+ XXXXXXX, XXXXXXX, XXXXXXX, KC_ESC, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
+
+ // ! " # $ % & '
+ KC_SPC, CZ_SECT, CZ_URNG, CZ_SCAR, CZ_CCAR, CZ_EQL, CZ_YACU, CZ_SECT,
+ // ( ) * + , - . /
+ CZ_RPRN, CZ_RPRN, CZ_AACU, CZ_PLUS, CZ_COMM, CZ_MINS, CZ_DOT, CZ_UACU,
+ // 0 1 2 3 4 5 6 7
+ CZ_EACU, CZ_PLUS, CZ_ECAR, CZ_SCAR, CZ_CCAR, CZ_RCAR, CZ_ZCAR, CZ_YACU,
+ // 8 9 : ; < = > ?
+ CZ_AACU, CZ_IACU, CZ_DOT, CZ_URNG, CZ_COMM, CZ_EQL, CZ_DOT, CZ_COMM,
+ // @ A B C D E F G
+ CZ_ECAR, CZ_A, CZ_B, CZ_C, CZ_D, CZ_E, CZ_F, CZ_G,
+ // H I J K L M N O
+ CZ_H, CZ_I, CZ_J, CZ_K, CZ_L, CZ_M, CZ_N, CZ_O,
+ // P Q R S T U V W
+ CZ_P, CZ_Q, CZ_R, CZ_S, CZ_T, CZ_U, CZ_V, CZ_W,
+ // X Y Z [ \ ] ^ _
+ CZ_X, CZ_Y, CZ_Z, CZ_UACU, CZ_BSLS, CZ_RPRN, CZ_ZCAR, CZ_MINS,
+ // ` a b c d e f g
+ CZ_DIAE, CZ_A, CZ_B, CZ_C, CZ_D, CZ_E, CZ_F, CZ_G,
+ // h i j k l m n o
+ CZ_H, CZ_I, CZ_J, CZ_K, CZ_L, CZ_M, CZ_N, CZ_O,
+ // p q r s t u v w
+ CZ_P, CZ_Q, CZ_R, CZ_S, CZ_T, CZ_U, CZ_V, CZ_W,
+ // x y z { | } ~ DEL
+ CZ_X, CZ_Y, CZ_Z, CZ_IACU, CZ_BSLS, CZ_EACU, CZ_RCAR, KC_DEL
+};
diff --git a/quantum/rgb_matrix/rgb_matrix_drivers.c b/quantum/rgb_matrix/rgb_matrix_drivers.c
index 4370996d0e1..db3a2ef9e02 100644
--- a/quantum/rgb_matrix/rgb_matrix_drivers.c
+++ b/quantum/rgb_matrix/rgb_matrix_drivers.c
@@ -185,7 +185,7 @@ static inline void setled(int i, uint8_t r, uint8_t g, uint8_t b) {
rgb_matrix_ws2812_array[i].r = r;
rgb_matrix_ws2812_array[i].g = g;
rgb_matrix_ws2812_array[i].b = b;
-# ifdef RGBW
+# ifdef WS2812_RGBW
convert_rgb_to_rgbw(&rgb_matrix_ws2812_array[i]);
# endif
}
diff --git a/quantum/rgblight/rgblight.c b/quantum/rgblight/rgblight.c
index 62137c020bd..b0f2dfdc1d8 100644
--- a/quantum/rgblight/rgblight.c
+++ b/quantum/rgblight/rgblight.c
@@ -149,7 +149,7 @@ void setrgb(uint8_t r, uint8_t g, uint8_t b, rgb_led_t *led1) {
led1->r = r;
led1->g = g;
led1->b = b;
-#ifdef RGBW
+#ifdef WS2812_RGBW
led1->w = 0;
#endif
}
@@ -652,7 +652,7 @@ void rgblight_setrgb(uint8_t r, uint8_t g, uint8_t b) {
led[i].r = r;
led[i].g = g;
led[i].b = b;
-#ifdef RGBW
+#ifdef WS2812_RGBW
led[i].w = 0;
#endif
}
@@ -667,7 +667,7 @@ void rgblight_setrgb_at(uint8_t r, uint8_t g, uint8_t b, uint8_t index) {
led[index].r = r;
led[index].g = g;
led[index].b = b;
-#ifdef RGBW
+#ifdef WS2812_RGBW
led[index].w = 0;
#endif
rgblight_set();
@@ -704,7 +704,7 @@ void rgblight_setrgb_range(uint8_t r, uint8_t g, uint8_t b, uint8_t start, uint8
led[i].r = r;
led[i].g = g;
led[i].b = b;
-#ifdef RGBW
+#ifdef WS2812_RGBW
led[i].w = 0;
#endif
}
@@ -905,7 +905,7 @@ void rgblight_set(void) {
led[i].r = 0;
led[i].g = 0;
led[i].b = 0;
-#ifdef RGBW
+#ifdef WS2812_RGBW
led[i].w = 0;
#endif
}
@@ -933,7 +933,7 @@ void rgblight_set(void) {
start_led = led + rgblight_ranges.clipping_start_pos;
#endif
-#ifdef RGBW
+#ifdef WS2812_RGBW
for (uint8_t i = 0; i < num_leds; i++) {
convert_rgb_to_rgbw(&start_led[i]);
}
@@ -1263,7 +1263,7 @@ void rgblight_effect_snake(animation_status_t *anim) {
ledp->r = 0;
ledp->g = 0;
ledp->b = 0;
-# ifdef RGBW
+# ifdef WS2812_RGBW
ledp->w = 0;
# endif
for (j = 0; j < RGBLIGHT_EFFECT_SNAKE_LENGTH; j++) {
@@ -1323,7 +1323,7 @@ void rgblight_effect_knight(animation_status_t *anim) {
led[i].r = 0;
led[i].g = 0;
led[i].b = 0;
-# ifdef RGBW
+# ifdef WS2812_RGBW
led[i].w = 0;
# endif
}
@@ -1337,7 +1337,7 @@ void rgblight_effect_knight(animation_status_t *anim) {
led[cur].r = 0;
led[cur].g = 0;
led[cur].b = 0;
-# ifdef RGBW
+# ifdef WS2812_RGBW
led[cur].w = 0;
# endif
}
diff --git a/tests/basic/test_one_shot_keys.cpp b/tests/basic/test_one_shot_keys.cpp
index 9748dad7daf..64a8673a5cd 100644
--- a/tests/basic/test_one_shot_keys.cpp
+++ b/tests/basic/test_one_shot_keys.cpp
@@ -32,10 +32,7 @@ TEST_F(OneShot, OSMWithoutAdditionalKeypressDoesNothing) {
/* Press and release OSM key*/
EXPECT_NO_REPORT(driver);
- osm_key.press();
- run_one_scan_loop();
- osm_key.release();
- run_one_scan_loop();
+ tap_key(osm_key);
VERIFY_AND_CLEAR(driver);
/* OSM are added when an actual report is send */
@@ -88,10 +85,7 @@ TEST_P(OneShotParametrizedTestFixture, OSMWithAdditionalKeypress) {
/* Press and release OSM */
EXPECT_NO_REPORT(driver);
- osm_key.press();
- run_one_scan_loop();
- osm_key.release();
- run_one_scan_loop();
+ tap_key(osm_key);
VERIFY_AND_CLEAR(driver);
/* Press regular key */
@@ -171,18 +165,12 @@ TEST_F(OneShot, OSMChainingTwoOSMs) {
/* Press and release OSM1 */
EXPECT_NO_REPORT(driver);
- osm_key1.press();
- run_one_scan_loop();
- osm_key1.release();
- run_one_scan_loop();
+ tap_key(osm_key1);
VERIFY_AND_CLEAR(driver);
/* Press and relesea OSM2 */
EXPECT_NO_REPORT(driver);
- osm_key2.press();
- run_one_scan_loop();
- osm_key2.release();
- run_one_scan_loop();
+ tap_key(osm_key2);
VERIFY_AND_CLEAR(driver);
/* Press regular key */
@@ -209,22 +197,13 @@ TEST_F(OneShot, OSMDoubleTapNotLockingOSMs) {
/* Press and release OSM1 */
EXPECT_NO_REPORT(driver);
- osm_key1.press();
- run_one_scan_loop();
- osm_key1.release();
- run_one_scan_loop();
+ tap_key(osm_key1);
VERIFY_AND_CLEAR(driver);
/* Press and release OSM2 twice */
EXPECT_NO_REPORT(driver);
- osm_key2.press();
- run_one_scan_loop();
- osm_key2.release();
- run_one_scan_loop();
- osm_key2.press();
- run_one_scan_loop();
- osm_key2.release();
- run_one_scan_loop();
+ tap_key(osm_key2);
+ tap_key(osm_key2);
VERIFY_AND_CLEAR(driver);
/* Press regular key */
@@ -263,10 +242,7 @@ TEST_F(OneShot, OSMHoldNotLockingOSMs) {
/* Press and release OSM1 */
EXPECT_NO_REPORT(driver);
- osm_key1.press();
- run_one_scan_loop();
- osm_key1.release();
- run_one_scan_loop();
+ tap_key(osm_key1);
VERIFY_AND_CLEAR(driver);
/* Press and hold OSM2 */
@@ -279,10 +255,7 @@ TEST_F(OneShot, OSMHoldNotLockingOSMs) {
/* Press and release regular key */
EXPECT_REPORT(driver, (osm_key1.report_code, osm_key2.report_code, regular_key.report_code)).Times(1);
EXPECT_REPORT(driver, (osm_key2.report_code)).Times(1);
- regular_key.press();
- run_one_scan_loop();
- regular_key.release();
- run_one_scan_loop();
+ tap_key(regular_key);
VERIFY_AND_CLEAR(driver);
/* Release OSM2 */
@@ -362,10 +335,7 @@ TEST_F(OneShot, OSLWithOsmAndAdditionalKeypress) {
/* Press and release OSM */
EXPECT_NO_REPORT(driver);
- osm_key.press();
- run_one_scan_loop();
- osm_key.release();
- run_one_scan_loop();
+ tap_key(osm_key);
EXPECT_TRUE(layer_state_is(1));
VERIFY_AND_CLEAR(driver);
diff --git a/tmk_core/protocol.mk b/tmk_core/protocol.mk
index fd5342d637e..796b4e87871 100644
--- a/tmk_core/protocol.mk
+++ b/tmk_core/protocol.mk
@@ -66,6 +66,10 @@ ifeq ($(strip $(NO_USB_STARTUP_CHECK)), yes)
OPT_DEFS += -DNO_USB_STARTUP_CHECK
endif
+ifeq ($(strip $(USB_WAIT_FOR_ENUMERATION)), yes)
+ OPT_DEFS += -DUSB_WAIT_FOR_ENUMERATION
+endif
+
ifeq ($(strip $(JOYSTICK_SHARED_EP)), yes)
OPT_DEFS += -DJOYSTICK_SHARED_EP
SHARED_EP_ENABLE = yes
diff --git a/tmk_core/protocol/chibios/chibios.c b/tmk_core/protocol/chibios/chibios.c
index a02097785f4..a249af8d38c 100644
--- a/tmk_core/protocol/chibios/chibios.c
+++ b/tmk_core/protocol/chibios/chibios.c
@@ -51,6 +51,11 @@
#define USB_GETSTATUS_REMOTE_WAKEUP_ENABLED (2U)
+#ifdef WAIT_FOR_USB
+// TODO: Remove backwards compatibility with old define
+# define USB_WAIT_FOR_ENUMERATION
+#endif
+
/* -------------------------
* TMK host driver defs
* -------------------------
@@ -143,7 +148,7 @@ void protocol_pre_init(void) {
/* Wait until USB is active */
while (true) {
-#if defined(WAIT_FOR_USB)
+#if defined(USB_WAIT_FOR_ENUMERATION)
if (USB_DRIVER.state == USB_ACTIVE) {
driver = &chibios_driver;
break;
diff --git a/tmk_core/protocol/lufa/lufa.c b/tmk_core/protocol/lufa/lufa.c
index ffc2911bda2..26e0bfacdb8 100644
--- a/tmk_core/protocol/lufa/lufa.c
+++ b/tmk_core/protocol/lufa/lufa.c
@@ -71,6 +71,11 @@
# include "xap.h"
#endif
+#ifdef WAIT_FOR_USB
+// TODO: Remove backwards compatibility with old define
+# define USB_WAIT_FOR_ENUMERATION
+#endif
+
uint8_t keyboard_idle = 0;
/* 0: Boot Protocol, 1: Report Protocol(default) */
uint8_t keyboard_protocol = 1;
@@ -916,7 +921,7 @@ void protocol_pre_init(void) {
/* wait for USB startup & debug output */
-#ifdef WAIT_FOR_USB
+#ifdef USB_WAIT_FOR_ENUMERATION
while (USB_DeviceState != DEVICE_STATE_Configured) {
# if defined(INTERRUPT_CONTROL_ENDPOINT)
;