1
0

Compare commits

..

2 Commits

Author SHA1 Message Date
Nick Brassel
87c3a53716 Branch point after 2022-05-28 Breaking Change. 2022-05-29 08:16:00 +10:00
Nick Brassel
103c08cc75 Merge branch 'master' into develop 2022-05-29 08:13:56 +10:00
1239 changed files with 8023 additions and 43314 deletions

View File

@@ -1,6 +0,0 @@
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"

58
.github/stale.yml vendored Normal file
View File

@@ -0,0 +1,58 @@
# 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

View File

@@ -18,7 +18,7 @@ jobs:
if: github.repository == 'qmk/qmk_firmware'
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v2
with:
fetch-depth: 1
persist-credentials: false

View File

@@ -22,12 +22,12 @@ jobs:
if: github.repository == 'qmk/qmk_firmware'
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Bump version and push tag
uses: anothrNick/github-tag-action@1.39.0
uses: anothrNick/github-tag-action@1.26.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
DEFAULT_BUMP: 'patch'

View File

@@ -18,7 +18,7 @@ jobs:
container: qmkfm/qmk_cli
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v2
with:
submodules: recursive
- name: Install dependencies

View File

@@ -18,7 +18,7 @@ jobs:
if: github.repository == 'qmk/qmk_firmware'
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v2
with:
fetch-depth: 1
persist-credentials: false

View File

@@ -12,7 +12,7 @@ jobs:
if: github.repository == 'qmk/qmk_firmware'
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v2
with:
token: ${{ secrets.QMK_BOT_TOKEN }}
fetch-depth: 0

View File

@@ -20,7 +20,7 @@ jobs:
if: github.repository == 'qmk/qmk_firmware'
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v2
with:
fetch-depth: 1
@@ -34,7 +34,7 @@ jobs:
qmk --verbose generate-docs
- name: Deploy
uses: JamesIves/github-pages-deploy-action@v4.3.4
uses: JamesIves/github-pages-deploy-action@3.7.1
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
BASE_BRANCH: master

View File

@@ -17,7 +17,7 @@ jobs:
- xap
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v2
with:
token: ${{ secrets.QMK_BOT_TOKEN }}
fetch-depth: 0

View File

@@ -19,7 +19,7 @@ jobs:
container: qmkfm/qmk_cli
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v2
with:
fetch-depth: 0

View File

@@ -13,7 +13,7 @@ jobs:
container: qmkfm/qmk_cli
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v2
with:
fetch-depth: 0
@@ -37,7 +37,7 @@ jobs:
git config user.email 'hello@qmk.fm'
- name: Create Pull Request
uses: peter-evans/create-pull-request@v4
uses: peter-evans/create-pull-request@v3
if: ${{ github.repository == 'qmk/qmk_firmware'}}
with:
token: ${{ secrets.QMK_BOT_TOKEN }}

View File

@@ -12,13 +12,10 @@ jobs:
container: qmkfm/qmk_cli
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v2
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:

View File

@@ -1,64 +0,0 @@
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]

View File

@@ -20,10 +20,10 @@ jobs:
test:
runs-on: ubuntu-latest
container: qmkfm/qmk_cli
container: qmkfm/base_container
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v2
with:
submodules: recursive
- name: Install dependencies

4
.gitignore vendored
View File

@@ -67,12 +67,10 @@ CMakeLists.txt
.vscode/temp.sql
tags
# Ignore image/font files
# Ignore image files
*.gif
*.jpg
*.png
*.ttf
*.otf
# Things Travis sees
/.vs

View File

@@ -7,8 +7,6 @@
# 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"},
@@ -21,6 +19,7 @@
"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"},
@@ -103,11 +102,4 @@
"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},
}

View File

@@ -7,8 +7,6 @@
# 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"},
@@ -26,10 +24,5 @@
"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"},
# 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},
"WAIT_FOR_USB": {"info_key": "usb.wait_for", "value_type": "bool"}
}

View File

