mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-08-21 23:13:00 +00:00
Compare commits
120 Commits
breakpoint
...
0.17.1
Author | SHA1 | Date | |
---|---|---|---|
![]() |
43f8d365ba | ||
![]() |
1e402060a6 | ||
![]() |
fa3dd373b4 | ||
![]() |
410686dc03 | ||
![]() |
e13bb58c40 | ||
![]() |
7fd3d76faa | ||
![]() |
cbbdcec290 | ||
![]() |
31dfdaa1ba | ||
![]() |
a8677ed296 | ||
![]() |
71472a1692 | ||
![]() |
aaaf3ff66a | ||
![]() |
666cba5c2e | ||
![]() |
47fcb40a81 | ||
![]() |
8ea836f2b2 | ||
![]() |
0a04064362 | ||
![]() |
27f9e4775e | ||
![]() |
701db278e4 | ||
![]() |
46644b0a64 | ||
![]() |
3e9f000a97 | ||
![]() |
de4262f9aa | ||
![]() |
03d0182541 | ||
![]() |
c2e5953bc1 | ||
![]() |
84718c0ab7 | ||
![]() |
712f6cf450 | ||
![]() |
7b7fb63f4b | ||
![]() |
c114996034 | ||
![]() |
3077123bf0 | ||
![]() |
1c26c0bc9b | ||
![]() |
e8e45bca98 | ||
![]() |
0a45a19801 | ||
![]() |
5ab90cc72a | ||
![]() |
aa06893b58 | ||
![]() |
ad2e853611 | ||
![]() |
7982957f75 | ||
![]() |
fd01feae4b | ||
![]() |
b5104c3a93 | ||
![]() |
545923b0a0 | ||
![]() |
6d2f9c9c1e | ||
![]() |
82a7f4adda | ||
![]() |
89921e917a | ||
![]() |
6d7026e561 | ||
![]() |
811dbda20a | ||
![]() |
5ccb2fd003 | ||
![]() |
8be0496347 | ||
![]() |
8e128452db | ||
![]() |
8e5f8a5ff9 | ||
![]() |
d3dfa83b40 | ||
![]() |
7224d84167 | ||
![]() |
afbba27f42 | ||
![]() |
de207b97fa | ||
![]() |
b7ce3b1967 | ||
![]() |
dc2ce36d63 | ||
![]() |
1c45845178 | ||
![]() |
f37de9a212 | ||
![]() |
15dab01e6a | ||
![]() |
026d0e8bf1 | ||
![]() |
e49fa43a7f | ||
![]() |
5149728b23 | ||
![]() |
f18afffc8d | ||
![]() |
856029f7c5 | ||
![]() |
9d07ab88af | ||
![]() |
f7ab10a3c1 | ||
![]() |
c2045558d9 | ||
![]() |
b5a53a9946 | ||
![]() |
3f841a24f0 | ||
![]() |
a50b09cba5 | ||
![]() |
51cfb1b457 | ||
![]() |
dbd4ac5a3f | ||
![]() |
b4b34cd2cd | ||
![]() |
92665aef33 | ||
![]() |
7baf9b3f35 | ||
![]() |
d8ace624c8 | ||
![]() |
7c097ee6b4 | ||
![]() |
93c3a959a7 | ||
![]() |
9da1b86d71 | ||
![]() |
9316023290 | ||
![]() |
2f8704143e | ||
![]() |
a599550adb | ||
![]() |
de43b09d25 | ||
![]() |
6567b21688 | ||
![]() |
f6a7bf2a83 | ||
![]() |
c9b71f953f | ||
![]() |
5f72d54299 | ||
![]() |
1d75e20cd8 | ||
![]() |
5c7972760c | ||
![]() |
1c97a0375e | ||
![]() |
fbe236fa77 | ||
![]() |
b8bbd0cb9a | ||
![]() |
c681b6dbf3 | ||
![]() |
5d767f8361 | ||
![]() |
cf1e66b352 | ||
![]() |
f0b1c8ced9 | ||
![]() |
b85c224b7c | ||
![]() |
4c48760558 | ||
![]() |
95d20e6d8b | ||
![]() |
787165718d | ||
![]() |
706194b336 | ||
![]() |
5bcfc273ce | ||
![]() |
71b928fbec | ||
![]() |
9a587275cf | ||
![]() |
7c3cb99164 | ||
![]() |
7ff666340c | ||
![]() |
f330ef12b6 | ||
![]() |
5b16671d7a | ||
![]() |
8153b55e07 | ||
![]() |
d5ed3ae967 | ||
![]() |
cda343acbe | ||
![]() |
b554e4b612 | ||
![]() |
650be92cf9 | ||
![]() |
0e11b511e4 | ||
![]() |
2879573688 | ||
![]() |
25ec68c408 | ||
![]() |
3826fca637 | ||
![]() |
15a86d5c53 | ||
![]() |
cc7a3f8dc7 | ||
![]() |
a06b5cae41 | ||
![]() |
e22a183329 | ||
![]() |
6a0ed63eb1 | ||
![]() |
07f5147621 | ||
![]() |
89a5d5aea0 |
58
.github/stale.yml
vendored
58
.github/stale.yml
vendored
@@ -1,58 +0,0 @@
|
||||
# Configuration for probot-stale - https://github.com/probot/stale
|
||||
|
||||
# General configuration
|
||||
|
||||
# Pull request specific configuration
|
||||
pulls:
|
||||
staleLabel: awaiting changes
|
||||
# Number of days of inactivity before an Issue or Pull Request becomes stale
|
||||
daysUntilStale: 45
|
||||
# Number of days of inactivity before a stale Issue or Pull Request is closed.
|
||||
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
|
||||
daysUntilClose: 30
|
||||
# Comment to post when marking as stale. Set to `false` to disable
|
||||
markComment: >
|
||||
Thank you for your contribution!
|
||||
|
||||
This pull request has been automatically marked as stale because it has not had
|
||||
activity in the last 45 days. It will be closed in 30 days if no further activity occurs.
|
||||
Please feel free to give a status update now, or re-open when it's ready.
|
||||
|
||||
For maintainers: Please label with `awaiting review`, `breaking_change`, `in progress`, or `on hold` to prevent
|
||||
the issue from being re-flagged.
|
||||
# Comment to post when closing a stale Issue or Pull Request.
|
||||
closeComment: >
|
||||
Thank you for your contribution!
|
||||
|
||||
This pull request has been automatically closed because it has not had activity in the last 30 days.
|
||||
Please feel free to give a status update now, ping for review, or re-open when it's ready.
|
||||
# Limit the number of actions per hour, from 1-30. Default is 30
|
||||
limitPerRun: 30
|
||||
exemptLabels:
|
||||
- awaiting review
|
||||
- breaking_change
|
||||
- in progress
|
||||
- on hold
|
||||
|
||||
# Issue specific configuration
|
||||
issues:
|
||||
staleLabel: stale
|
||||
limitPerRun: 10
|
||||
daysUntilStale: 90
|
||||
daysUntilClose: 30
|
||||
markComment: >
|
||||
This issue has been automatically marked as stale because it has not had activity in the
|
||||
last 90 days. It will be closed in the next 30 days unless it is tagged properly or other activity
|
||||
occurs.
|
||||
|
||||
For maintainers: Please label with `bug`, `in progress`, `on hold`, `discussion` or `to do` to prevent
|
||||
the issue from being re-flagged.
|
||||
closeComment: >
|
||||
This issue has been automatically closed because it has not had activity in the last 30 days.
|
||||
If this issue is still valid, re-open the issue and let us know.
|
||||
exemptLabels:
|
||||
- bug
|
||||
- in progress
|
||||
- on hold
|
||||
- discussion
|
||||
- to do
|
2
.github/workflows/auto_tag.yml
vendored
2
.github/workflows/auto_tag.yml
vendored
@@ -27,7 +27,7 @@ jobs:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Bump version and push tag
|
||||
uses: anothrNick/github-tag-action@1.26.0
|
||||
uses: anothrNick/github-tag-action@1.39.0
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
DEFAULT_BUMP: 'patch'
|
||||
|
3
.github/workflows/lint.yml
vendored
3
.github/workflows/lint.yml
vendored
@@ -16,6 +16,9 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip3 install -r requirements-dev.txt
|
||||
|
||||
- uses: trilom/file-changes-action@v1.2.4
|
||||
id: file_changes
|
||||
with:
|
||||
|
64
.github/workflows/stale.yml
vendored
Normal file
64
.github/workflows/stale.yml
vendored
Normal file
@@ -0,0 +1,64 @@
|
||||
name: 'Close stale issues and PRs'
|
||||
on:
|
||||
schedule:
|
||||
- cron: '30 1 * * *'
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
issues: write
|
||||
pull-requests: write
|
||||
|
||||
jobs:
|
||||
stale:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/stale@v5
|
||||
with:
|
||||
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
remove-stale-when-updated: true
|
||||
exempt-draft-pr: true
|
||||
ascending: true
|
||||
operations-per-run: 150
|
||||
|
||||
stale-issue-label: stale
|
||||
days-before-issue-stale: 90
|
||||
days-before-issue-close: 30
|
||||
exempt-issue-labels: bug,in progress,on hold,discussion,to do
|
||||
|
||||
stale-issue-message: >
|
||||
This issue has been automatically marked as stale because it has not had activity in the
|
||||
last 90 days. It will be closed in the next 30 days unless it is tagged properly or other activity
|
||||
occurs.
|
||||
|
||||
For maintainers: Please label with `bug`, `in progress`, `on hold`, `discussion` or `to do` to prevent
|
||||
the issue from being re-flagged.
|
||||
|
||||
close-issue-message: >
|
||||
This issue has been automatically closed because it has not had activity in the last 30 days.
|
||||
If this issue is still valid, re-open the issue and let us know.
|
||||
|
||||
// [stale-action-closed]
|
||||
|
||||
stale-pr-label: stale
|
||||
days-before-pr-stale: 45
|
||||
days-before-pr-close: 30
|
||||
exempt-pr-labels: bug,awaiting review,breaking_change,in progress,on hold
|
||||
|
||||
stale-pr-message: >
|
||||
Thank you for your contribution!
|
||||
|
||||
This pull request has been automatically marked as stale because it has not had
|
||||
activity in the last 45 days. It will be closed in 30 days if no further activity occurs.
|
||||
Please feel free to give a status update now, or re-open when it's ready.
|
||||
|
||||
For maintainers: Please label with `bug`, `awaiting review`, `breaking_change`, `in progress`, or `on hold`
|
||||
to prevent the issue from being re-flagged.
|
||||
|
||||
close-pr-message: >
|
||||
Thank you for your contribution!
|
||||
|
||||
This pull request has been automatically closed because it has not had activity in the last 30 days.
|
||||
Please feel free to give a status update now, ping for review, or re-open when it's ready.
|
||||
|
||||
// [stale-action-closed]
|
2
.github/workflows/unit_test.yml
vendored
2
.github/workflows/unit_test.yml
vendored
@@ -20,7 +20,7 @@ jobs:
|
||||
test:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
container: qmkfm/base_container
|
||||
container: qmkfm/qmk_cli
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
4
.gitignore
vendored
4
.gitignore
vendored
@@ -67,10 +67,12 @@ CMakeLists.txt
|
||||
.vscode/temp.sql
|
||||
tags
|
||||
|
||||
# Ignore image files
|
||||
# Ignore image/font files
|
||||
*.gif
|
||||
*.jpg
|
||||
*.png
|
||||
*.ttf
|
||||
*.otf
|
||||
|
||||
# Things Travis sees
|
||||
/.vs
|
||||
|
@@ -7,6 +7,8 @@
|
||||
# to_json: Default `true`. Set to `false` to exclude this mapping from info.json
|
||||
# to_c: Default `true`. Set to `false` to exclude this mapping from config.h
|
||||
# warn_duplicate: Default `true`. Set to `false` to turn off warning when a value exists in both places
|
||||
# deprecated: Default `false`. Set to `true` to turn on warning when a value exists
|
||||
# invalid: Default `false`. Set to `true` to generate errors when a value exists
|
||||
"AUDIO_VOICES": {"info_key": "audio.voices", "value_type": "bool"},
|
||||
"BACKLIGHT_BREATHING": {"info_key": "backlight.breathing", "value_type": "bool"},
|
||||
"BREATHING_PERIOD": {"info_key": "backlight.breathing_period", "value_type": "int"},
|
||||
@@ -19,7 +21,6 @@
|
||||
"DEVICE_VER": {"info_key": "usb.device_ver", "value_type": "hex"},
|
||||
# TODO: Replace ^^^ with vvv
|
||||
#"DEVICE_VER": {"info_key": "usb.device_version", "value_type": "bcd_version"},
|
||||
"DESCRIPTION": {"info_key": "keyboard_folder", "value_type": "str", "to_json": false},
|
||||
"DIODE_DIRECTION": {"info_key": "diode_direction"},
|
||||
"DOUBLE_TAP_SHIFT_TURNS_ON_CAPS_WORD": {"info_key": "caps_word.double_tap_shift_turns_on", "value_type": "bool"},
|
||||
"FORCE_NKRO": {"info_key": "usb.force_nkro", "value_type": "bool"},
|
||||
@@ -102,4 +103,11 @@
|
||||
"USB_MAX_POWER_CONSUMPTION": {"info_key": "usb.max_power", "value_type": "int"},
|
||||
"USB_POLLING_INTERVAL_MS": {"info_key": "usb.polling_interval", "value_type": "int"},
|
||||
"USB_SUSPEND_WAKEUP_DELAY": {"info_key": "usb.suspend_wakeup_delay", "value_type": "int"},
|
||||
|
||||
# Items we want flagged in lint
|
||||
"NO_ACTION_MACRO": {"info_key": "_invalid.no_action_macro", "invalid": true},
|
||||
"NO_ACTION_FUNCTION": {"info_key": "_invalid.no_action_function", "invalid": true},
|
||||
"DESCRIPTION": {"info_key": "_invalid.usb_description", "invalid": true},
|
||||
"DEBOUNCING_DELAY": {"info_key": "_invalid.debouncing_delay", "invalid": true},
|
||||
"PREVENT_STUCK_MODIFIERS": {"info_key": "_invalid.prevent_stuck_mods", "invalid": true},
|
||||
}
|
||||
|
@@ -7,6 +7,8 @@
|
||||
# to_json: Default `true`. Set to `false` to exclude this mapping from info.json
|
||||
# to_c: Default `true`. Set to `false` to exclude this mapping from rules.mk
|
||||
# warn_duplicate: Default `true`. Set to `false` to turn off warning when a value exists in both places
|
||||
# deprecated: Default `false`. Set to `true` to turn on warning when a value exists
|
||||
# invalid: Default `false`. Set to `true` to generate errors when a value exists
|
||||
"BOARD": {"info_key": "board"},
|
||||
"BOOTLOADER": {"info_key": "bootloader", "warn_duplicate": false},
|
||||
"BLUETOOTH": {"info_key": "bluetooth.driver"},
|
||||
@@ -24,5 +26,10 @@
|
||||
"SECURE_ENABLE": {"info_key": "secure.enabled", "value_type": "bool"},
|
||||
"SPLIT_KEYBOARD": {"info_key": "split.enabled", "value_type": "bool"},
|
||||
"SPLIT_TRANSPORT": {"info_key": "split.transport.protocol", "to_c": false},
|
||||
"WAIT_FOR_USB": {"info_key": "usb.wait_for", "value_type": "bool"}
|
||||
"WAIT_FOR_USB": {"info_key": "usb.wait_for", "value_type": "bool"},
|
||||
|
||||
# Items we want flagged in lint
|
||||
"CTPC": {"info_key": "_deprecated.ctpc", "deprecated": true},
|
||||
"CONVERT_TO_PROTON_C": {"info_key": "_deprecated.ctpc", "deprecated": true},
|
||||
"VIAL_ENABLE": {"info_key": "_invalid.vial", "invalid": true},
|
||||
}
|
||||
|
@@ -145,7 +145,10 @@
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"properties": {
|
||||
"label": {"type": "string"},
|
||||
"label": {
|
||||
"type": "string",
|
||||
"pattern": "^[^\\n]*$"
|
||||
},
|
||||
"matrix": {
|
||||
"type": "array",
|
||||
"minItems": 2,
|
||||
|
@@ -47,28 +47,11 @@ Criteria for acceptance:
|
||||
* This should be in Markdown format, with a name in the format `PR12345.md`, substituting the digits for your PR's ID.
|
||||
* One strong recommendation that the ChangeLog document matches the PR description on GitHub, so as to ensure traceability.
|
||||
|
||||
# Checklists
|
||||
## Checklists
|
||||
|
||||
This section documents various processes we use when running the Breaking Changes process.
|
||||
|
||||
## Creating the `develop` branch
|
||||
|
||||
This happens immediately after the previous `develop` branch is merged.
|
||||
|
||||
* `qmk_firmware` git commands
|
||||
* [ ] `git checkout master`
|
||||
* [ ] `git pull --ff-only`
|
||||
* [ ] `git checkout -b develop`
|
||||
* [ ] Edit `readme.md`
|
||||
* [ ] Add a big notice at the top that this is a testing branch.
|
||||
* [ ] Include a link to this document
|
||||
* [ ] `git commit -m 'Branch point for <DATE> Breaking Change'`
|
||||
* [ ] `git tag breakpoint_<YYYY>_<MM>_<DD>`
|
||||
* [ ] `git tag <next_version>` # Prevent the breakpoint tag from confusing version incrementing
|
||||
* [ ] `git push upstream develop`
|
||||
* [ ] `git push --tags`
|
||||
|
||||
## 4 Weeks Before Merge
|
||||
### 4 Weeks Before Merge
|
||||
|
||||
* `develop` is now closed to new PR's, only fixes for current PR's may be merged
|
||||
* Post call for testers
|
||||
@@ -76,7 +59,7 @@ This happens immediately after the previous `develop` branch is merged.
|
||||
* [ ] GitHub PR
|
||||
* [ ] https://reddit.com/r/olkb
|
||||
|
||||
## 2 Weeks Before Merge
|
||||
### 2 Weeks Before Merge
|
||||
|
||||
* `develop` is now closed to existing PR merges, only bugfixes for previous merges may be included
|
||||
* Post call for testers
|
||||
@@ -84,21 +67,21 @@ This happens immediately after the previous `develop` branch is merged.
|
||||
* [ ] GitHub PR
|
||||
* [ ] https://reddit.com/r/olkb
|
||||
|
||||
## 1 Week Before Merge
|
||||
### 1 Week Before Merge
|
||||
|
||||
* Announce that master will be closed from <2 Days Before> to <Day of Merge>
|
||||
* [ ] Discord
|
||||
* [ ] GitHub PR
|
||||
* [ ] https://reddit.com/r/olkb
|
||||
|
||||
## 2 Days Before Merge
|
||||
### 2 Days Before Merge
|
||||
|
||||
* Announce that master is closed for 2 days
|
||||
* [ ] Discord
|
||||
* [ ] GitHub PR
|
||||
* [ ] https://reddit.com/r/olkb
|
||||
|
||||
## Day Of Merge
|
||||
### Day Of Merge
|
||||
|
||||
* `qmk_firmware` git commands
|
||||
* [ ] `git checkout develop`
|
||||
@@ -115,8 +98,39 @@ This happens immediately after the previous `develop` branch is merged.
|
||||
* [ ] `git checkout master`
|
||||
* [ ] `git pull --ff-only`
|
||||
* [ ] `git merge --no-ff develop`
|
||||
* [ ] `git tag <next_version>` # Prevent the breakpoint tag from confusing version incrementing
|
||||
* [ ] `git push upstream <next_version>`
|
||||
* [ ] `git push upstream master`
|
||||
|
||||
## Post-merge operations
|
||||
|
||||
### Updating the `develop` branch
|
||||
|
||||
This happens immediately after the previous `develop` branch is merged to `master`.
|
||||
|
||||
* `qmk_firmware` git commands
|
||||
* [ ] `git checkout master`
|
||||
* [ ] `git pull --ff-only`
|
||||
* [ ] `git checkout develop`
|
||||
* [ ] `git pull --ff-only`
|
||||
* [ ] `git merge --no-ff master`
|
||||
* [ ] Edit `readme.md`
|
||||
* [ ] Add a big notice at the top that this is a testing branch.
|
||||
* [ ] Include a link to this document
|
||||
* [ ] `git commit -m 'Branch point for <DATE> Breaking Change'`
|
||||
* [ ] `git tag breakpoint_<YYYY>_<MM>_<DD>`
|
||||
* [ ] `git push upstream breakpoint_<YYYY>_<MM>_<DD>`
|
||||
|
||||
* All submodules under `lib` now need to be checked against their QMK-based forks:
|
||||
* [ ] `git submodule foreach git log -n1`
|
||||
* [ ] Validate each submodule SHA1 matches the qmk fork, e.g. for ChibiOS:
|
||||
* Go to [qmk/ChibiOS](https://github.com/qmk/ChibiOS)
|
||||
* Compare the commit hash in the above output to the commit hash in the repository
|
||||
* If there's a mismatch:
|
||||
* [ ] `cd lib/chibios`
|
||||
* [ ] `git fetch --all`
|
||||
* [ ] `git checkout master`
|
||||
* [ ] `git reset --hard <commit hash>`
|
||||
* [ ] `git push origin master --force-with-lease`
|
||||
|
||||
* (Optional) [update ChibiOS + ChibiOS-Contrib on `develop`](chibios_upgrade_instructions.md)
|
||||
|
@@ -2,6 +2,8 @@
|
||||
|
||||
QMK runs on any USB-capable AVR or ARM microcontroller with enough flash space - generally 32kB+ for AVR, and 64kB+ for ARM. With significant disabling of features, QMK may *just* squeeze into 16kB AVR MCUs.
|
||||
|
||||
Features within QMK may or may not be compatible with every microcontroller.
|
||||
|
||||
## Atmel AVR
|
||||
|
||||
The following use [LUFA](https://www.fourwalledcubicle.com/LUFA.php) as the USB stack:
|
||||
|
@@ -39,7 +39,7 @@ In practice, this means that you can check whether a given modifier is active wi
|
||||
|
||||
To check that *only* a specific set of mods is active at a time, AND the modifier state and your desired mod mask as explained above and compare the result to the mod mask itself: `get_mods() & <mod mask> == <mod mask>`.
|
||||
|
||||
For example, let's say you want to trigger a piece of custom code if one-shot left control and one-shot left shift are on but every other one-shot mods are off. To do so, you can compose the desired mod mask by combining the mod bits for left control and shift with `(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT))` and then plug it in: `get_oneshot_mods & (MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT)) == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT))`. Using `MOD_MASK_CS` instead for the mod bitmask would have forced you to press four modifier keys (both versions of control and shift) to fulfill the condition.
|
||||
For example, let's say you want to trigger a piece of custom code if one-shot left control and one-shot left shift are on but every other one-shot mods are off. To do so, you can compose the desired mod mask by combining the mod bits for left control and shift with `(MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT))` and then plug it in: `get_oneshot_mods() & (MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT)) == (MOD_BIT(KC_LCTL) | MOD_BIT(KC_LSFT))`. Using `MOD_MASK_CS` instead for the mod bitmask would have forced you to press four modifier keys (both versions of control and shift) to fulfill the condition.
|
||||
|
||||
The full list of mod masks is as follows:
|
||||
|
||||
|
@@ -10,6 +10,10 @@ MIDI_ENABLE = yes
|
||||
|
||||
There are two MIDI systems in QMK: basic and advanced. With basic MIDI you will only be able to send Note On and Note Off messages using the note keycodes, meaning that keycodes like `MI_OCTU` and `MI_OCTD` will not work. Advanced MIDI allows you to do things like octave shifts, channel changes, velocity changes, modulation, and more.
|
||||
|
||||
### Caveats
|
||||
|
||||
MIDI requires 2 USB endpoints and as such may not work on some hardware such as V-USB controllers.
|
||||
|
||||
### Basic MIDI
|
||||
|
||||
To enable basic MIDI, add the following to your `config.h`:
|
||||
|
@@ -10,6 +10,8 @@ For this, we will mostly be talking about the generic implementation used by the
|
||||
|
||||
!> ARM split supports most QMK subsystems when using the 'serial' and 'serial_usart' drivers. I2C slave is currently unsupported.
|
||||
|
||||
!> Both sides must use the same MCU family, for eg two Pro Micro-compatible controllers or two Blackpills. Currently, mixing AVR and ARM is not possible as ARM vs AVR uses different method for serial communication, and are not compatible. Moreover Blackpill's uses 3.3v logic, and atmega32u4 uses 5v logic.
|
||||
|
||||
## Compatibility Overview
|
||||
|
||||
| Transport | AVR | ARM |
|
||||
|
@@ -266,7 +266,7 @@ Flashing sequence:
|
||||
### `make` Targets
|
||||
|
||||
* `:dfu-util`: Waits until an STM32 bootloader device is available, and then flashes the firmware.
|
||||
* `:dfu-util-split-left` and `:dfu-util-split-right`: Flashes the firmware as with `:avrdude`, but also sets the handedness setting in EEPROM. This is ideal for Proton-C-based split keyboards.
|
||||
* `:dfu-util-split-left` and `:dfu-util-split-right`: Flashes the firmware as with `:dfu-util`, but also sets the handedness setting in EEPROM. This is ideal for Proton-C-based split keyboards.
|
||||
* `:st-link-cli`: Allows you to flash the firmware via the ST-Link CLI utility, rather than dfu-util. Requires an ST-Link dongle.
|
||||
* `:st-flash`: Allows you to flash the firmware via the `st-flash` utility from [STLink Tools](https://github.com/stlink-org/stlink), rather than dfu-util. Requires an ST-Link dongle.
|
||||
|
||||
|
@@ -35,7 +35,7 @@ USB for a given key.
|
||||
|
||||
## 3. What the Event Input/Kernel Does
|
||||
|
||||
The *scancode* is mapped to a *keycode* dependent on the keyboard [60-keyboard.hwdb at Master](https://github.com/systemd/systemd/blob/master/hwdb.d/60-keyboard.hwdb). Without this mapping, the operating system will not receive a valid keycode and will be unable to do anything useful with that key press.
|
||||
The *scancode* is mapped to a *keycode* dependent on the keyboard [60-keyboard.hwdb at Main](https://github.com/systemd/systemd/blob/main/hwdb.d/60-keyboard.hwdb). Without this mapping, the operating system will not receive a valid keycode and will be unable to do anything useful with that key press.
|
||||
|
||||
## 4. What the Operating System Does
|
||||
|
||||
|
@@ -104,10 +104,8 @@ There are a number of extensions that you may want to install:
|
||||
* [Git Extension Pack](https://marketplace.visualstudio.com/items?itemName=donjayamanne.git-extension-pack) -
|
||||
This installs a bunch of Git related tools that may make using Git with QMK Firmware easier.
|
||||
* [EditorConfig for VS Code](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig) - _[Optional]_ - Helps to keep the code to the QMK Coding Conventions.
|
||||
* [Bracket Pair Colorizer 2](https://marketplace.visualstudio.com/items?itemName=CoenraadS.bracket-pair-colorizer-2) - _[Optional]_ - This color codes the brackets in your code, to make it easier to reference nested code.
|
||||
* [GitHub Markdown Preview](https://marketplace.visualstudio.com/items?itemName=bierner.github-markdown-preview) - _[Optional]_ - Makes the markdown preview in VS Code more like GitHub's.
|
||||
* [VS Live Share Extension Pack](https://marketplace.visualstudio.com/items?itemName=MS-vsliveshare.vsliveshare-pack) - _[Optional]_ - This extension allows somebody else to access your workspace (or you to access somebody else's workspace) and help out. This is great if you're having issues and need some help from somebody.
|
||||
* [VIM Keymap](https://marketplace.visualstudio.com/items?itemName=GiuseppeCesarano.vim-keymap) - _[Optional]_ - For those that prefer VIM style keybindings. There are other options for this, too.
|
||||
|
||||
Restart once you've installed any extensions
|
||||
|
||||
|
@@ -87,9 +87,13 @@ To configure the default layer sounds, you would want to define this in your `co
|
||||
|
||||
## Resetting the keyboard
|
||||
|
||||
There is the `RESET` quantum keycode that you can use. But if you want to reset the board as part of a macro, rather than hitting a key separately, you can do that.
|
||||
There is the `QK_REBOOT` or `QK_RBT` quantum keycode that you can use. But if you want to reset the board as part of a macro, rather than hitting a key separately, you can do that.
|
||||
|
||||
And to do so, add `reset_keyboard()` to your function or macro, and this will reset to bootloader.
|
||||
And to do so, add `soft_reset_keyboard()` to your function or macro.
|
||||
|
||||
## Reset to bootloader
|
||||
|
||||
To reset to the bootloader use `QK_BOOTLOADER` or `QK_BOOT` keycode or `reset_keyboard()` function.
|
||||
|
||||
## Wiping the EEPROM (Persistent Storage)
|
||||
|
||||
|
@@ -89,7 +89,7 @@ Example:
|
||||
|
||||
Direct pins are when you connect one side of the switch to GND and the other side to a GPIO pin on your MCU. No diode is required, but there is a 1:1 mapping between switches and pins.
|
||||
|
||||
When specifying direct pins you need to arrange them in nested arrays. The outer array consists of rows, while the inner array is a text string corresponding to a pin. You can use `null` to indicate an empty spot in the matrix.
|
||||
When specifying direct pins you need to arrange them in nested arrays. The outer array consists of rows, while the inner array uses text strings to identify the pins used in each row. You can use `null` to indicate an empty spot in the matrix.
|
||||
|
||||
Example:
|
||||
|
||||
|
@@ -252,7 +252,7 @@ BOOTLOADER = stm32-dfu
|
||||
### `make` 构建目标
|
||||
|
||||
* `:dfu-util`: 每5秒检测一次直到发现可用的STM32 bootloader设备,然后进行固件刷写。
|
||||
* `:dfu-util-split-left` 和 `:dfu-util-split-right`: 同 `:avrdude` 一样会刷写固件,但额外地会设置手性设置到EEPROM中,对于基于Proton-C的分体式键盘这是理想的方法。
|
||||
* `:dfu-util-split-left` 和 `:dfu-util-split-right`: 同 `:dfu-util` 一样会刷写固件,但额外地会设置手性设置到EEPROM中,对于基于Proton-C的分体式键盘这是理想的方法。
|
||||
* `:st-link-cli`: 通过ST-Link CLI工具集而非dfu-util进行刷写,需要有ST-Link电子狗。
|
||||
* `:st-flash`: 通过[STLink工具](https://github.com/stlink-org/stlink)内的 `st-flash` 工具而非dfu-util进行刷写,需要有ST-Link电子狗。
|
||||
|
||||
|
@@ -63,7 +63,7 @@ bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
|
||||
bool AW20216_write(pin_t cs_pin, uint8_t page, uint8_t reg, uint8_t* data, uint8_t len) {
|
||||
static uint8_t s_spi_transfer_buffer[2] = {0};
|
||||
|
||||
if (!spi_start(cs_pin, false, 0, AW_SPI_DIVISOR)) {
|
||||
if (!spi_start(cs_pin, false, 3, AW_SPI_DIVISOR)) {
|
||||
spi_stop();
|
||||
return false;
|
||||
}
|
||||
|
@@ -23,8 +23,8 @@
|
||||
// clang-format off
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_QWERTY] = LAYOUT(
|
||||
KC_VOLU, KC_MPLY, KC_MPRV, RESET,
|
||||
KC_VOLD, KC_MUTE, KC_MNXT, RESET
|
||||
KC_VOLU, KC_MPLY, KC_MPRV, QK_BOOT,
|
||||
KC_VOLD, KC_MUTE, KC_MNXT, QK_BOOT
|
||||
),
|
||||
|
||||
};
|
||||
|
137
keyboards/abatskeyboardclub/nayeon/config.h
Normal file
137
keyboards/abatskeyboardclub/nayeon/config.h
Normal file
@@ -0,0 +1,137 @@
|
||||
/*
|
||||
Copyright 2022 Ramon Imbao
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x4B47
|
||||
#define PRODUCT_ID 0x0001
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER Abats Keyboard Club
|
||||
#define PRODUCT Nayeon
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 6
|
||||
#define MATRIX_COLS 17
|
||||
|
||||
/*
|
||||
* Keyboard Matrix Assignments
|
||||
*
|
||||
* Change this to how you wired your keyboard
|
||||
* COLS: AVR pins used for columns, left to right
|
||||
* ROWS: AVR pins used for rows, top to bottom
|
||||
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
|
||||
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
|
||||
*
|
||||
*/
|
||||
#define MATRIX_ROW_PINS { B2, B3, B7, D6, D3, D2 }
|
||||
#define MATRIX_COL_PINS { F0, F1, F4, F5, F6, F7, C7, C6, B6, B5, B4, D7, D4, D5, B0, B1, D1 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW, ROW2COL */
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/*
|
||||
* Split Keyboard specific options, make sure you have 'SPLIT_KEYBOARD = yes' in your rules.mk, and define SOFT_SERIAL_PIN.
|
||||
*/
|
||||
#define SOFT_SERIAL_PIN D0 // or D1, D2, D3, E6
|
||||
|
||||
#define RGB_DI_PIN E2
|
||||
#ifdef RGB_DI_PIN
|
||||
# define RGBLED_NUM 26
|
||||
# define RGBLIGHT_HUE_STEP 8
|
||||
# define RGBLIGHT_SAT_STEP 8
|
||||
# define RGBLIGHT_VAL_STEP 8
|
||||
//# define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */
|
||||
//# define RGBLIGHT_SLEEP /* If defined, the RGB lighting will be switched off when the host goes to sleep */
|
||||
/*== or choose animations ==*/
|
||||
# define RGBLIGHT_EFFECT_BREATHING
|
||||
# define RGBLIGHT_EFFECT_RAINBOW_MOOD
|
||||
# define RGBLIGHT_EFFECT_RAINBOW_SWIRL
|
||||
//# define RGBLIGHT_EFFECT_SNAKE
|
||||
//# define RGBLIGHT_EFFECT_KNIGHT
|
||||
# define RGBLIGHT_EFFECT_CHRISTMAS
|
||||
# define RGBLIGHT_EFFECT_STATIC_GRADIENT
|
||||
# define RGBLIGHT_EFFECT_RGB_TEST
|
||||
# define RGBLIGHT_EFFECT_ALTERNATING
|
||||
/*== customize breathing effect ==*/
|
||||
/*==== (DEFAULT) use fixed table instead of exp() and sin() ====*/
|
||||
//# define RGBLIGHT_BREATHE_TABLE_SIZE 256 // 256(default) or 128 or 64
|
||||
/*==== use exp() and sin() ====*/
|
||||
//# define RGBLIGHT_EFFECT_BREATHE_CENTER 1.85 // 1 to 2.7
|
||||
//# define RGBLIGHT_EFFECT_BREATHE_MAX 255 // 0 to 255
|
||||
#endif
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
/* 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
|
||||
|
||||
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||
* This is useful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||
*/
|
||||
//#define GRAVE_ESC_CTRL_OVERRIDE
|
||||
|
||||
/*
|
||||
* Force NKRO
|
||||
*
|
||||
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||
* makefile for this to work.)
|
||||
*
|
||||
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||
* until the next keyboard reset.
|
||||
*
|
||||
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||
* fully operational during normal computer usage.
|
||||
*
|
||||
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||
* power-up.
|
||||
*
|
||||
*/
|
||||
//#define FORCE_NKRO
|
||||
|
||||
/*
|
||||
* 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
|
||||
|
||||
|
||||
/* Bootmagic Lite key configuration */
|
||||
//#define BOOTMAGIC_LITE_ROW 0
|
||||
//#define BOOTMAGIC_LITE_COLUMN 0
|
299
keyboards/abatskeyboardclub/nayeon/info.json
Normal file
299
keyboards/abatskeyboardclub/nayeon/info.json
Normal file
@@ -0,0 +1,299 @@
|
||||
{
|
||||
"keyboard_name": "Nayeon",
|
||||
"url": "",
|
||||
"maintainer": "Ramon Imbao",
|
||||
"layouts": {
|
||||
"LAYOUT_ansi": {
|
||||
"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":1.5, "y":5.25},
|
||||
{"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":12.5, "y":5.25},
|
||||
{"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}
|
||||
]
|
||||
},
|
||||
"LAYOUT_iso": {
|
||||
"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":1.5, "y":5.25},
|
||||
{"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":12.5, "y":5.25},
|
||||
{"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}
|
||||
]
|
||||
},
|
||||
"LAYOUT_all": {
|
||||
"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":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":1.5, "y":5.25},
|
||||
{"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":12.5, "y":5.25},
|
||||
{"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}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
20
keyboards/abatskeyboardclub/nayeon/keymaps/default/config.h
Normal file
20
keyboards/abatskeyboardclub/nayeon/keymaps/default/config.h
Normal file
@@ -0,0 +1,20 @@
|
||||
/* Copyright 2022 Ramon Imbao
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define RGBLIGHT_LAYERS
|
||||
#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF
|
61
keyboards/abatskeyboardclub/nayeon/keymaps/default/keymap.c
Normal file
61
keyboards/abatskeyboardclub/nayeon/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,61 @@
|
||||
/* Copyright 2022 Ramon Imbao
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#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_SLCK, 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_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
)
|
||||
};
|
||||
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
|
||||
const rgblight_segment_t PROGMEM ll_none[] = RGBLIGHT_LAYER_SEGMENTS(
|
||||
{0, 1, HSV_OFF},
|
||||
{1, 1, HSV_OFF}
|
||||
);
|
||||
|
||||
const rgblight_segment_t PROGMEM ll_cl[] = RGBLIGHT_LAYER_SEGMENTS(
|
||||
{1, 1, HSV_OFF}
|
||||
);
|
||||
|
||||
const rgblight_segment_t PROGMEM ll_sl[] = RGBLIGHT_LAYER_SEGMENTS(
|
||||
{0, 1, HSV_OFF}
|
||||
);
|
||||
|
||||
const rgblight_segment_t* const PROGMEM rgb_layers[] = RGBLIGHT_LAYERS_LIST(ll_none, ll_cl, ll_sl);
|
||||
|
||||
void keyboard_post_init_user(void) {
|
||||
rgblight_layers = rgb_layers;
|
||||
}
|
||||
|
||||
bool led_update_user(led_t led_state) {
|
||||
uint8_t lock_bits = led_state.scroll_lock << 1 | led_state.caps_lock;
|
||||
for (uint8_t i=0; i<3; i++) {
|
||||
rgblight_set_layer_state(i, false);
|
||||
}
|
||||
if (lock_bits < 3) {
|
||||
rgblight_set_layer_state(lock_bits, true);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
#endif
|
19
keyboards/abatskeyboardclub/nayeon/keymaps/iso/config.h
Normal file
19
keyboards/abatskeyboardclub/nayeon/keymaps/iso/config.h
Normal file
@@ -0,0 +1,19 @@
|
||||
/* Copyright 2022 Ramon Imbao
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#define RGBLIGHT_LAYERS
|
||||
#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF
|
61
keyboards/abatskeyboardclub/nayeon/keymaps/iso/keymap.c
Normal file
61
keyboards/abatskeyboardclub/nayeon/keymaps/iso/keymap.c
Normal file
@@ -0,0 +1,61 @@
|
||||
/* Copyright 2022 Ramon Imbao
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = LAYOUT_iso(
|
||||
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_SLCK, 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_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
)
|
||||
};
|
||||
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
|
||||
const rgblight_segment_t PROGMEM ll_none[] = RGBLIGHT_LAYER_SEGMENTS(
|
||||
{0, 1, HSV_OFF},
|
||||
{1, 1, HSV_OFF}
|
||||
);
|
||||
|
||||
const rgblight_segment_t PROGMEM ll_cl[] = RGBLIGHT_LAYER_SEGMENTS(
|
||||
{1, 1, HSV_OFF}
|
||||
);
|
||||
|
||||
const rgblight_segment_t PROGMEM ll_sl[] = RGBLIGHT_LAYER_SEGMENTS(
|
||||
{0, 1, HSV_OFF}
|
||||
);
|
||||
|
||||
const rgblight_segment_t* const PROGMEM rgb_layers[] = RGBLIGHT_LAYERS_LIST(ll_none, ll_cl, ll_sl);
|
||||
|
||||
void keyboard_post_init_user(void) {
|
||||
rgblight_layers = rgb_layers;
|
||||
}
|
||||
|
||||
bool led_update_user(led_t led_state) {
|
||||
uint8_t lock_bits = led_state.scroll_lock << 1 | led_state.caps_lock;
|
||||
for (uint8_t i=0; i<3; i++) {
|
||||
rgblight_set_layer_state(i, false);
|
||||
}
|
||||
if (lock_bits < 3) {
|
||||
rgblight_set_layer_state(lock_bits, true);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
#endif
|
19
keyboards/abatskeyboardclub/nayeon/keymaps/via/config.h
Normal file
19
keyboards/abatskeyboardclub/nayeon/keymaps/via/config.h
Normal file
@@ -0,0 +1,19 @@
|
||||
/* Copyright 2022 Ramon Imbao
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#pragma once
|
||||
|
||||
#define RGBLIGHT_LAYERS
|
||||
#define RGBLIGHT_LAYERS_OVERRIDE_RGB_OFF
|
85
keyboards/abatskeyboardclub/nayeon/keymaps/via/keymap.c
Normal file
85
keyboards/abatskeyboardclub/nayeon/keymaps/via/keymap.c
Normal file
@@ -0,0 +1,85 @@
|
||||
/* Copyright 2022 Ramon Imbao
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#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_SLCK, 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_NO, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_NO, KC_UP,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
[1] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
[2] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
[3] = LAYOUT_all(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
};
|
||||
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
|
||||
const rgblight_segment_t PROGMEM ll_none[] = RGBLIGHT_LAYER_SEGMENTS(
|
||||
{0, 1, HSV_OFF},
|
||||
{1, 1, HSV_OFF}
|
||||
);
|
||||
|
||||
const rgblight_segment_t PROGMEM ll_cl[] = RGBLIGHT_LAYER_SEGMENTS(
|
||||
{1, 1, HSV_OFF}
|
||||
);
|
||||
|
||||
const rgblight_segment_t PROGMEM ll_sl[] = RGBLIGHT_LAYER_SEGMENTS(
|
||||
{0, 1, HSV_OFF}
|
||||
);
|
||||
|
||||
const rgblight_segment_t* const PROGMEM rgb_layers[] = RGBLIGHT_LAYERS_LIST(ll_none, ll_cl, ll_sl);
|
||||
|
||||
void keyboard_post_init_user(void) {
|
||||
rgblight_layers = rgb_layers;
|
||||
}
|
||||
|
||||
bool led_update_user(led_t led_state) {
|
||||
uint8_t lock_bits = led_state.scroll_lock << 1 | led_state.caps_lock;
|
||||
for (uint8_t i=0; i<3; i++) {
|
||||
rgblight_set_layer_state(i, false);
|
||||
}
|
||||
if (lock_bits < 3) {
|
||||
rgblight_set_layer_state(lock_bits, true);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
#endif
|
@@ -1,4 +1,4 @@
|
||||
/* Copyright 2021 Nathan Spears
|
||||
/* Copyright 2022 Ramon Imbao
|
||||
*
|
||||
* 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
|
||||
@@ -14,6 +14,4 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define TAPPING_TOGGLE 2
|
||||
#include "nayeon.h"
|
81
keyboards/abatskeyboardclub/nayeon/nayeon.h
Normal file
81
keyboards/abatskeyboardclub/nayeon/nayeon.h
Normal file
@@ -0,0 +1,81 @@
|
||||
/* Copyright 2022 Ramon Imbao
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
#define ___ KC_NO
|
||||
|
||||
// ANSI layout
|
||||
// Full backspace
|
||||
// Full right shift
|
||||
// Full left shift
|
||||
#define LAYOUT_ansi( \
|
||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, k0g, \
|
||||
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f, k1g, \
|
||||
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, k2f, k2g, \
|
||||
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
|
||||
k40, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4f, \
|
||||
k50, k51, k52, k57, k5b, k5c, k5d, k5e, k5f, k5g \
|
||||
) { \
|
||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, k0g }, \
|
||||
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f, k1g }, \
|
||||
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, k2f, k2g }, \
|
||||
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, ___, ___, ___, ___ }, \
|
||||
{ k40, ___, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, ___, ___, k4f, ___ }, \
|
||||
{ k50, k51, k52, ___, ___, ___, ___, k57, ___, ___, ___, k5b, k5c, k5d, k5e, k5f, k5g }, \
|
||||
}
|
||||
|
||||
// ISO layout
|
||||
// Full backspace
|
||||
// Full right shift
|
||||
// Split left shift
|
||||
#define LAYOUT_iso( \
|
||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, k0g, \
|
||||
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f, k1g, \
|
||||
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2e, k2f, k2g, \
|
||||
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k2d, \
|
||||
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4f, \
|
||||
k50, k51, k52, k57, k5b, k5c, k5d, k5e, k5f, k5g \
|
||||
) { \
|
||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, k0g }, \
|
||||
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f, k1g }, \
|
||||
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, k2f, k2g }, \
|
||||
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, ___, ___, ___, ___ }, \
|
||||
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, ___, ___, k4f, ___ }, \
|
||||
{ k50, k51, k52, ___, ___, ___, ___, k57, ___, ___, ___, k5b, k5c, k5d, k5e, k5f, k5g }, \
|
||||
}
|
||||
|
||||
// Layout for VIA
|
||||
// Split backspace
|
||||
// Split left shift
|
||||
// Split right shift
|
||||
#define LAYOUT_all( \
|
||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, k0g, \
|
||||
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k3d, k1e, k1f, k1g, \
|
||||
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, k2f, k2g, \
|
||||
k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, \
|
||||
k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d, k4f, \
|
||||
k50, k51, k52, k57, k5b, k5c, k5d, k5e, k5f, k5g \
|
||||
) { \
|
||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, k0c, k0d, k0e, k0f, k0g }, \
|
||||
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, k1c, k1d, k1e, k1f, k1g }, \
|
||||
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, k2c, k2d, k2e, k2f, k2g }, \
|
||||
{ k30, k31, k32, k33, k34, k35, k36, k37, k38, k39, k3a, k3b, k3c, k3d, ___, ___, ___ }, \
|
||||
{ k40, k41, k42, k43, k44, k45, k46, k47, k48, k49, k4a, k4b, k4c, k4d, ___, k4f, ___ }, \
|
||||
{ k50, k51, k52, ___, ___, ___, ___, k57, ___, ___, ___, k5b, k5c, k5d, k5e, k5f, k5g } \
|
||||
}
|
20
keyboards/abatskeyboardclub/nayeon/readme.md
Normal file
20
keyboards/abatskeyboardclub/nayeon/readme.md
Normal file
@@ -0,0 +1,20 @@
|
||||
# Nayeon
|
||||
|
||||

|
||||
|
||||
Nayeon is a screwless TKL keyboard with an extra key, inspired by a K-pop artist named Im-Nayeon.
|
||||
|
||||
* Keyboard Maintainer: [Ramon Imbao](https://github.com/ramonimbao)
|
||||
* Hardware Supported: ATmega32u4
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make abatskeyboardclub/nayeon:via
|
||||
|
||||
To get to the bootloader, simply press the reset button located at the back of the PCB. You can then flash new firmware onto it.
|
||||
|
||||
Flashing example for this keyboard:
|
||||
|
||||
make abatskeyboardclub/nayeon:via: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).
|
18
keyboards/abatskeyboardclub/nayeon/rules.mk
Normal file
18
keyboards/abatskeyboardclub/nayeon/rules.mk
Normal file
@@ -0,0 +1,18 @@
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
# 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
|
@@ -30,6 +30,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#define MATRIX_ROWS 4
|
||||
#define MATRIX_COLS 12
|
||||
|
||||
/* encoder pads */
|
||||
#define ENCODERS_PAD_A { B6 }
|
||||
#define ENCODERS_PAD_B { B7 }
|
||||
|
||||
/*
|
||||
* Keyboard Matrix Assignments
|
||||
*
|
||||
|
@@ -17,6 +17,7 @@ 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
|
||||
|
||||
LAYOUTS = ortho_4x12
|
||||
|
||||
|
17
keyboards/adm42/adm42.c
Normal file
17
keyboards/adm42/adm42.c
Normal file
@@ -0,0 +1,17 @@
|
||||
/* Copyright 2020-2022 Lorenzo Leonini
|
||||
* SPDX-License-Identifier: GPL-2.0-only
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "adm42.h"
|
31
keyboards/adm42/adm42.h
Normal file
31
keyboards/adm42/adm42.h
Normal file
@@ -0,0 +1,31 @@
|
||||
/* Copyright 2020-2022 Lorenzo Leonini
|
||||
* SPDX-License-Identifier: GPL-2.0-only
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
#define LAYOUT_adm42_3x12_6( \
|
||||
K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112, \
|
||||
K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212, \
|
||||
K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312, \
|
||||
K404, K405, K406, K407, K408, K409 \
|
||||
) { \
|
||||
{ K101, K102, K103, K104, K105, K106, K107, K108, K109, K110, K111, K112 }, \
|
||||
{ K201, K202, K203, K204, K205, K206, K207, K208, K209, K210, K211, K212 }, \
|
||||
{ K301, K302, K303, K304, K305, K306, K307, K308, K309, K310, K311, K312 }, \
|
||||
{ KC_NO, KC_NO, KC_NO, K404, K405, K407, K406, K408, K409, KC_NO, KC_NO, KC_NO } \
|
||||
}
|
39
keyboards/adm42/config.h
Normal file
39
keyboards/adm42/config.h
Normal file
@@ -0,0 +1,39 @@
|
||||
/* Copyright 2020-2022 Lorenzo Leonini
|
||||
* SPDX-License-Identifier: GPL-2.0-only
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* Microchip ADM42 sublicensing */
|
||||
#define VENDOR_ID 0x04D8
|
||||
#define PRODUCT_ID 0xE873
|
||||
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER Lorenzo Leonini
|
||||
#define PRODUCT ADM42
|
||||
|
||||
#define MATRIX_ROWS 4
|
||||
#define MATRIX_COLS 12
|
||||
|
||||
#define DIODE_DIRECTION ROW2COL
|
||||
|
||||
#define TAP_CODE_DELAY 1
|
||||
#define DEBOUNCE 10
|
||||
|
||||
#if defined(CONSOLE_ENABLE)
|
||||
#define DEBUG_MATRIX_SCAN_RATE
|
||||
#endif
|
27
keyboards/adm42/readme.md
Normal file
27
keyboards/adm42/readme.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# ADM42
|
||||
|
||||

|
||||
|
||||
A compact ergonomic 40% ortholinear keyboard. [More info on ADM42.dev](https://adm42.dev)
|
||||
|
||||
* Keyboard Maintainer: [Lorenzo Leonini](https://github.com/lleonini)
|
||||
* Hardware Supported: ADM42
|
||||
* Hardware Availability: [Shop](https://shop.adm42.dev)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make adm42:default
|
||||
|
||||
Flashing example for this keyboard:
|
||||
|
||||
make adm42: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 `RESET` if it is available
|
||||
* **Bootmagic reset**: Hold down the key at (0,0) in the matrix (the top left key) and plug in the keyboard
|
||||
* **Physical reset button**: Briefly press the button on the back of the PCB
|
52
keyboards/adm42/rev4/config.h
Normal file
52
keyboards/adm42/rev4/config.h
Normal file
@@ -0,0 +1,52 @@
|
||||
/* Copyright 2020-2022 Lorenzo Leonini
|
||||
* SPDX-License-Identifier: GPL-2.0-only
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#define MATRIX_COL_PINS { C6, B6, B5, B4, D7, D6, F0, F1, F4, F5, F6, F7 }
|
||||
#define MATRIX_ROW_PINS { C7, D5, D3, D2 }
|
||||
|
||||
#define QMK_LED E6
|
||||
|
||||
#define RGB_DI_PIN B7
|
||||
|
||||
#define DRIVER_LED_TOTAL 42
|
||||
#define RGB_MATRIX_MAXIMUM_BRIGHTNESS 170
|
||||
#define RGB_MATRIX_CENTER { 112, 32 }
|
||||
#define RGB_DISABLE_WHEN_USB_SUSPENDED
|
||||
#define RGB_MATRIX_LED_PROCESS_LIMIT 21
|
||||
#define RGB_MATRIX_LED_FLUSH_LIMIT 16
|
||||
#define RGB_MATRIX_STARTUP_MODE RGB_MATRIX_CYCLE_LEFT_RIGHT
|
||||
#define RGB_MATRIX_TYPING_HEATMAP_DECREASE_DELAY_MS 20
|
||||
#define RGB_MATRIX_KEYPRESSES
|
||||
#define RGB_MATRIX_FRAMEBUFFER_EFFECTS
|
||||
#define RGB_MATRIX_SAT_STEP 24
|
||||
#define RGB_MATRIX_HUE_STEP 8
|
||||
#define RGB_MATRIX_VAL_STEP 16
|
||||
#define RGB_MATRIX_SPD_STEP 16
|
||||
|
||||
#define ENABLE_RGB_MATRIX_BREATHING
|
||||
#define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
|
||||
#define ENABLE_RGBLIGHT_MODE_STATIC_LIGHT
|
||||
#define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
|
||||
#define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
|
||||
#define ENABLE_RGB_MATRIX_TYPING_HEATMAP
|
||||
#define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
|
||||
#define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
|
||||
#define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
|
||||
#define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
|
||||
#define ENABLE_RGB_MATRIX_PIXEL_RAIN
|
||||
#define ENABLE_RGB_MATRIX_DIGITAL_RAIN
|
||||
#define ENABLE_RGB_MATRIX_BAND_VAL
|
||||
#define ENABLE_RGB_MATRIX_SPLASH
|
3
keyboards/adm42/rev4/keymaps/default/config.h
Normal file
3
keyboards/adm42/rev4/keymaps/default/config.h
Normal file
@@ -0,0 +1,3 @@
|
||||
#define HOLD_ON_OTHER_KEY_PRESS_PER_KEY
|
||||
#define TAPPING_FORCE_HOLD_PER_KEY
|
||||
#define IGNORE_MOD_TAP_INTERRUPT_PER_KEY
|
210
keyboards/adm42/rev4/keymaps/default/keymap.c
Normal file
210
keyboards/adm42/rev4/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,210 @@
|
||||
/* Copyright 2020-2022 Lorenzo Leonini
|
||||
* SPDX-License-Identifier: GPL-2.0-only
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum custom_layers {
|
||||
_QWERTY,
|
||||
_COLEMAKDH,
|
||||
_SPECIAL,
|
||||
_EXTRA,
|
||||
_ADM,
|
||||
_SETUP,
|
||||
};
|
||||
|
||||
#define LW_GRV LWIN_T(KC_GRV)
|
||||
#define RW_EQU RWIN_T(KC_EQUAL)
|
||||
#define RW_BS RWIN_T(KC_BSLS)
|
||||
#define LC_TAB LCTL_T(KC_TAB)
|
||||
#define RC_QUT RCTL_T(KC_QUOT)
|
||||
#define LS_BPC LSFT_T(KC_BSPC)
|
||||
#define RS_SPC RSFT_T(KC_SPC)
|
||||
#define LA_BS LALT_T(KC_BSLS)
|
||||
#define LW_F11 LWIN_T(KC_F11)
|
||||
#define LC_APP LCTL_T(KC_APP)
|
||||
#define LA_TOG LALT_T(RGB_TOG)
|
||||
#define RW_F12 RWIN_T(KC_F12)
|
||||
|
||||
#define LLS_ESC LT(_SPECIAL, KC_ESC)
|
||||
#define LLS_RALT LT(_SPECIAL, KC_RALT)
|
||||
#define LLE_ENT LT(_EXTRA, KC_ENT)
|
||||
#define LLA_DEL LT(_ADM, KC_DEL)
|
||||
#define SETUP MO(_SETUP)
|
||||
|
||||
enum custom_keycodes {
|
||||
REFLASH = SAFE_RANGE,
|
||||
LC_CIRC,
|
||||
RC_DLR,
|
||||
DF_QWER,
|
||||
DF_COLE,
|
||||
};
|
||||
|
||||
// Not a mistake to have KC_LALT (also) on the right, RALT is kept for compose (LLS_RALT)
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_QWERTY] = LAYOUT_adm42_3x12_6(
|
||||
LW_GRV, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, RW_EQU,
|
||||
LC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, RC_QUT,
|
||||
KC_LALT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_LALT,
|
||||
LLS_ESC, LS_BPC, LLA_DEL, LLE_ENT, RS_SPC, LLS_RALT
|
||||
),
|
||||
[_COLEMAKDH] = LAYOUT_adm42_3x12_6(
|
||||
LW_GRV, KC_Q, KC_W, KC_F, KC_P, KC_B, KC_J, KC_L, KC_U, KC_Y, KC_SCLN, RW_EQU,
|
||||
LC_TAB, KC_A, KC_R, KC_S, KC_T, KC_G, KC_M, KC_N, KC_E, KC_I, KC_O, RC_QUT,
|
||||
KC_LALT, KC_Z, KC_X, KC_C, KC_D, KC_V, KC_K, KC_H, KC_COMM, KC_DOT, KC_SLSH, KC_LALT,
|
||||
LLS_ESC, LS_BPC, LLA_DEL, LLE_ENT, RS_SPC, LLS_RALT
|
||||
),
|
||||
|
||||
[_SPECIAL] = LAYOUT_adm42_3x12_6(
|
||||
_______, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, RW_BS,
|
||||
LC_CIRC, KC_LBRC, KC_RBRC, KC_LPRN, KC_RPRN, KC_EXLM, KC_LEFT, KC_DOWN, KC_UP, KC_RGHT, KC_MINS, RC_DLR,
|
||||
_______, KC_AMPR, KC_AT, KC_LCBR, KC_RCBR, KC_PIPE, KC_UNDS, KC_ASTR, KC_HASH, KC_PERC, KC_TILD, _______,
|
||||
KC_ESC, _______, KC_DEL, KC_ENT, _______, KC_RALT
|
||||
),
|
||||
[_EXTRA] = LAYOUT_adm42_3x12_6(
|
||||
LW_F11, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, RW_F12,
|
||||
KC_LCTL, KC_PAUS, KC_INS, KC_VOLD, KC_VOLU, KC_MUTE, KC_HOME, KC_PGDN, KC_PGUP, KC_END, KC_APP, KC_RCTL,
|
||||
_______, KC_SLEP, KC_PWR, KC_MSTP, KC_MNXT, KC_MPLY, _______, KC_BRID, KC_BRIU, KC_PSCR, KC_WAKE, _______,
|
||||
KC_CAPS, _______, _______, _______, _______, KC_CAPS
|
||||
),
|
||||
[_ADM] = LAYOUT_adm42_3x12_6(
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_M_B, RGB_VAD, RGB_VAI, RGB_SAD, RGB_SAI, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, RGB_RMOD,RGB_HUD, RGB_HUI, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_M_P, RGB_SPD, RGB_SPI, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, SETUP, XXXXXXX, XXXXXXX
|
||||
),
|
||||
[_SETUP] = LAYOUT_adm42_3x12_6(
|
||||
REFLASH, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, DF_QWER, DF_COLE, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, EEP_RST,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX
|
||||
),
|
||||
};
|
||||
|
||||
bool get_ignore_mod_tap_interrupt(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case RC_QUT:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool get_hold_on_other_key_press(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case LLS_ESC:
|
||||
case LLS_RALT:
|
||||
case LLE_ENT:
|
||||
case LLA_DEL:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool get_tapping_force_hold(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case LLS_ESC:
|
||||
case LLS_RALT:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static uint16_t last_timer = 0;
|
||||
static int last_key = 0;
|
||||
bool cleanup_return(uint16_t keycode, keyrecord_t *record, bool value) {
|
||||
if (record->event.pressed) {
|
||||
last_key = keycode;
|
||||
last_timer = timer_read();
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
|
||||
#ifdef CONSOLE_ENABLE
|
||||
uprintf("KL: kc: 0x%04X, col: %u, row: %u, pressed: %b, time: %u, interrupt: %b, count: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, record->event.time, record->tap.interrupted, record->tap.count);
|
||||
#endif
|
||||
|
||||
switch (keycode) {
|
||||
|
||||
case RC_DLR:
|
||||
if (record->event.pressed) {
|
||||
register_code(KC_RCTL);
|
||||
} else {
|
||||
unregister_code(KC_RCTL);
|
||||
if (last_key == keycode && timer_elapsed(last_timer) <= TAPPING_TERM) {
|
||||
send_string("$");
|
||||
}
|
||||
}
|
||||
return cleanup_return(keycode, record, false);
|
||||
|
||||
case LC_CIRC:
|
||||
if (record->event.pressed) {
|
||||
register_code(KC_LCTL);
|
||||
} else {
|
||||
unregister_code(KC_LCTL);
|
||||
if (last_key == keycode && timer_elapsed(last_timer) <= TAPPING_TERM) {
|
||||
send_string("^");
|
||||
}
|
||||
}
|
||||
return cleanup_return(keycode, record, false);
|
||||
|
||||
case DF_QWER:
|
||||
if (record->event.pressed) {
|
||||
set_single_persistent_default_layer(_QWERTY);
|
||||
send_string("QWERTY layout");
|
||||
}
|
||||
return false;
|
||||
case DF_COLE:
|
||||
if (record->event.pressed) {
|
||||
set_single_persistent_default_layer(_COLEMAKDH);
|
||||
send_string("COLEMAKDH layout");
|
||||
}
|
||||
return false;
|
||||
|
||||
case REFLASH:
|
||||
eeconfig_init();
|
||||
eeconfig_update_rgb_matrix_default();
|
||||
writePinLow(QMK_LED);
|
||||
reset_keyboard();
|
||||
return false;
|
||||
|
||||
default:
|
||||
return cleanup_return(keycode, record, true);
|
||||
}
|
||||
}
|
||||
|
||||
void keyboard_pre_init_kb(void) {
|
||||
setPinOutput(QMK_LED);
|
||||
writePinHigh(QMK_LED);
|
||||
}
|
||||
|
||||
void keyboard_post_init_kb(void) {
|
||||
debug_enable = true;
|
||||
debug_matrix = false;
|
||||
debug_keyboard = false;
|
||||
writePinHigh(QMK_LED);
|
||||
}
|
||||
|
||||
void suspend_power_down_kb(void) {
|
||||
writePinLow(QMK_LED);
|
||||
}
|
||||
|
||||
void suspend_wakeup_init_kb(void) {
|
||||
writePinHigh(QMK_LED);
|
||||
}
|
39
keyboards/adm42/rev4/rev4.c
Normal file
39
keyboards/adm42/rev4/rev4.c
Normal file
@@ -0,0 +1,39 @@
|
||||
/* Copyright 2020-2022 Lorenzo Leonini
|
||||
* SPDX-License-Identifier: GPL-2.0-only
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
led_config_t g_led_config = {
|
||||
{
|
||||
{12, 11, 8, 7, 4, 3, 36, 37, 38, 39, 40, 41},
|
||||
{13, 10, 9, 6, 5, 2, 35, 34, 33, 32, 31, 30},
|
||||
{14, 15, 16, 17, 18, 1, 24, 25, 26, 27, 28, 29},
|
||||
{NO_LED, NO_LED, NO_LED, 19, 20, 21, 0, 22, 23, NO_LED, NO_LED, NO_LED}
|
||||
}, {
|
||||
{112, 32}, {92, 36}, {94, 25}, {97, 14}, {80, 13}, {77, 24},
|
||||
{62, 18}, {64, 8}, {49, 6}, {46, 17}, {28, 23}, {30, 13},
|
||||
{14, 11}, {11, 22}, {8, 32}, {26, 34}, {43, 28}, {61, 29},
|
||||
{76, 34}, {78, 46}, {97, 49}, {112, 56}, {127, 49}, {146, 46},
|
||||
{132, 36}, {148, 34}, {164, 29}, {180, 28}, {198, 34}, {215, 32},
|
||||
{212, 22}, {196, 23}, {178, 17}, {161, 18}, {146, 24}, {130, 25},
|
||||
{126, 14}, {143, 13}, {159, 8}, {175, 6}, {194, 13}, {210, 11}
|
||||
}, {
|
||||
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
|
||||
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
|
||||
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
|
||||
4, 4, 4, 4, 4, 4
|
||||
}
|
||||
};
|
2
keyboards/adm42/rev4/rules.mk
Normal file
2
keyboards/adm42/rev4/rules.mk
Normal file
@@ -0,0 +1,2 @@
|
||||
RGB_MATRIX_ENABLE = yes
|
||||
RGB_MATRIX_DRIVER = WS2812
|
22
keyboards/adm42/rules.mk
Normal file
22
keyboards/adm42/rules.mk
Normal file
@@ -0,0 +1,22 @@
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
# 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
|
||||
DEBOUNCE_TYPE = sym_eager_pk
|
||||
LTO_ENABLE = yes
|
||||
|
||||
DEFAULT_FOLDER = adm42/rev4
|
@@ -45,4 +45,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, KC_SPC, _______, _______, _______, _______, _______
|
||||
),
|
||||
};
|
||||
};
|
||||
|
@@ -1,164 +0,0 @@
|
||||
/* Copyright 2021 adpenrose
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
/* Base layout:
|
||||
* ,---------------------------------------------------------------------|
|
||||
* |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backspace| OLED|
|
||||
* |--------------------------------------------------------------- |
|
||||
* |Tab |Q |W |E |R |T |Y |U |I |O |P |[ | ] | \ OLED|
|
||||
* |---------------------------------------------------------------------|
|
||||
* |Caps |A |S |D |F |G |H |J |K |L |; |' | Enter | ENC |
|
||||
* |---------------------------------------------------------------------|
|
||||
* |Shft |Z |X |C |V |B |N |M |, |. |/ |Shift |Up| M1 |
|
||||
* |---------------------------------------------------------------------|
|
||||
* |Ctrl|GUI |Alt | Space |MO(2) |MO(3)| |Lt |Dn |Rt |
|
||||
* `---------------------------------------------------------------------|'
|
||||
*/
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Base */
|
||||
[0] = LAYOUT_65_ansi_blocker(
|
||||
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_LGUI, 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_MUTE,
|
||||
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_DEL,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(2), MO(3), KC_LEFT, KC_DOWN, KC_RIGHT
|
||||
),
|
||||
[1] = LAYOUT_65_ansi_blocker(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
[2] = LAYOUT_65_ansi_blocker(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
[3] = LAYOUT_65_ansi_blocker(
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, KC_SPC, _______, _______, _______, _______, _______
|
||||
),
|
||||
};
|
||||
|
||||
/* Encoder */
|
||||
#ifdef ENCODER_ENABLE
|
||||
bool encoder_update_user(uint8_t index, bool clockwise) {
|
||||
static uint8_t selected_layer = 0; /* Used to change the layer using the encoder. */
|
||||
|
||||
if (clockwise){
|
||||
/* Check if left shift is pressed: */
|
||||
if (selected_layer < 3 && get_mods() & MOD_BIT(KC_LSFT)){
|
||||
selected_layer ++;
|
||||
layer_move(selected_layer); /* Jump up one layer. */
|
||||
} else {
|
||||
/* If shift isn't pressed, encoder will do this stuff: */
|
||||
switch (get_highest_layer(layer_state)){
|
||||
case 3:
|
||||
tap_code(KC_MNXT);
|
||||
break;
|
||||
default:
|
||||
tap_code(KC_VOLU);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* Check if left shift is pressed: */
|
||||
if (selected_layer > 0 && get_mods() & MOD_BIT(KC_LSFT)){
|
||||
selected_layer --;
|
||||
layer_move(selected_layer); /* Go down one layer. */
|
||||
} else {
|
||||
/* If shift isn't pressed, encoder will do this stuff: */
|
||||
switch (get_highest_layer(layer_state)){
|
||||
case 3:
|
||||
tap_code(KC_MPRV);
|
||||
break;
|
||||
default:
|
||||
tap_code(KC_VOLD);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Rotation of the OLED: */
|
||||
#ifdef OLED_ENABLE
|
||||
/* Function that renders the kintsugi logo in the desired order. */
|
||||
static void render_logo(void) {
|
||||
static const char PROGMEM logo_1[] = {
|
||||
0x83, 0x84, 0x85, 0x86, 0x87, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0x00
|
||||
};
|
||||
static const char PROGMEM logo_2[] = {
|
||||
0x88, 0x89, 0x8A, 0x8B, 0x8C, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0x00
|
||||
};
|
||||
static const char PROGMEM logo_3[] = {
|
||||
0x8D, 0x8E, 0x8F, 0x90, 0x91, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0x00
|
||||
};
|
||||
oled_set_cursor(1,0);
|
||||
oled_write_P(logo_1, false);
|
||||
oled_set_cursor(1,4);
|
||||
oled_write_P(logo_2, false);
|
||||
oled_set_cursor(1,8);
|
||||
oled_write_P(logo_3, false);
|
||||
}
|
||||
|
||||
/* Function that renders the current layer to the user. */
|
||||
void render_layer(void) {
|
||||
oled_set_cursor(0,12);
|
||||
switch (get_highest_layer(layer_state)){
|
||||
case 0:
|
||||
oled_write_P(PSTR("_BASE"), false);
|
||||
break;
|
||||
case 1:
|
||||
oled_write_P(PSTR("_KCAD"), false);
|
||||
break;
|
||||
case 2:
|
||||
oled_write_P(PSTR("_NMPD"), false);
|
||||
break;
|
||||
case 3:
|
||||
oled_write_P(PSTR("_FNCT"), false);
|
||||
break;
|
||||
default:
|
||||
oled_write_P(PSTR("_OhNo"), false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* The following function displays wpm to the user. */
|
||||
void render_wpm(void) {
|
||||
oled_set_cursor(1,14);
|
||||
oled_write(get_u8_str(get_current_wpm(), '0'), false);
|
||||
oled_set_cursor(1,15);
|
||||
oled_write_P(PSTR("WPM"), false);
|
||||
}
|
||||
|
||||
/* Function that renders stuff on the oled: */
|
||||
bool oled_task_user(void) {
|
||||
render_logo();
|
||||
render_layer();
|
||||
render_wpm();
|
||||
return false;
|
||||
}
|
||||
#endif
|
@@ -1 +0,0 @@
|
||||
# Franky keymap for Kintsugi. Here to serve as a way to test snippets of code.
|
454
keyboards/adpenrose/kintsugi/keymaps/snailmap_port/keymap.c
Normal file
454
keyboards/adpenrose/kintsugi/keymaps/snailmap_port/keymap.c
Normal file
@@ -0,0 +1,454 @@
|
||||
/* Copyright 2021 adpenrose
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
/* Base layout:
|
||||
* ,---------------------------------------------------------------------|
|
||||
* |` |1 |2 |3 |4 |5 |6 |7 |8 |9 |0 |- |= |Backspace| OLED|
|
||||
* |--------------------------------------------------------------- |
|
||||
* |Tab |Q |W |E |R |T |Y |U |I |O |P |[ | ] | \ OLED|
|
||||
* |---------------------------------------------------------------------|
|
||||
* |Caps |A |S |D |F |G |H |J |K |L |; |' | Enter | ENC |
|
||||
* |---------------------------------------------------------------------|
|
||||
* |Shft |Z |X |C |V |B |N |M |, |. |/ |Shift |Up| M1 |
|
||||
* |---------------------------------------------------------------------|
|
||||
* |Ctrl|GUI |Alt | Space |MO(2) |MO(3)| |Lt |Dn |Rt |
|
||||
* `---------------------------------------------------------------------|'
|
||||
*/
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Base */
|
||||
[0] = LAYOUT_65_ansi_blocker(
|
||||
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_MUTE,
|
||||
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_DEL,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(2), MO(3), KC_LEFT, KC_DOWN, KC_RIGHT
|
||||
),
|
||||
[1] = LAYOUT_65_ansi_blocker(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
[2] = LAYOUT_65_ansi_blocker(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
[3] = LAYOUT_65_ansi_blocker(
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
QK_BOOT, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MPLY,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
};
|
||||
|
||||
/* Encoder */
|
||||
#ifdef ENCODER_ENABLE
|
||||
bool encoder_update_user(uint8_t index, bool clockwise) {
|
||||
/* Used to change the layer using the encoder. */
|
||||
static int8_t selected_layer = 0;
|
||||
|
||||
if (clockwise){
|
||||
/* Check if left shift is pressed: */
|
||||
if (selected_layer < 4 && get_mods() & MOD_BIT(KC_LSFT)){
|
||||
selected_layer ++;
|
||||
/* If already on the last layer, jumps back to the first layer: */
|
||||
if (selected_layer == 4) {
|
||||
selected_layer = 0;
|
||||
}
|
||||
/* Move to the selected layer. */
|
||||
layer_move(selected_layer);
|
||||
} else if (get_mods() & MOD_BIT(KC_RSFT)){ /* Check if right shift is pressed: */
|
||||
switch (get_highest_layer(layer_state)){
|
||||
default:
|
||||
/* Go to the next track. */
|
||||
tap_code(KC_MNXT);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
/* If shift isn't pressed, encoder will do this stuff: */
|
||||
switch (get_highest_layer(layer_state)){
|
||||
default:
|
||||
/* Turn up the volume of the system. */
|
||||
tap_code(KC_VOLU);
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/* Check if left shift is pressed: */
|
||||
if (selected_layer > -1 && get_mods() & MOD_BIT(KC_LSFT)){
|
||||
selected_layer --;
|
||||
/* If already on the first layer, jumps up to the last layer: */
|
||||
if (selected_layer == -1) {
|
||||
selected_layer = 3;
|
||||
}
|
||||
/* Move to the selected layer. */
|
||||
layer_move(selected_layer);
|
||||
} else if (get_mods() & MOD_BIT(KC_RSFT)){ /* Check if right shift is pressed: */
|
||||
switch (get_highest_layer(layer_state)){
|
||||
default:
|
||||
/* Go to the previous track. */
|
||||
tap_code(KC_MPRV);
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
/* If shift isn't pressed, encoder will do this stuff: */
|
||||
switch (get_highest_layer(layer_state)){
|
||||
default:
|
||||
/* Turn down the volume of the system. */
|
||||
tap_code(KC_VOLD);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef OLED_ENABLE
|
||||
/*=========================================== OLED CONFIGURATION ===========================================*/
|
||||
bool oled_horizontal = true; // OLED rotation (true = horizontal, false = vertical)
|
||||
bool graph_direction = false; // Graph movement (true = right to left, false = left to right)
|
||||
float graph_top_wpm = 100.0; // Minimum WPM required to reach the top of the graph
|
||||
int graph_refresh = 1000; // In milliseconds, determines the graph-line frequency
|
||||
int icon_med_wpm = 50; // WPM required to display the medium snail
|
||||
int icon_fast_wpm = 72; // WPM required to display the fast snail
|
||||
// Layer names: Should be exactly 5 characters in length if vertical display, or 6 characters if horizontal
|
||||
#define MA_LAYER_NAME "QWRTY" // Layer 0 name
|
||||
#define L1_LAYER_NAME "KICAD" // Layer 1 name
|
||||
#define L2_LAYER_NAME "NMPAD" // Layer 2 name
|
||||
#define L3_LAYER_NAME "FUNCT" // Layer 3 name
|
||||
// Constants required for the background render, the graph render and the WPM counter. THESE VALUES SHOULD NOT BE CHANGED.
|
||||
bool first_loop = true;
|
||||
int timer = 0;
|
||||
int wpm_limit = 20;
|
||||
int max_wpm = -1;
|
||||
int wpm_icon = -1;
|
||||
int graph_lines[65];
|
||||
/*================================================================================================================*/
|
||||
|
||||
/* Rotation of the OLED: */
|
||||
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
|
||||
if (oled_horizontal) {
|
||||
return OLED_ROTATION_180;
|
||||
} else {
|
||||
return OLED_ROTATION_270;
|
||||
}
|
||||
}
|
||||
|
||||
// Toggles pixel on/off, converts horizontal coordinates to vertical equivalent if necessary
|
||||
static void write_pixel(int x, int y, bool onoff) {
|
||||
if (oled_horizontal) {
|
||||
oled_write_pixel(x, y, onoff);
|
||||
} else {
|
||||
oled_write_pixel(y, 127 - x, onoff);
|
||||
}
|
||||
}
|
||||
|
||||
/*====================================== BASE KEYBOARD MATRIX IMAGES =======================================*/
|
||||
// Draw static background image to OLED (keyboard with no bottom row)
|
||||
static void render_background(void) {
|
||||
if (oled_horizontal) {
|
||||
static const char PROGMEM oled_keymap_horizontal[] = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x84, 0x80, 0x80, 0x80, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04,
|
||||
0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00,
|
||||
0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00,
|
||||
0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00, 0x80, 0x04, 0x00, 0x00, 0x00,
|
||||
0x80, 0x04, 0x04, 0x04, 0x04, 0x84, 0x84, 0x84, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10,
|
||||
0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,
|
||||
0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
|
||||
0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||
0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x42, 0x42, 0x02, 0x02, 0x02, 0x02, 0x42, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x40, 0x00, 0x00,
|
||||
0x00, 0x02, 0x40, 0x40, 0x40, 0x40, 0x42, 0x40, 0x40, 0x40, 0x40, 0x42, 0x40, 0x40, 0x40, 0x40,
|
||||
0x42, 0x40, 0x40, 0x40, 0x40, 0x42, 0x40, 0x40, 0x40, 0x40, 0x42, 0x40, 0x40, 0x40, 0x40, 0x42,
|
||||
0x40, 0x40, 0x40, 0x00, 0x02, 0x00, 0x00, 0x40, 0x40, 0x02, 0x00, 0x00, 0x00, 0x40, 0x42, 0x02,
|
||||
0x02, 0x02, 0x02, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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(oled_keymap_horizontal, sizeof(oled_keymap_horizontal));
|
||||
} else {
|
||||
static const char PROGMEM oled_keymap_vertical[] = {
|
||||
0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00,
|
||||
0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00,
|
||||
0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x00, 0x43, 0x00, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
|
||||
0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00,
|
||||
0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
|
||||
0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00,
|
||||
0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
|
||||
0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00,
|
||||
0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00,
|
||||
0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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(oled_keymap_vertical, sizeof(oled_keymap_vertical));
|
||||
}
|
||||
}
|
||||
/*================================================================================================================*/
|
||||
|
||||
|
||||
/*=============================== PIXEL'S COORDINATES FOR EACH PHYSICAL KEY ================================*/
|
||||
// Location of OLED keyboard's top left pixel, relative to the display
|
||||
static const int keymap_template[2] = {46, 0};
|
||||
// Location of key highlights top left pixels, relative to keymap_template {X, Y, Key length in px}
|
||||
static int keymap_coords[MATRIX_ROWS][MATRIX_COLS][3] = {
|
||||
{ {0, 0, 1}, {5, 0, 1}, {10, 0, 1}, {15, 0, 1}, {20, 0, 1}, {25, 0, 1}, {30, 0, 1} },
|
||||
{ {0, 5, 5}, {9, 5, 1}, {14, 5, 1}, {19, 5, 1}, {24, 5, 1}, {29, 5, 1}, {34, 5, 1} },
|
||||
{ {0, 10, 6}, {10, 10, 1}, {15, 10, 1}, {20, 10, 1}, {25, 10, 1}, {30, 10, 1}, {35, 10, 1} },
|
||||
{ {0, 15, 8}, {12, 15, 1}, {17, 15, 1}, {22, 15, 1}, {27, 15, 1}, {32, 15, 1}, {37, 15, 1} },
|
||||
{ {0, 20, 2}, {6, 20, 2}, {12, 20, 2}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {18, 20, 33} },
|
||||
{ {35, 0, 1}, {40, 0, 1}, {45, 0, 1}, {50, 0, 1}, {55, 0, 1}, {60, 0, 1}, {65, 0, 8} },
|
||||
{ {39, 5, 1}, {44, 5, 1}, {49, 5, 1}, {54, 5, 1}, {59, 5, 1}, {64, 5, 1}, {69, 5, 4} },
|
||||
{ {40, 10, 1}, {45, 10, 1}, {50, 10, 1}, {55, 10, 1}, {60, 10, 1}, {65, 10, 8}, {77, 10, 1} },
|
||||
{ {42, 15, 1}, {47, 15, 1}, {52, 15, 1}, {57, 15, 1}, {62, 15, 6}, {72, 15, 1}, {77, 15, 1} },
|
||||
{ {0, 0, 0}, {0, 0, 0}, {55, 20, 2}, {61, 20, 2}, {67, 20, 1}, {72, 20, 1}, {77, 20, 1} },
|
||||
};
|
||||
|
||||
// Toggles pixels surrounding key
|
||||
static void render_keymap(uint8_t key_row, uint8_t key_col, bool onoff) {
|
||||
int length = keymap_coords[key_row][key_col][2] + 4;
|
||||
int left = keymap_coords[key_row][key_col][0] + keymap_template[0];
|
||||
int top = keymap_coords[key_row][key_col][1] + keymap_template[1];
|
||||
int right = left + length - 1;
|
||||
int bottom = top + 4;
|
||||
|
||||
// Draw top and bottom walls (horizontal for <length>px)
|
||||
for (int x = 0; x < length; x++) {
|
||||
write_pixel(left + x, top, onoff);
|
||||
write_pixel(left + x, bottom, onoff);
|
||||
}
|
||||
// Draw left and right walls (vertical for 5px)
|
||||
for (int y = 0; y < 5; y++) {
|
||||
write_pixel(left, top + y, onoff);
|
||||
write_pixel(right, top + y, onoff);
|
||||
}
|
||||
}
|
||||
/*================================================================================================================*/
|
||||
|
||||
/*============================================= LAYER'S NAME ===============================================*/
|
||||
// Write active layer name
|
||||
static void render_layer_state(void) {
|
||||
if (oled_horizontal) {
|
||||
oled_set_cursor(0, 0);
|
||||
} else {
|
||||
oled_set_cursor(0, 15);
|
||||
}
|
||||
switch (get_highest_layer(layer_state)) {
|
||||
case 0:
|
||||
oled_write_P(PSTR(MA_LAYER_NAME), false);
|
||||
break;
|
||||
case 1:
|
||||
oled_write_P(PSTR(L1_LAYER_NAME), false);
|
||||
break;
|
||||
case 2:
|
||||
oled_write_P(PSTR(L2_LAYER_NAME), false);
|
||||
break;
|
||||
case 3:
|
||||
oled_write_P(PSTR(L3_LAYER_NAME), false);
|
||||
break;
|
||||
default:
|
||||
oled_write("ERROR", false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
/*================================================================================================================*/
|
||||
|
||||
/*==================================== WPM COUNTERS (CURRENT AND MAX) ======================================*/
|
||||
// Update WPM counters
|
||||
static void render_wpm_counters(int current_wpm) {
|
||||
int cursorposition_cur = 2;
|
||||
int cursorposition_max = 1;
|
||||
if (oled_horizontal == false) {
|
||||
cursorposition_cur = 13;
|
||||
cursorposition_max = 14;
|
||||
}
|
||||
|
||||
oled_set_cursor(0, cursorposition_cur);
|
||||
oled_write(get_u8_str(get_current_wpm(), '0'), false);
|
||||
|
||||
char wpm_counter[4];
|
||||
wpm_counter[3] = '\0';
|
||||
wpm_counter[2] = '0' + current_wpm % 10;
|
||||
wpm_counter[1] = '0' + (current_wpm / 10) % 10;
|
||||
wpm_counter[0] = '0' + (current_wpm / 100) % 10;
|
||||
|
||||
if (current_wpm > max_wpm) {
|
||||
max_wpm = current_wpm;
|
||||
wpm_limit = max_wpm + 20;
|
||||
oled_set_cursor(0, cursorposition_max);
|
||||
oled_write(wpm_counter, false);
|
||||
}
|
||||
}
|
||||
/*================================================================================================================*/
|
||||
|
||||
/*============================================== WPM GRAPH =================================================*/
|
||||
// Update WPM graph
|
||||
static void render_wpm_graph(int current_wpm) {
|
||||
int line_height = ((current_wpm / graph_top_wpm) * 7);
|
||||
if (line_height > 7) {
|
||||
line_height = 7;
|
||||
}
|
||||
// Count graph line pixels, return if nothing to draw
|
||||
int pixel_count = line_height;
|
||||
for (int i = 0; i < 64; i++) {
|
||||
pixel_count += graph_lines[i];
|
||||
}
|
||||
if (pixel_count == 0) {
|
||||
return;
|
||||
}
|
||||
// Shift array elements left or right depending on graph_direction, append new graph line
|
||||
if (graph_direction) {
|
||||
for (int i = 0; i < 64; i++) {
|
||||
graph_lines[i] = graph_lines[i + 1];
|
||||
}
|
||||
graph_lines[64] = line_height;
|
||||
} else {
|
||||
for (int i = 64; i > 0; i--) {
|
||||
graph_lines[i] = graph_lines[i - 1];
|
||||
}
|
||||
graph_lines[0] = line_height;
|
||||
}
|
||||
// Draw all graph lines (left to right, bottom to top)
|
||||
int draw_count, arrpos;
|
||||
for (int x = 1; x <= 127; x += 2) {
|
||||
arrpos = x / 2;
|
||||
draw_count = graph_lines[arrpos];
|
||||
for (int y = 31; y >= 25; y--) {
|
||||
if (draw_count > 0) {
|
||||
write_pixel(x, y, true);
|
||||
draw_count--;
|
||||
} else {
|
||||
write_pixel(x, y, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
/*================================================================================================================*/
|
||||
|
||||
/*======================================== WPM BASED SNAIL ICON ============================================*/
|
||||
// Update WPM snail icon
|
||||
static void render_wpm_icon(int current_wpm) {
|
||||
// wpm_icon is used to prevent unnecessary redraw
|
||||
if ((current_wpm < icon_med_wpm) && (wpm_icon != 0)) {
|
||||
wpm_icon = 0;
|
||||
} else if ((current_wpm >= icon_med_wpm) && (current_wpm < icon_fast_wpm) && (wpm_icon != 1)) {
|
||||
wpm_icon = 1;
|
||||
} else if ((current_wpm >= icon_fast_wpm) && (wpm_icon != 2)) {
|
||||
wpm_icon = 2;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
static const char PROGMEM snails[][2][24] = {
|
||||
{{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0xA0, 0x20, 0x40, 0x40, 0x80, 0x00, 0x00, 0x00, 0x80, 0x40, 0x20, 0x50, 0x88, 0x04, 0x00, 0x00},
|
||||
{0x40, 0x60, 0x50, 0x4E, 0x51, 0x64, 0x4A, 0x51, 0x54, 0x49, 0x41, 0x62, 0x54, 0x49, 0x46, 0x41, 0x40, 0x30, 0x09, 0x04, 0x02, 0x01, 0x00, 0x00}},
|
||||
{{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x00, 0x00, 0x00, 0x04, 0x98, 0x60, 0x80, 0x00, 0x00, 0x00, 0x00},
|
||||
{0x60, 0x50, 0x54, 0x4A, 0x51, 0x64, 0x4A, 0x51, 0x55, 0x49, 0x41, 0x62, 0x54, 0x49, 0x46, 0x41, 0x21, 0x10, 0x0A, 0x08, 0x05, 0x02, 0x00, 0x00}},
|
||||
{{0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x40, 0x40, 0x40, 0x40, 0x80, 0x80, 0x10, 0x10, 0x10, 0x20, 0x40, 0x40, 0xC0, 0x80, 0x80, 0x00, 0x00, 0x00},
|
||||
{0x60, 0x58, 0x54, 0x62, 0x49, 0x54, 0x52, 0x51, 0x55, 0x49, 0x62, 0x52, 0x4D, 0x45, 0x46, 0x22, 0x21, 0x11, 0x10, 0x0A, 0x08, 0x05, 0x02, 0x00}}
|
||||
};
|
||||
if (oled_horizontal) {
|
||||
oled_set_cursor(3, 1);
|
||||
oled_write_raw_P(snails[wpm_icon][0], sizeof(snails[wpm_icon][0]));
|
||||
oled_set_cursor(3, 2);
|
||||
oled_write_raw_P(snails[wpm_icon][1], sizeof(snails[wpm_icon][1]));
|
||||
} else {
|
||||
oled_set_cursor(0, 11);
|
||||
oled_write_raw_P(snails[wpm_icon][0], sizeof(snails[wpm_icon][0]));
|
||||
oled_set_cursor(0, 12);
|
||||
oled_write_raw_P(snails[wpm_icon][1], sizeof(snails[wpm_icon][1]));
|
||||
}
|
||||
}
|
||||
/*================================================================================================================*/
|
||||
|
||||
/* Function that renders stuff on the oled */
|
||||
bool oled_task_user(void) {
|
||||
// Draw OLED keyboard, preventing redraw.
|
||||
if (first_loop) {
|
||||
render_background();
|
||||
first_loop = false;
|
||||
}
|
||||
|
||||
// Get current WPM
|
||||
int current_wpm = get_current_wpm();
|
||||
// Write active layer name to display
|
||||
render_layer_state();
|
||||
// Update WPM counters
|
||||
render_wpm_counters(current_wpm);
|
||||
// Update WPM snail icon
|
||||
render_wpm_icon(current_wpm);
|
||||
// Update WPM graph every graph_refresh milliseconds
|
||||
if (timer_elapsed(timer) > graph_refresh) {
|
||||
render_wpm_graph(current_wpm);
|
||||
timer = timer_read();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
// Called by QMK during key processing
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
#ifdef OLED_ENABLE
|
||||
// Toggle pixels surrounding key
|
||||
render_keymap(record->event.key.row, record->event.key.col, record->event.pressed);
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
30
keyboards/adpenrose/kintsugi/keymaps/snailmap_port/readme.md
Normal file
30
keyboards/adpenrose/kintsugi/keymaps/snailmap_port/readme.md
Normal file
@@ -0,0 +1,30 @@
|
||||
# SnailMap-ported keymap for the Kintsugi
|
||||
|
||||
## Features
|
||||
|
||||
- Keyboard matrix that highlights whichever key is currently pressed.
|
||||
- Little cute snail icon that changes acording to the current WPM.
|
||||
- Counters for current and max WPM values.
|
||||
- Active layer name.
|
||||
- Mini WPM graph.
|
||||
|
||||
## How to customize
|
||||
|
||||
The `OLED configuration variables` can be used to easily customize the display:
|
||||
|
||||
```
|
||||
oled_horizontal - Horizontal or vertical orientation
|
||||
graph_direction - Graph movement direction
|
||||
graph_refresh - Frequency of graph lines
|
||||
graph_top_wpm - WPM required to reach the top of the graph
|
||||
icon_med_wpm - WPM required to display the medium snail
|
||||
icon_fast_wpm - WPM required to display the fast snail
|
||||
MA_LAYER_NAME - Layer 0 display name
|
||||
L1_LAYER_NAME - Layer 1 display name
|
||||
L2_LAYER_NAME - Layer 2 display name
|
||||
L3_LAYER_NAME - Layer 3 display name
|
||||
```
|
||||
|
||||
___
|
||||
|
||||
###### *This keymap is an adaptation designed to work with the Kintsugi keyboard. The original SnailMap keymap was created by [dogspace](https://github.com/dogspace) for the Nibble keyboard, and you can check it [here](https://github.com/qmk/qmk_firmware/tree/master/keyboards/nullbitsco/nibble/keymaps/snailmap).*
|
@@ -0,0 +1,5 @@
|
||||
VIA_ENABLE = yes
|
||||
LTO_ENABLE = yes
|
||||
WPM_ENABLE = yes
|
||||
SPACE_CADET_ENABLE = no
|
||||
MAGIC_ENABLE = no
|
@@ -34,7 +34,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] = LAYOUT_65_ansi_blocker(
|
||||
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_LGUI, 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_MUTE,
|
||||
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_MUTE,
|
||||
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_DEL,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, MO(1), MO(2), KC_LEFT, KC_DOWN, KC_RIGHT
|
||||
),
|
||||
|
@@ -21,39 +21,36 @@
|
||||
bool encoder_update_kb(uint8_t index, bool clockwise) {
|
||||
if (!encoder_update_user(index, clockwise)) {
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
/* The switch case allows for different encoder mappings on different layers, "default" map gets applied for all unspecified layers */
|
||||
switch(get_highest_layer(layer_state)){
|
||||
case 1:
|
||||
if (clockwise) {
|
||||
tap_code(KC_MNXT);
|
||||
} else {
|
||||
tap_code(KC_MPRV);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (clockwise){
|
||||
tap_code(KC_VOLU);
|
||||
} else{
|
||||
tap_code(KC_VOLD);
|
||||
}
|
||||
break;
|
||||
switch(get_highest_layer(layer_state)){
|
||||
case 1:
|
||||
if (clockwise) {
|
||||
tap_code(KC_MNXT);
|
||||
} else {
|
||||
tap_code(KC_MPRV);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (clockwise){
|
||||
tap_code(KC_VOLU);
|
||||
} else{
|
||||
tap_code(KC_VOLD);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Rotation of the OLED: */
|
||||
#ifdef OLED_ENABLE
|
||||
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
|
||||
oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
|
||||
return OLED_ROTATION_270;
|
||||
}
|
||||
|
||||
bool oled_task_kb(void) {
|
||||
if (!oled_task_user()) {
|
||||
return false;
|
||||
}
|
||||
/* Kintsugi logo render: */
|
||||
static void render_logo(void) {
|
||||
/* Kintsugi logo render: */
|
||||
static const char PROGMEM logo_1[] = {
|
||||
0x83, 0x84, 0x85, 0x86, 0x87, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0x00
|
||||
};
|
||||
@@ -63,12 +60,22 @@ bool oled_task_kb(void) {
|
||||
static const char PROGMEM logo_3[] = {
|
||||
0x8D, 0x8E, 0x8F, 0x90, 0x91, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0x00
|
||||
};
|
||||
oled_set_cursor(1,3);
|
||||
oled_set_cursor(0,3);
|
||||
oled_write_P(logo_1, false);
|
||||
oled_set_cursor(1,7);
|
||||
oled_set_cursor(0,7);
|
||||
oled_write_P(logo_2, false);
|
||||
oled_set_cursor(1,11);
|
||||
oled_set_cursor(0,11);
|
||||
oled_write_P(logo_3, false);
|
||||
}
|
||||
|
||||
bool oled_task_kb(void) {
|
||||
if (!oled_task_user()) {
|
||||
return false;
|
||||
}
|
||||
else {
|
||||
render_logo();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
@@ -148,21 +148,21 @@ const unsigned char font[] PROGMEM = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x80, 0xC0, 0xC0,
|
||||
0xE0, 0xF0, 0xF0, 0xF8, 0xFC, 0xBC,
|
||||
0x9E, 0x9E, 0xBC, 0xFC, 0xF8, 0xF0,
|
||||
0xF0, 0xE0, 0xC0, 0xC0, 0x80, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x80, 0xC0, 0xF0, 0xFC, 0xFE, 0x8E,
|
||||
0xE6, 0x70, 0x00, 0xFC, 0xFE, 0xFE,
|
||||
0xFC, 0x00, 0x38, 0x78, 0xF0, 0xFE,
|
||||
0xFE, 0xF0, 0x78, 0x38, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x78, 0x78, 0x78, 0x78, 0x78,
|
||||
0x78, 0x78, 0x7E, 0x7E, 0xFE, 0xFC,
|
||||
0xFC, 0x7C, 0x18, 0x00, 0x9E, 0xBC,
|
||||
0x1C, 0x02, 0x0F, 0x1E, 0x0C, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x80, 0xC0, 0xC0, 0xE0, 0xF0, 0xF0,
|
||||
0xF8, 0xFC, 0xBC, 0x9E, 0x9E, 0xBC,
|
||||
0xFC, 0xF8, 0xF0, 0xF0, 0xE0, 0xC0,
|
||||
0xC0, 0x80, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x80, 0xC0, 0xF0,
|
||||
0xFC, 0xFE, 0x8E, 0xE6, 0x70, 0x00,
|
||||
0xFC, 0xFE, 0xFE, 0xFC, 0x00, 0x38,
|
||||
0x78, 0xF0, 0xFE, 0xFE, 0xF0, 0x78,
|
||||
0x38, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x78, 0x78,
|
||||
0x78, 0x78, 0x78, 0x78, 0x78, 0x7E,
|
||||
0x7E, 0xFE, 0xFC, 0xFC, 0x7C, 0x18,
|
||||
0x00, 0x9E, 0xBC, 0x1C, 0x02, 0x0F,
|
||||
0x1E, 0x0C, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
@@ -180,20 +180,20 @@ const unsigned char font[] PROGMEM = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x01, 0xE1, 0xE1, 0xE1,
|
||||
0xE1, 0xE3, 0xE7, 0xE7, 0xE3, 0xE3,
|
||||
0xFF, 0xFF, 0xE3, 0xE3, 0xE7, 0xE7,
|
||||
0xE3, 0xE1, 0xE1, 0xE1, 0xE1, 0x01,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x40, 0xF1, 0xFB, 0xFF, 0xFF, 0xE7,
|
||||
0xF3, 0xF8, 0x00, 0xFF, 0xFF, 0xFF,
|
||||
0xFF, 0x87, 0xC7, 0xE7, 0xFF, 0xFF,
|
||||
0xFF, 0xFF, 0xE7, 0xC7, 0x87, 0x07,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x8E, 0x9E, 0x9E, 0x1E, 0x1E,
|
||||
0x1E, 0x1E, 0x1E, 0x1E, 0x9F, 0xDF,
|
||||
0xFF, 0xFF, 0xFE, 0xCF, 0x0F, 0x0F,
|
||||
0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
|
||||
0xE1, 0xE1, 0xE1, 0xE1, 0xE3, 0xE7,
|
||||
0xE7, 0xE3, 0xE3, 0xFF, 0xFF, 0xE3,
|
||||
0xE3, 0xE7, 0xE7, 0xE3, 0xE1, 0xE1,
|
||||
0xE1, 0xE1, 0x01, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x40, 0xF1, 0xFB,
|
||||
0xFF, 0xFF, 0xE7, 0xF3, 0xF8, 0x00,
|
||||
0xFF, 0xFF, 0xFF, 0xFF, 0x87, 0xC7,
|
||||
0xE7, 0xFF, 0xFF, 0xFF, 0xFF, 0xE7,
|
||||
0xC7, 0x87, 0x07, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x8E, 0x9E,
|
||||
0x9E, 0x1E, 0x1E, 0x1E, 0x1E, 0x1E,
|
||||
0x1E, 0x9F, 0xDF, 0xFF, 0xFF, 0xFE,
|
||||
0xCF, 0x0F, 0x0F, 0x07, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
@@ -212,20 +212,20 @@ const unsigned char font[] PROGMEM = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x70, 0x70, 0x71, 0x73,
|
||||
0x73, 0x7F, 0x7E, 0x7C, 0x70, 0x70,
|
||||
0x7F, 0x7F, 0x70, 0x70, 0x7C, 0x7E,
|
||||
0x7F, 0x73, 0x73, 0x71, 0x70, 0x70,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x60, 0x7C, 0x3E, 0x01, 0x3E, 0x61,
|
||||
0x0E, 0x1E, 0x00, 0x3F, 0x7F, 0x7F,
|
||||
0x7F, 0x73, 0x73, 0x71, 0x70, 0x77,
|
||||
0x77, 0x70, 0x71, 0x73, 0x73, 0x73,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x1F, 0x7F, 0x7F, 0x78, 0x78,
|
||||
0x78, 0x78, 0x78, 0x78, 0x79, 0x7B,
|
||||
0x7B, 0x7B, 0x03, 0x01, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x70,
|
||||
0x70, 0x71, 0x73, 0x73, 0x7F, 0x7E,
|
||||
0x7C, 0x70, 0x70, 0x7F, 0x7F, 0x70,
|
||||
0x70, 0x7C, 0x7E, 0x7F, 0x73, 0x73,
|
||||
0x71, 0x70, 0x70, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x60, 0x7C, 0x3E,
|
||||
0x01, 0x3E, 0x61, 0x0E, 0x1E, 0x00,
|
||||
0x3F, 0x7F, 0x7F, 0x7F, 0x73, 0x73,
|
||||
0x71, 0x70, 0x77, 0x77, 0x70, 0x71,
|
||||
0x73, 0x73, 0x73, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x1F, 0x7F,
|
||||
0x7F, 0x78, 0x78, 0x78, 0x78, 0x78,
|
||||
0x78, 0x79, 0x7B, 0x7B, 0x7B, 0x03,
|
||||
0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||
|
18
keyboards/alt34/alt34.c
Normal file
18
keyboards/alt34/alt34.c
Normal file
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
Copyright 2022 Tommy Alatalo <@altosys>
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "alt34.h"
|
24
keyboards/alt34/alt34.h
Normal file
24
keyboards/alt34/alt34.h
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
Copyright 2022 Tommy Alatalo <@altosys>
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef KEYBOARD_alt34_rev1
|
||||
#include "rev1.h"
|
||||
#endif
|
20
keyboards/alt34/config.h
Normal file
20
keyboards/alt34/config.h
Normal file
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
Copyright 2022 Tommy Alatalo <@altosys>
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
52
keyboards/alt34/info.json
Normal file
52
keyboards/alt34/info.json
Normal file
@@ -0,0 +1,52 @@
|
||||
{
|
||||
"keyboard_name": "alt34",
|
||||
"url": "https://gitlab.com/altosys/alt34",
|
||||
"maintainer": "@altosys",
|
||||
"layouts": {
|
||||
"LAYOUT_split_3x5_2": {
|
||||
"layout": [
|
||||
{"x": 0, "y": 0.93},
|
||||
{"x": 1, "y": 0.31},
|
||||
{"x": 2, "y": 0},
|
||||
{"x": 3, "y": 0.28},
|
||||
{"x": 4, "y": 0.42},
|
||||
|
||||
{"x": 7, "y": 0.42},
|
||||
{"x": 8, "y": 0.28},
|
||||
{"x": 9, "y": 0},
|
||||
{"x": 10, "y": 0.31},
|
||||
{"x": 11, "y": 0.93},
|
||||
|
||||
{"x": 0, "y": 1.93},
|
||||
{"x": 1, "y": 1.31},
|
||||
{"x": 2, "y": 1},
|
||||
{"x": 3, "y": 1.28},
|
||||
{"x": 4, "y": 1.42},
|
||||
|
||||
{"x": 7, "y": 1.42},
|
||||
{"x": 8, "y": 1.28},
|
||||
{"x": 9, "y": 1},
|
||||
{"x": 10, "y": 1.31},
|
||||
{"x": 11, "y": 1.93},
|
||||
|
||||
{"x": 0, "y": 2.93},
|
||||
{"x": 1, "y": 2.31},
|
||||
{"x": 2, "y": 2},
|
||||
{"x": 3, "y": 2.28},
|
||||
{"x": 4, "y": 2.42},
|
||||
|
||||
{"x": 7, "y": 2.42},
|
||||
{"x": 8, "y": 2.28},
|
||||
{"x": 9, "y": 2},
|
||||
{"x": 10, "y": 2.31},
|
||||
{"x": 11, "y": 2.93},
|
||||
|
||||
{"x": 3.5, "y": 3.45},
|
||||
{"x": 4.5, "y": 3.7},
|
||||
|
||||
{"x": 6.5, "y": 3.7},
|
||||
{"x": 7.5, "y": 3.45}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
32
keyboards/alt34/keymaps/default/keymap.c
Normal file
32
keyboards/alt34/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
Copyright 2022 Tommy Alatalo <@altosys>
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
// Define aliases for layers
|
||||
enum layers {
|
||||
BASE,
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[BASE] = LAYOUT_split_3x5_2(
|
||||
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
|
||||
KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN,
|
||||
KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH,
|
||||
KC_SPC, KC_TAB, KC_BSPC, KC_ENT
|
||||
)
|
||||
};
|
66
keyboards/alt34/readme.md
Normal file
66
keyboards/alt34/readme.md
Normal file
@@ -0,0 +1,66 @@
|
||||
# alt34
|
||||
|
||||

|
||||
|
||||
alt34 was designed as a minimalistic, 'no frills' workhorse keyboard with focus on efficiency and ergonomics.
|
||||
This breaks down into the following priorities in the design:
|
||||
|
||||
* Keyboard Maintainer: [Tommy Alatalo](https://github.com/altosys)
|
||||
* Hardware Supported:
|
||||
* Compact 34 key split layout with two thumb keys per hand
|
||||
* Orthogonal layout with a somewhat aggressive column stagger
|
||||
* Compatibility with standard controllers (Elite-C, Pro Micro etc.)
|
||||
* Cherry MX switch support
|
||||
* Kailh hotswap socket support
|
||||
* Tenting puck support
|
||||
|
||||
## Hardware
|
||||
|
||||
A bill of materials for building alt34 is found in [the alt34 git repo](https://gitlab.com/altosys/alt34)
|
||||
|
||||
## 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 jumper**: Briefly short the pads just below the TRRS connector on the PCB
|
||||
* **Keycode in layout**: Press the key mapped to `RESET` if it is available
|
||||
|
||||
Latest updates and information for alt34 is found at https://gitlab.com/altosys/alt34
|
||||
|
||||
## Build Guide
|
||||
|
||||
There is no dedicated build guide for alt34. If you are a novice builder and need guidance then suggested reading would be build guides for the Corne keyboard (aka. crkbd), they will cover the usual installation of the controller, diodes and hotswap sockets, which is essentially all there is to assembling the alt34.
|
||||
|
||||
## Flashing QMK Firmware
|
||||
|
||||
Set up your build environment according to the QMK documentation, then after cloning the `qmk_firmware` repository you can run the below commands in the repo root to build and flash the firmware onto your controller.
|
||||
|
||||
Note that this method enables `EE_HANDS` mode which allows you to connect the USB cable to either half of alt34 when using the keyboard.
|
||||
|
||||
|
||||
Flash `EE_HANDS` to the left hand half, this updates the persistent EEPROM storage along with the firmware.
|
||||
Run the below command and then set the board into bootloader mode by bridging the reset pads below the TRRS connector with a paper clip or similar.
|
||||
```
|
||||
make alt34/rev1:default:dfu-split-left
|
||||
```
|
||||
|
||||
Do the same for the right hand side:
|
||||
```
|
||||
make alt34/rev1:default:dfu-split-right
|
||||
```
|
||||
|
||||
Now you should be able to connect the USB cable to either side of the split and it should work the same.
|
||||
|
||||
For any further changes it is enough to flash only the firmware and not the EEPROM:
|
||||
```
|
||||
make alt34/rev1:default:flash
|
||||
```
|
||||
|
||||
It is still recommended to do this for both sides of the split when updating keymaps etc.
|
||||
|
||||
**Note I:** the above examples are using an Elite-C controller with an `atmel-dfu` bootloader, adjust this according to your own hardware.
|
||||
|
||||
**Note II:** the included keymap is rudimentary, the recommended layout to use with alt34 is `miryoku`, see the [miryoku docs](https://github.com/manna-harbour/miryoku) for instructions.
|
||||
|
||||
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).
|
55
keyboards/alt34/rev1/config.h
Normal file
55
keyboards/alt34/rev1/config.h
Normal file
@@ -0,0 +1,55 @@
|
||||
/*
|
||||
Copyright 2022 Tommy Alatalo <@altosys>
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0x1ABC
|
||||
#define PRODUCT_ID 0x0001
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER altosys
|
||||
#define PRODUCT alt34
|
||||
|
||||
/* key matrix size */
|
||||
// Rows are doubled-up
|
||||
#define MATRIX_ROWS 8
|
||||
#define MATRIX_COLS 5
|
||||
|
||||
// wiring of each half
|
||||
#define MATRIX_ROW_PINS { D7, E6, B4, B5 }
|
||||
#define MATRIX_COL_PINS { B6, B2, B3, B1, F7 }
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
/* serial.c configuration for split keyboard */
|
||||
/* #define SOFT_SERIAL_PIN D0 */
|
||||
|
||||
/* 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
|
||||
|
||||
/* Use I2C or Serial, not both */
|
||||
#define USE_I2C
|
||||
// #define USE_SERIAL
|
||||
|
||||
/* Select hand configuration */
|
||||
#define EE_HANDS
|
||||
/* #define MASTER_LEFT */
|
||||
/* #define MASTER_RIGHT */
|
18
keyboards/alt34/rev1/rev1.c
Normal file
18
keyboards/alt34/rev1/rev1.c
Normal file
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
Copyright 2022 Tommy Alatalo <@altosys>
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "alt34.h"
|
42
keyboards/alt34/rev1/rev1.h
Normal file
42
keyboards/alt34/rev1/rev1.h
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
Copyright 2022 Tommy Alatalo <@altosys>
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "alt34.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#define ____ KC_NO
|
||||
|
||||
/* left hand right hand */
|
||||
#define LAYOUT_split_3x5_2(\
|
||||
K0_0, K0_1, K0_2, K0_3, K0_4, K0_5, K0_6, K0_7, K0_8, K0_9,\
|
||||
K1_0, K1_1, K1_2, K1_3, K1_4, K1_5, K1_6, K1_7, K1_8, K1_9,\
|
||||
K2_0, K2_1, K2_2, K2_3, K2_4, K2_5, K2_6, K2_7, K2_8, K2_9,\
|
||||
K3_2, K3_3, K3_4, K3_5 )\
|
||||
/* matrix positions */\
|
||||
{\
|
||||
{K0_0, K0_1, K0_2, K0_3, K0_4},\
|
||||
{K1_0, K1_1, K1_2, K1_3, K1_4},\
|
||||
{K2_0, K2_1, K2_2, K2_3, K2_4},\
|
||||
{____, ____, ____, K3_2, K3_3},\
|
||||
\
|
||||
{K0_9, K0_8, K0_7, K0_6, K0_5},\
|
||||
{K1_9, K1_8, K1_7, K1_6, K1_5},\
|
||||
{K2_9, K2_8, K2_7, K2_6, K2_5},\
|
||||
{____, ____, ____, K3_5, K3_4} \
|
||||
}
|
21
keyboards/alt34/rev1/rules.mk
Normal file
21
keyboards/alt34/rev1/rules.mk
Normal file
@@ -0,0 +1,21 @@
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
# Build Options
|
||||
# change to "no" to disable the options
|
||||
#
|
||||
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
|
||||
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||
AUDIO_ENABLE = no # Audio output
|
||||
|
||||
SPLIT_KEYBOARD = yes
|
||||
LAYOUTS = split_3x5_2
|
@@ -106,6 +106,7 @@ void keyboard_post_init_kb(void) {
|
||||
|
||||
#ifdef RGB_MATRIX_ENABLE
|
||||
ap2_led_enable();
|
||||
ap2_led_set_manual_control(1);
|
||||
#endif
|
||||
|
||||
keyboard_post_init_user();
|
||||
@@ -129,7 +130,7 @@ void matrix_scan_kb() {
|
||||
if(rgb_row_changed[current_rgb_row])
|
||||
{
|
||||
rgb_row_changed[current_rgb_row] = 0;
|
||||
ap2_led_mask_set_row(current_rgb_row);
|
||||
ap2_led_colors_set_row(current_rgb_row);
|
||||
}
|
||||
current_rgb_row = (current_rgb_row + 1) % NUM_ROW;
|
||||
#endif
|
||||
|
@@ -22,6 +22,7 @@
|
||||
#include "protocol.h"
|
||||
|
||||
ap2_led_t led_mask[KEY_COUNT];
|
||||
ap2_led_t led_colors[KEY_COUNT];
|
||||
ap2_led_status_t ap2_led_status;
|
||||
uint8_t rgb_row_changed[NUM_ROW];
|
||||
|
||||
@@ -91,6 +92,32 @@ void ap2_led_mask_set_all(void) {
|
||||
/* Set all keys to a given color */
|
||||
void ap2_led_mask_set_mono(const ap2_led_t color) { proto_tx(CMD_LED_MASK_SET_MONO, (uint8_t *)&color, sizeof(color), 1); }
|
||||
|
||||
void ap2_led_colors_set_key(uint8_t row, uint8_t col, ap2_led_t color) {
|
||||
uint8_t payload[] = {row, col, color.p.blue, color.p.green, color.p.red, color.p.alpha};
|
||||
proto_tx(CMD_LED_COLOR_SET_KEY, payload, sizeof(payload), 1);
|
||||
}
|
||||
|
||||
/* Push a whole local row to the shine */
|
||||
void ap2_led_colors_set_row(uint8_t row) {
|
||||
uint8_t payload[NUM_COLUMN * sizeof(ap2_led_t) + 1];
|
||||
payload[0] = row;
|
||||
memcpy(payload + 1, &led_colors[ROWCOL2IDX(row, 0)], sizeof(*led_colors) * NUM_COLUMN);
|
||||
proto_tx(CMD_LED_COLOR_SET_ROW, payload, sizeof(payload), 1);
|
||||
}
|
||||
|
||||
/* Synchronize all rows */
|
||||
void ap2_led_colors_set_all(void) {
|
||||
for (int row = 0; row < 5; row++) ap2_led_colors_set_row(row);
|
||||
}
|
||||
|
||||
/* Set all keys to a given color */
|
||||
void ap2_led_colors_set_mono(const ap2_led_t color) { proto_tx(CMD_LED_COLOR_SET_MONO, (uint8_t *)&color, sizeof(color), 1); }
|
||||
|
||||
void ap2_led_set_manual_control(uint8_t manual) {
|
||||
uint8_t payload[] = {manual};
|
||||
proto_tx(CMD_LED_SET_MANUAL, payload, sizeof(payload), 1);
|
||||
}
|
||||
|
||||
void ap2_led_blink(uint8_t row, uint8_t col, ap2_led_t color, uint8_t count, uint8_t hundredths) {
|
||||
uint8_t payload[] = {row, col, color.p.blue, color.p.green, color.p.red, color.p.alpha, count, hundredths};
|
||||
proto_tx(CMD_LED_KEY_BLINK, payload, sizeof(payload), 1);
|
||||
|
@@ -40,6 +40,7 @@ typedef union {
|
||||
|
||||
/* Local copy of led_mask, used to override colors on the board */
|
||||
extern ap2_led_t led_mask[KEY_COUNT];
|
||||
extern ap2_led_t led_colors[KEY_COUNT];
|
||||
extern uint8_t rgb_row_changed[NUM_ROW];
|
||||
|
||||
/* Handle incoming messages */
|
||||
@@ -66,6 +67,18 @@ void ap2_led_mask_set_all(void);
|
||||
/* Set all keys to a given color */
|
||||
void ap2_led_mask_set_mono(ap2_led_t color);
|
||||
|
||||
/* Set single key to a given color; alpha controls which is displayed */
|
||||
void ap2_led_colors_set_key(uint8_t row, uint8_t col, ap2_led_t color);
|
||||
/* Push a whole local row to the shine */
|
||||
void ap2_led_colors_set_row(uint8_t row);
|
||||
/* Synchronize all rows */
|
||||
void ap2_led_colors_set_all(void);
|
||||
|
||||
/* Set all keys to a given color */
|
||||
void ap2_led_colors_set_mono(ap2_led_t color);
|
||||
|
||||
void ap2_led_set_manual_control(uint8_t manual);
|
||||
|
||||
/* Blink given key `count` times by masking it with a `color`. Blink takes `hundredths` of a second */
|
||||
void ap2_led_blink(uint8_t row, uint8_t col, ap2_led_t color, uint8_t count, uint8_t hundredths);
|
||||
|
||||
|
@@ -42,6 +42,12 @@ enum {
|
||||
CMD_LED_KEY_UP = 0x23, /* TODO */
|
||||
CMD_LED_IAP = 0x24,
|
||||
|
||||
/* Manual color control */
|
||||
CMD_LED_SET_MANUAL = 0x30,
|
||||
CMD_LED_COLOR_SET_KEY = 0x31,
|
||||
CMD_LED_COLOR_SET_ROW = 0x32,
|
||||
CMD_LED_COLOR_SET_MONO = 0x33,
|
||||
|
||||
/* LED -> Main */
|
||||
/* Payload with data to send over HID */
|
||||
CMD_LED_DEBUG = 0x40,
|
||||
|
@@ -36,11 +36,11 @@ void init(void) {
|
||||
void flush(void) {}
|
||||
|
||||
void set_color(int index, uint8_t r, uint8_t g, uint8_t b) {
|
||||
if (r != led_mask[led_pos[index]].p.red ||
|
||||
g != led_mask[led_pos[index]].p.green ||
|
||||
b != led_mask[led_pos[index]].p.blue)
|
||||
if (r != led_colors[led_pos[index]].p.red ||
|
||||
g != led_colors[led_pos[index]].p.green ||
|
||||
b != led_colors[led_pos[index]].p.blue)
|
||||
{
|
||||
led_mask[led_pos[index]] = (ap2_led_t){
|
||||
led_colors[led_pos[index]] = (ap2_led_t){
|
||||
.p.blue = b,
|
||||
.p.red = r,
|
||||
.p.green = g,
|
||||
|
@@ -28,6 +28,8 @@
|
||||
#include "teensy2.h"
|
||||
#elif KEYBOARD_atreus_promicro
|
||||
#include "promicro.h"
|
||||
#elif KEYBOARD_atreus_f103
|
||||
#include "f103.h"
|
||||
#endif
|
||||
|
||||
// This a shortcut to help you visually see your layout.
|
||||
|
28
keyboards/atreus/f103/chconf.h
Normal file
28
keyboards/atreus/f103/chconf.h
Normal file
@@ -0,0 +1,28 @@
|
||||
/* Copyright 2020 QMK
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file was auto-generated by:
|
||||
* `qmk chibios-confmigrate -i keyboards/handwired/onekey/bluepill/chconf.h -r platforms/chibios/common/configs/chconf.h`
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define CH_CFG_ST_TIMEDELTA 0
|
||||
|
||||
#define CH_CFG_USE_CONDVARS_TIMEOUT FALSE
|
||||
|
||||
#include_next <chconf.h>
|
38
keyboards/atreus/f103/config.h
Normal file
38
keyboards/atreus/f103/config.h
Normal file
@@ -0,0 +1,38 @@
|
||||
/* Copyright 2022 DmNosachev
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/*
|
||||
* Keyboard Matrix Assignments
|
||||
*
|
||||
* Change this to how you wired your keyboard
|
||||
* COLS: AVR pins used for columns, left to right
|
||||
* ROWS: AVR pins used for rows, top to bottom
|
||||
* DIODE_DIRECTION: COL2ROW = COL = Anode (+), ROW = Cathode (-, marked on diode)
|
||||
* ROW2COL = ROW = Anode (+), COL = Cathode (-, marked on diode)
|
||||
*
|
||||
*/
|
||||
|
||||
/* key matrix pins */
|
||||
#define MATRIX_COL_PINS { B10, B1, B0, A7, A6, B5, B4, B3, A15, A10, A9 }
|
||||
#define MATRIX_ROW_PINS { A5, A4, A3, A2 }
|
||||
#define UNUSED_PINS {B12, B13, B14, B15, A8, B6, B7, B8, B9, A1, A0, C15, C14, C13}
|
||||
|
||||
/* COL2ROW, ROW2COL*/
|
||||
#define DIODE_DIRECTION COL2ROW
|
@@ -1,4 +1,4 @@
|
||||
/* Copyright 2021 Nathan Spears
|
||||
/* Copyright 2022 DmNosachev
|
||||
*
|
||||
* 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
|
||||
@@ -14,6 +14,4 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define TAPPING_TOGGLE 2
|
||||
#include "f103.h"
|
@@ -1,4 +1,4 @@
|
||||
/* Copyright 2021 Nathan Spears
|
||||
/* Copyright 2022 DmNosachev
|
||||
*
|
||||
* 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
|
||||
@@ -15,5 +15,3 @@
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define TAPPING_TOGGLE 2
|
26
keyboards/atreus/f103/halconf.h
Normal file
26
keyboards/atreus/f103/halconf.h
Normal file
@@ -0,0 +1,26 @@
|
||||
/* Copyright 2020 QMK
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file was auto-generated by:
|
||||
* `qmk chibios-confmigrate -i keyboards/handwired/onekey/bluepill/halconf.h -r platforms/chibios/common/configs/halconf.h`
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#define HAL_USE_PWM TRUE
|
||||
|
||||
#include_next <halconf.h>
|
30
keyboards/atreus/f103/mcuconf.h
Normal file
30
keyboards/atreus/f103/mcuconf.h
Normal file
@@ -0,0 +1,30 @@
|
||||
/* Copyright 2020 QMK
|
||||
*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file was auto-generated by:
|
||||
* `qmk chibios-confmigrate -i keyboards/handwired/onekey/bluepill/mcuconf.h -r platforms/chibios/STM32_F103_STM32DUINO/configs/mcuconf.h`
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include_next <mcuconf.h>
|
||||
|
||||
#undef STM32_PWM_USE_TIM2
|
||||
#define STM32_PWM_USE_TIM2 TRUE
|
||||
|
||||
#undef STM32_SPI_USE_SPI2
|
||||
#define STM32_SPI_USE_SPI2 FALSE
|
10
keyboards/atreus/f103/rules.mk
Normal file
10
keyboards/atreus/f103/rules.mk
Normal file
@@ -0,0 +1,10 @@
|
||||
# MCU name
|
||||
MCU = STM32F103
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = stm32duino
|
||||
|
||||
# Enter lower-power sleep mode when on the ChibiOS idle thread
|
||||
OPT_DEFS += -DCORTEX_ENABLE_WFI_IDLE=TRUE
|
||||
|
||||
BOOTMAGIC_ENABLE = yes
|
137
keyboards/atreus/keymaps/quartz64/keymap.c
Normal file
137
keyboards/atreus/keymaps/quartz64/keymap.c
Normal file
@@ -0,0 +1,137 @@
|
||||
/*
|
||||
Copyright 2022 DmNosachev
|
||||
|
||||
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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
// Defines names for use in layer keycodes and the keymap
|
||||
enum layer_names {
|
||||
_QW,
|
||||
_RS,
|
||||
_LW
|
||||
};
|
||||
|
||||
#define MC1 COMP_FR_QUOTES
|
||||
#define MC2 COMP_NBSP_EM_DASH
|
||||
#define MC3 COMP_NBSP
|
||||
|
||||
enum custom_keycodes {
|
||||
COMP_FR_QUOTES = SAFE_RANGE, // Compose: french quotes
|
||||
COMP_NBSP_EM_DASH, // Compose: nbsp followed by em dash
|
||||
COMP_NBSP, // Compose: nbsp
|
||||
PWD1,
|
||||
PWD2,
|
||||
PWD3, // KP password
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/*
|
||||
,----------------------------------. ,----------------------------------.
|
||||
|Q/Alt | W | E | R | T | | Y | U | I | O | P |
|
||||
|------+------+------+------+------| |------+------+------+------+------|
|
||||
|A/Ctrl| S | D | F | G | | H | J | K | L |;/Ctrl|
|
||||
|------+------+------+------+------|------.,------|------+------+------+------+------|
|
||||
|Z/Shft| X | C | V | B |Bkspc ||Delete| N | M | , | . |?/Shft|
|
||||
|------+------+------+------+------| || |------+------+------+------+------|
|
||||
| ~ | Tab | - | GUI |Spc/LW|------'`------|Ent/RS| |\ | [ | ] | "' |
|
||||
`----------------------------------' `----------------------------------'
|
||||
*/
|
||||
[_QW] = LAYOUT( /* QWERTY */
|
||||
LALT_T(KC_Q), KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P,
|
||||
LCTL_T(KC_A), KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, RCTL_T(KC_SCLN),
|
||||
LSFT_T(KC_Z), KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, RSFT_T(KC_SLSH),
|
||||
KC_GRV, KC_TAB, KC_MINS, KC_LGUI, LT(_LW, KC_SPC), KC_BSPC, KC_DEL, LT(_RS, KC_ENT), KC_BSLS, KC_LBRC, KC_RBRC, KC_QUOT
|
||||
),
|
||||
|
||||
/*
|
||||
,----------------------------------. ,----------------------------------.
|
||||
| PrnSc| pwd1 | up | pwd2 | PgUp | | Home | F7 | F8 | F9 | |
|
||||
|------+------+------+------+------| |------+------+------+------+------|
|
||||
| trns | left | down | right| PgDn | | End | F4 | F5 | F6 | trns |
|
||||
|------+------+------+------+------|------.,------|------+------+------+------+------|
|
||||
| trns | MC2 | MC3 | ( | ) | || | AltGr| F1 | F2 | F3 | trns |
|
||||
|------+------+------+------+------| || |------+------+------+------+------|
|
||||
| trns | C+S | Ins | MC1 | trns |------'`------| trns | F10 | F11 | F12 | trns |
|
||||
`----------------------------------' `----------------------------------'
|
||||
*/
|
||||
|
||||
[_RS] = LAYOUT( /* RAISE */
|
||||
KC_PSCR, PWD1, KC_UP, PWD2, KC_PGUP, KC_HOME, KC_F7, KC_F8, KC_F9, _______,
|
||||
_______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, KC_END, KC_F4, KC_F5, KC_F6, _______,
|
||||
_______, MC2, MC3, KC_LPRN, KC_RPRN, KC_RALT, KC_F1, KC_F2, KC_F3, _______,
|
||||
_______, LCTL(KC_LSFT), _______, MC1, _______, _______, _______, _______, KC_F10, KC_F11, KC_F12, _______
|
||||
),
|
||||
|
||||
/*
|
||||
,----------------------------------. ,----------------------------------.
|
||||
| ! | @ | # | $ | % | | / | 7 | 8 | 9 | . |
|
||||
|------+------+------+------+------| |------+------+------+------+------|
|
||||
| trns | ^ | & | * | PWD3 | | * | 4 | 5 | 6 | trns |
|
||||
|------+------+------+------+------|------.,------|------+------+------+------+------|
|
||||
| trns |r_tog | r_hue| r_sat| r_val| || | + | 1 | 2 | 3 | trns |
|
||||
|------+------+------+------+------| || |------+------+------+------+------|
|
||||
| trns | Esc |RESET |capslk| trns |------'`------| trns | 0 | - | += | trns |
|
||||
`----------------------------------' `----------------------------------'
|
||||
*/
|
||||
|
||||
[_LW] = LAYOUT( /* LOWER */
|
||||
KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, KC_PSLS, KC_7, KC_8, KC_9, KC_PDOT,
|
||||
_______, KC_CIRC, KC_AMPR, KC_ASTR, PWD3, KC_PAST, KC_4, KC_5, KC_6, _______,
|
||||
_______, RGB_TOG, RGB_HUI, RGB_SAI, RGB_VAI, KC_PPLS, KC_1, KC_2, KC_3, _______,
|
||||
_______, KC_ESC , RESET, KC_CAPS, _______, _______, _______, _______, KC_0, KC_PMNS, KC_EQL, _______
|
||||
)
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case MC1: /* French quotes */
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING(SS_TAP(X_RALT) SS_DELAY(100) "<<" SS_DELAY(100) SS_TAP(X_RALT) SS_DELAY(100) ">>" SS_TAP(X_LEFT));
|
||||
}
|
||||
break;
|
||||
|
||||
case MC2: /* NB-space + mdash + space */
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING(SS_TAP(X_RALT) SS_DELAY(100) " " SS_DELAY(100) SS_TAP(X_RALT) SS_DELAY(100) "--- ");
|
||||
}
|
||||
break;
|
||||
|
||||
case MC3: /* NB-space */
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING(SS_TAP(X_RALT) SS_DELAY(100) " ");
|
||||
}
|
||||
break;
|
||||
|
||||
case PWD1:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING("NakedLunch1991\n");
|
||||
}
|
||||
break;
|
||||
|
||||
case PWD2:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING("O94nx4sUWHc4akud\n");
|
||||
}
|
||||
break;
|
||||
|
||||
case PWD3:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING("Q123qQ123q\n");
|
||||
}
|
||||
break;
|
||||
}
|
||||
return true;
|
||||
};
|
@@ -8,7 +8,7 @@ Keyboard Maintainer: [Phil Hagelberg](https://github.com/technomancy)
|
||||
Hardware Supported: Atreus, PCB-based or hand-wired
|
||||
Hardware Availability: https://atreus.technomancy.us
|
||||
|
||||
These configuration files are specifically for the Atreus keyboards created by Phil Hagelberg (@technomancy). This keyboard is available in two variants: one powered by a Teensy 2 (usually hand-wired), one powered by an A-Star (usually using a PCB). You will need to use different `make` commands depending on the variant you have; see examples below.
|
||||
These configuration files are specifically for the Atreus keyboards created by Phil Hagelberg (@technomancy). This keyboard is available in several variants: powered by a Teensy 2 or STM32F103C8T6 based MCU board (usually hand-wired), powered by an A-Star or ProMicro (usually using a PCB). You will need to use different `make` commands depending on the variant you have; see examples below.
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
@@ -19,6 +19,7 @@ If you would like to use one of the alternative controllers:
|
||||
make atreus/astar:default:flash
|
||||
make atreus/teensy2:default:flash
|
||||
make atreus/promicro:default:flash
|
||||
make atreus/f103:default:flash
|
||||
|
||||
If your keyboard layout is a mirror image of what you expected (i.e. you do not get QWERTY on the left but YTREWQ on the right), then you have an A-Star powered Atreus (older than March 2016) with PCB labels facing *down* instead of up. Specify that by adding `PCBDOWN=yes` to your `make` commands, e.g.
|
||||
|
||||
|
15
keyboards/atset/at6/at6.c
Normal file
15
keyboards/atset/at6/at6.c
Normal file
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "at6.h"
|
24
keyboards/atset/at6/at6.h
Normal file
24
keyboards/atset/at6/at6.h
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "quantum.h"
|
||||
|
||||
#define LAYOUT( \
|
||||
k00, k01, k02, \
|
||||
k10, k11, k12 \
|
||||
) \
|
||||
{ \
|
||||
{ k00, k01, k02 }, \
|
||||
{ k10, k11, k12 } \
|
||||
}
|
||||
|
76
keyboards/atset/at6/config.h
Normal file
76
keyboards/atset/at6/config.h
Normal file
@@ -0,0 +1,76 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED // Atset
|
||||
#define PRODUCT_ID 0x6060
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER Atset
|
||||
#define PRODUCT AT6
|
||||
|
||||
/* Key matrix size */
|
||||
#define MATRIX_ROWS 2
|
||||
#define MATRIX_COLS 3
|
||||
|
||||
#define MATRIX_ROW_PINS { D2, D1 }
|
||||
#define MATRIX_COL_PINS { B6, B5, B4 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW, ROW2COL*/
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
|
||||
/* 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
|
||||
|
||||
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||
*/
|
||||
// #define GRAVE_ESC_CTRL_OVERRIDE
|
||||
|
||||
/*
|
||||
* Force NKRO
|
||||
*
|
||||
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||
* makefile for this to work.)
|
||||
*
|
||||
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||
* until the next keyboard reset.
|
||||
*
|
||||
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||
* fully operational during normal computer usage.
|
||||
*
|
||||
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||
* power-up.
|
||||
|
||||
*/
|
||||
//#define FORCE_NKRO
|
||||
|
9
keyboards/atset/at6/info.json
Normal file
9
keyboards/atset/at6/info.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"keyboard_name": "AT6",
|
||||
"maintainer": "atset",
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [{"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k10", "x":0, "y":1}, {"label":"k11", "x":1, "y":1}, {"label":"k12", "x":2, "y":1}]
|
||||
}
|
||||
}
|
||||
}
|
39
keyboards/atset/at6/keymaps/default/keymap.c
Normal file
39
keyboards/atset/at6/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
|
||||
[0] = LAYOUT(
|
||||
KC_7, KC_8, KC_9,
|
||||
KC_4, KC_5, KC_6
|
||||
),
|
||||
|
||||
|
||||
[1] = LAYOUT(
|
||||
KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO
|
||||
),
|
||||
|
||||
|
||||
[2] = LAYOUT(
|
||||
KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO
|
||||
)
|
||||
|
||||
|
||||
};
|
@@ -1,5 +1,4 @@
|
||||
/* Copyright 2020 QMK
|
||||
*
|
||||
/*
|
||||
* 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
|
||||
@@ -14,25 +13,27 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file was auto-generated by:
|
||||
* `qmk chibios-confmigrate -i keyboards/handwired/onekey/blackpill_f411/chconf.h -r platforms/chibios/common/configs/chconf.h`
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#define CH_CFG_ST_FREQUENCY 10000
|
||||
|
||||
#define CH_CFG_FACTORY_OBJECTS_REGISTRY TRUE
|
||||
|
||||
#define CH_CFG_FACTORY_GENERIC_BUFFERS TRUE
|
||||
|
||||
#define CH_CFG_FACTORY_SEMAPHORES TRUE
|
||||
|
||||
#define CH_CFG_FACTORY_MAILBOXES TRUE
|
||||
|
||||
#define CH_CFG_FACTORY_OBJ_FIFOS TRUE
|
||||
|
||||
#define CH_CFG_FACTORY_PIPES TRUE
|
||||
|
||||
#include_next <chconf.h>
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] =
|
||||
LAYOUT(
|
||||
KC_4 , KC_5 , KC_6,
|
||||
KC_1 , KC_2 , KC_3
|
||||
),
|
||||
[1] =
|
||||
LAYOUT(
|
||||
KC_NO , KC_NO, KC_NO,
|
||||
KC_NO , KC_NO, KC_NO
|
||||
),
|
||||
[2] =
|
||||
LAYOUT(
|
||||
KC_NO , KC_NO, KC_NO,
|
||||
KC_NO , KC_NO, KC_NO
|
||||
),
|
||||
[3] =
|
||||
LAYOUT(
|
||||
KC_NO , KC_NO, KC_NO,
|
||||
KC_NO , KC_NO, KC_NO
|
||||
)
|
||||
};
|
@@ -1,23 +1,25 @@
|
||||
# Mikeneko 65 V3
|
||||
# ATSET AT6
|
||||
|
||||
A simple 65% keyboard
|
||||
A special 6 key keyboard powered by QMK.
|
||||
|
||||
* Keyboard Maintainer: [takishim](https://github.com/takishim)
|
||||
* Hardware Supported: Mikeneko 65 V4
|
||||
* Hardware Availability: [Open source on GitHub](https://github.com/takishim/mikeneko65/tree/v3)
|
||||
* Keyboard Maintainer: [ATSET](https://github.com/anubhavd7)
|
||||
* Hardware Supported: ATmega32U4
|
||||
* Hardware Availability: Interest Check
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make mikeneko65/rev3:default
|
||||
make atset/at6:default
|
||||
|
||||
Flashing example for this keyboard:
|
||||
|
||||
make mikeneko65/rev3:default:flash
|
||||
make atset/at6: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 `RESET` if it is available
|
||||
|
||||
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).
|
18
keyboards/atset/at6/rules.mk
Normal file
18
keyboards/atset/at6/rules.mk
Normal file
@@ -0,0 +1,18 @@
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
# 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
|
15
keyboards/atset/at9/at9.c
Normal file
15
keyboards/atset/at9/at9.c
Normal file
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "at9.h"
|
26
keyboards/atset/at9/at9.h
Normal file
26
keyboards/atset/at9/at9.h
Normal file
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "quantum.h"
|
||||
|
||||
#define LAYOUT( \
|
||||
k00, k01, k02, \
|
||||
k10, k11, k12, \
|
||||
k20, k21, k22 \
|
||||
) \
|
||||
{ \
|
||||
{ k00, k01, k02 }, \
|
||||
{ k10, k11, k12 }, \
|
||||
{ k20, k21, k22 } \
|
||||
}
|
75
keyboards/atset/at9/config.h
Normal file
75
keyboards/atset/at9/config.h
Normal file
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED // Atset
|
||||
#define PRODUCT_ID 0x6060
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER Atset
|
||||
#define PRODUCT AT9
|
||||
|
||||
/* Key matrix size */
|
||||
#define MATRIX_ROWS 3
|
||||
#define MATRIX_COLS 3
|
||||
|
||||
#define MATRIX_ROW_PINS { D2, D1, D0 }
|
||||
#define MATRIX_COL_PINS { B6, B5, B4 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW, ROW2COL*/
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
|
||||
/* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
/* define if matrix has ghost (lacks anti-ghosting diodes) */
|
||||
//#define MATRIX_HAS_GHOST
|
||||
|
||||
|
||||
/* 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
|
||||
|
||||
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||
*/
|
||||
// #define GRAVE_ESC_CTRL_OVERRIDE
|
||||
|
||||
/*
|
||||
* Force NKRO
|
||||
*
|
||||
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||
* makefile for this to work.)
|
||||
*
|
||||
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||
* until the next keyboard reset.
|
||||
*
|
||||
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||
* fully operational during normal computer usage.
|
||||
*
|
||||
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||
* power-up.
|
||||
|
||||
*/
|
||||
//#define FORCE_NKRO
|
9
keyboards/atset/at9/info.json
Normal file
9
keyboards/atset/at9/info.json
Normal file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"keyboard_name": "AT9",
|
||||
"maintainer": "atset",
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [{"label":"k00", "x":0, "y":0}, {"label":"k01", "x":1, "y":0}, {"label":"k02", "x":2, "y":0}, {"label":"k10", "x":0, "y":1}, {"label":"k11", "x":1, "y":1}, {"label":"k12", "x":2, "y":1}, {"label":"k20", "x":0, "y":2}, {"label":"k21", "x":1, "y":2}, {"label":"k22", "x":2, "y":2}]
|
||||
}
|
||||
}
|
||||
}
|
42
keyboards/atset/at9/keymaps/default/keymap.c
Normal file
42
keyboards/atset/at9/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
|
||||
[0] = LAYOUT(
|
||||
KC_7, KC_8, KC_9,
|
||||
KC_4, KC_5, KC_6,
|
||||
KC_1, KC_2, KC_3
|
||||
),
|
||||
|
||||
|
||||
[1] = LAYOUT(
|
||||
KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO
|
||||
),
|
||||
|
||||
|
||||
[2] = LAYOUT(
|
||||
KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO
|
||||
)
|
||||
|
||||
|
||||
};
|
43
keyboards/atset/at9/keymaps/via/keymap.c
Normal file
43
keyboards/atset/at9/keymaps/via/keymap.c
Normal file
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[0] =
|
||||
LAYOUT(
|
||||
KC_7 , KC_8 , KC_9,
|
||||
KC_4 , KC_5 , KC_6,
|
||||
KC_1 , KC_2 , KC_3
|
||||
),
|
||||
[1] =
|
||||
LAYOUT(
|
||||
KC_NO , KC_NO, KC_NO,
|
||||
KC_NO , KC_NO, KC_NO,
|
||||
KC_NO , KC_NO, KC_NO
|
||||
),
|
||||
[2] =
|
||||
LAYOUT(
|
||||
KC_NO , KC_NO, KC_NO,
|
||||
KC_NO , KC_NO, KC_NO,
|
||||
KC_NO , KC_NO, KC_NO
|
||||
),
|
||||
[3] =
|
||||
LAYOUT(
|
||||
KC_NO , KC_NO, KC_NO,
|
||||
KC_NO , KC_NO, KC_NO,
|
||||
KC_NO , KC_NO, KC_NO
|
||||
),
|
||||
};
|
24
keyboards/atset/at9/readme.md
Normal file
24
keyboards/atset/at9/readme.md
Normal file
@@ -0,0 +1,24 @@
|
||||
# ATSET AT9
|
||||
|
||||
A special 9 key keyboard powered by QMK.
|
||||
|
||||
* Keyboard Maintainer: [ATSET](https://github.com/anubhavd7)
|
||||
* Hardware Supported: ATmega32u4
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make atset/at9:default
|
||||
|
||||
Flashing example for this keyboard:
|
||||
|
||||
make atset/at9: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 `RESET` if it is available
|
18
keyboards/atset/at9/rules.mk
Normal file
18
keyboards/atset/at9/rules.mk
Normal file
@@ -0,0 +1,18 @@
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
# 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
|
@@ -98,7 +98,7 @@ led_config_t g_led_config = {
|
||||
}, {
|
||||
{0, 0},{16, 0},{32, 0},{48, 0},{64, 0},{80, 0},{96, 0},{112, 0},{128, 0},{144, 0},{160, 0},{176, 0},{192, 0},{208, 0},{224, 0},
|
||||
{0, 16},{16,16},{32,16},{48,16},{64,16},{80,16},{96,16},{112,16},{128,16},{144,16},{160,16},{176,16},{192,16},{208,16},{224,16},
|
||||
{0,32},{16,32},{32,32},{48,32},{64,32},{80,32},{96,32},{112,32},{128,32},{144,32},{160,32},{176,32},{192,32},{224},
|
||||
{0,32},{16,32},{32,32},{48,32},{64,32},{80,32},{96,32},{112,32},{128,32},{144,32},{160,32},{176,32},{192,32},{224, 32},
|
||||
{16,48},{32,48},{48,48},{64,48},{80,48},{96,48},{112,48},{128,48},{144,48},{160,48},{176,48},{192,48},{224,48},
|
||||
{16,64},{48,64},{80,64},{96,64},{128,64},{160,64},{224,64}
|
||||
}, {
|
||||
|
@@ -50,8 +50,8 @@
|
||||
*/
|
||||
// #define GRAVE_ESC_CTRL_OVERRIDE
|
||||
|
||||
#define ENCODERS_PAD_A { C0 }
|
||||
#define ENCODERS_PAD_B { D7 }
|
||||
#define ENCODERS_PAD_A { D7 }
|
||||
#define ENCODERS_PAD_B { C0 }
|
||||
#define ENCODER_RESOLUTION 4
|
||||
#define TAP_CODE_DELAY 10
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user