@@ -145,10 +145,7 @@
"type": "object",
"additionalProperties": false,
"properties": {
"label": {
"type": "string",
"pattern": "^[^\\n]*$"
},
"label": {"type": "string"},
"matrix": {
"type": "array",
"minItems": 2,

View File

@@ -47,11 +47,28 @@ 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.
### 4 Weeks Before Merge
## 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
* `develop` is now closed to new PR's, only fixes for current PR's may be merged
* Post call for testers
@@ -59,7 +76,7 @@ This section documents various processes we use when running the Breaking Change
* [ ] 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
@@ -67,21 +84,21 @@ This section documents various processes we use when running the Breaking Change
* [ ] 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`
@@ -98,39 +115,8 @@ This section documents various processes we use when running the Breaking Change
* [ ] `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)

View File

@@ -14,10 +14,6 @@ Add this to the end of your `.profile` or `.bashrc`:
If you put `qmk_firmware` into another location you will need to adjust this path.
Zsh users will need to load `bashcompinit`. The following can be added to `~/.zshrc` file:
autoload -Uz bashcompinit && bashcompinit
### System Wide Symlink
If you want the tab completion available to all users of the system you can add a symlink to the `qmk_tab_complete.sh` script:

View File

@@ -2,8 +2,6 @@
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:

View File

@@ -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:

View File

@@ -10,10 +10,6 @@ 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`:

View File

@@ -777,7 +777,6 @@ These are defined in [`color.h`](https://github.com/qmk/qmk_firmware/blob/master
#define RGB_MATRIX_DISABLE_KEYCODES // disables control of rgb matrix by keycodes (must use code functions to control the feature)
#define RGB_MATRIX_SPLIT { X, Y } // (Optional) For split keyboards, the number of LEDs connected on each half. X = left, Y = Right.
// If RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is enabled, you also will want to enable SPLIT_TRANSPORT_MIRROR
#define RGB_TRIGGER_ON_KEYDOWN // Triggers RGB keypress events on key down. This makes RGB control feel more responsive. This may cause RGB to not function properly on some boards
```
## EEPROM storage :id=eeprom-storage

View File

@@ -10,8 +10,6 @@ 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 |

View File

@@ -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 `:dfu-util`, 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 `:avrdude`, 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.

View File

@@ -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 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.
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.
## 4. What the Operating System Does

View File

@@ -108,8 +108,6 @@ However, this does rely on the bootloader being set by the keyboard. If this inf
In this case, you'll have to fall back on specifying the bootloader. See the [Flashing Firmware](flashing.md) Guide for more details.
!> If your bootloader is not detected by `qmk flash`, try running `qmk doctor` for suggestions on how to fix common problems.
## Test It Out!
Congrats! Your custom firmware has been programmed to your keyboard and you're ready to test it out!

View File

@@ -104,8 +104,10 @@ 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

View File

@@ -87,13 +87,9 @@ To configure the default layer sounds, you would want to define this in your `co
## Resetting the keyboard
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.
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.
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.
And to do so, add `reset_keyboard()` to your function or macro, and this will reset to bootloader.
## Wiping the EEPROM (Persistent Storage)

View File

@@ -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 uses text strings to identify the pins used in each row. 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 is a text string corresponding to a pin. You can use `null` to indicate an empty spot in the matrix.
Example:
@@ -108,58 +108,7 @@ Example:
}
```
## Non-RGB LED Lighting
This section controls basic 2-pin LEDs, which typically pass through keyswitches and are soldered into the PCB, or are placed in PCB sockets.
### Backlight
* `breathing`
* Enable backlight breathing, if supported
* `breathing_period`
* The length of one backlight “breath” in seconds
* `levels`
* The number of brightness levels (maximum 31, excluding off)
* `pin`
* The pin that controls the backlight LED(s)
Example:
```json
{
"backlight": {
"breathing": true,
"breathing_period": 5,
"levels": 15,
"pin": "B7"
}
}
```
### LED Indicators
Used for indicating Num Lock, Caps Lock, and Scroll Lock. May be soldered in-switch or in a dedicated area.
* `num_lock`
* The pin that controls the `Num Lock` LED
* `caps_lock`
* The pin that controls the `Caps Lock` LED
* `scroll_lock`
* The pin that controls the `Scroll Lock` LED
Example:
```json
{
"indicators": {
"num_lock": "B6",
"caps_lock": "D2",
"scroll_lock": "A3"
}
}
```
## RGB Lighting
### RGB Lighting
This section controls the legacy WS2812 support in QMK. This should not be confused with the RGB Matrix feature, which can be used to control both WS2812 and ISSI RGB LEDs.
@@ -203,7 +152,7 @@ Example:
}
```
### RGBLight Animations
#### RGBLight Animations
The following animations can be enabled:

View File

@@ -252,7 +252,7 @@ BOOTLOADER = stm32-dfu
### `make` 构建目标
* `:dfu-util`: 每5秒检测一次直到发现可用的STM32 bootloader设备然后进行固件刷写。
* `:dfu-util-split-left``:dfu-util-split-right`: 同 `:dfu-util` 一样会刷写固件但额外地会设置手性设置到EEPROM中对于基于Proton-C的分体式键盘这是理想的方法。
* `:dfu-util-split-left``:dfu-util-split-right`: 同 `:avrdude` 一样会刷写固件但额外地会设置手性设置到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电子狗。

View File

@@ -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, 3, AW_SPI_DIVISOR)) {
if (!spi_start(cs_pin, false, 0, AW_SPI_DIVISOR)) {
spi_stop();
return false;
}

View File

@@ -0,0 +1,11 @@
# Gherkin Layout
This is my gherkin layout.
It is used as a game pad, and key layout is inspired by spare keys I had lying around.
The firmware is very simple, and only includes one layer keymap, and RGB effects.
# Flashing
The following command should be used from the main qmk directory.
```
make gherkin:bbaserdem
sudo avrdude -p atmgea34u4 -P `ls /dev/ttyACM*` -c avr109 -U flash:.build/gherkin_bbaserdem.hex
```

View File

@@ -0,0 +1,9 @@
#pragma once
#define RGB_DI_PIN F6
#define RGBLED_NUM 10
#define RGBLIGHT_ANIMATIONS
#ifdef BACKLIGHT_LEVELS
#undef BACKLIGHT_LEVELS
#endif
#define BACKLIGHT_LEVELS 3

View File

@@ -0,0 +1,36 @@
// This is a game-pad gherkin layout with RGB and LED lights
#include QMK_KEYBOARD_H
backlight_config_t backlight_config;
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Game pad
* ,-----------------------------------------------------------.
* | Esc | 1 | 2 | 3 | 4 | 5 | 6 | Ctl | Alt | ~ |
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
* | Tab | Q | W | E | R | T | |^| | ; | ' | / |
* |-----+-----+-----+-----+-----+-----+-----+-----+-----+-----|
* | Shf | A | S | D | F | <-- | |v| | --> | , | . |
* `-----------------------------------------------------------'
*/
LAYOUT_ortho_3x10(
KC_ESCAPE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_LCTRL, KC_LALT, KC_GRAVE,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_UP, KC_SCLN, KC_QUOTE, KC_SLASH,
KC_LSHIFT, KC_A, KC_S, KC_D, KC_F, KC_LEFT, KC_DOWN, KC_RIGHT, KC_COMMA, KC_DOT
)
};
void matrix_init_user(void) {
// Set LED's to max
_delay_us(300);
backlight_config.level = 2;
backlight_config.enable = 1;
eeconfig_update_backlight(backlight_config.raw);
backlight_set(backlight_config.level);
// Set RGB to rainbow mood light
rgblight_enable();
rgblight_mode(1);
rgblight_sethsv(120,255,255);
rgblight_mode(6);
}

View File

@@ -0,0 +1,13 @@
USER_NAME := bbaserdem-nouserspace
STENO_ENABLE = no # Additional protocols for Stenography(+1700), requires VIRTSER
MOUSEKEY_ENABLE = no # Mouse keys(+4700)
EXTRAKEY_ENABLE = no # Audio control and System control(+450)
CONSOLE_ENABLE = no # Console for debug(+400)
COMMAND_ENABLE = no # Commands for debug and configuration
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
AUDIO_ENABLE = no # Enable audio output from keyboard
NKRO_ENABLE = yes # USB Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
RGBLIGHT_ENABLE = yes # Enable RBG light strips
BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality

View File

@@ -23,8 +23,8 @@
// clang-format off
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[_QWERTY] = LAYOUT(
KC_VOLU, KC_MPLY, KC_MPRV, QK_BOOT,
KC_VOLD, KC_MUTE, KC_MNXT, QK_BOOT
KC_VOLU, KC_MPLY, KC_MPRV, RESET,
KC_VOLD, KC_MUTE, KC_MNXT, RESET
),
};

View File

@@ -40,3 +40,5 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
/* Set 0 if debouncing isn't needed */
#define DEBOUNCE 5
#define STM32_HSECLK 8000000

View File

@@ -1,4 +1,4 @@
/* Copyright 2022 QMK
/* 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
@@ -16,13 +16,12 @@
/*
* This file was auto-generated by:
* `qmk chibios-confmigrate -i keyboards/xelus/kangaroo/mcuconf.h -r platforms/chibios/GENERIC_STM32_F072XB/configs/mcuconf.h`
* `qmk chibios-confmigrate -i keyboards/acheron/austin/mcuconf.h -r platforms/chibios/GENERIC_STM32_F072XB/configs/mcuconf.h`
*/
#pragma once
#include_next <mcuconf.h>
#undef STM32_PLLM_VALUE
#undef STM32_PLLN_VALUE
#undef STM32_PLLP_VALUE
@@ -30,13 +29,9 @@
#undef STM32_PPRE1
#undef STM32_PPRE2
// 64MHz core
#define STM32_PLLM_VALUE 8
#define STM32_PLLN_VALUE 168
#define STM32_PLLP_VALUE 4
#define STM32_PLLQ_VALUE 7
#define STM32_PPRE1 STM32_PPRE1_DIV2
#define STM32_PPRE2 STM32_PPRE1_DIV1
#undef STM32_I2C_USE_I2C1
#define STM32_I2C_USE_I2C1 TRUE
#define STM32_PLLM_VALUE 4
#define STM32_PLLN_VALUE 168
#define STM32_PLLP_VALUE 4
#define STM32_PLLQ_VALUE 7
#define STM32_PPRE1 STM32_PPRE1_DIV2
#define STM32_PPRE2 STM32_PPRE2_DIV1

View File

@@ -1,6 +1,5 @@
# MCU name
MCU = STM32F411
BOARD = GENERIC_STM32_F411XE
# Bootloader selection
BOOTLOADER = stm32-dfu

View File

@@ -1,19 +0,0 @@
// Copyright 2021 Manna Harbour
// https://github.com/manna-harbour/miryoku
// 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 LAYOUT_miryoku( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, \
N30, N31, K32, K33, K34, K35, K36, K37, N38, N39 \
) \
LAYOUT( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, \
K33, K34, K35, K36 \
)

View File

@@ -1,4 +0,0 @@
// Copyright 2019 Manna Harbour
// https://github.com/manna-harbour/miryoku
// 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/>.

View File

@@ -1,4 +0,0 @@
# Copyright 2021 Manna Harbour
# https://github.com/manna-harbour/miryoku
MIRYOKU_KLUDGE_THUMBCOMBOS=yes

View File

@@ -1,137 +0,0 @@
/*
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

View File

@@ -1,299 +0,0 @@
{
"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}
]
}
}
}

View File

@@ -1,20 +0,0 @@
/* 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

View File

@@ -1,61 +0,0 @@
/* 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

View File

@@ -1,19 +0,0 @@
/* 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

View File

@@ -1,61 +0,0 @@
/* 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

View File

@@ -1,19 +0,0 @@
/* 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

View File

@@ -1,85 +0,0 @@
/* 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

View File

@@ -1,81 +0,0 @@
/* 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 } \
}

View File

@@ -1,20 +0,0 @@
# Nayeon
![Nayeon](https://i.imgur.com/OfB5ikbl.jpg)
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).

View File

@@ -1,18 +0,0 @@
# 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

View File

@@ -30,10 +30,6 @@ 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
*

View File

@@ -17,7 +17,6 @@ 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

View File

@@ -47,6 +47,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#define BREATHING_PERIOD 5
#define BACKLIGHT_ON_STATE 1
#define STM32_HSECLK 8000000
#define RGB_DI_PIN B15
#define RGBLED_NUM 24
#define RGBLIGHT_ANIMATIONS

View File

@@ -17,6 +17,19 @@
#pragma once
#include_next <mcuconf.h>
#undef STM32_PLLM_VALUE
#undef STM32_PLLN_VALUE
#undef STM32_PLLP_VALUE
#undef STM32_PLLQ_VALUE
#undef STM32_PPRE1
#undef STM32_PPRE2
#define STM32_PLLM_VALUE 4
#define STM32_PLLN_VALUE 96
#define STM32_PLLP_VALUE 2
#define STM32_PLLQ_VALUE 4
#define STM32_PPRE1 STM32_PPRE1_DIV2
#define STM32_PPRE2 STM32_PPRE2_DIV1
#undef STM32_I2C_USE_I2C1
#define STM32_I2C_USE_I2C1 TRUE

View File

@@ -1,5 +1,4 @@
MCU = STM32F411
BOARD = GENERIC_STM32_F411XE
# Bootloader selection
BOOTLOADER = stm32-dfu

View File

@@ -1,17 +0,0 @@
/* 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"

View File

@@ -1,31 +0,0 @@
/* 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 } \
}

View File

@@ -1,39 +0,0 @@
/* 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

View File

@@ -1,56 +0,0 @@
{
"keyboard_name": "ADM42 rev4",
"url": "https://adm42.dev/",
"maintainer": "lleonini",
"layouts": {
"LAYOUT_adm42_3x12_6": {
"layout": [
{"label":"GUI/`~", "x":0, "y":0.8},
{"label":"Q", "x":1, "y":0.8},
{"label":"W", "x":2, "y":0},
{"label":"E", "x":3, "y":0},
{"label":"R", "x":4, "y":0.5},
{"label":"T", "x":5, "y":0.5},
{"label":"Y", "x":7.5, "y":0.5},
{"label":"U", "x":8.5, "y":0.5},
{"label":"I", "x":9.5, "y":0},
{"label":"O", "x":10.5, "y":0},
{"label":"P", "x":11.5, "y":0.8},
{"label":"GUI/=+", "x":12.5, "y":0.8},
{"label":"Ctrl/Tab", "x":0, "y":1.8},
{"label":"A", "x":1, "y":1.8},
{"label":"S", "x":2, "y":1},
{"label":"D", "x":3, "y":1},
{"label":"F", "x":4, "y":1.5},
{"label":"G", "x":5, "y":1.5},
{"label":"H", "x":7.5, "y":1.5},
{"label":"J", "x":8.5, "y":1.5},
{"label":"K", "x":9.5, "y":1},
{"label":"L", "x":10.5, "y":1},
{"label":";:", "x":11.5, "y":1.8},
{"label":"Ctrl/'\"", "x":12.5, "y":1.8},
{"label":"Alt", "x":0, "y":2.8},
{"label":"Z", "x":1, "y":2.8},
{"label":"X", "x":2, "y":2},
{"label":"C", "x":3, "y":2},
{"label":"V", "x":4, "y":2.5},
{"label":"B", "x":5, "y":2.5},
{"label":"N", "x":7.5, "y":2.5},
{"label":"M", "x":8.5, "y":2.5},
{"label":",<", "x":9.5, "y":2},
{"label":".>", "x":10.5, "y":2},
{"label":"/?", "x":11.5, "y":2.8},
{"label":"Alt", "x":12.5, "y":2.8},
{"label":"Special/Esc", "x":4.25, "y":3.55},
{"label":"Shift/Backspace", "x":5.25, "y":3.65},
{"label":"Adm/Delete", "x":6.25, "y":1.875, "h":1.25},
{"label":"Extra/Enter", "x":6.25, "y":4.05},
{"label":"Shift/Space", "x":7.25, "y":3.65},
{"label":"Special/Alt", "x":8.25, "y":3.55}
]
}
}
}

View File

@@ -1,27 +0,0 @@
# ADM42
![ADM42](https://i.imgur.com/pviCQSQh.jpeg)
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

View File

@@ -1,52 +0,0 @@
/* 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

View File

@@ -1,3 +0,0 @@
#define HOLD_ON_OTHER_KEY_PRESS_PER_KEY
#define TAPPING_FORCE_HOLD_PER_KEY
#define IGNORE_MOD_TAP_INTERRUPT_PER_KEY

View File

@@ -1,210 +0,0 @@
/* 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);
}

View File

@@ -1,39 +0,0 @@
/* 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
}
};

View File

@@ -1,2 +0,0 @@
RGB_MATRIX_ENABLE = yes
RGB_MATRIX_DRIVER = WS2812

View File

@@ -1,22 +0,0 @@
# 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

View File

@@ -45,4 +45,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, KC_SPC, _______, _______, _______, _______, _______
),
};
};

View File

@@ -0,0 +1,164 @@
/* 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

View File

@@ -0,0 +1 @@
# Franky keymap for Kintsugi. Here to serve as a way to test snippets of code.

View File

@@ -1,3 +1,3 @@
LTO_ENABLE = yes
VIA_ENABLE = yes
LTO_ENABLE = yes
WPM_ENABLE = yes

View File

@@ -1,454 +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_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;
}

View File

@@ -1,30 +0,0 @@
# 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).*

View File

@@ -1,5 +0,0 @@
VIA_ENABLE = yes
LTO_ENABLE = yes
WPM_ENABLE = yes
SPACE_CADET_ENABLE = no
MAGIC_ENABLE = no

View File

@@ -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_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_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(1), MO(2), KC_LEFT, KC_DOWN, KC_RIGHT
),

View File

@@ -21,36 +21,39 @@
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;
}
}
/* 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;
}
return true;
}
#endif
/* Rotation of the OLED: */
#ifdef OLED_ENABLE
oled_rotation_t oled_init_kb(oled_rotation_t rotation) {
oled_rotation_t oled_init_user(oled_rotation_t rotation) {
return OLED_ROTATION_270;
}
static void render_logo(void) {
/* Kintsugi logo render: */
bool oled_task_kb(void) {
if (!oled_task_user()) {
return false;
}
/* 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
};
@@ -60,22 +63,12 @@ static void render_logo(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(0,3);
oled_set_cursor(1,3);
oled_write_P(logo_1, false);
oled_set_cursor(0,7);
oled_set_cursor(1,7);
oled_write_P(logo_2, false);
oled_set_cursor(0,11);
oled_set_cursor(1,11);
oled_write_P(logo_3, false);
}
bool oled_task_kb(void) {
if (!oled_task_user()) {
return false;
}
else {
render_logo();
}
return true;
}
#endif

View File

@@ -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, 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, 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, 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, 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, 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, 0x00, 0x00, 0x00,

View File

@@ -1,66 +0,0 @@
/* Copyright 2021 Steven Phillips (Spooknik)
*
* 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 0xBBEB
#define PRODUCT_ID 0xD4C4
#define DEVICE_VER 0x0001
#define MANUFACTURER AlfredsLab
#define PRODUCT Swift65
/* key matrix size */
#define MATRIX_ROWS 5
#define MATRIX_COLS 15
/*
* 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 { B1, B2, B3, D6, D4 }
#define MATRIX_COL_PINS { F7, F6, F5, F4, F1, F0, C7, C6, B6, B5, B4, D7, D5, D3, D1 }
#define DIODE_DIRECTION COL2ROW
#define RGB_DI_PIN D2
#ifdef RGB_DI_PIN
#define RGBLED_NUM 22
#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 */
/*== all animations enable ==*/
#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
#define RGBLIGHT_EFFECT_TWINKLE
#endif

View File

@@ -1,35 +0,0 @@
/* Copyright 2022 Steven Phillips (spooknik)
*
* 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 XXX KC_NO
#define LAYOUT_7u_space( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2D, K2E, \
K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
K40, K41, K42, K46, K4B, K4C, K4D, K4E \
) { \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, K0E }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, K1D, K1E }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, XXX, K2D, K2E }, \
{ XXX, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, XXX }, \
{ K40, K41, K42, XXX, XXX, XXX, K46, XXX, XXX, XXX, XXX, K4B, K4C, K4D, K4E }, \
}

View File

@@ -1,81 +0,0 @@
{
"keyboard_name": "hotswap",
"url": "https://swiftcables.net/",
"maintainer": "Spooknik",
"layout_aliases": {
"LAYOUT": "LAYOUT_7u_space",
"LAYOUT_all": "LAYOUT_7u_space"
},
"layouts": {
"LAYOUT_7u_space": {
"layout": [
{ "label": "K00 (B1,F7)", "x": 0, "y": 0 },
{ "label": "K01 (B1,F6)", "x": 1, "y": 0 },
{ "label": "K02 (B1,F5)", "x": 2, "y": 0 },
{ "label": "K03 (B1,F4)", "x": 3, "y": 0 },
{ "label": "K04 (B1,F1)", "x": 4, "y": 0 },
{ "label": "K05 (B1,F0)", "x": 5, "y": 0 },
{ "label": "K06 (B1,C7)", "x": 6, "y": 0 },
{ "label": "K07 (B1,C6)", "x": 7, "y": 0 },
{ "label": "K08 (B1,B6)", "x": 8, "y": 0 },
{ "label": "K09 (B1,B5)", "x": 9, "y": 0 },
{ "label": "K0A (B1,B4)", "x": 10, "y": 0 },
{ "label": "K0B (B1,D7)", "x": 11, "y": 0 },
{ "label": "K0C (B1,D5)", "x": 12, "y": 0 },
{ "label": "K0D (B1,D3)", "x": 13, "y": 0, "w": 2 },
{ "label": "K0E (B1,D1)", "x": 15.25, "y": 0 },
{ "label": "K10 (B2,F7)", "x": 0, "y": 1, "w": 1.5 },
{ "label": "K11 (B2,F6)", "x": 1.5, "y": 1 },
{ "label": "K12 (B2,F5)", "x": 2.5, "y": 1 },
{ "label": "K13 (B2,F4)", "x": 3.5, "y": 1 },
{ "label": "K14 (B2,F1)", "x": 4.5, "y": 1 },
{ "label": "K15 (B2,F0)", "x": 5.5, "y": 1 },
{ "label": "K16 (B2,C7)", "x": 6.5, "y": 1 },
{ "label": "K17 (B2,C6)", "x": 7.5, "y": 1 },
{ "label": "K18 (B2,B6)", "x": 8.5, "y": 1 },
{ "label": "K19 (B2,B5)", "x": 9.5, "y": 1 },
{ "label": "K1A (B2,B4)", "x": 10.5, "y": 1 },
{ "label": "K1B (B2,D7)", "x": 11.5, "y": 1 },
{ "label": "K1C (B2,D5)", "x": 12.5, "y": 1 },
{ "label": "K1D (B2,D3)", "x": 13.5, "y": 1, "w": 1.5 },
{ "label": "K1E (B2,D1)", "x": 15.25, "y": 1 },
{ "label": "K20 (B3,F7)", "x": 0, "y": 2, "w": 1.75 },
{ "label": "K21 (B3,F6)", "x": 1.75, "y": 2 },
{ "label": "K22 (B3,F5)", "x": 2.75, "y": 2 },
{ "label": "K23 (B3,F4)", "x": 3.75, "y": 2 },
{ "label": "K24 (B3,F1)", "x": 4.75, "y": 2 },
{ "label": "K25 (B3,F0)", "x": 5.75, "y": 2 },
{ "label": "K26 (B3,C7)", "x": 6.75, "y": 2 },
{ "label": "K27 (B3,C6)", "x": 7.75, "y": 2 },
{ "label": "K28 (B3,B6)", "x": 8.75, "y": 2 },
{ "label": "K29 (B3,B5)", "x": 9.75, "y": 2 },
{ "label": "K2A (B3,B4)", "x": 10.75, "y": 2 },
{ "label": "K2B (B3,D7)", "x": 11.75, "y": 2 },
{ "label": "K2D (B3,D3)", "x": 12.75, "y": 2, "w": 2.25 },
{ "label": "K2E (B3,D1)", "x": 15.25, "y": 2 },
{ "label": "K31 (D6,F6)", "x": 0, "y": 3, "w": 2.25 },
{ "label": "K32 (D6,F5)", "x": 2.25, "y": 3 },
{ "label": "K33 (D6,F4)", "x": 3.25, "y": 3 },
{ "label": "K34 (D6,F1)", "x": 4.25, "y": 3 },
{ "label": "K35 (D6,F0)", "x": 5.25, "y": 3 },
{ "label": "K36 (D6,C7)", "x": 6.25, "y": 3 },
{ "label": "K37 (D6,C6)", "x": 7.25, "y": 3 },
{ "label": "K38 (D6,B6)", "x": 8.25, "y": 3 },
{ "label": "K39 (D6,B5)", "x": 9.25, "y": 3 },
{ "label": "K3A (D6,B4)", "x": 10.25, "y": 3 },
{ "label": "K3B (D6,D7)", "x": 11.25, "y": 3 },
{ "label": "K3C (D6,D5)", "x": 12.25, "y": 3, "w": 1.75 },
{ "label": "K3D (D6,D3)", "x": 14, "y": 3 },
{ "label": "K40 (D4,F7)", "x": 0, "y": 4, "w": 1.25 },
{ "label": "K41 (D4,F6)", "x": 1.25, "y": 4, "w": 1.25 },
{ "label": "K42 (D4,F5)", "x": 2.5, "y": 4, "w": 1.25 },
{ "label": "K46 (D4,C7)", "x": 3.75, "y": 4, "w": 7.25 },
{ "label": "K4B (D4,D7)", "x": 11, "y": 4, "w": 1.5 },
{ "label": "K4C (D4,D5)", "x": 13, "y": 4 },
{ "label": "K4D (D4,D3)", "x": 14, "y": 4 },
{ "label": "K4E (D4,D1)", "x": 15, "y": 4 }
]
}
}
}

View File

@@ -1,37 +0,0 @@
/* Copyright 2022 Steven Phillips (spooknik)
*
* 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_7u_space(
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_HOME,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
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_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_7u_space(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN,
RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP,
_______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
),
};

View File

@@ -1,53 +0,0 @@
/* Copyright 2021 Steven Phillips (spooknik)
*
* 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_7u_space(
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_HOME,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGUP,
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_LEFT, KC_DOWN, KC_RGHT
),
[1] = LAYOUT_7u_space(
KC_GRV, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGDN,
RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_PGUP,
_______, _______, _______, _______, _______, KC_HOME, KC_PGDN, KC_END
),
[2] = LAYOUT_7u_space(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
[3] = LAYOUT_7u_space(
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS,
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS
),
};

View File

@@ -1 +0,0 @@
VIA_ENABLE = yes

View File

@@ -1,19 +0,0 @@
# Swift65
A 65% Keyboard from Swiftcables
* Keyboard Maintainer: [Steven Phillips (spooknik)](https://github.com/keyboardcollective)
* Hardware Supported: Swift65 Hotswap
* Hardware Availability: Soom from Swiftcables
To enter bootloader for flashing firmware, press layer change key (MO(1)) and Right Shift simultaneously.
Make example for this keyboard (after setting up your build environment):
make alfredslab/swift65/hotswap:default
Flashing example for this keyboard:
make alfredslab/swift65/hotswap: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).

View File

@@ -1,19 +0,0 @@
# 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 = yes # Enable N-Key Rollover
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
AUDIO_ENABLE = no # Audio output

View File

@@ -1,18 +0,0 @@
/*
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"

View File

@@ -1,24 +0,0 @@
/*
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

View File

@@ -1,20 +0,0 @@
/*
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"

View File

@@ -1,52 +0,0 @@
{
"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}
]
}
}
}

View File

@@ -1,32 +0,0 @@
/*
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
)
};

View File

@@ -1,66 +0,0 @@
# alt34
![alt34](https://i.imgur.com/GDv0dL0h.png)
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).

View File

@@ -1,55 +0,0 @@
/*
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 */

View File

@@ -1,18 +0,0 @@
/*
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"

View File

@@ -1,42 +0,0 @@
/*
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} \
}

View File

@@ -1,21 +0,0 @@
# 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

View File

@@ -106,7 +106,6 @@ void keyboard_post_init_kb(void) {
#ifdef RGB_MATRIX_ENABLE
ap2_led_enable();
ap2_led_set_manual_control(1);
#endif
keyboard_post_init_user();
@@ -130,7 +129,7 @@ void matrix_scan_kb() {
if(rgb_row_changed[current_rgb_row])
{
rgb_row_changed[current_rgb_row] = 0;
ap2_led_colors_set_row(current_rgb_row);
ap2_led_mask_set_row(current_rgb_row);
}
current_rgb_row = (current_rgb_row + 1) % NUM_ROW;
#endif

Some files were not shown because too many files have changed in this diff Show More