mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-09-10 17:15:43 +00:00
Compare commits
39 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7fe4097792 | ||
|
|
652f4492d3 | ||
|
|
910c466cfe | ||
|
|
19dbcf3814 | ||
|
|
c89012566c | ||
|
|
9dfebb9d67 | ||
|
|
2a31fbf9a6 | ||
|
|
cce2420bb2 | ||
|
|
b272c035ba | ||
|
|
5f1f370463 | ||
|
|
49a2fbea0c | ||
|
|
4b1430fd09 | ||
|
|
f1c6fa3895 | ||
|
|
fe1a055391 | ||
|
|
c18b51e68e | ||
|
|
dc68418660 | ||
|
|
499d7c8ce6 | ||
|
|
60b020acab | ||
|
|
b5be96f8bb | ||
|
|
7aa21cc287 | ||
|
|
d597af9e1e | ||
|
|
03ed819717 | ||
|
|
141535c9db | ||
|
|
a92947fcdb | ||
|
|
cde5237a88 | ||
|
|
dc79792ab4 | ||
|
|
e6a9f700de | ||
|
|
0fdd37ee19 | ||
|
|
40e8d60ecd | ||
|
|
f81b0e35a6 | ||
|
|
5e98eaaaff | ||
|
|
9e8767917d | ||
|
|
f89439ae09 | ||
|
|
3cd2a27ac0 | ||
|
|
28d94b7248 | ||
|
|
abd8e75cb7 | ||
|
|
9046107183 | ||
|
|
2b63896466 | ||
|
|
6734a39811 |
@@ -18,7 +18,6 @@
|
||||
* [Overview](newbs_building_firmware_configurator.md)
|
||||
* [Step by Step](configurator_step_by_step.md)
|
||||
* [Troubleshooting](configurator_troubleshooting.md)
|
||||
* [Problems and Bugs](configurator_problems.md)
|
||||
* QMK API
|
||||
* [Overview](api_overview.md)
|
||||
* [API Documentation](api_docs.md)
|
||||
@@ -128,7 +127,6 @@
|
||||
* Python Development
|
||||
* [Coding Conventions](coding_conventions_python.md)
|
||||
* [QMK CLI Development](cli_development.md)
|
||||
* [QMK CLI Config](cli_dev_configuration.md)
|
||||
|
||||
* Configurator Development
|
||||
* QMK API
|
||||
|
||||
289
docs/cli.md
289
docs/cli.md
@@ -1,24 +1,14 @@
|
||||
# QMK CLI
|
||||
# QMK CLI :id=qmk-cli
|
||||
|
||||
This page describes how to setup and use the QMK CLI.
|
||||
|
||||
# Overview
|
||||
## Overview :id=overview
|
||||
|
||||
The QMK CLI makes building and working with QMK keyboards easier. We have provided a number of commands to simplify and streamline tasks such as obtaining and compiling the QMK firmware, creating keymaps, and more.
|
||||
|
||||
* [Global CLI](#global-cli)
|
||||
* [Local CLI](#local-cli)
|
||||
* [CLI Commands](#cli-commands)
|
||||
### Requirements :id=requirements
|
||||
|
||||
# Requirements
|
||||
The CLI requires Python 3.5 or greater. We try to keep the number of requirements small but you will also need to install the packages listed in [`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt). These are installed automatically when you install the QMK CLI.
|
||||
|
||||
The CLI requires Python 3.5 or greater. We try to keep the number of requirements small but you will also need to install the packages listed in [`requirements.txt`](https://github.com/qmk/qmk_firmware/blob/master/requirements.txt).
|
||||
|
||||
# Global CLI
|
||||
|
||||
QMK provides an installable CLI that can be used to setup your QMK build environment, work with QMK, and which makes working with multiple copies of `qmk_firmware` easier. We recommend installing and updating this periodically.
|
||||
|
||||
## Install Using Homebrew (macOS, some Linux)
|
||||
### Install Using Homebrew (macOS, some Linux) :id=install-using-homebrew
|
||||
|
||||
If you have installed [Homebrew](https://brew.sh) you can tap and install QMK:
|
||||
|
||||
@@ -29,7 +19,7 @@ export QMK_HOME='~/qmk_firmware' # Optional, set the location for `qmk_firmware`
|
||||
qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build environment
|
||||
```
|
||||
|
||||
## Install Using easy_install or pip
|
||||
### Install Using easy_install or pip :id=install-using-easy_install-or-pip
|
||||
|
||||
If your system is not listed above you can install QMK manually. First ensure that you have python 3.5 (or later) installed and have installed pip. Then install QMK with this command:
|
||||
|
||||
@@ -39,7 +29,7 @@ export QMK_HOME='~/qmk_firmware' # Optional, set the location for `qmk_firmware`
|
||||
qmk setup # This will clone `qmk/qmk_firmware` and optionally set up your build environment
|
||||
```
|
||||
|
||||
## Packaging For Other Operating Systems
|
||||
### Packaging For Other Operating Systems :id=packaging-for-other-operating-systems
|
||||
|
||||
We are looking for people to create and maintain a `qmk` package for more operating systems. If you would like to create a package for your OS please follow these guidelines:
|
||||
|
||||
@@ -47,268 +37,3 @@ We are looking for people to create and maintain a `qmk` package for more operat
|
||||
* Document why in a comment when you do deviate
|
||||
* Install using a virtualenv
|
||||
* Instruct the user to set the environment variable `QMK_HOME` to have the firmware source checked out somewhere other than `~/qmk_firmware`.
|
||||
|
||||
# Local CLI
|
||||
|
||||
If you do not want to use the global CLI there is a local CLI bundled with `qmk_firmware`. You can find it in `qmk_firmware/bin/qmk`. You can run the `qmk` command from any directory and it will always operate on that copy of `qmk_firmware`.
|
||||
|
||||
**Example**:
|
||||
|
||||
```
|
||||
$ ~/qmk_firmware/bin/qmk hello
|
||||
Ψ Hello, World!
|
||||
```
|
||||
|
||||
## Local CLI Limitations
|
||||
|
||||
There are some limitations to the local CLI compared to the global CLI:
|
||||
|
||||
* The local CLI does not support `qmk setup` or `qmk clone`
|
||||
* The local CLI always operates on the same `qmk_firmware` tree, even if you have multiple repositories cloned.
|
||||
* The local CLI does not run in a virtualenv, so it's possible that dependencies will conflict
|
||||
|
||||
# CLI Commands
|
||||
|
||||
## `qmk cformat`
|
||||
|
||||
This command formats C code using clang-format.
|
||||
|
||||
Run it with no arguments to format all core code that has been changed. Default checks `origin/master` with `git diff`, branch can be changed using `-b <branch_name>`
|
||||
|
||||
Run it with `-a` to format all core code, or pass filenames on the command line to run it on specific files.
|
||||
|
||||
**Usage for specified files**:
|
||||
|
||||
```
|
||||
qmk cformat [file1] [file2] [...] [fileN]
|
||||
```
|
||||
|
||||
**Usage for all core files**:
|
||||
|
||||
```
|
||||
qmk cformat -a
|
||||
```
|
||||
|
||||
**Usage for only changed files against origin/master**:
|
||||
|
||||
```
|
||||
qmk cformat
|
||||
```
|
||||
|
||||
**Usage for only changed files against branch_name**:
|
||||
|
||||
```
|
||||
qmk cformat -b branch_name
|
||||
```
|
||||
|
||||
## `qmk compile`
|
||||
|
||||
This command allows you to compile firmware from any directory. You can compile JSON exports from <https://config.qmk.fm>, compile keymaps in the repo, or compile the keyboard in the current working directory.
|
||||
|
||||
**Usage for Configurator Exports**:
|
||||
|
||||
```
|
||||
qmk compile <configuratorExport.json>
|
||||
```
|
||||
|
||||
**Usage for Keymaps**:
|
||||
|
||||
```
|
||||
qmk compile -kb <keyboard_name> -km <keymap_name>
|
||||
```
|
||||
|
||||
**Usage in Keyboard Directory**:
|
||||
|
||||
Must be in keyboard directory with a default keymap, or in keymap directory for keyboard, or supply one with `--keymap <keymap_name>`
|
||||
```
|
||||
qmk compile
|
||||
```
|
||||
|
||||
**Example**:
|
||||
```
|
||||
$ qmk config compile.keymap=default
|
||||
$ cd ~/qmk_firmware/keyboards/planck/rev6
|
||||
$ qmk compile
|
||||
Ψ Compiling keymap with make planck/rev6:default
|
||||
...
|
||||
```
|
||||
or with optional keymap argument
|
||||
|
||||
```
|
||||
$ cd ~/qmk_firmware/keyboards/clueboard/66/rev4
|
||||
$ qmk compile -km 66_iso
|
||||
Ψ Compiling keymap with make clueboard/66/rev4:66_iso
|
||||
...
|
||||
```
|
||||
or in keymap directory
|
||||
|
||||
```
|
||||
$ cd ~/qmk_firmware/keyboards/gh60/satan/keymaps/colemak
|
||||
$ qmk compile
|
||||
Ψ Compiling keymap with make make gh60/satan:colemak
|
||||
...
|
||||
```
|
||||
|
||||
**Usage in Layout Directory**:
|
||||
|
||||
Must be under `qmk_firmware/layouts/`, and in a keymap folder.
|
||||
```
|
||||
qmk compile -kb <keyboard_name>
|
||||
```
|
||||
|
||||
**Example**:
|
||||
```
|
||||
$ cd ~/qmk_firmware/layouts/community/60_ansi/mechmerlin-ansi
|
||||
$ qmk compile -kb dz60
|
||||
Ψ Compiling keymap with make dz60:mechmerlin-ansi
|
||||
...
|
||||
```
|
||||
|
||||
## `qmk flash`
|
||||
|
||||
This command is similar to `qmk compile`, but can also target a bootloader. The bootloader is optional, and is set to `:flash` by default.
|
||||
To specify a different bootloader, use `-bl <bootloader>`. Visit the [Flashing Firmware](flashing.md) guide for more details of the available bootloaders.
|
||||
|
||||
**Usage for Configurator Exports**:
|
||||
|
||||
```
|
||||
qmk flash <configuratorExport.json> -bl <bootloader>
|
||||
```
|
||||
|
||||
**Usage for Keymaps**:
|
||||
|
||||
```
|
||||
qmk flash -kb <keyboard_name> -km <keymap_name> -bl <bootloader>
|
||||
```
|
||||
|
||||
**Listing the Bootloaders**
|
||||
|
||||
```
|
||||
qmk flash -b
|
||||
```
|
||||
|
||||
## `qmk config`
|
||||
|
||||
This command lets you configure the behavior of QMK. For the full `qmk config` documentation see [CLI Configuration](cli_configuration.md).
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk config [-ro] [config_token1] [config_token2] [...] [config_tokenN]
|
||||
```
|
||||
|
||||
## `qmk docs`
|
||||
|
||||
This command starts a local HTTP server which you can use for browsing or improving the docs. Default port is 8936.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk docs [-p PORT]
|
||||
```
|
||||
|
||||
## `qmk doctor`
|
||||
|
||||
This command examines your environment and alerts you to potential build or flash problems. It can fix many of them if you want it to.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk doctor [-y] [-n]
|
||||
```
|
||||
|
||||
**Examples**:
|
||||
|
||||
Check your environment for problems and prompt to fix them:
|
||||
|
||||
qmk doctor
|
||||
|
||||
Check your environment and automatically fix any problems found:
|
||||
|
||||
qmk doctor -y
|
||||
|
||||
Check your environment and report problems only:
|
||||
|
||||
qmk doctor -n
|
||||
|
||||
## `qmk json2c`
|
||||
|
||||
Creates a keymap.c from a QMK Configurator export.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk json2c [-o OUTPUT] filename
|
||||
```
|
||||
|
||||
## `qmk kle2json`
|
||||
|
||||
This command allows you to convert from raw KLE data to QMK Configurator JSON. It accepts either an absolute file path, or a file name in the current directory. By default it will not overwrite `info.json` if it is already present. Use the `-f` or `--force` flag to overwrite.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk kle2json [-f] <filename>
|
||||
```
|
||||
|
||||
**Examples**:
|
||||
|
||||
```
|
||||
$ qmk kle2json kle.txt
|
||||
☒ File info.json already exists, use -f or --force to overwrite.
|
||||
```
|
||||
|
||||
```
|
||||
$ qmk kle2json -f kle.txt -f
|
||||
Ψ Wrote out to info.json
|
||||
```
|
||||
|
||||
## `qmk list-keyboards`
|
||||
|
||||
This command lists all the keyboards currently defined in `qmk_firmware`
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk list-keyboards
|
||||
```
|
||||
|
||||
## `qmk list-keymaps`
|
||||
|
||||
This command lists all the keymaps for a specified keyboard (and revision).
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk list-keymaps -kb planck/ez
|
||||
```
|
||||
|
||||
## `qmk new-keymap`
|
||||
|
||||
This command creates a new keymap based on a keyboard's existing default keymap.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk new-keymap [-kb KEYBOARD] [-km KEYMAP]
|
||||
```
|
||||
|
||||
## `qmk pyformat`
|
||||
|
||||
This command formats python code in `qmk_firmware`.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk pyformat
|
||||
```
|
||||
|
||||
## `qmk pytest`
|
||||
|
||||
This command runs the python test suite. If you make changes to python code you should ensure this runs successfully.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk pytest
|
||||
```
|
||||
|
||||
253
docs/cli_commands.md
Normal file
253
docs/cli_commands.md
Normal file
@@ -0,0 +1,253 @@
|
||||
# QMK CLI Commands
|
||||
|
||||
# CLI Commands
|
||||
|
||||
## `qmk cformat`
|
||||
|
||||
This command formats C code using clang-format.
|
||||
|
||||
Run it with no arguments to format all core code that has been changed. Default checks `origin/master` with `git diff`, branch can be changed using `-b <branch_name>`
|
||||
|
||||
Run it with `-a` to format all core code, or pass filenames on the command line to run it on specific files.
|
||||
|
||||
**Usage for specified files**:
|
||||
|
||||
```
|
||||
qmk cformat [file1] [file2] [...] [fileN]
|
||||
```
|
||||
|
||||
**Usage for all core files**:
|
||||
|
||||
```
|
||||
qmk cformat -a
|
||||
```
|
||||
|
||||
**Usage for only changed files against origin/master**:
|
||||
|
||||
```
|
||||
qmk cformat
|
||||
```
|
||||
|
||||
**Usage for only changed files against branch_name**:
|
||||
|
||||
```
|
||||
qmk cformat -b branch_name
|
||||
```
|
||||
|
||||
## `qmk compile`
|
||||
|
||||
This command allows you to compile firmware from any directory. You can compile JSON exports from <https://config.qmk.fm>, compile keymaps in the repo, or compile the keyboard in the current working directory.
|
||||
|
||||
**Usage for Configurator Exports**:
|
||||
|
||||
```
|
||||
qmk compile <configuratorExport.json>
|
||||
```
|
||||
|
||||
**Usage for Keymaps**:
|
||||
|
||||
```
|
||||
qmk compile -kb <keyboard_name> -km <keymap_name>
|
||||
```
|
||||
|
||||
**Usage in Keyboard Directory**:
|
||||
|
||||
Must be in keyboard directory with a default keymap, or in keymap directory for keyboard, or supply one with `--keymap <keymap_name>`
|
||||
```
|
||||
qmk compile
|
||||
```
|
||||
|
||||
**Usage for building all keyboards that support a specific keymap**:
|
||||
|
||||
```
|
||||
qmk compile -kb all -km <keymap_name>
|
||||
```
|
||||
|
||||
**Example**:
|
||||
```
|
||||
$ qmk config compile.keymap=default
|
||||
$ cd ~/qmk_firmware/keyboards/planck/rev6
|
||||
$ qmk compile
|
||||
Ψ Compiling keymap with make planck/rev6:default
|
||||
...
|
||||
```
|
||||
or with optional keymap argument
|
||||
|
||||
```
|
||||
$ cd ~/qmk_firmware/keyboards/clueboard/66/rev4
|
||||
$ qmk compile -km 66_iso
|
||||
Ψ Compiling keymap with make clueboard/66/rev4:66_iso
|
||||
...
|
||||
```
|
||||
or in keymap directory
|
||||
|
||||
```
|
||||
$ cd ~/qmk_firmware/keyboards/gh60/satan/keymaps/colemak
|
||||
$ qmk compile
|
||||
Ψ Compiling keymap with make make gh60/satan:colemak
|
||||
...
|
||||
```
|
||||
|
||||
**Usage in Layout Directory**:
|
||||
|
||||
Must be under `qmk_firmware/layouts/`, and in a keymap folder.
|
||||
```
|
||||
qmk compile -kb <keyboard_name>
|
||||
```
|
||||
|
||||
**Example**:
|
||||
```
|
||||
$ cd ~/qmk_firmware/layouts/community/60_ansi/mechmerlin-ansi
|
||||
$ qmk compile -kb dz60
|
||||
Ψ Compiling keymap with make dz60:mechmerlin-ansi
|
||||
...
|
||||
```
|
||||
|
||||
## `qmk flash`
|
||||
|
||||
This command is similar to `qmk compile`, but can also target a bootloader. The bootloader is optional, and is set to `:flash` by default.
|
||||
To specify a different bootloader, use `-bl <bootloader>`. Visit the [Flashing Firmware](flashing.md) guide for more details of the available bootloaders.
|
||||
|
||||
**Usage for Configurator Exports**:
|
||||
|
||||
```
|
||||
qmk flash <configuratorExport.json> -bl <bootloader>
|
||||
```
|
||||
|
||||
**Usage for Keymaps**:
|
||||
|
||||
```
|
||||
qmk flash -kb <keyboard_name> -km <keymap_name> -bl <bootloader>
|
||||
```
|
||||
|
||||
**Listing the Bootloaders**
|
||||
|
||||
```
|
||||
qmk flash -b
|
||||
```
|
||||
|
||||
## `qmk config`
|
||||
|
||||
This command lets you configure the behavior of QMK. For the full `qmk config` documentation see [CLI Configuration](cli_configuration.md).
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk config [-ro] [config_token1] [config_token2] [...] [config_tokenN]
|
||||
```
|
||||
|
||||
## `qmk docs`
|
||||
|
||||
This command starts a local HTTP server which you can use for browsing or improving the docs. Default port is 8936.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk docs [-p PORT]
|
||||
```
|
||||
|
||||
## `qmk doctor`
|
||||
|
||||
This command examines your environment and alerts you to potential build or flash problems. It can fix many of them if you want it to.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk doctor [-y] [-n]
|
||||
```
|
||||
|
||||
**Examples**:
|
||||
|
||||
Check your environment for problems and prompt to fix them:
|
||||
|
||||
qmk doctor
|
||||
|
||||
Check your environment and automatically fix any problems found:
|
||||
|
||||
qmk doctor -y
|
||||
|
||||
Check your environment and report problems only:
|
||||
|
||||
qmk doctor -n
|
||||
|
||||
## `qmk json2c`
|
||||
|
||||
Creates a keymap.c from a QMK Configurator export.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk json2c [-o OUTPUT] filename
|
||||
```
|
||||
|
||||
## `qmk kle2json`
|
||||
|
||||
This command allows you to convert from raw KLE data to QMK Configurator JSON. It accepts either an absolute file path, or a file name in the current directory. By default it will not overwrite `info.json` if it is already present. Use the `-f` or `--force` flag to overwrite.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk kle2json [-f] <filename>
|
||||
```
|
||||
|
||||
**Examples**:
|
||||
|
||||
```
|
||||
$ qmk kle2json kle.txt
|
||||
☒ File info.json already exists, use -f or --force to overwrite.
|
||||
```
|
||||
|
||||
```
|
||||
$ qmk kle2json -f kle.txt -f
|
||||
Ψ Wrote out to info.json
|
||||
```
|
||||
|
||||
## `qmk list-keyboards`
|
||||
|
||||
This command lists all the keyboards currently defined in `qmk_firmware`
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk list-keyboards
|
||||
```
|
||||
|
||||
## `qmk list-keymaps`
|
||||
|
||||
This command lists all the keymaps for a specified keyboard (and revision).
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk list-keymaps -kb planck/ez
|
||||
```
|
||||
|
||||
## `qmk new-keymap`
|
||||
|
||||
This command creates a new keymap based on a keyboard's existing default keymap.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk new-keymap [-kb KEYBOARD] [-km KEYMAP]
|
||||
```
|
||||
|
||||
## `qmk pyformat`
|
||||
|
||||
This command formats python code in `qmk_firmware`.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk pyformat
|
||||
```
|
||||
|
||||
## `qmk pytest`
|
||||
|
||||
This command runs the python test suite. If you make changes to python code you should ensure this runs successfully.
|
||||
|
||||
**Usage**:
|
||||
|
||||
```
|
||||
qmk pytest
|
||||
```
|
||||
@@ -58,6 +58,8 @@ This is the default mode. You can adjust the cursor and scrolling acceleration u
|
||||
|`MOUSEKEY_INTERVAL` |50 |Time between cursor movements |
|
||||
|`MOUSEKEY_MAX_SPEED` |10 |Maximum cursor speed at which acceleration stops |
|
||||
|`MOUSEKEY_TIME_TO_MAX` |20 |Time until maximum cursor speed is reached |
|
||||
|`MOUSEKEY_WHEEL_DELAY` |300 |Delay between pressing a wheel key and wheel movement |
|
||||
|`MOUSEKEY_WHEEL_INTERVAL` |100 |Time between wheel movements |
|
||||
|`MOUSEKEY_WHEEL_MAX_SPEED` |8 |Maximum number of scroll steps per scroll action |
|
||||
|`MOUSEKEY_WHEEL_TIME_TO_MAX`|40 |Time until maximum scroll speed is reached |
|
||||
|
||||
@@ -66,6 +68,7 @@ Tips:
|
||||
* Setting `MOUSEKEY_DELAY` too low makes the cursor unresponsive. Setting it too high makes small movements difficult.
|
||||
* For smoother cursor movements, lower the value of `MOUSEKEY_INTERVAL`. If the refresh rate of your display is 60Hz, you could set it to `16` (1/60). As this raises the cursor speed significantly, you may want to lower `MOUSEKEY_MAX_SPEED`.
|
||||
* Setting `MOUSEKEY_TIME_TO_MAX` or `MOUSEKEY_WHEEL_TIME_TO_MAX` to `0` will disable acceleration for the cursor or scrolling respectively. This way you can make one of them constant while keeping the other accelerated, which is not possible in constant speed mode.
|
||||
* Setting `MOUSEKEY_WHEEL_INTERVAL` too low will make scrolling too fast. Setting it too high will make scrolling too slow when the wheel key is held down.
|
||||
|
||||
Cursor acceleration uses the same algorithm as the X Window System MouseKeysAccel feature. You can read more about it [on Wikipedia](https://en.wikipedia.org/wiki/Mouse_keys).
|
||||
|
||||
|
||||
@@ -261,12 +261,24 @@ void oled_task(void);
|
||||
// Called at the start of oled_task, weak function overridable by the user
|
||||
void oled_task_user(void);
|
||||
|
||||
// Scrolls the entire display right
|
||||
// Set the specific 8 lines rows of the screen to scroll.
|
||||
// 0 is the default for start, and 7 for end, which is the entire
|
||||
// height of the screen. For 128x32 screens, rows 4-7 are not used.
|
||||
void oled_scroll_set_area(uint8_t start_line, uint8_t end_line);
|
||||
|
||||
// Sets scroll speed, 0-7, fastest to slowest. Default is three.
|
||||
// Does not take effect until scrolling is either started or restarted
|
||||
// the ssd1306 supports 8 speeds with the delay
|
||||
// listed below betwen each frame of the scrolling effect
|
||||
// 0=2, 1=3, 2=4, 3=5, 4=25, 5=64, 6=128, 7=256
|
||||
void oled_scroll_set_speed(uint8_t speed);
|
||||
|
||||
// Begin scrolling the entire display right
|
||||
// Returns true if the screen was scrolling or starts scrolling
|
||||
// NOTE: display contents cannot be changed while scrolling
|
||||
bool oled_scroll_right(void);
|
||||
|
||||
// Scrolls the entire display left
|
||||
// Begin scrolling the entire display left
|
||||
// Returns true if the screen was scrolling or starts scrolling
|
||||
// NOTE: display contents cannot be changed while scrolling
|
||||
bool oled_scroll_left(void);
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
## Pointing Device
|
||||
# Pointing Device :id=pointing-device
|
||||
|
||||
Pointing Device is a generic name for a feature intended to be generic: moving the system pointer around. There are certainly other options for it - like mousekeys - but this aims to be easily modifiable and lightweight. You can implement custom keys to control functionality, or you can gather information from other peripherals and insert it directly here - let QMK handle the processing for you.
|
||||
|
||||
To enable Pointing Device, uncomment the following line in your rules.mk:
|
||||
|
||||
```
|
||||
```makefile
|
||||
POINTING_DEVICE_ENABLE = yes
|
||||
```
|
||||
|
||||
@@ -25,7 +25,7 @@ When the mouse report is sent, the x, y, v, and h values are set to 0 (this is d
|
||||
|
||||
In the following example, a custom key is used to click the mouse and scroll 127 units vertically and horizontally, then undo all of that when released - because that's a totally useful function. Listen, this is an example:
|
||||
|
||||
```
|
||||
```c
|
||||
case MS_SPECIAL:
|
||||
report_mouse_t currentReport = pointing_device_get_report();
|
||||
if (record->event.pressed)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
## PS/2 Mouse Support
|
||||
# PS/2 Mouse Support :id=ps2-mouse-support
|
||||
|
||||
Its possible to hook up a PS/2 mouse (for example touchpads or trackpoints) to your keyboard as a composite device.
|
||||
|
||||
@@ -6,7 +6,7 @@ To hook up a Trackpoint, you need to obtain a Trackpoint module (i.e. harvest fr
|
||||
|
||||
There are three available modes for hooking up PS/2 devices: USART (best), interrupts (better) or busywait (not recommended).
|
||||
|
||||
### The Cirtuitry between Trackpoint and Controller
|
||||
## The Circuitry between Trackpoint and Controller :id=the-circuitry-between-trackpoint-and-controller
|
||||
|
||||
To get the things working, a 4.7K drag is needed between the two lines DATA and CLK and the line 5+.
|
||||
|
||||
@@ -24,20 +24,20 @@ MODULE 5+ --------+--+--------- PWR CONTROLLER
|
||||
```
|
||||
|
||||
|
||||
### Busywait Version
|
||||
## Busywait Version :id=busywait-version
|
||||
|
||||
Note: This is not recommended, you may encounter jerky movement or unsent inputs. Please use interrupt or USART version if possible.
|
||||
|
||||
In rules.mk:
|
||||
|
||||
```
|
||||
```makefile
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_BUSYWAIT = yes
|
||||
```
|
||||
|
||||
In your keyboard config.h:
|
||||
|
||||
```
|
||||
```c
|
||||
#ifdef PS2_USE_BUSYWAIT
|
||||
# define PS2_CLOCK_PORT PORTD
|
||||
# define PS2_CLOCK_PIN PIND
|
||||
@@ -50,20 +50,20 @@ In your keyboard config.h:
|
||||
#endif
|
||||
```
|
||||
|
||||
### Interrupt Version
|
||||
## Interrupt Version :id=interrupt-version
|
||||
|
||||
The following example uses D2 for clock and D5 for data. You can use any INT or PCINT pin for clock, and any pin for data.
|
||||
|
||||
In rules.mk:
|
||||
|
||||
```
|
||||
```makefile
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_INT = yes
|
||||
```
|
||||
|
||||
In your keyboard config.h:
|
||||
|
||||
```
|
||||
```c
|
||||
#ifdef PS2_USE_INT
|
||||
#define PS2_CLOCK_PORT PORTD
|
||||
#define PS2_CLOCK_PIN PIND
|
||||
@@ -88,20 +88,20 @@ In your keyboard config.h:
|
||||
#endif
|
||||
```
|
||||
|
||||
### USART Version
|
||||
## USART Version :id=usart-version
|
||||
|
||||
To use USART on the ATMega32u4, you have to use PD5 for clock and PD2 for data. If one of those are unavailable, you need to use interrupt version.
|
||||
|
||||
In rules.mk:
|
||||
|
||||
```
|
||||
```makefile
|
||||
PS2_MOUSE_ENABLE = yes
|
||||
PS2_USE_USART = yes
|
||||
```
|
||||
|
||||
In your keyboard config.h:
|
||||
|
||||
```
|
||||
```c
|
||||
#ifdef PS2_USE_USART
|
||||
#define PS2_CLOCK_PORT PORTD
|
||||
#define PS2_CLOCK_PIN PIND
|
||||
@@ -145,13 +145,13 @@ In your keyboard config.h:
|
||||
#endif
|
||||
```
|
||||
|
||||
### Additional Settings
|
||||
## Additional Settings :id=additional-settings
|
||||
|
||||
#### PS/2 Mouse Features
|
||||
### PS/2 Mouse Features :id=ps2-mouse-features
|
||||
|
||||
These enable settings supported by the PS/2 mouse protocol.
|
||||
|
||||
```
|
||||
```c
|
||||
/* Use remote mode instead of the default stream mode (see link) */
|
||||
#define PS2_MOUSE_USE_REMOTE_MODE
|
||||
|
||||
@@ -170,7 +170,7 @@ These enable settings supported by the PS/2 mouse protocol.
|
||||
|
||||
You can also call the following functions from ps2_mouse.h
|
||||
|
||||
```
|
||||
```c
|
||||
void ps2_mouse_disable_data_reporting(void);
|
||||
|
||||
void ps2_mouse_enable_data_reporting(void);
|
||||
@@ -188,36 +188,36 @@ void ps2_mouse_set_resolution(ps2_mouse_resolution_t resolution);
|
||||
void ps2_mouse_set_sample_rate(ps2_mouse_sample_rate_t sample_rate);
|
||||
```
|
||||
|
||||
#### Fine Control
|
||||
### Fine Control :id=fine-control
|
||||
|
||||
Use the following defines to change the sensitivity and speed of the mouse.
|
||||
Note: you can also use `ps2_mouse_set_resolution` for the same effect (not supported on most touchpads).
|
||||
|
||||
```
|
||||
```c
|
||||
#define PS2_MOUSE_X_MULTIPLIER 3
|
||||
#define PS2_MOUSE_Y_MULTIPLIER 3
|
||||
#define PS2_MOUSE_V_MULTIPLIER 1
|
||||
```
|
||||
|
||||
#### Scroll Button
|
||||
### Scroll Button :id=scroll-button
|
||||
|
||||
If you're using a trackpoint, you will likely want to be able to use it for scrolling.
|
||||
It's possible to enable a "scroll button/s" that when pressed will cause the mouse to scroll instead of moving.
|
||||
To enable the feature, you must set a scroll button mask as follows:
|
||||
|
||||
```
|
||||
```c
|
||||
#define PS2_MOUSE_SCROLL_BTN_MASK (1<<PS2_MOUSE_BUTTON_MIDDLE) /* Default */
|
||||
```
|
||||
|
||||
To disable the scroll button feature:
|
||||
|
||||
```
|
||||
```c
|
||||
#define PS2_MOUSE_SCROLL_BTN_MASK 0
|
||||
```
|
||||
|
||||
The available buttons are:
|
||||
|
||||
```
|
||||
```c
|
||||
#define PS2_MOUSE_BTN_LEFT 0
|
||||
#define PS2_MOUSE_BTN_RIGHT 1
|
||||
#define PS2_MOUSE_BTN_MIDDLE 2
|
||||
@@ -229,27 +229,28 @@ Once you've configured your scroll button mask, you must configure the scroll bu
|
||||
This is the interval before which if the scroll buttons were released they would be sent to the host.
|
||||
After this interval, they will cause the mouse to scroll and will not be sent.
|
||||
|
||||
```
|
||||
```c
|
||||
#define PS2_MOUSE_SCROLL_BTN_SEND 300 /* Default */
|
||||
```
|
||||
|
||||
To disable sending the scroll buttons:
|
||||
```
|
||||
|
||||
```c
|
||||
#define PS2_MOUSE_SCROLL_BTN_SEND 0
|
||||
```
|
||||
|
||||
Fine control over the scrolling is supported with the following defines:
|
||||
|
||||
```
|
||||
```c
|
||||
#define PS2_MOUSE_SCROLL_DIVISOR_H 2
|
||||
#define PS2_MOUSE_SCROLL_DIVISOR_V 2
|
||||
```
|
||||
|
||||
#### Invert Mouse and Scroll Axes
|
||||
### Invert Mouse and Scroll Axes :id=invert-mouse-and-scroll-axes
|
||||
|
||||
To invert the X and Y axes you can put:
|
||||
|
||||
```
|
||||
```c
|
||||
#define PS2_MOUSE_INVERT_X
|
||||
#define PS2_MOUSE_INVERT_Y
|
||||
```
|
||||
@@ -258,18 +259,18 @@ into config.h.
|
||||
|
||||
To reverse the scroll axes you can put:
|
||||
|
||||
```
|
||||
```c
|
||||
#define PS2_MOUSE_INVERT_H
|
||||
#define PS2_MOUSE_INVERT_V
|
||||
```
|
||||
|
||||
into config.h.
|
||||
|
||||
#### Debug Settings
|
||||
### Debug Settings :id=debug-settings
|
||||
|
||||
To debug the mouse, add `debug_mouse = true` or enable via bootmagic.
|
||||
|
||||
```
|
||||
```c
|
||||
/* To debug the mouse reports */
|
||||
#define PS2_MOUSE_DEBUG_HID
|
||||
#define PS2_MOUSE_DEBUG_RAW
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
# RGB Matrix Lighting
|
||||
# RGB Matrix Lighting :id=rgb-matrix-lighting
|
||||
|
||||
This feature allows you to use RGB LED matrices driven by external drivers. It hooks into the RGBLIGHT system so you can use the same keycodes as RGBLIGHT to control it.
|
||||
|
||||
If you want to use single color LED's you should use the [LED Matrix Subsystem](feature_led_matrix.md) instead.
|
||||
|
||||
## Driver configuration
|
||||
## Driver configuration :id=driver-configuration
|
||||
---
|
||||
### IS31FL3731
|
||||
### IS31FL3731 :id=is31fl3731
|
||||
|
||||
There is basic support for addressable RGB matrix lighting with the I2C IS31FL3731 RGB controller. To enable it, add this to your `rules.mk`:
|
||||
|
||||
```C
|
||||
```makefile
|
||||
RGB_MATRIX_ENABLE = IS31FL3731
|
||||
```
|
||||
|
||||
Configure the hardware via your `config.h`:
|
||||
|
||||
```C
|
||||
```c
|
||||
// This is a 7-bit address, that gets left-shifted and bit 0
|
||||
// set to 0 for write, 1 for read (as per I2C protocol)
|
||||
// The address will vary depending on your wiring:
|
||||
@@ -39,7 +39,7 @@ Currently only 2 drivers are supported, but it would be trivial to support all 4
|
||||
|
||||
Define these arrays listing all the LEDs in your `<keyboard>.c`:
|
||||
|
||||
```C
|
||||
```c
|
||||
const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
|
||||
/* Refer to IS31 manual for these locations
|
||||
* driver
|
||||
@@ -55,19 +55,19 @@ const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
|
||||
Where `Cx_y` is the location of the LED in the matrix defined by [the datasheet](http://www.issi.com/WW/pdf/31FL3731.pdf) and the header file `drivers/issi/is31fl3731.h`. The `driver` is the index of the driver you defined in your `config.h` (`0` or `1` right now).
|
||||
|
||||
---
|
||||
### IS31FL3733/IS31FL3737
|
||||
### IS31FL3733/IS31FL3737 :id=is31fl3733is31fl3737
|
||||
|
||||
!> For the IS31FL3737, replace all instances of `IS31FL3733` below with `IS31FL3737`.
|
||||
|
||||
There is basic support for addressable RGB matrix lighting with the I2C IS31FL3733 RGB controller. To enable it, add this to your `rules.mk`:
|
||||
|
||||
```C
|
||||
```makefile
|
||||
RGB_MATRIX_ENABLE = IS31FL3733
|
||||
```
|
||||
|
||||
Configure the hardware via your `config.h`:
|
||||
|
||||
```C
|
||||
```c
|
||||
// This is a 7-bit address, that gets left-shifted and bit 0
|
||||
// set to 0 for write, 1 for read (as per I2C protocol)
|
||||
// The address will vary depending on your wiring:
|
||||
@@ -90,7 +90,7 @@ Currently only a single drivers is supported, but it would be trivial to support
|
||||
|
||||
Define these arrays listing all the LEDs in your `<keyboard>.c`:
|
||||
|
||||
```C
|
||||
```c
|
||||
const is31_led g_is31_leds[DRIVER_LED_TOTAL] = {
|
||||
/* Refer to IS31 manual for these locations
|
||||
* driver
|
||||
@@ -107,17 +107,17 @@ Where `X_Y` is the location of the LED in the matrix defined by [the datasheet](
|
||||
|
||||
---
|
||||
|
||||
### WS2812
|
||||
### WS2812 :id=ws2812
|
||||
|
||||
There is basic support for addressable RGB matrix lighting with a WS2811/WS2812{a,b,c} addressable LED strand. To enable it, add this to your `rules.mk`:
|
||||
|
||||
```C
|
||||
```makefile
|
||||
RGB_MATRIX_ENABLE = WS2812
|
||||
```
|
||||
|
||||
Configure the hardware via your `config.h`:
|
||||
|
||||
```C
|
||||
```c
|
||||
// The pin connected to the data pin of the LEDs
|
||||
#define RGB_DI_PIN D7
|
||||
// The number of LEDs connected
|
||||
@@ -128,7 +128,7 @@ Configure the hardware via your `config.h`:
|
||||
|
||||
From this point forward the configuration is the same for all the drivers. The `led_config_t` struct provides a key electrical matrix to led index lookup table, what the physical position of each LED is on the board, and what type of key or usage the LED if the LED represents. Here is a brief example:
|
||||
|
||||
```C
|
||||
```c
|
||||
const led_config_t g_led_config = { {
|
||||
// Key Matrix to LED Index
|
||||
{ 5, NO_LED, NO_LED, 0 },
|
||||
@@ -146,7 +146,7 @@ const led_config_t g_led_config = { {
|
||||
|
||||
The first part, `// Key Matrix to LED Index`, tells the system what key this LED represents by using the key's electrical matrix row & col. The second part, `// LED Index to Physical Position` represents the LED's physical `{ x, y }` position on the keyboard. The default expected range of values for `{ x, y }` is the inclusive range `{ 0..224, 0..64 }`. This default expected range is due to effects that calculate the center of the keyboard for their animations. The easiest way to calculate these positions is imagine your keyboard is a grid, and the top left of the keyboard represents `{ x, y }` coordinate `{ 0, 0 }` and the bottom right of your keyboard represents `{ 224, 64 }`. Using this as a basis, you can use the following formula to calculate the physical position:
|
||||
|
||||
```C
|
||||
```c
|
||||
x = 224 / (NUMBER_OF_COLS - 1) * COL_POSITION
|
||||
y = 64 / (NUMBER_OF_ROWS - 1) * ROW_POSITION
|
||||
```
|
||||
@@ -157,7 +157,7 @@ As mentioned earlier, the center of the keyboard by default is expected to be `{
|
||||
|
||||
`// LED Index to Flag` is a bitmask, whether or not a certain LEDs is of a certain type. It is recommended that LEDs are set to only 1 type.
|
||||
|
||||
## Flags
|
||||
## Flags :id=flags
|
||||
|
||||
|Define |Description |
|
||||
|------------------------------------|-------------------------------------------|
|
||||
@@ -169,7 +169,7 @@ As mentioned earlier, the center of the keyboard by default is expected to be `{
|
||||
|`#define LED_FLAG_UNDERGLOW 0x02` |If the LED is for underglow. |
|
||||
|`#define LED_FLAG_KEYLIGHT 0x04` |If the LED is for key backlight. |
|
||||
|
||||
## Keycodes
|
||||
## Keycodes :id=keycodes
|
||||
|
||||
All RGB keycodes are currently shared with the RGBLIGHT system:
|
||||
|
||||
@@ -189,11 +189,11 @@ All RGB keycodes are currently shared with the RGBLIGHT system:
|
||||
|
||||
* `RGB_MODE_*` keycodes will generally work, but are not currently mapped to the correct effects for the RGB Matrix system
|
||||
|
||||
## RGB Matrix Effects
|
||||
## RGB Matrix Effects :id=rgb-matrix-effects
|
||||
|
||||
All effects have been configured to support current configuration values (Hue, Saturation, Value, & Speed) unless otherwise noted below. These are the effects that are currently available:
|
||||
|
||||
```C
|
||||
```c
|
||||
enum rgb_matrix_effects {
|
||||
RGB_MATRIX_NONE = 0,
|
||||
RGB_MATRIX_SOLID_COLOR = 1, // Static single hue, no speed support
|
||||
@@ -285,7 +285,7 @@ You can disable a single effect by defining `DISABLE_[EFFECT_NAME]` in your `con
|
||||
|`#define DISABLE_RGB_MATRIX_SOLID_MULTISPLASH` |Disables `RGB_MATRIX_SOLID_MULTISPLASH` |
|
||||
|
||||
|
||||
## Custom RGB Matrix Effects
|
||||
## Custom RGB Matrix Effects :id=custom-rgb-matrix-effects
|
||||
|
||||
By setting `RGB_MATRIX_CUSTOM_USER` (and/or `RGB_MATRIX_CUSTOM_KB`) in `rules.mk`, new effects can be defined directly from userspace, without having to edit any QMK core files.
|
||||
|
||||
@@ -294,7 +294,7 @@ To declare new effects, create a new `rgb_matrix_user/kb.inc` that looks somethi
|
||||
`rgb_matrix_user.inc` should go in the root of the keymap directory.
|
||||
`rgb_matrix_kb.inc` should go in the root of the keyboard directory.
|
||||
|
||||
```C
|
||||
```c
|
||||
// !!! DO NOT ADD #pragma once !!! //
|
||||
|
||||
// Step 1.
|
||||
@@ -341,7 +341,7 @@ static bool my_cool_effect2(effect_params_t* params) {
|
||||
For inspiration and examples, check out the built-in effects under `quantum/rgb_matrix_animation/`
|
||||
|
||||
|
||||
## Colors
|
||||
## Colors :id=colors
|
||||
|
||||
These are shorthands to popular colors. The `RGB` ones can be passed to the `setrgb` functions, while the `HSV` ones to the `sethsv` functions.
|
||||
|
||||
@@ -369,9 +369,9 @@ These are shorthands to popular colors. The `RGB` ones can be passed to the `set
|
||||
These are defined in [`rgblight_list.h`](https://github.com/qmk/qmk_firmware/blob/master/quantum/rgblight_list.h). Feel free to add to this list!
|
||||
|
||||
|
||||
## Additional `config.h` Options
|
||||
## Additional `config.h` Options :id=additional-configh-options
|
||||
|
||||
```C
|
||||
```c
|
||||
#define RGB_MATRIX_KEYPRESSES // reacts to keypresses
|
||||
#define RGB_MATRIX_KEYRELEASES // reacts to keyreleases (instead of keypresses)
|
||||
#define RGB_DISABLE_AFTER_TIMEOUT 0 // number of ticks to wait until disabling effects
|
||||
@@ -386,21 +386,21 @@ These are defined in [`rgblight_list.h`](https://github.com/qmk/qmk_firmware/blo
|
||||
#define RGB_MATRIX_STARTUP_SPD 127 // Sets the default animation speed, if none has been set
|
||||
```
|
||||
|
||||
## EEPROM storage
|
||||
## EEPROM storage :id=eeprom-storage
|
||||
|
||||
The EEPROM for it is currently shared with the RGBLIGHT system (it's generally assumed only one RGB would be used at a time), but could be configured to use its own 32bit address with:
|
||||
|
||||
```C
|
||||
```c
|
||||
#define EECONFIG_RGB_MATRIX (uint32_t *)28
|
||||
```
|
||||
|
||||
Where `28` is an unused index from `eeconfig.h`.
|
||||
|
||||
## Suspended state
|
||||
## Suspended state :id=suspended-state
|
||||
|
||||
To use the suspend feature, add this to your `<keyboard>.c`:
|
||||
|
||||
```C
|
||||
```c
|
||||
void suspend_power_down_kb(void)
|
||||
{
|
||||
rgb_matrix_set_suspend_state(true);
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
# Stenography in QMK
|
||||
# Stenography in QMK :id=stenography-in-qmk
|
||||
|
||||
[Stenography](https://en.wikipedia.org/wiki/Stenotype) is a method of writing most often used by court reports, closed-captioning, and real-time transcription for the deaf. In stenography words are chorded syllable by syllable with a mixture of spelling, phonetic, and shortcut (briefs) strokes. Professional stenographers can reach 200-300 WPM without any of the strain usually found in standard typing and with far fewer errors (>99.9% accuracy).
|
||||
|
||||
The [Open Steno Project](http://www.openstenoproject.org/) has built an open-source program called Plover that provides real-time translation of steno strokes into words and commands. It has an established dictionary and supports
|
||||
|
||||
## Plover with QWERTY Keyboard
|
||||
## Plover with QWERTY Keyboard :id=plover-with-qwerty-keyboard
|
||||
|
||||
Plover can work with any standard QWERTY keyboard, although it is more efficient if the keyboard supports NKRO (n-key rollover) to allow Plover to see all the pressed keys at once. An example keymap for Plover can be found in `planck/keymaps/default`. Switching to the `PLOVER` layer adjusts the position of the keyboard to support the number bar.
|
||||
|
||||
To use Plover with QMK just enable NKRO and optionally adjust your layout if you have anything other than a standard layout. You may also want to purchase some steno-friendly keycaps to make it easier to hit multiple keys.
|
||||
|
||||
## Plover with Steno Protocol
|
||||
## Plover with Steno Protocol :id=plover-with-steno-protocol
|
||||
|
||||
Plover also understands the language of several steno machines. QMK can speak a couple of these languages, TX Bolt and GeminiPR. An example layout can be found in `planck/keymaps/steno`.
|
||||
|
||||
@@ -20,26 +20,26 @@ In this mode Plover expects to speak with a steno machine over a serial port so
|
||||
|
||||
> Note: Due to hardware limitations you may not be able to run both a virtual serial port and mouse emulation at the same time.
|
||||
|
||||
### TX Bolt
|
||||
### TX Bolt :id=tx-bolt
|
||||
|
||||
TX Bolt communicates the status of 24 keys over a very simple protocol in variable-sized (1-5 byte) packets.
|
||||
|
||||
### GeminiPR
|
||||
### GeminiPR :id=geminipr
|
||||
|
||||
GeminiPR encodes 42 keys into a 6-byte packet. While TX Bolt contains everything that is necessary for standard stenography, GeminiPR opens up many more options, including supporting non-English theories.
|
||||
|
||||
## Configuring QMK for Steno
|
||||
## Configuring QMK for Steno :id=configuring-qmk-for-steno
|
||||
|
||||
Firstly, enable steno in your keymap's Makefile. You may also need disable mousekeys, extra keys, or another USB endpoint to prevent conflicts. The builtin USB stack for some processors only supports a certain number of USB endpoints and the virtual serial port needed for steno fills 3 of them.
|
||||
|
||||
```Makefile
|
||||
```makefile
|
||||
STENO_ENABLE = yes
|
||||
MOUSEKEY_ENABLE = no
|
||||
```
|
||||
|
||||
In your keymap create a new layer for Plover. You will need to include `keymap_steno.h`. See `planck/keymaps/steno/keymap.c` for an example. Remember to create a key to switch to the layer as well as a key for exiting the layer. If you would like to switch modes on the fly you can use the keycodes `QK_STENO_BOLT` and `QK_STENO_GEMINI`. If you only want to use one of the protocols you may set it up in your initialization function:
|
||||
|
||||
```C
|
||||
```c
|
||||
void matrix_init_user() {
|
||||
steno_set_mode(STENO_MODE_GEMINI); // or STENO_MODE_BOLT
|
||||
}
|
||||
@@ -49,37 +49,37 @@ Once you have your keyboard flashed launch Plover. Click the 'Configure...' butt
|
||||
|
||||
On the display tab click 'Open stroke display'. With Plover disabled you should be able to hit keys on your keyboard and see them show up in the stroke display window. Use this to make sure you have set up your keymap correctly. You are now ready to steno!
|
||||
|
||||
## Learning Stenography
|
||||
## Learning Stenography :id=learning-stenography
|
||||
|
||||
* [Learn Plover!](https://sites.google.com/site/ploverdoc/)
|
||||
* [Learn Plover!](https://sites.google.com/site/learnplover/)
|
||||
* [QWERTY Steno](http://qwertysteno.com/Home/)
|
||||
* [Steno Jig](https://joshuagrams.github.io/steno-jig/)
|
||||
* More resources at the Plover [Learning Stenography](https://github.com/openstenoproject/plover/wiki/Learning-Stenography) wiki
|
||||
|
||||
## Interfacing with the code
|
||||
## Interfacing with the code :id=interfacing-with-the-code
|
||||
|
||||
The steno code has three interceptible hooks. If you define these functions, they will be called at certain points in processing; if they return true, processing continues, otherwise it's assumed you handled things.
|
||||
|
||||
```C
|
||||
```c
|
||||
bool send_steno_chord_user(steno_mode_t mode, uint8_t chord[6]);
|
||||
```
|
||||
|
||||
This function is called when a chord is about to be sent. Mode will be one of `STENO_MODE_BOLT` or `STENO_MODE_GEMINI`. This represents the actual chord that would be sent via whichever protocol. You can modify the chord provided to alter what gets sent. Remember to return true if you want the regular sending process to happen.
|
||||
|
||||
```C
|
||||
```c
|
||||
bool process_steno_user(uint16_t keycode, keyrecord_t *record) { return true; }
|
||||
```
|
||||
|
||||
This function is called when a keypress has come in, before it is processed. The keycode should be one of `QK_STENO_BOLT`, `QK_STENO_GEMINI`, or one of the `STN_*` key values.
|
||||
|
||||
```C
|
||||
```c
|
||||
bool postprocess_steno_user(uint16_t keycode, keyrecord_t *record, steno_mode_t mode, uint8_t chord[6], int8_t pressed);
|
||||
```
|
||||
|
||||
This function is called after a key has been processed, but before any decision about whether or not to send a chord. If `IS_PRESSED(record->event)` is false, and `pressed` is 0 or 1, the chord will be sent shortly, but has not yet been sent. This is where to put hooks for things like, say, live displays of steno chords or keys.
|
||||
|
||||
|
||||
## Keycode Reference
|
||||
## Keycode Reference :id=keycode-reference
|
||||
|
||||
As defined in `keymap_steno.h`.
|
||||
|
||||
|
||||
@@ -97,13 +97,25 @@ You'd want to replace the year, name, email and github username with your info.
|
||||
|
||||
Additionally, this is a good place to document your code, if you wish to share it with others.
|
||||
|
||||
# Examples
|
||||
## Build All Keyboards That Support a Specific Keymap
|
||||
|
||||
Want to check all your keymaps build in a single command? You can run:
|
||||
|
||||
make all:<name>
|
||||
|
||||
For example,
|
||||
|
||||
make all:jack
|
||||
|
||||
This is ideal for when you want ensure everything compiles successfully when preparing a [_Pull request_](https://github.com/qmk/qmk_firmware/pulls).
|
||||
|
||||
## Examples
|
||||
|
||||
For a brief example, checkout [`/users/_example/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna).
|
||||
For a more complicated example, checkout [`/users/drashna/`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna)'s userspace.
|
||||
|
||||
|
||||
## Customized Functions
|
||||
### Customized Functions
|
||||
|
||||
QMK has a bunch of [functions](custom_quantum_functions.md) that have [`_quantum`, `_kb`, and `_user` versions](custom_quantum_functions.md#a-word-on-core-vs-keyboards-vs-keymap) that you can use. You will pretty much always want to use the user version of these functions. But the problem is that if you use them in your userspace, then you don't have a version that you can use in your keymap.
|
||||
|
||||
@@ -130,7 +142,7 @@ The `_keymap` part here doesn't matter, it just needs to be something other than
|
||||
|
||||
You can see a list of this and other common functions in [`template.c`](https://github.com/qmk/qmk_firmware/blob/master/users/drashna/template.c) in [`users/drashna`](https://github.com/qmk/qmk_firmware/tree/master/users/drashna).
|
||||
|
||||
## Custom Features
|
||||
### Custom Features
|
||||
|
||||
Since the Userspace feature can support a staggering number of boards, you may have boards that you want to enable certain functionality for, but not for others. And you can actually create "features" that you can enable or disable in your own userspace.
|
||||
|
||||
@@ -166,7 +178,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
```
|
||||
|
||||
|
||||
## Consolidated Macros
|
||||
### Consolidated Macros
|
||||
|
||||
If you wanted to consolidate macros and other functions into your userspace for all of your keymaps, you can do that. This builds upon the [Customized Functions](#customized-functions) example above. This lets you maintain a bunch of macros that are shared between the different keyboards, and allow for keyboard specific macros, too.
|
||||
|
||||
|
||||
65
docs/getting_started_github.md
Normal file
65
docs/getting_started_github.md
Normal file
@@ -0,0 +1,65 @@
|
||||
# How to Use Github with QMK
|
||||
|
||||
Github can be a little tricky to those that aren't familiar with it - this guide will walk through each step of forking, cloning, and submitting a pull request with QMK.
|
||||
|
||||
?> This guide assumes you're somewhat comfortable with running things at the command line, and have git installed on your system.
|
||||
|
||||
Start on the [QMK Github page](https://github.com/qmk/qmk_firmware), and you'll see a button in the upper right that says "Fork":
|
||||
|
||||

|
||||
|
||||
If you're a part of an organization, you'll need to choose which account to fork it to. In most circumstances, you'll want to fork it to your personal account. Once your fork is completed (sometimes this takes a little while), click the "Clone or Download" button:
|
||||
|
||||

|
||||
|
||||
And be sure to select "HTTPS", and select the link and copy it:
|
||||
|
||||

|
||||
|
||||
From here, enter `git clone --recurse-submodules ` into the command line, and then paste your link:
|
||||
|
||||
```
|
||||
user@computer:~$ git clone --recurse-submodules https://github.com/whoeveryouare/qmk_firmware.git
|
||||
Cloning into 'qmk_firmware'...
|
||||
remote: Enumerating objects: 9, done.
|
||||
remote: Counting objects: 100% (9/9), done.
|
||||
remote: Compressing objects: 100% (5/5), done.
|
||||
remote: Total 183883 (delta 5), reused 4 (delta 4), pack-reused 183874
|
||||
Receiving objects: 100% (183883/183883), 132.90 MiB | 9.57 MiB/s, done.
|
||||
Resolving deltas: 100% (119972/119972), done.
|
||||
...
|
||||
Submodule path 'lib/chibios': checked out '587968d6cbc2b0e1c7147540872f2a67e59ca18b'
|
||||
Submodule path 'lib/chibios-contrib': checked out 'ede48346eee4b8d6847c19bc01420bee76a5e486'
|
||||
Submodule path 'lib/googletest': checked out 'ec44c6c1675c25b9827aacd08c02433cccde7780'
|
||||
Submodule path 'lib/lufa': checked out 'ce10f7642b0459e409839b23cc91498945119b4d'
|
||||
Submodule path 'lib/ugfx': checked out '3e97b74e03c93631cdd3ddb2ce43b963fdce19b2'
|
||||
```
|
||||
|
||||
You now have your QMK fork on your local machine, and you can add your keymap, compile it and flash it to your board. Once you're happy with your changes, you can add, commit, and push them to your fork like this:
|
||||
|
||||
```
|
||||
user@computer:~$ git add .
|
||||
user@computer:~$ git commit -m "adding my keymap"
|
||||
[master cccb1608] adding my keymap
|
||||
1 file changed, 1 insertion(+)
|
||||
create mode 100644 keyboards/planck/keymaps/mine/keymap.c
|
||||
user@computer:~$ git push
|
||||
Counting objects: 1, done.
|
||||
Delta compression using up to 4 threads.
|
||||
Compressing objects: 100% (1/1), done.
|
||||
Writing objects: 100% (1/1), 1.64 KiB | 0 bytes/s, done.
|
||||
Total 1 (delta 1), reused 0 (delta 0)
|
||||
remote: Resolving deltas: 100% (1/1), completed with 1 local objects.
|
||||
To https://github.com/whoeveryouare/qmk_firmware.git
|
||||
+ 20043e64...7da94ac5 master -> master
|
||||
```
|
||||
|
||||
Your changes now exist on your fork on Github - if you go back there (`https://github.com/<whoeveryouare>/qmk_firmware`), you can create a "New Pull Request" by clicking this button:
|
||||
|
||||

|
||||
|
||||
Here you'll be able to see exactly what you've committed - if it all looks good, you can finalize it by clicking "Create Pull Request":
|
||||
|
||||

|
||||
|
||||
After submitting, we may talk to you about your changes, ask that you make changes, and eventually accept it! Thanks for contributing to QMK :)
|
||||
@@ -1,33 +1,46 @@
|
||||
# I2C Master Driver
|
||||
# I2C Master Driver :id=i2c-master-driver
|
||||
|
||||
The I2C Master drivers used in QMK have a set of common functions to allow portability between MCUs.
|
||||
|
||||
## Available functions
|
||||
## An important note on I2C Addresses :id=note-on-i2c-addresses
|
||||
|
||||
All of the addresses expected by this driver should be pushed to the upper 7 bits of the address byte. Setting
|
||||
the lower bit (indicating read/write) will be done by the respective functions. Almost all I2C addresses listed
|
||||
on datasheets and the internet will be represented as 7 bits occupying the lower 7 bits and will need to be
|
||||
shifted to the left (more significant) by one bit. This is easy to do via the bitwise shift operator `<< 1`.
|
||||
|
||||
You can either do this on each call to the functions below, or once in your definition of the address. For example if your device has an address of `0x18`:
|
||||
|
||||
`#define MY_I2C_ADDRESS (0x18 << 1)`
|
||||
|
||||
See https://www.robot-electronics.co.uk/i2c-tutorial for more information about I2C addressing and other technical details.
|
||||
|
||||
## Available functions :id=available-functions
|
||||
|
||||
|Function |Description |
|
||||
|------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
|`void i2c_init(void);` |Initializes the I2C driver. This function should be called once before any transaction is initiated. |
|
||||
|`uint8_t i2c_start(uint8_t address, uint16_t timeout);` |Starts an I2C transaction. Address is the 7-bit slave address without the direction bit. |
|
||||
|`uint8_t i2c_transmit(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);` |Transmit data over I2C. Address is the 7-bit slave address without the direction. Returns status of transaction. |
|
||||
|`uint8_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);` |Receive data over I2C. Address is the 7-bit slave address without the direction. Saves number of bytes specified by `length` in `data` array. Returns status of transaction. |
|
||||
|`uint8_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);` |Same as the `i2c_transmit` function but `regaddr` sets where in the slave the data will be written. |
|
||||
|`uint8_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);` |Same as the `i2c_receive` function but `regaddr` sets from where in the slave the data will be read. |
|
||||
|`uint8_t i2c_stop(void);` |Ends an I2C transaction. |
|
||||
|`i2c_status_t i2c_start(uint8_t address, uint16_t timeout);` |Starts an I2C transaction. Address is the 7-bit slave address without the direction bit. |
|
||||
|`i2c_status_t i2c_transmit(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);` |Transmit data over I2C. Address is the 7-bit slave address without the direction. Returns status of transaction. |
|
||||
|`i2c_status_t i2c_receive(uint8_t address, uint8_t* data, uint16_t length, uint16_t timeout);` |Receive data over I2C. Address is the 7-bit slave address without the direction. Saves number of bytes specified by `length` in `data` array. Returns status of transaction. |
|
||||
|`i2c_status_t i2c_writeReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);` |Same as the `i2c_transmit` function but `regaddr` sets where in the slave the data will be written. |
|
||||
|`i2c_status_t i2c_readReg(uint8_t devaddr, uint8_t regaddr, uint8_t* data, uint16_t length, uint16_t timeout);` |Same as the `i2c_receive` function but `regaddr` sets from where in the slave the data will be read. |
|
||||
|`i2c_status_t i2c_stop(void);` |Ends an I2C transaction. |
|
||||
|
||||
### Function Return
|
||||
### Function Return :id=function-return
|
||||
|
||||
All the above functions, except `void i2c_init(void);` return the following truth table:
|
||||
|
||||
|Return Value |Description |
|
||||
|---------------|---------------------------------------------------|
|
||||
|0 |Operation executed successfully. |
|
||||
|-1 |Operation failed. |
|
||||
|-2 |Operation timed out. |
|
||||
|Return Constant |Value|Description |
|
||||
|--------------------|-----|--------------------------------|
|
||||
|`I2C_STATUS_SUCCESS`|0 |Operation executed successfully.|
|
||||
|`I2C_STATUS_ERROR` |-1 |Operation failed. |
|
||||
|`I2C_STATUS_TIMEOUT`|-2 |Operation timed out. |
|
||||
|
||||
|
||||
## AVR
|
||||
## AVR :id=avr
|
||||
|
||||
### Configuration
|
||||
### Configuration :id=avr-configuration
|
||||
|
||||
The following defines can be used to configure the I2C master driver.
|
||||
|
||||
@@ -37,12 +50,12 @@ The following defines can be used to configure the I2C master driver.
|
||||
|
||||
AVRs usually have set GPIO which turn into I2C pins, therefore no further configuration is required.
|
||||
|
||||
## ARM
|
||||
## ARM :id=arm
|
||||
|
||||
For ARM the Chibios I2C HAL driver is under the hood.
|
||||
This section assumes an STM32 MCU.
|
||||
|
||||
### Configuration
|
||||
### Configuration :id=arm-configuration
|
||||
|
||||
The configuration for ARM MCUs can be quite complex as often there are multiple I2C drivers which can be assigned to a variety of ports.
|
||||
|
||||
@@ -77,7 +90,7 @@ The ChibiOS I2C driver configuration depends on STM32 MCU:
|
||||
STM32F1xx, STM32F2xx, STM32F4xx, STM32L0xx and STM32L1xx use I2Cv1;
|
||||
STM32F0xx, STM32F3xx, STM32F7xx and STM32L4xx use I2Cv2;
|
||||
|
||||
#### I2Cv1
|
||||
#### I2Cv1 :id=i2cv1
|
||||
STM32 MCUs allow for different clock and duty parameters when configuring I2Cv1. These can be modified using the following parameters, using <https://www.playembedded.org/blog/stm32-i2c-chibios/#I2Cv1_configuration_structure> as a reference:
|
||||
|
||||
| Variable | Default |
|
||||
@@ -86,7 +99,7 @@ STM32 MCUs allow for different clock and duty parameters when configuring I2Cv1.
|
||||
| `I2C1_CLOCK_SPEED` | `100000` |
|
||||
| `I2C1_DUTY_CYCLE` | `STD_DUTY_CYCLE` |
|
||||
|
||||
#### I2Cv2
|
||||
#### I2Cv2 :id=i2cv2
|
||||
STM32 MCUs allow for different timing parameters when configuring I2Cv2. These can be modified using the following parameters, using <https://www.st.com/en/embedded-software/stsw-stm32126.html> as a reference:
|
||||
|
||||
| Variable | Default |
|
||||
@@ -104,10 +117,10 @@ STM32 MCUs allow for different "alternate function" modes when configuring GPIO
|
||||
| `I2C1_SCL_PAL_MODE` | `4` |
|
||||
| `I2C1_SDA_PAL_MODE` | `4` |
|
||||
|
||||
#### Other
|
||||
#### Other :id=other
|
||||
You can also overload the `void i2c_init(void)` function, which has a weak attribute. If you do this the configuration variables above will not be used. Please consult the datasheet of your MCU for the available GPIO configurations. The following is an example initialization function:
|
||||
|
||||
```C
|
||||
```c
|
||||
void i2c_init(void)
|
||||
{
|
||||
setPinInput(B6); // Try releasing special pins for a short time
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
// Moved pages
|
||||
'/adding_a_keyboard_to_qmk': '/hardware_keyboard_guidelines',
|
||||
'/build_environment_setup': '/getting_started_build_tools',
|
||||
'/cli_dev_configuration': '/cli_configuration',
|
||||
'/dynamic_macros': '/feature_dynamic_macros',
|
||||
'/feature_common_shortcuts': '/feature_advanced_keycodes',
|
||||
'/glossary': '/reference_glossary',
|
||||
|
||||
@@ -1,22 +1,22 @@
|
||||
# GPIO Control
|
||||
# GPIO Control :id=gpio-control
|
||||
|
||||
QMK has a GPIO control abstraction layer which is microcontroller agnostic. This is done to allow easy access to pin control across different platforms.
|
||||
|
||||
## Functions
|
||||
## Functions :id=functions
|
||||
|
||||
The following functions can provide basic control of GPIOs and are found in `quantum/quantum.h`.
|
||||
|
||||
|Function |Description | Old AVR Examples | Old ChibiOS/ARM Examples |
|
||||
|----------------------|------------------------------------------------------------------|------------------------------------------------|-------------------------------------------------|
|
||||
|`setPinInput(pin)` |Set pin as input with high impedance (High-Z) | `DDRB &= ~(1<<2)` | `palSetLineMode(pin, PAL_MODE_INPUT)` |
|
||||
|`setPinInputHigh(pin)`|Set pin as input with builtin pull-up resistor | `DDRB &= ~(1<<2); PORTB \|= (1<<2)` | `palSetLineMode(pin, PAL_MODE_INPUT_PULLUP)` |
|
||||
|`setPinInputLow(pin)` |Set pin as input with builtin pull-down resistor | N/A (Not supported on AVR) | `palSetLineMode(pin, PAL_MODE_INPUT_PULLDOWN)` |
|
||||
|`setPinOutput(pin)` |Set pin as output | `DDRB \|= (1<<2)` | `palSetLineMode(pin, PAL_MODE_OUTPUT_PUSHPULL)` |
|
||||
|`writePinHigh(pin)` |Set pin level as high, assuming it is an output | `PORTB \|= (1<<2)` | `palSetLine(pin)` |
|
||||
|`writePinLow(pin)` |Set pin level as low, assuming it is an output | `PORTB &= ~(1<<2)` | `palClearLine(pin)` |
|
||||
|`writePin(pin, level)`|Set pin level, assuming it is an output | `(level) ? PORTB \|= (1<<2) : PORTB &= ~(1<<2)` | `(level) ? palSetLine(pin) : palClearLine(pin)` |
|
||||
|`readPin(pin)` |Returns the level of the pin | `_SFR_IO8(pin >> 4) & _BV(pin & 0xF)` | `palReadLine(pin)` |
|
||||
|Function |Description | Old AVR Examples | Old ChibiOS/ARM Examples |
|
||||
|------------------------|--------------------------------------------------|-------------------------------------------------|-------------------------------------------------|
|
||||
| `setPinInput(pin)` | Set pin as input with high impedance (High-Z) | `DDRB &= ~(1<<2)` | `palSetLineMode(pin, PAL_MODE_INPUT)` |
|
||||
| `setPinInputHigh(pin)` | Set pin as input with builtin pull-up resistor | `DDRB &= ~(1<<2); PORTB \|= (1<<2)` | `palSetLineMode(pin, PAL_MODE_INPUT_PULLUP)` |
|
||||
| `setPinInputLow(pin)` | Set pin as input with builtin pull-down resistor | N/A (Not supported on AVR) | `palSetLineMode(pin, PAL_MODE_INPUT_PULLDOWN)` |
|
||||
| `setPinOutput(pin)` | Set pin as output | `DDRB \|= (1<<2)` | `palSetLineMode(pin, PAL_MODE_OUTPUT_PUSHPULL)` |
|
||||
| `writePinHigh(pin)` | Set pin level as high, assuming it is an output | `PORTB \|= (1<<2)` | `palSetLine(pin)` |
|
||||
| `writePinLow(pin)` | Set pin level as low, assuming it is an output | `PORTB &= ~(1<<2)` | `palClearLine(pin)` |
|
||||
| `writePin(pin, level)` | Set pin level, assuming it is an output | `(level) ? PORTB \|= (1<<2) : PORTB &= ~(1<<2)` | `(level) ? palSetLine(pin) : palClearLine(pin)` |
|
||||
| `readPin(pin)` | Returns the level of the pin | `_SFR_IO8(pin >> 4) & _BV(pin & 0xF)` | `palReadLine(pin)` |
|
||||
|
||||
## Advanced Settings
|
||||
## Advanced Settings :id=advanced-settings
|
||||
|
||||
Each microcontroller can have multiple advanced settings regarding its GPIO. This abstraction layer does not limit the use of architecture-specific functions. Advanced users should consult the datasheet of their desired device and include any needed libraries. For AVR, the standard avr/io.h library is used; for STM32, the ChibiOS [PAL library](http://chibios.sourceforge.net/docs3/hal/group___p_a_l.html) is used.
|
||||
|
||||
@@ -17,7 +17,7 @@ Note that this set-up has been tested on Ubuntu 16.04 only for the moment.
|
||||
|
||||
# Prerequisites
|
||||
## Build Environment
|
||||
Before starting, you must have followed the [Getting Started](news_getting_started.md) section of the Tutorial. In particular, you must have been able to build the firmware with [the `qmk compile` command](news_building_firmware#build-your-firmware).
|
||||
Before starting, you must have followed the [Getting Started](newbs_getting_started.md) section of the Tutorial. In particular, you must have been able to build the firmware with [the `qmk compile` command](newbs_building_firmware.md#build-your-firmware).
|
||||
|
||||
## Java
|
||||
Eclipse is a Java application, so you will need to install Java 8 or more recent to be able to run it. You may choose between the JRE or the JDK, the latter being useful if you intend to do Java development.
|
||||
|
||||
@@ -1,324 +0,0 @@
|
||||
/*
|
||||
pins_arduino.h - Pin definition functions for Arduino
|
||||
Part of Arduino - http://www.arduino.cc/
|
||||
|
||||
Copyright (c) 2007 David A. Mellis
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
This library 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
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General
|
||||
Public License along with this library; if not, write to the
|
||||
Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
||||
Boston, MA 02111-1307 USA
|
||||
|
||||
$Id: wiring.h 249 2007-02-03 16:52:51Z mellis $
|
||||
*/
|
||||
|
||||
#ifndef Pins_Arduino_h
|
||||
#define Pins_Arduino_h
|
||||
|
||||
#include <avr/pgmspace.h>
|
||||
|
||||
// Workaround for wrong definitions in "iom32u4.h".
|
||||
// This should be fixed in the AVR toolchain.
|
||||
#undef UHCON
|
||||
#undef UHINT
|
||||
#undef UHIEN
|
||||
#undef UHADDR
|
||||
#undef UHFNUM
|
||||
#undef UHFNUML
|
||||
#undef UHFNUMH
|
||||
#undef UHFLEN
|
||||
#undef UPINRQX
|
||||
#undef UPINTX
|
||||
#undef UPNUM
|
||||
#undef UPRST
|
||||
#undef UPCONX
|
||||
#undef UPCFG0X
|
||||
#undef UPCFG1X
|
||||
#undef UPSTAX
|
||||
#undef UPCFG2X
|
||||
#undef UPIENX
|
||||
#undef UPDATX
|
||||
#undef TCCR2A
|
||||
#undef WGM20
|
||||
#undef WGM21
|
||||
#undef COM2B0
|
||||
#undef COM2B1
|
||||
#undef COM2A0
|
||||
#undef COM2A1
|
||||
#undef TCCR2B
|
||||
#undef CS20
|
||||
#undef CS21
|
||||
#undef CS22
|
||||
#undef WGM22
|
||||
#undef FOC2B
|
||||
#undef FOC2A
|
||||
#undef TCNT2
|
||||
#undef TCNT2_0
|
||||
#undef TCNT2_1
|
||||
#undef TCNT2_2
|
||||
#undef TCNT2_3
|
||||
#undef TCNT2_4
|
||||
#undef TCNT2_5
|
||||
#undef TCNT2_6
|
||||
#undef TCNT2_7
|
||||
#undef OCR2A
|
||||
#undef OCR2_0
|
||||
#undef OCR2_1
|
||||
#undef OCR2_2
|
||||
#undef OCR2_3
|
||||
#undef OCR2_4
|
||||
#undef OCR2_5
|
||||
#undef OCR2_6
|
||||
#undef OCR2_7
|
||||
#undef OCR2B
|
||||
#undef OCR2_0
|
||||
#undef OCR2_1
|
||||
#undef OCR2_2
|
||||
#undef OCR2_3
|
||||
#undef OCR2_4
|
||||
#undef OCR2_5
|
||||
#undef OCR2_6
|
||||
#undef OCR2_7
|
||||
|
||||
#define NUM_DIGITAL_PINS 30
|
||||
#define NUM_ANALOG_INPUTS 12
|
||||
|
||||
#define TX_RX_LED_INIT DDRD |= (1 << 5), DDRB |= (1 << 0)
|
||||
#define TXLED0 PORTD |= (1 << 5)
|
||||
#define TXLED1 PORTD &= ~(1 << 5)
|
||||
#define RXLED0 PORTB |= (1 << 0)
|
||||
#define RXLED1 PORTB &= ~(1 << 0)
|
||||
|
||||
static const uint8_t SDA = 2;
|
||||
static const uint8_t SCL = 3;
|
||||
#define LED_BUILTIN 13
|
||||
|
||||
// Map SPI port to 'new' pins D14..D17
|
||||
static const uint8_t SS = 17;
|
||||
static const uint8_t MOSI = 16;
|
||||
static const uint8_t MISO = 14;
|
||||
static const uint8_t SCK = 15;
|
||||
|
||||
// Mapping of analog pins as digital I/O
|
||||
// A6-A11 share with digital pins
|
||||
static const uint8_t ADC0 = 18;
|
||||
static const uint8_t ADC1 = 19;
|
||||
static const uint8_t ADC2 = 20;
|
||||
static const uint8_t ADC3 = 21;
|
||||
static const uint8_t ADC4 = 22;
|
||||
static const uint8_t ADC5 = 23;
|
||||
static const uint8_t ADC6 = 24; // D4
|
||||
static const uint8_t ADC7 = 25; // D6
|
||||
static const uint8_t ADC8 = 26; // D8
|
||||
static const uint8_t ADC9 = 27; // D9
|
||||
static const uint8_t ADC10 = 28; // D10
|
||||
static const uint8_t ADC11 = 29; // D12
|
||||
|
||||
#define digitalPinToPCICR(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCICR) : ((uint8_t *)0))
|
||||
#define digitalPinToPCICRbit(p) 0
|
||||
#define digitalPinToPCMSK(p) ((((p) >= 8 && (p) <= 11) || ((p) >= 14 && (p) <= 17) || ((p) >= A8 && (p) <= A10)) ? (&PCMSK0) : ((uint8_t *)0))
|
||||
#define digitalPinToPCMSKbit(p) (((p) >= 8 && (p) <= 11) ? (p)-4 : ((p) == 14 ? 3 : ((p) == 15 ? 1 : ((p) == 16 ? 2 : ((p) == 17 ? 0 : (p - A8 + 4))))))
|
||||
|
||||
// __AVR_ATmega32U4__ has an unusual mapping of pins to channels
|
||||
extern const uint8_t PROGMEM analog_pin_to_channel_PGM[];
|
||||
#define analogPinToChannel(P) (pgm_read_byte(analog_pin_to_channel_PGM + (P)))
|
||||
|
||||
#define digitalPinToInterrupt(p) ((p) == 0 ? 2 : ((p) == 1 ? 3 : ((p) == 2 ? 1 : ((p) == 3 ? 0 : ((p) == 7 ? 4 : NOT_AN_INTERRUPT)))))
|
||||
|
||||
#ifdef ARDUINO_MAIN
|
||||
|
||||
// On the Arduino board, digital pins are also used
|
||||
// for the analog output (software PWM). Analog input
|
||||
// pins are a separate set.
|
||||
|
||||
// ATMEL ATMEGA32U4 / ARDUINO LEONARDO
|
||||
//
|
||||
// D0 PD2 RXD1/INT2
|
||||
// D1 PD3 TXD1/INT3
|
||||
// D2 PD1 SDA SDA/INT1
|
||||
// D3# PD0 PWM8/SCL OC0B/SCL/INT0
|
||||
// D4 A6 PD4 ADC8
|
||||
// D5# PC6 ??? OC3A/#OC4A
|
||||
// D6# A7 PD7 FastPWM #OC4D/ADC10
|
||||
// D7 PE6 INT6/AIN0
|
||||
//
|
||||
// D8 A8 PB4 ADC11/PCINT4
|
||||
// D9# A9 PB5 PWM16 OC1A/#OC4B/ADC12/PCINT5
|
||||
// D10# A10 PB6 PWM16 OC1B/0c4B/ADC13/PCINT6
|
||||
// D11# PB7 PWM8/16 0C0A/OC1C/#RTS/PCINT7
|
||||
// D12 A11 PD6 T1/#OC4D/ADC9
|
||||
// D13# PC7 PWM10 CLK0/OC4A
|
||||
//
|
||||
// A0 D18 PF7 ADC7
|
||||
// A1 D19 PF6 ADC6
|
||||
// A2 D20 PF5 ADC5
|
||||
// A3 D21 PF4 ADC4
|
||||
// A4 D22 PF1 ADC1
|
||||
// A5 D23 PF0 ADC0
|
||||
//
|
||||
// New pins D14..D17 to map SPI port to digital pins
|
||||
//
|
||||
// MISO D14 PB3 MISO,PCINT3
|
||||
// SCK D15 PB1 SCK,PCINT1
|
||||
// MOSI D16 PB2 MOSI,PCINT2
|
||||
// SS D17 PB0 RXLED,SS/PCINT0
|
||||
//
|
||||
// Connected LEDs on board for TX and RX
|
||||
// TXLED D24 PD5 XCK1
|
||||
// RXLED D17 PB0
|
||||
// HWB PE2 HWB
|
||||
|
||||
// these arrays map port names (e.g. port B) to the
|
||||
// appropriate addresses for various functions (e.g. reading
|
||||
// and writing)
|
||||
const uint16_t PROGMEM port_to_mode_PGM[] = {
|
||||
NOT_A_PORT, NOT_A_PORT, (uint16_t)&DDRB, (uint16_t)&DDRC, (uint16_t)&DDRD, (uint16_t)&DDRE, (uint16_t)&DDRF,
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM port_to_output_PGM[] = {
|
||||
NOT_A_PORT, NOT_A_PORT, (uint16_t)&PORTB, (uint16_t)&PORTC, (uint16_t)&PORTD, (uint16_t)&PORTE, (uint16_t)&PORTF,
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM port_to_input_PGM[] = {
|
||||
NOT_A_PORT, NOT_A_PORT, (uint16_t)&PINB, (uint16_t)&PINC, (uint16_t)&PIND, (uint16_t)&PINE, (uint16_t)&PINF,
|
||||
};
|
||||
|
||||
const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
|
||||
PD, // D0 - PD2
|
||||
PD, // D1 - PD3
|
||||
PD, // D2 - PD1
|
||||
PD, // D3 - PD0
|
||||
PD, // D4 - PD4
|
||||
PC, // D5 - PC6
|
||||
PD, // D6 - PD7
|
||||
PE, // D7 - PE6
|
||||
|
||||
PB, // D8 - PB4
|
||||
PB, // D9 - PB5
|
||||
PB, // D10 - PB6
|
||||
PB, // D11 - PB7
|
||||
PD, // D12 - PD6
|
||||
PC, // D13 - PC7
|
||||
|
||||
PB, // D14 - MISO - PB3
|
||||
PB, // D15 - SCK - PB1
|
||||
PB, // D16 - MOSI - PB2
|
||||
PB, // D17 - SS - PB0
|
||||
|
||||
PF, // D18 - A0 - PF7
|
||||
PF, // D19 - A1 - PF6
|
||||
PF, // D20 - A2 - PF5
|
||||
PF, // D21 - A3 - PF4
|
||||
PF, // D22 - A4 - PF1
|
||||
PF, // D23 - A5 - PF0
|
||||
|
||||
PD, // D24 - PD5
|
||||
PD, // D25 / D6 - A7 - PD7
|
||||
PB, // D26 / D8 - A8 - PB4
|
||||
PB, // D27 / D9 - A9 - PB5
|
||||
PB, // D28 / D10 - A10 - PB6
|
||||
PD, // D29 / D12 - A11 - PD6
|
||||
};
|
||||
|
||||
const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
|
||||
_BV(2), // D0 - PD2
|
||||
_BV(3), // D1 - PD3
|
||||
_BV(1), // D2 - PD1
|
||||
_BV(0), // D3 - PD0
|
||||
_BV(4), // D4 - PD4
|
||||
_BV(6), // D5 - PC6
|
||||
_BV(7), // D6 - PD7
|
||||
_BV(6), // D7 - PE6
|
||||
|
||||
_BV(4), // D8 - PB4
|
||||
_BV(5), // D9 - PB5
|
||||
_BV(6), // D10 - PB6
|
||||
_BV(7), // D11 - PB7
|
||||
_BV(6), // D12 - PD6
|
||||
_BV(7), // D13 - PC7
|
||||
|
||||
_BV(3), // D14 - MISO - PB3
|
||||
_BV(1), // D15 - SCK - PB1
|
||||
_BV(2), // D16 - MOSI - PB2
|
||||
_BV(0), // D17 - SS - PB0
|
||||
|
||||
_BV(7), // D18 - A0 - PF7
|
||||
_BV(6), // D19 - A1 - PF6
|
||||
_BV(5), // D20 - A2 - PF5
|
||||
_BV(4), // D21 - A3 - PF4
|
||||
_BV(1), // D22 - A4 - PF1
|
||||
_BV(0), // D23 - A5 - PF0
|
||||
|
||||
_BV(5), // D24 - PD5
|
||||
_BV(7), // D25 / D6 - A7 - PD7
|
||||
_BV(4), // D26 / D8 - A8 - PB4
|
||||
_BV(5), // D27 / D9 - A9 - PB5
|
||||
_BV(6), // D28 / D10 - A10 - PB6
|
||||
_BV(6), // D29 / D12 - A11 - PD6
|
||||
};
|
||||
|
||||
const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
|
||||
NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, TIMER0B, /* 3 */
|
||||
NOT_ON_TIMER, TIMER3A, /* 5 */
|
||||
TIMER4D, /* 6 */
|
||||
NOT_ON_TIMER,
|
||||
|
||||
NOT_ON_TIMER, TIMER1A, /* 9 */
|
||||
TIMER1B, /* 10 */
|
||||
TIMER0A, /* 11 */
|
||||
|
||||
NOT_ON_TIMER, TIMER4A, /* 13 */
|
||||
|
||||
NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER,
|
||||
|
||||
NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER,
|
||||
};
|
||||
|
||||
const uint8_t PROGMEM analog_pin_to_channel_PGM[] = {
|
||||
7, // A0 PF7 ADC7
|
||||
6, // A1 PF6 ADC6
|
||||
5, // A2 PF5 ADC5
|
||||
4, // A3 PF4 ADC4
|
||||
1, // A4 PF1 ADC1
|
||||
0, // A5 PF0 ADC0
|
||||
8, // A6 D4 PD4 ADC8
|
||||
10, // A7 D6 PD7 ADC10
|
||||
11, // A8 D8 PB4 ADC11
|
||||
12, // A9 D9 PB5 ADC12
|
||||
13, // A10 D10 PB6 ADC13
|
||||
9 // A11 D12 PD6 ADC9
|
||||
};
|
||||
|
||||
#endif /* ARDUINO_MAIN */
|
||||
|
||||
// These serial port names are intended to allow libraries and architecture-neutral
|
||||
// sketches to automatically default to the correct port name for a particular type
|
||||
// of use. For example, a GPS module would normally connect to SERIAL_PORT_HARDWARE_OPEN,
|
||||
// the first hardware serial port whose RX/TX pins are not dedicated to another use.
|
||||
//
|
||||
// SERIAL_PORT_MONITOR Port which normally prints to the Arduino Serial Monitor
|
||||
//
|
||||
// SERIAL_PORT_USBVIRTUAL Port which is USB virtual serial
|
||||
//
|
||||
// SERIAL_PORT_LINUXBRIDGE Port which connects to a Linux system via Bridge library
|
||||
//
|
||||
// SERIAL_PORT_HARDWARE Hardware serial port, physical RX & TX pins.
|
||||
//
|
||||
// SERIAL_PORT_HARDWARE_OPEN Hardware serial ports which are open for use. Their RX & TX
|
||||
// pins are NOT connected to anything by default.
|
||||
#define SERIAL_PORT_MONITOR Serial
|
||||
#define SERIAL_PORT_USBVIRTUAL Serial
|
||||
#define SERIAL_PORT_HARDWARE Serial1
|
||||
#define SERIAL_PORT_HARDWARE_OPEN Serial1
|
||||
|
||||
#endif /* Pins_Arduino_h */
|
||||
@@ -108,6 +108,9 @@ bool oled_active = false;
|
||||
bool oled_scrolling = false;
|
||||
uint8_t oled_rotation = 0;
|
||||
uint8_t oled_rotation_width = 0;
|
||||
uint8_t oled_scroll_speed = 0; // this holds the speed after being remapped to ssd1306 internal values
|
||||
uint8_t oled_scroll_start = 0;
|
||||
uint8_t oled_scroll_end = 7;
|
||||
#if OLED_TIMEOUT > 0
|
||||
uint32_t oled_timeout;
|
||||
#endif
|
||||
@@ -515,12 +518,37 @@ bool oled_off(void) {
|
||||
return !oled_active;
|
||||
}
|
||||
|
||||
// Set the specific 8 lines rows of the screen to scroll.
|
||||
// 0 is the default for start, and 7 for end, which is the entire
|
||||
// height of the screen. For 128x32 screens, rows 4-7 are not used.
|
||||
void oled_scroll_set_area(uint8_t start_line, uint8_t end_line) {
|
||||
oled_scroll_start = start_line;
|
||||
oled_scroll_end = end_line;
|
||||
}
|
||||
|
||||
void oled_scroll_set_speed(uint8_t speed) {
|
||||
// Sets the speed for scrolling... does not take effect
|
||||
// until scrolling is either started or restarted
|
||||
// the ssd1306 supports 8 speeds
|
||||
// FrameRate2 speed = 7
|
||||
// FrameRate3 speed = 4
|
||||
// FrameRate4 speed = 5
|
||||
// FrameRate5 speed = 0
|
||||
// FrameRate25 speed = 6
|
||||
// FrameRate64 speed = 1
|
||||
// FrameRate128 speed = 2
|
||||
// FrameRate256 speed = 3
|
||||
// for ease of use these are remaped here to be in order
|
||||
static const uint8_t scroll_remap[8] = {7, 4, 5, 0, 6, 1, 2, 3};
|
||||
oled_scroll_speed = scroll_remap[speed];
|
||||
}
|
||||
|
||||
bool oled_scroll_right(void) {
|
||||
// Dont enable scrolling if we need to update the display
|
||||
// This prevents scrolling of bad data from starting the scroll too early after init
|
||||
if (!oled_dirty && !oled_scrolling) {
|
||||
static const uint8_t PROGMEM display_scroll_right[] = {I2C_CMD, SCROLL_RIGHT, 0x00, 0x00, 0x00, 0x0F, 0x00, 0xFF, ACTIVATE_SCROLL};
|
||||
if (I2C_TRANSMIT_P(display_scroll_right) != I2C_STATUS_SUCCESS) {
|
||||
uint8_t display_scroll_right[] = {I2C_CMD, SCROLL_RIGHT, 0x00, oled_scroll_start, oled_scroll_speed, oled_scroll_end, 0x00, 0xFF, ACTIVATE_SCROLL};
|
||||
if (I2C_TRANSMIT(display_scroll_right) != I2C_STATUS_SUCCESS) {
|
||||
print("oled_scroll_right cmd failed\n");
|
||||
return oled_scrolling;
|
||||
}
|
||||
@@ -533,8 +561,8 @@ bool oled_scroll_left(void) {
|
||||
// Dont enable scrolling if we need to update the display
|
||||
// This prevents scrolling of bad data from starting the scroll too early after init
|
||||
if (!oled_dirty && !oled_scrolling) {
|
||||
static const uint8_t PROGMEM display_scroll_left[] = {I2C_CMD, SCROLL_LEFT, 0x00, 0x00, 0x00, 0x0F, 0x00, 0xFF, ACTIVATE_SCROLL};
|
||||
if (I2C_TRANSMIT_P(display_scroll_left) != I2C_STATUS_SUCCESS) {
|
||||
uint8_t display_scroll_left[] = {I2C_CMD, SCROLL_LEFT, 0x00, oled_scroll_start, oled_scroll_speed, oled_scroll_end, 0x00, 0xFF, ACTIVATE_SCROLL};
|
||||
if (I2C_TRANSMIT(display_scroll_left) != I2C_STATUS_SUCCESS) {
|
||||
print("oled_scroll_left cmd failed\n");
|
||||
return oled_scrolling;
|
||||
}
|
||||
|
||||
@@ -246,6 +246,18 @@ void oled_task(void);
|
||||
// Called at the start of oled_task, weak function overridable by the user
|
||||
void oled_task_user(void);
|
||||
|
||||
// Set the specific 8 lines rows of the screen to scroll.
|
||||
// 0 is the default for start, and 7 for end, which is the entire
|
||||
// height of the screen. For 128x32 screens, rows 4-7 are not used.
|
||||
void oled_scroll_set_area(uint8_t start_line, uint8_t end_line);
|
||||
|
||||
// Sets scroll speed, 0-7, fastest to slowest. Default is three.
|
||||
// Does not take effect until scrolling is either started or restarted
|
||||
// the ssd1306 supports 8 speeds with the delay
|
||||
// listed below betwen each frame of the scrolling effect
|
||||
// 0=2, 1=3, 2=4, 3=5, 4=25, 5=64, 6=128, 7=256
|
||||
void oled_scroll_set_speed(uint8_t speed);
|
||||
|
||||
// Scrolls the entire display right
|
||||
// Returns true if the screen was scrolling or starts scrolling
|
||||
// NOTE: display contents cannot be changed while scrolling
|
||||
|
||||
17
keyboards/abacus/abacus.c
Normal file
17
keyboards/abacus/abacus.c
Normal file
@@ -0,0 +1,17 @@
|
||||
/* Copyright 2020 nickolaij
|
||||
*
|
||||
* 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 "abacus.h"
|
||||
41
keyboards/abacus/abacus.h
Normal file
41
keyboards/abacus/abacus.h
Normal file
@@ -0,0 +1,41 @@
|
||||
/* Copyright 2020 nickolaij
|
||||
*
|
||||
* 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
|
||||
|
||||
|
||||
/* This is a shortcut to help you visually see your layout.
|
||||
*
|
||||
* The first section contains all of the arguments representing the physical
|
||||
* layout of the board and position of the keys.
|
||||
*
|
||||
* The second converts the arguments into a two-dimensional array which
|
||||
* represents the switch matrix.
|
||||
*/
|
||||
#define LAYOUT( \
|
||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b, \
|
||||
k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b, \
|
||||
k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b, \
|
||||
k30, k31, k32, k33, k34, k35, k36, k37, k38 \
|
||||
) \
|
||||
{ \
|
||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0a, k0b }, \
|
||||
{ k10, k11, k12, k13, k14, k15, k16, k17, k18, k19, k1a, k1b }, \
|
||||
{ k20, k21, k22, k23, k24, k25, k26, k27, k28, k29, k2a, k2b }, \
|
||||
{ k30, k31, k32, k33, XXX, XXX, k34, XXX, k35, k36, k37, k38} \
|
||||
}
|
||||
133
keyboards/abacus/config.h
Normal file
133
keyboards/abacus/config.h
Normal file
@@ -0,0 +1,133 @@
|
||||
/*
|
||||
Copyright 2020 nickolaij
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x0000
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER nickolaij
|
||||
#define PRODUCT abacus
|
||||
#define DESCRIPTION A first attempt at a custom keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
#define MATRIX_COLS 12
|
||||
|
||||
/*
|
||||
* 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 { D3, D2, D4, C6 }
|
||||
#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, D7, B3, E6, B2, B4, B6, B5}
|
||||
#define UNUSED_PINS {B0}
|
||||
|
||||
#define DIP_SWITCH_PINS { D0 }
|
||||
|
||||
#define ENCODERS_PAD_A { F1 }
|
||||
#define ENCODERS_PAD_B { F0 }
|
||||
#define ENCODER_RESOLUTION 4
|
||||
|
||||
/* COL2ROW, ROW2COL*/
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
#define RGB_DI_PIN D1
|
||||
|
||||
#ifdef RGB_DI_PIN
|
||||
# define RGBLED_NUM 17
|
||||
# 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 */
|
||||
/*== 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_STATIC_GRADIENT
|
||||
/*== 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
|
||||
|
||||
/*
|
||||
* 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
|
||||
|
||||
/* disable these deprecated features by default */
|
||||
#ifndef LINK_TIME_OPTIMIZATION_ENABLE
|
||||
#define NO_ACTION_MACRO
|
||||
#define NO_ACTION_FUNCTION
|
||||
#endif
|
||||
/*
|
||||
* MIDI options
|
||||
*/
|
||||
|
||||
/* Prevent use of disabled MIDI features in the keymap */
|
||||
//#define MIDI_ENABLE_STRICT 1
|
||||
|
||||
/* enable basic MIDI features:
|
||||
- MIDI notes can be sent when in Music mode is on
|
||||
*/
|
||||
//#define MIDI_BASIC
|
||||
|
||||
/* enable advanced MIDI features:
|
||||
- MIDI notes can be added to the keymap
|
||||
- Octave shift and transpose
|
||||
- Virtual sustain, portamento, and modulation wheel
|
||||
- etc.
|
||||
*/
|
||||
//#define MIDI_ADVANCED
|
||||
|
||||
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
||||
//#define MIDI_TONE_KEYCODE_OCTAVES 1
|
||||
62
keyboards/abacus/info.json
Normal file
62
keyboards/abacus/info.json
Normal file
@@ -0,0 +1,62 @@
|
||||
{
|
||||
"keyboard_name": "Abacus",
|
||||
"url": "https://www.github.com/nickolaij",
|
||||
"maintainer": "nickolaij",
|
||||
"width": 12.75,
|
||||
"height": 4,
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"key_count": 45,
|
||||
"layout": [
|
||||
{"label":"k00", "x":0, "y":0, "w":1},
|
||||
{"label":"k01", "x":1, "y":0, "w":1},
|
||||
{"label":"k02", "x":2, "y":0, "w":1},
|
||||
{"label":"k03", "x":3, "y":0, "w":1},
|
||||
{"label":"k04", "x":4, "y":0, "w":1},
|
||||
{"label":"k05", "x":5, "y":0, "w":1},
|
||||
{"label":"k06", "x":6, "y":0, "w":1},
|
||||
{"label":"k07", "x":7, "y":0, "w":1},
|
||||
{"label":"k08", "x":8, "y":0, "w":1},
|
||||
{"label":"k09", "x":9, "y":0, "w":1},
|
||||
{"label":"k0a", "x":10, "y":0, "w":1},
|
||||
{"label":"k0b", "x":11, "y":0, "w":1.75},
|
||||
|
||||
{"label":"k10", "x":0, "y":1, "w":1.25},
|
||||
{"label":"k11", "x":1.25, "y":1, "w":1},
|
||||
{"label":"k12", "x":2.25, "y":1, "w":1},
|
||||
{"label":"k13", "x":3.25, "y":1, "w":1},
|
||||
{"label":"k14", "x":4.25, "y":1, "w":1},
|
||||
{"label":"k15", "x":5.25, "y":1, "w":1},
|
||||
{"label":"k16", "x":6.25, "y":1, "w":1},
|
||||
{"label":"k17", "x":7.25, "y":1, "w":1},
|
||||
{"label":"k18", "x":8.25, "y":1, "w":1},
|
||||
{"label":"k19", "x":9.25, "y":1, "w":1},
|
||||
{"label":"k1a", "x":10.25, "y":1, "w":1},
|
||||
{"label":"k1b", "x":11.25, "y":1, "w":1.5},
|
||||
|
||||
{"label":"k20", "x":0, "y":2, "w":1.75},
|
||||
{"label":"k21", "x":1.75, "y":2, "w":1},
|
||||
{"label":"k22", "x":2.75, "y":2, "w":1},
|
||||
{"label":"k23", "x":3.75, "y":2, "w":1},
|
||||
{"label":"k24", "x":4.75, "y":2, "w":1},
|
||||
{"label":"k25", "x":5.75, "y":2, "w":1},
|
||||
{"label":"k26", "x":6.75, "y":2, "w":1},
|
||||
{"label":"k27", "x":7.75, "y":2, "w":1},
|
||||
{"label":"k28", "x":8.75, "y":2, "w":1},
|
||||
{"label":"k29", "x":9.75, "y":2, "w":1},
|
||||
{"label":"k2a", "x":10.75, "y":2, "w":1},
|
||||
{"label":"k2b", "x":11.75, "y":2, "w":1},
|
||||
|
||||
{"label":"k30", "x":0, "y":3, "w":1.25},
|
||||
{"label":"k31", "x":1.25, "y":3, "w":1},
|
||||
{"label":"k32", "x":2.25, "y":3, "w":1},
|
||||
{"label":"k33", "x":3.25, "y":3, "w":2.75},
|
||||
{"label":"k34", "x":6, "y":3, "w":2.75},
|
||||
{"label":"k35", "x":8.75, "y":3, "w":1},
|
||||
{"label":"k36", "x":9.75, "y":3, "w":1},
|
||||
{"label":"k37", "x":10.75, "y":3, "w":1},
|
||||
{"label":"k38", "x":11.75, "y":3, "w":1}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
148
keyboards/abacus/keymaps/default/keymap.c
Normal file
148
keyboards/abacus/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,148 @@
|
||||
/* Copyright 2020 nickolaij
|
||||
*
|
||||
* 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
|
||||
|
||||
// wait DELAY ms before unregistering media keys
|
||||
#define MEDIA_KEY_DELAY 10
|
||||
|
||||
// Defines names for use in layer keycodes and the keymap
|
||||
enum layer_names {
|
||||
_BASE,
|
||||
_UPPER,
|
||||
_LOWER
|
||||
};
|
||||
|
||||
// Defines the keycodes used by our macros in process_record_user
|
||||
enum custom_keycodes {
|
||||
NICKURL = SAFE_RANGE,
|
||||
ALTTAB
|
||||
};
|
||||
|
||||
enum unicode_names {
|
||||
LOVEEYES,
|
||||
THINK,
|
||||
UPSIDEDOWN,
|
||||
NOMOUTH,
|
||||
PARTY,
|
||||
HEART,
|
||||
EGGPLANT,
|
||||
PEACH,
|
||||
EMOJI100,
|
||||
EMOJIB
|
||||
};
|
||||
|
||||
const uint32_t PROGMEM unicode_map[] = {
|
||||
[LOVEEYES] = 0x1f60d,
|
||||
[THINK] = 0x1f914,
|
||||
[UPSIDEDOWN] = 0x1f643,
|
||||
[NOMOUTH] = 0x1f636,
|
||||
[PARTY] = 0x1f973,
|
||||
[HEART] = 0x1f495,
|
||||
[EMOJI100] = 0x1f4af,
|
||||
[PEACH] = 0x1f351,
|
||||
[EGGPLANT] = 0x1f346,
|
||||
[EMOJIB] = 0x1f171
|
||||
};
|
||||
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
/* Base */
|
||||
[_BASE] = LAYOUT(
|
||||
KC_ESCAPE, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPACE,
|
||||
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCOLON, KC_BSLASH,
|
||||
KC_LSHIFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMMA, KC_DOT, KC_UP, KC_DELETE,
|
||||
KC_LCTRL, KC_LGUI, MO(_UPPER), KC_SPACE, KC_ENTER, MO(_LOWER), KC_LEFT, KC_DOWN, KC_RIGHT
|
||||
),
|
||||
[_UPPER] = LAYOUT(
|
||||
KC_GRAVE, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
|
||||
ALTTAB, _______, _______, _______, _______, _______, _______, _______, KC_LBRACKET, KC_RBRACKET, KC_QUOTE, KC_SLASH,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_MINUS, KC_EQUAL, _______, _______,
|
||||
KC_LALT, _______, _______, _______, _______, _______, KC_HOME, _______, KC_END
|
||||
),
|
||||
[_LOWER] = LAYOUT(
|
||||
NICKURL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
|
||||
_______, KC_F11, KC_F12, RGB_MODE_PLAIN, RGB_MODE_BREATHE, RGB_MODE_RAINBOW, RGB_MODE_SWIRL, RGB_MODE_SNAKE, RGB_MODE_KNIGHT, RGB_MODE_GRADIENT, XXXXXXX, RGB_TOG,
|
||||
_______, X(LOVEEYES), X(THINK), X(UPSIDEDOWN), X(NOMOUTH), X(PARTY), X(PEACH), X(HEART), X(EGGPLANT), X(EMOJI100), X(EMOJIB), RGB_HUI,
|
||||
KC_CAPS, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
)
|
||||
|
||||
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
switch (keycode) {
|
||||
case NICKURL:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING("https://www.github.com/nickolaij");
|
||||
} else {
|
||||
tap_code(KC_ENTER);
|
||||
}
|
||||
return true;
|
||||
break;
|
||||
|
||||
case ALTTAB:
|
||||
if (record->event.pressed) {
|
||||
tap_code16(A(KC_TAB));
|
||||
}
|
||||
return true;
|
||||
break;
|
||||
|
||||
default:
|
||||
return true;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void dip_switch_update_user(uint8_t index, bool active) {
|
||||
switch (index) {
|
||||
case 0:
|
||||
if(active) {
|
||||
switch(get_highest_layer(layer_state)) {
|
||||
case _BASE:
|
||||
tap_code16(LCTL(KC_F));
|
||||
break;
|
||||
case _UPPER:
|
||||
tap_code(KC_MUTE);
|
||||
break;
|
||||
case _LOWER:
|
||||
tap_code(KC_MEDIA_PLAY_PAUSE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void matrix_init_user(void) {
|
||||
set_unicode_input_mode(UC_WINC);
|
||||
}
|
||||
|
||||
void encoder_update_user(uint8_t index, bool clockwise) {
|
||||
|
||||
switch(get_highest_layer(layer_state)) {
|
||||
case _BASE:
|
||||
clockwise ? tap_code(KC_PGDN) : tap_code(KC_PGUP);
|
||||
break;
|
||||
case _UPPER:
|
||||
clockwise ? tap_code(KC_VOLU) : tap_code(KC_VOLD);
|
||||
break;
|
||||
case _LOWER:
|
||||
clockwise ? tap_code(KC_MEDIA_NEXT_TRACK) : tap_code(KC_MEDIA_PREV_TRACK);
|
||||
break;
|
||||
}
|
||||
}
|
||||
4
keyboards/abacus/keymaps/default/readme.md
Normal file
4
keyboards/abacus/keymaps/default/readme.md
Normal file
@@ -0,0 +1,4 @@
|
||||
# The default keymap for Abacus
|
||||
|
||||
This is made based on my first few days of playing with it and honing in on what feels right.
|
||||
I've repurposed the DIP switch function for the encoder switches and added some functionality for multiple layers also effecting the encoders output.
|
||||
15
keyboards/abacus/readme.md
Normal file
15
keyboards/abacus/readme.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Abacus
|
||||
|
||||

|
||||
|
||||
A first attempt at a PCB design for a mechanical keyboard. Includes rotary encoder and RGB underglow.
|
||||
|
||||
* Keyboard Maintainer: [nickolaij](https://github.com/nickolaij)
|
||||
* Hardware Supported: Abacus PCB, [Elite C Microcontroller](https://keeb.io/products/elite-c-usb-c-pro-micro-replacement-arduino-compatible-atmega32u4) or Pro Micro Microcontroller (Elite C has additional pins for encoder)
|
||||
* Hardware Availability: [Abacus PCB Github](https://github.com/nickolaij/Abacus_Rev2)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make abacus:default
|
||||
|
||||
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).
|
||||
36
keyboards/abacus/rules.mk
Normal file
36
keyboards/abacus/rules.mk
Normal file
@@ -0,0 +1,36 @@
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
# Teensy halfkay
|
||||
# Pro Micro caterina
|
||||
# Atmel DFU atmel-dfu
|
||||
# LUFA DFU lufa-dfu
|
||||
# QMK DFU qmk-dfu
|
||||
# ATmega32A bootloadHID
|
||||
# ATmega328P USBasp
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
|
||||
MOUSEKEY_ENABLE = no # Mouse keys
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
CONSOLE_ENABLE = yes # Console for debug
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
NKRO_ENABLE = no # USB Nkey Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
|
||||
MIDI_ENABLE = no # MIDI support
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||
HD44780_ENABLE = no # Enable support for HD44780 based LCDs
|
||||
UNICODEMAP_ENABLE = yes
|
||||
ENCODER_ENABLE = yes
|
||||
DIP_SWITCH_ENABLE = yes
|
||||
LTO_ENABLE = yes
|
||||
@@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "pro_micro.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef USE_MATRIX_I2C
|
||||
# include "i2c.h"
|
||||
@@ -102,9 +102,10 @@ void matrix_init(void)
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
TX_RX_LED_INIT;
|
||||
TXLED0;
|
||||
RXLED0;
|
||||
setPinOutput(B0);
|
||||
setPinOutput(D5);
|
||||
writePinHigh(B0);
|
||||
writePinHigh(D5);
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
@@ -189,10 +190,10 @@ int serial_transaction(int master_changed) {
|
||||
int ret=serial_update_buffers();
|
||||
#endif
|
||||
if (ret ) {
|
||||
if(ret==2) RXLED1;
|
||||
if(ret==2) writePinLow(B0);
|
||||
return 1;
|
||||
}
|
||||
RXLED0;
|
||||
writePinHigh(B0);
|
||||
memcpy(&matrix[slaveOffset],
|
||||
(void *)serial_slave_buffer, SERIAL_SLAVE_BUFFER_LENGTH);
|
||||
return 0;
|
||||
@@ -241,7 +242,7 @@ uint8_t matrix_master_scan(void) {
|
||||
if( serial_transaction(mchanged) ) {
|
||||
#endif
|
||||
// turn on the indicator led when halves are disconnected
|
||||
TXLED1;
|
||||
writePinLow(D5);
|
||||
|
||||
error_count++;
|
||||
|
||||
@@ -254,7 +255,7 @@ uint8_t matrix_master_scan(void) {
|
||||
}
|
||||
} else {
|
||||
// turn off the indicator led on no error
|
||||
TXLED0;
|
||||
writePinHigh(D5);
|
||||
error_count = 0;
|
||||
}
|
||||
matrix_scan_quantum();
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
BOOTLOADER = halfkay
|
||||
UNICODE_ENABLE = yes
|
||||
|
||||
250
keyboards/coseyfannitutti/romeo/config.h
Normal file
250
keyboards/coseyfannitutti/romeo/config.h
Normal file
@@ -0,0 +1,250 @@
|
||||
/*
|
||||
Copyright 2019 coseyfannitutti
|
||||
|
||||
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"
|
||||
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x4069
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER coseyfannitutti
|
||||
#define PRODUCT ROMEO
|
||||
#define DESCRIPTION staggered layout 40% keyboard assembled with only through hole components
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 4
|
||||
#define MATRIX_COLS 12
|
||||
|
||||
/*
|
||||
* 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)
|
||||
*
|
||||
*/
|
||||
|
||||
/* A Custom matrix.c is used to poll the port expander C6 shows that the pins are hardwired there */
|
||||
/* 0 1 2 3 4 5 6 7 8 9 10 11*/
|
||||
#define MATRIX_ROW_PINS { B1, B4, B3, B2 }
|
||||
#define MATRIX_COL_PINS { C5, C4, C3, D0, C2, D1, C1, C0, D4, B0, D7, D6 }
|
||||
#define UNUSED_PINS
|
||||
|
||||
/* COL2ROW, ROW2COL*/
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
#define NO_UART 1
|
||||
|
||||
/*
|
||||
* 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 BACKLIGHT_PIN B7
|
||||
// #define BACKLIGHT_BREATHING
|
||||
// #define BACKLIGHT_LEVELS 3
|
||||
|
||||
// #define RGB_DI_PIN E2
|
||||
// #ifdef RGB_DI_PIN
|
||||
// #define RGBLED_NUM 16
|
||||
// #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_ANIMATIONS
|
||||
// /*== 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
|
||||
// #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
|
||||
|
||||
/* number of backlight levels */
|
||||
|
||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||
#define LOCKING_SUPPORT_ENABLE
|
||||
/* Locking resynchronize hack */
|
||||
#define LOCKING_RESYNC_ENABLE
|
||||
|
||||
/* If defined, GRAVE_ESC will always act as ESC when CTRL is held.
|
||||
* This is userful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||
*/
|
||||
// #define GRAVE_ESC_CTRL_OVERRIDE
|
||||
|
||||
/*
|
||||
* Force NKRO
|
||||
*
|
||||
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||
* makefile for this to work.)
|
||||
*
|
||||
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||
* until the next keyboard reset.
|
||||
*
|
||||
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||
* fully operational during normal computer usage.
|
||||
*
|
||||
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||
* power-up.
|
||||
*
|
||||
*/
|
||||
//#define FORCE_NKRO
|
||||
|
||||
/*
|
||||
* Magic Key Options
|
||||
*
|
||||
* Magic keys are hotkey commands that allow control over firmware functions of
|
||||
* the keyboard. They are best used in combination with the HID Listen program,
|
||||
* found here: https://www.pjrc.com/teensy/hid_listen.html
|
||||
*
|
||||
* The options below allow the magic key functionality to be changed. This is
|
||||
* useful if your keyboard/keypad is missing keys and you want magic key support.
|
||||
*
|
||||
*/
|
||||
|
||||
/* key combination for magic key command */
|
||||
/* defined by default; to change, uncomment and set to the combination you want */
|
||||
// #define IS_COMMAND() (get_mods() == (MOD_BIT(KC_LSHIFT) | MOD_BIT(KC_RSHIFT)))
|
||||
|
||||
/* control how magic key switches layers */
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
|
||||
|
||||
/* override magic key keymap */
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
|
||||
//#define MAGIC_KEY_HELP H
|
||||
//#define MAGIC_KEY_HELP_ALT SLASH
|
||||
//#define MAGIC_KEY_DEBUG D
|
||||
//#define MAGIC_KEY_DEBUG_MATRIX X
|
||||
//#define MAGIC_KEY_DEBUG_KBD K
|
||||
//#define MAGIC_KEY_DEBUG_MOUSE M
|
||||
//#define MAGIC_KEY_VERSION V
|
||||
//#define MAGIC_KEY_STATUS S
|
||||
//#define MAGIC_KEY_CONSOLE C
|
||||
//#define MAGIC_KEY_LAYER0 0
|
||||
//#define MAGIC_KEY_LAYER0_ALT GRAVE
|
||||
//#define MAGIC_KEY_LAYER1 1
|
||||
//#define MAGIC_KEY_LAYER2 2
|
||||
//#define MAGIC_KEY_LAYER3 3
|
||||
//#define MAGIC_KEY_LAYER4 4
|
||||
//#define MAGIC_KEY_LAYER5 5
|
||||
//#define MAGIC_KEY_LAYER6 6
|
||||
//#define MAGIC_KEY_LAYER7 7
|
||||
//#define MAGIC_KEY_LAYER8 8
|
||||
//#define MAGIC_KEY_LAYER9 9
|
||||
//#define MAGIC_KEY_BOOTLOADER B
|
||||
//#define MAGIC_KEY_BOOTLOADER_ALT ESC
|
||||
//#define MAGIC_KEY_LOCK CAPS
|
||||
//#define MAGIC_KEY_EEPROM E
|
||||
//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
|
||||
//#define MAGIC_KEY_NKRO N
|
||||
//#define MAGIC_KEY_SLEEP_LED Z
|
||||
|
||||
/*
|
||||
* Feature disable options
|
||||
* These options are also useful to firmware size reduction.
|
||||
*/
|
||||
|
||||
/* disable debug print */
|
||||
//#define NO_DEBUG
|
||||
|
||||
/* disable print */
|
||||
//#define NO_PRINT
|
||||
|
||||
/* disable action features */
|
||||
//#define NO_ACTION_LAYER
|
||||
//#define NO_ACTION_TAPPING
|
||||
//#define NO_ACTION_ONESHOT
|
||||
//#define NO_ACTION_MACRO
|
||||
//#define NO_ACTION_FUNCTION
|
||||
|
||||
/*
|
||||
* MIDI options
|
||||
*/
|
||||
|
||||
/* Prevent use of disabled MIDI features in the keymap */
|
||||
//#define MIDI_ENABLE_STRICT 1
|
||||
|
||||
/* enable basic MIDI features:
|
||||
- MIDI notes can be sent when in Music mode is on
|
||||
*/
|
||||
//#define MIDI_BASIC
|
||||
|
||||
/* enable advanced MIDI features:
|
||||
- MIDI notes can be added to the keymap
|
||||
- Octave shift and transpose
|
||||
- Virtual sustain, portamento, and modulation wheel
|
||||
- etc.
|
||||
*/
|
||||
//#define MIDI_ADVANCED
|
||||
|
||||
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
||||
//#define MIDI_TONE_KEYCODE_OCTAVES 1
|
||||
|
||||
/*
|
||||
* HD44780 LCD Display Configuration
|
||||
*/
|
||||
/*
|
||||
#define LCD_LINES 2 //< number of visible lines of the display
|
||||
#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
|
||||
|
||||
#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
|
||||
|
||||
#if LCD_IO_MODE
|
||||
#define LCD_PORT PORTB //< port for the LCD lines
|
||||
#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
|
||||
#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
|
||||
#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
|
||||
#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
|
||||
#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
|
||||
#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
|
||||
#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
|
||||
#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
|
||||
#define LCD_RS_PORT LCD_PORT //< port for RS line
|
||||
#define LCD_RS_PIN 3 //< pin for RS line
|
||||
#define LCD_RW_PORT LCD_PORT //< port for RW line
|
||||
#define LCD_RW_PIN 2 //< pin for RW line
|
||||
#define LCD_E_PORT LCD_PORT //< port for Enable line
|
||||
#define LCD_E_PIN 1 //< pin for Enable line
|
||||
#endif
|
||||
*/
|
||||
|
||||
/* Bootmagic Lite key configuration
|
||||
#define BOOTMAGIC_LITE_ROW 0
|
||||
#define BOOTMAGIC_LITE_COLUMN 0
|
||||
*/
|
||||
21
keyboards/coseyfannitutti/romeo/info.json
Normal file
21
keyboards/coseyfannitutti/romeo/info.json
Normal file
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"keyboard_name": "ROMEO",
|
||||
"url": "https://github.com/coseyfannitutti/romeo",
|
||||
"maintainer": "coseyfannitutti",
|
||||
"width": 13,
|
||||
"height": 4,
|
||||
"layouts": {
|
||||
"LAYOUT_all": {
|
||||
"layout": [{"label":"1.5u", "x":0, "y":0, "w":1.5}, {"x":1.5, "y":0}, {"x":2.5, "y":0}, {"x":3.5, "y":0}, {"x":4.5, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":10.5, "y":0}, {"label":"1.5u", "x":11.5, "y":0, "w":1.5}, {"label":"1.75u", "x":0, "y":1, "w":1.75}, {"x":1.75, "y":1}, {"x":2.75, "y":1}, {"x":3.75, "y":1}, {"x":4.75, "y":1}, {"x":5.75, "y":1}, {"x":6.75, "y":1}, {"x":7.75, "y":1}, {"x":8.75, "y":1}, {"x":9.75, "y":1}, {"label":"2.25u", "x":10.75, "y":1, "w":2.25}, {"label":"1.25u", "x":0, "y":2, "w":1.25}, {"x":1.25, "y":2}, {"x":2.25, "y":2}, {"x":3.25, "y":2}, {"x":4.25, "y":2}, {"x":5.25, "y":2}, {"x":6.25, "y":2}, {"x":7.25, "y":2}, {"x":8.25, "y":2}, {"x":9.25, "y":2}, {"x":10.25, "y":2}, {"label":"1.75u", "x":11.25, "y":2, "w":1.75}, {"label":"1.25u", "x":0, "y":3, "w":1.25}, {"label":"1u", "x":1.25, "y":3}, {"label":"1.25u", "x":2.25, "y":3, "w":1.25}, {"label":"2.25u", "x":3.5, "y":3, "w":2.25}, {"label":"1u", "x":5.75, "y":3}, {"label":"2.75u", "x":6.75, "y":3, "w":2.75}, {"label":"1.25u", "x":9.5, "y":3, "w":1.25}, {"label":"1u", "x":10.75, "y":3}, {"label":"1.25u", "x":11.75, "y":3, "w":1.25}]
|
||||
},
|
||||
"LAYOUT_ansi_split_lshift": {
|
||||
"layout": [{"label":"1.5u", "x":0, "y":0, "w":1.5}, {"x":1.5, "y":0}, {"x":2.5, "y":0}, {"x":3.5, "y":0}, {"x":4.5, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":10.5, "y":0}, {"label":"1.5u", "x":11.5, "y":0, "w":1.5}, {"label":"1.75u", "x":0, "y":1, "w":1.75}, {"x":1.75, "y":1}, {"x":2.75, "y":1}, {"x":3.75, "y":1}, {"x":4.75, "y":1}, {"x":5.75, "y":1}, {"x":6.75, "y":1}, {"x":7.75, "y":1}, {"x":8.75, "y":1}, {"x":9.75, "y":1}, {"label":"2.25u", "x":10.75, "y":1, "w":2.25}, {"label":"1.25u", "x":0, "y":2, "w":1.25}, {"x":1.25, "y":2}, {"x":2.25, "y":2}, {"x":3.25, "y":2}, {"x":4.25, "y":2}, {"x":5.25, "y":2}, {"x":6.25, "y":2}, {"x":7.25, "y":2}, {"x":8.25, "y":2}, {"x":9.25, "y":2}, {"x":10.25, "y":2}, {"label":"1.75u", "x":11.25, "y":2, "w":1.75}, {"label":"1.25u", "x":0, "y":3, "w":1.25}, {"label":"1u", "x":1.25, "y":3}, {"label":"1u", "x":2.25, "y":3}, {"label":"6.25u", "x":3.25, "y":3, "w":6.25}, {"label":"1.25u", "x":9.5, "y":3, "w":1.25}, {"label":"1u", "x":10.75, "y":3}, {"label":"1.25u", "x":11.75, "y":3, "w":1.25}]
|
||||
},
|
||||
"LAYOUT_ansi_split_space": {
|
||||
"layout": [{"label":"1.5u", "x":0, "y":0, "w":1.5}, {"x":1.5, "y":0}, {"x":2.5, "y":0}, {"x":3.5, "y":0}, {"x":4.5, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":10.5, "y":0}, {"label":"1.5u", "x":11.5, "y":0, "w":1.5}, {"label":"1.75u", "x":0, "y":1, "w":1.75}, {"x":1.75, "y":1}, {"x":2.75, "y":1}, {"x":3.75, "y":1}, {"x":4.75, "y":1}, {"x":5.75, "y":1}, {"x":6.75, "y":1}, {"x":7.75, "y":1}, {"x":8.75, "y":1}, {"x":9.75, "y":1}, {"label":"2.25u", "x":10.75, "y":1, "w":2.25}, {"label":"2.25u", "x":0, "y":2, "w":2.25}, {"x":2.25, "y":2}, {"x":3.25, "y":2}, {"x":4.25, "y":2}, {"x":5.25, "y":2}, {"x":6.25, "y":2}, {"x":7.25, "y":2}, {"x":8.25, "y":2}, {"x":9.25, "y":2}, {"x":10.25, "y":2}, {"label":"1.75u", "x":11.25, "y":2, "w":1.75}, {"label":"1.25u", "x":0, "y":3, "w":1.25}, {"label":"1u", "x":1.25, "y":3}, {"label":"1.25u", "x":2.25, "y":3, "w":1.25}, {"label":"2.25u", "x":3.5, "y":3, "w":2.25}, {"label":"1u", "x":5.75, "y":3}, {"label":"2.75u", "x":6.75, "y":3, "w":2.75}, {"label":"1.25u", "x":9.5, "y":3, "w":1.25}, {"label":"1u", "x":10.75, "y":3}, {"label":"1.25u", "x":11.75, "y":3, "w":1.25}]
|
||||
},
|
||||
"LAYOUT_ansi_40": {
|
||||
"layout": [{"label":"1.5u", "x":0, "y":0, "w":1.5}, {"x":1.5, "y":0}, {"x":2.5, "y":0}, {"x":3.5, "y":0}, {"x":4.5, "y":0}, {"x":5.5, "y":0}, {"x":6.5, "y":0}, {"x":7.5, "y":0}, {"x":8.5, "y":0}, {"x":9.5, "y":0}, {"x":10.5, "y":0}, {"label":"1.5u", "x":11.5, "y":0, "w":1.5}, {"label":"1.75u", "x":0, "y":1, "w":1.75}, {"x":1.75, "y":1}, {"x":2.75, "y":1}, {"x":3.75, "y":1}, {"x":4.75, "y":1}, {"x":5.75, "y":1}, {"x":6.75, "y":1}, {"x":7.75, "y":1}, {"x":8.75, "y":1}, {"x":9.75, "y":1}, {"label":"2.25u", "x":10.75, "y":1, "w":2.25}, {"label":"2.25u", "x":0, "y":2, "w":2.25}, {"x":2.25, "y":2}, {"x":3.25, "y":2}, {"x":4.25, "y":2}, {"x":5.25, "y":2}, {"x":6.25, "y":2}, {"x":7.25, "y":2}, {"x":8.25, "y":2}, {"x":9.25, "y":2}, {"x":10.25, "y":2}, {"label":"1.75u", "x":11.25, "y":2, "w":1.75}, {"label":"1.25u", "x":0, "y":3, "w":1.25}, {"label":"1u", "x":1.25, "y":3}, {"label":"1u", "x":2.25, "y":3}, {"label":"6.25u", "x":3.25, "y":3, "w":6.25}, {"label":"1.25u", "x":9.5, "y":3, "w":1.25}, {"label":"1u", "x":10.75, "y":3}, {"label":"1.25u", "x":11.75, "y":3, "w":1.25}]
|
||||
}
|
||||
}
|
||||
}
|
||||
31
keyboards/coseyfannitutti/romeo/keymaps/default/keymap.c
Normal file
31
keyboards/coseyfannitutti/romeo/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,31 @@
|
||||
/* Copyright 2019 COSEYFANNITUTTI
|
||||
*
|
||||
* 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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_BSPC,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_QUOT,
|
||||
KC_LSFT, KC_SLSH, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_RSFT,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_SPC, KC_SPC, KC_RALT, MO(1), KC_RCTL ),
|
||||
|
||||
[1] = LAYOUT_all(
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, RESET,
|
||||
KC_VOLU, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT, KC_ENT,
|
||||
KC_VOLD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_MINS, KC_EQL, KC_SLSH, KC_TRNS,
|
||||
KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS )
|
||||
};
|
||||
13
keyboards/coseyfannitutti/romeo/readme.md
Normal file
13
keyboards/coseyfannitutti/romeo/readme.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# ROMEO
|
||||
|
||||
A staggered 40% that can be assembled with only through hole components, including usb type-c, and can also be completely covered with most GMK base kits
|
||||
|
||||
* Keyboard Maintainer: [coseyfannitutti](https://github.com/coseyfannitutti)
|
||||
* Hardware Supported: ROMEO, ATmega328P
|
||||
* Hardware Availability: [cftkb.com](http://www.cftkb.com), [GitHub](https://github.com/coseyfannitutti/romeo)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make coseyfannitutti/romeo:default
|
||||
|
||||
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).
|
||||
16
keyboards/coseyfannitutti/romeo/romeo.c
Normal file
16
keyboards/coseyfannitutti/romeo/romeo.c
Normal file
@@ -0,0 +1,16 @@
|
||||
/* Copyright 2019 coseyfannitutti
|
||||
*
|
||||
* 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 "romeo.h"
|
||||
76
keyboards/coseyfannitutti/romeo/romeo.h
Normal file
76
keyboards/coseyfannitutti/romeo/romeo.h
Normal file
@@ -0,0 +1,76 @@
|
||||
/* Copyright 2019 coseyfannitutti
|
||||
*
|
||||
* 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 _x_ KC_NO
|
||||
|
||||
/* This a shortcut to help you visually see your layout.
|
||||
*
|
||||
* The first section contains all of the arguments representing the physical
|
||||
* layout of the board and position of the keys.
|
||||
*
|
||||
* The second converts the arguments into a two-dimensional array which
|
||||
* represents the switch matrix.
|
||||
*/
|
||||
#define LAYOUT_all( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1B, \
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
|
||||
K30, K31, K32, K34, K36, K37, K39, K3A, K3B \
|
||||
) { \
|
||||
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, _x_, K1B, }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, }, \
|
||||
{ K30, K31, K32, _x_, K34, _x_, K36, K37, _x_, K39, K3A, K3B, } \
|
||||
}
|
||||
|
||||
#define LAYOUT_ansi_40( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1B, \
|
||||
K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
|
||||
K30, K31, K32, K36, K39, K3A, K3B \
|
||||
) { \
|
||||
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, _x_, K1B, }, \
|
||||
{ K20, _x_, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, }, \
|
||||
{ K30, K31, K32, _x_, _x_, _x_, K36, _x_, _x_, K39, K3A, K3B, } \
|
||||
}
|
||||
|
||||
#define LAYOUT_ansi_split_lshift( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1B, \
|
||||
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
|
||||
K30, K31, K32, K36, K39, K3A, K3B \
|
||||
) { \
|
||||
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, _x_, K1B, }, \
|
||||
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, }, \
|
||||
{ K30, K31, K32, _x_, _x_, _x_, K36, _x_, _x_, K39, K3A, K3B, } \
|
||||
}
|
||||
|
||||
#define LAYOUT_ansi_split_space( \
|
||||
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, \
|
||||
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1B, \
|
||||
K20, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, \
|
||||
K30, K31, K32, K36, K39, K3A, K3B \
|
||||
) { \
|
||||
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, }, \
|
||||
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, _x_, K1B, }, \
|
||||
{ K20, _x_, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, }, \
|
||||
{ K30, K31, K32, _x_, K34, _x_, K36, K37, _x_, K39, K3A, K3B, } \
|
||||
}
|
||||
37
keyboards/coseyfannitutti/romeo/rules.mk
Normal file
37
keyboards/coseyfannitutti/romeo/rules.mk
Normal file
@@ -0,0 +1,37 @@
|
||||
# MCU name
|
||||
MCU = atmega328p
|
||||
|
||||
# Bootloader selection
|
||||
# Teensy halfkay
|
||||
# Pro Micro caterina
|
||||
# Atmel DFU atmel-dfu
|
||||
# LUFA DFU lufa-dfu
|
||||
# QMK DFU qmk-dfu
|
||||
# ATmega32A bootloadHID
|
||||
# ATmega328P USBasp
|
||||
BOOTLOADER = USBasp
|
||||
|
||||
# disable debug code
|
||||
OPT_DEFS = -DDEBUG_LEVEL=0
|
||||
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = lite # Virtual DIP switch configuration
|
||||
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
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
NKRO_ENABLE = no # USB Nkey Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||
MIDI_ENABLE = no # MIDI support
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||
HD44780_ENABLE = no # Enable support for HD44780 based LCDs
|
||||
386
keyboards/coseyfannitutti/romeo/usbconfig.h
Normal file
386
keyboards/coseyfannitutti/romeo/usbconfig.h
Normal file
@@ -0,0 +1,386 @@
|
||||
/* Name: usbconfig.h
|
||||
* Project: V-USB, virtual USB port for Atmel's(r) AVR(r) microcontrollers
|
||||
* Author: Christian Starkjohann
|
||||
* Creation Date: 2005-04-01
|
||||
* Tabsize: 4
|
||||
* Copyright: (c) 2005 by OBJECTIVE DEVELOPMENT Software GmbH
|
||||
* License: GNU GPL v2 (see License.txt), GNU GPL v3 or proprietary (CommercialLicense.txt)
|
||||
* This Revision: $Id: usbconfig-prototype.h 785 2010-05-30 17:57:07Z cs $
|
||||
*/
|
||||
|
||||
#ifndef __usbconfig_h_included__
|
||||
#define __usbconfig_h_included__
|
||||
|
||||
#include "config.h"
|
||||
|
||||
/*
|
||||
General Description:
|
||||
This file is an example configuration (with inline documentation) for the USB
|
||||
driver. It configures V-USB for USB D+ connected to Port D bit 2 (which is
|
||||
also hardware interrupt 0 on many devices) and USB D- to Port D bit 4. You may
|
||||
wire the lines to any other port, as long as D+ is also wired to INT0 (or any
|
||||
other hardware interrupt, as long as it is the highest level interrupt, see
|
||||
section at the end of this file).
|
||||
*/
|
||||
|
||||
/* ---------------------------- Hardware Config ---------------------------- */
|
||||
|
||||
#define USB_CFG_IOPORTNAME D
|
||||
/* This is the port where the USB bus is connected. When you configure it to
|
||||
* "B", the registers PORTB, PINB and DDRB will be used.
|
||||
*/
|
||||
#define USB_CFG_DMINUS_BIT 3
|
||||
/* This is the bit number in USB_CFG_IOPORT where the USB D- line is connected.
|
||||
* This may be any bit in the port.
|
||||
*/
|
||||
#define USB_CFG_DPLUS_BIT 2
|
||||
/* This is the bit number in USB_CFG_IOPORT where the USB D+ line is connected.
|
||||
* This may be any bit in the port. Please note that D+ must also be connected
|
||||
* to interrupt pin INT0! [You can also use other interrupts, see section
|
||||
* "Optional MCU Description" below, or you can connect D- to the interrupt, as
|
||||
* it is required if you use the USB_COUNT_SOF feature. If you use D- for the
|
||||
* interrupt, the USB interrupt will also be triggered at Start-Of-Frame
|
||||
* markers every millisecond.]
|
||||
*/
|
||||
#define USB_CFG_CLOCK_KHZ (F_CPU/1000)
|
||||
/* Clock rate of the AVR in kHz. Legal values are 12000, 12800, 15000, 16000,
|
||||
* 16500, 18000 and 20000. The 12.8 MHz and 16.5 MHz versions of the code
|
||||
* require no crystal, they tolerate +/- 1% deviation from the nominal
|
||||
* frequency. All other rates require a precision of 2000 ppm and thus a
|
||||
* crystal!
|
||||
* Since F_CPU should be defined to your actual clock rate anyway, you should
|
||||
* not need to modify this setting.
|
||||
*/
|
||||
#define USB_CFG_CHECK_CRC 0
|
||||
/* Define this to 1 if you want that the driver checks integrity of incoming
|
||||
* data packets (CRC checks). CRC checks cost quite a bit of code size and are
|
||||
* currently only available for 18 MHz crystal clock. You must choose
|
||||
* USB_CFG_CLOCK_KHZ = 18000 if you enable this option.
|
||||
*/
|
||||
|
||||
/* ----------------------- Optional Hardware Config ------------------------ */
|
||||
|
||||
/* #define USB_CFG_PULLUP_IOPORTNAME D */
|
||||
/* If you connect the 1.5k pullup resistor from D- to a port pin instead of
|
||||
* V+, you can connect and disconnect the device from firmware by calling
|
||||
* the macros usbDeviceConnect() and usbDeviceDisconnect() (see usbdrv.h).
|
||||
* This constant defines the port on which the pullup resistor is connected.
|
||||
*/
|
||||
/* #define USB_CFG_PULLUP_BIT 4 */
|
||||
/* This constant defines the bit number in USB_CFG_PULLUP_IOPORT (defined
|
||||
* above) where the 1.5k pullup resistor is connected. See description
|
||||
* above for details.
|
||||
*/
|
||||
|
||||
/* --------------------------- Functional Range ---------------------------- */
|
||||
|
||||
#define USB_CFG_HAVE_INTRIN_ENDPOINT 1
|
||||
/* Define this to 1 if you want to compile a version with two endpoints: The
|
||||
* default control endpoint 0 and an interrupt-in endpoint (any other endpoint
|
||||
* number).
|
||||
*/
|
||||
#define USB_CFG_HAVE_INTRIN_ENDPOINT3 1
|
||||
/* Define this to 1 if you want to compile a version with three endpoints: The
|
||||
* default control endpoint 0, an interrupt-in endpoint 3 (or the number
|
||||
* configured below) and a catch-all default interrupt-in endpoint as above.
|
||||
* You must also define USB_CFG_HAVE_INTRIN_ENDPOINT to 1 for this feature.
|
||||
*/
|
||||
#define USB_CFG_EP3_NUMBER 3
|
||||
/* If the so-called endpoint 3 is used, it can now be configured to any other
|
||||
* endpoint number (except 0) with this macro. Default if undefined is 3.
|
||||
*/
|
||||
/* #define USB_INITIAL_DATATOKEN USBPID_DATA1 */
|
||||
/* The above macro defines the startup condition for data toggling on the
|
||||
* interrupt/bulk endpoints 1 and 3. Defaults to USBPID_DATA1.
|
||||
* Since the token is toggled BEFORE sending any data, the first packet is
|
||||
* sent with the oposite value of this configuration!
|
||||
*/
|
||||
#define USB_CFG_IMPLEMENT_HALT 0
|
||||
/* Define this to 1 if you also want to implement the ENDPOINT_HALT feature
|
||||
* for endpoint 1 (interrupt endpoint). Although you may not need this feature,
|
||||
* it is required by the standard. We have made it a config option because it
|
||||
* bloats the code considerably.
|
||||
*/
|
||||
#define USB_CFG_SUPPRESS_INTR_CODE 0
|
||||
/* Define this to 1 if you want to declare interrupt-in endpoints, but don't
|
||||
* want to send any data over them. If this macro is defined to 1, functions
|
||||
* usbSetInterrupt() and usbSetInterrupt3() are omitted. This is useful if
|
||||
* you need the interrupt-in endpoints in order to comply to an interface
|
||||
* (e.g. HID), but never want to send any data. This option saves a couple
|
||||
* of bytes in flash memory and the transmit buffers in RAM.
|
||||
*/
|
||||
#define USB_CFG_IS_SELF_POWERED 0
|
||||
/* Define this to 1 if the device has its own power supply. Set it to 0 if the
|
||||
* device is powered from the USB bus.
|
||||
*/
|
||||
#define USB_CFG_IMPLEMENT_FN_WRITE 1
|
||||
/* Set this to 1 if you want usbFunctionWrite() to be called for control-out
|
||||
* transfers. Set it to 0 if you don't need it and want to save a couple of
|
||||
* bytes.
|
||||
*/
|
||||
#define USB_CFG_IMPLEMENT_FN_READ 0
|
||||
/* Set this to 1 if you need to send control replies which are generated
|
||||
* "on the fly" when usbFunctionRead() is called. If you only want to send
|
||||
* data from a static buffer, set it to 0 and return the data from
|
||||
* usbFunctionSetup(). This saves a couple of bytes.
|
||||
*/
|
||||
#define USB_CFG_IMPLEMENT_FN_WRITEOUT 0
|
||||
/* Define this to 1 if you want to use interrupt-out (or bulk out) endpoints.
|
||||
* You must implement the function usbFunctionWriteOut() which receives all
|
||||
* interrupt/bulk data sent to any endpoint other than 0. The endpoint number
|
||||
* can be found in 'usbRxToken'.
|
||||
*/
|
||||
#define USB_CFG_HAVE_FLOWCONTROL 0
|
||||
/* Define this to 1 if you want flowcontrol over USB data. See the definition
|
||||
* of the macros usbDisableAllRequests() and usbEnableAllRequests() in
|
||||
* usbdrv.h.
|
||||
*/
|
||||
#define USB_CFG_DRIVER_FLASH_PAGE 0
|
||||
/* If the device has more than 64 kBytes of flash, define this to the 64 k page
|
||||
* where the driver's constants (descriptors) are located. Or in other words:
|
||||
* Define this to 1 for boot loaders on the ATMega128.
|
||||
*/
|
||||
#define USB_CFG_LONG_TRANSFERS 0
|
||||
/* Define this to 1 if you want to send/receive blocks of more than 254 bytes
|
||||
* in a single control-in or control-out transfer. Note that the capability
|
||||
* for long transfers increases the driver size.
|
||||
*/
|
||||
/* #define USB_RX_USER_HOOK(data, len) if(usbRxToken == (uchar)USBPID_SETUP) blinkLED(); */
|
||||
/* This macro is a hook if you want to do unconventional things. If it is
|
||||
* defined, it's inserted at the beginning of received message processing.
|
||||
* If you eat the received message and don't want default processing to
|
||||
* proceed, do a return after doing your things. One possible application
|
||||
* (besides debugging) is to flash a status LED on each packet.
|
||||
*/
|
||||
/* #define USB_RESET_HOOK(resetStarts) if(!resetStarts){hadUsbReset();} */
|
||||
/* This macro is a hook if you need to know when an USB RESET occurs. It has
|
||||
* one parameter which distinguishes between the start of RESET state and its
|
||||
* end.
|
||||
*/
|
||||
/* #define USB_SET_ADDRESS_HOOK() hadAddressAssigned(); */
|
||||
/* This macro (if defined) is executed when a USB SET_ADDRESS request was
|
||||
* received.
|
||||
*/
|
||||
#define USB_COUNT_SOF 0
|
||||
/* define this macro to 1 if you need the global variable "usbSofCount" which
|
||||
* counts SOF packets. This feature requires that the hardware interrupt is
|
||||
* connected to D- instead of D+.
|
||||
*/
|
||||
/* #ifdef __ASSEMBLER__
|
||||
* macro myAssemblerMacro
|
||||
* in YL, TCNT0
|
||||
* sts timer0Snapshot, YL
|
||||
* endm
|
||||
* #endif
|
||||
* #define USB_SOF_HOOK myAssemblerMacro
|
||||
* This macro (if defined) is executed in the assembler module when a
|
||||
* Start Of Frame condition is detected. It is recommended to define it to
|
||||
* the name of an assembler macro which is defined here as well so that more
|
||||
* than one assembler instruction can be used. The macro may use the register
|
||||
* YL and modify SREG. If it lasts longer than a couple of cycles, USB messages
|
||||
* immediately after an SOF pulse may be lost and must be retried by the host.
|
||||
* What can you do with this hook? Since the SOF signal occurs exactly every
|
||||
* 1 ms (unless the host is in sleep mode), you can use it to tune OSCCAL in
|
||||
* designs running on the internal RC oscillator.
|
||||
* Please note that Start Of Frame detection works only if D- is wired to the
|
||||
* interrupt, not D+. THIS IS DIFFERENT THAN MOST EXAMPLES!
|
||||
*/
|
||||
#define USB_CFG_CHECK_DATA_TOGGLING 0
|
||||
/* define this macro to 1 if you want to filter out duplicate data packets
|
||||
* sent by the host. Duplicates occur only as a consequence of communication
|
||||
* errors, when the host does not receive an ACK. Please note that you need to
|
||||
* implement the filtering yourself in usbFunctionWriteOut() and
|
||||
* usbFunctionWrite(). Use the global usbCurrentDataToken and a static variable
|
||||
* for each control- and out-endpoint to check for duplicate packets.
|
||||
*/
|
||||
#define USB_CFG_HAVE_MEASURE_FRAME_LENGTH 0
|
||||
/* define this macro to 1 if you want the function usbMeasureFrameLength()
|
||||
* compiled in. This function can be used to calibrate the AVR's RC oscillator.
|
||||
*/
|
||||
#define USB_USE_FAST_CRC 0
|
||||
/* The assembler module has two implementations for the CRC algorithm. One is
|
||||
* faster, the other is smaller. This CRC routine is only used for transmitted
|
||||
* messages where timing is not critical. The faster routine needs 31 cycles
|
||||
* per byte while the smaller one needs 61 to 69 cycles. The faster routine
|
||||
* may be worth the 32 bytes bigger code size if you transmit lots of data and
|
||||
* run the AVR close to its limit.
|
||||
*/
|
||||
|
||||
/* -------------------------- Device Description --------------------------- */
|
||||
|
||||
#define USB_CFG_VENDOR_ID (VENDOR_ID & 0xFF), ((VENDOR_ID >> 8) & 0xFF)
|
||||
/* USB vendor ID for the device, low byte first. If you have registered your
|
||||
* own Vendor ID, define it here. Otherwise you may use one of obdev's free
|
||||
* shared VID/PID pairs. Be sure to read USB-IDs-for-free.txt for rules!
|
||||
* *** IMPORTANT NOTE ***
|
||||
* This template uses obdev's shared VID/PID pair for Vendor Class devices
|
||||
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
|
||||
* the implications!
|
||||
*/
|
||||
#define USB_CFG_DEVICE_ID (PRODUCT_ID & 0xFF), ((PRODUCT_ID >> 8) & 0xFF)
|
||||
/* This is the ID of the product, low byte first. It is interpreted in the
|
||||
* scope of the vendor ID. If you have registered your own VID with usb.org
|
||||
* or if you have licensed a PID from somebody else, define it here. Otherwise
|
||||
* you may use one of obdev's free shared VID/PID pairs. See the file
|
||||
* USB-IDs-for-free.txt for details!
|
||||
* *** IMPORTANT NOTE ***
|
||||
* This template uses obdev's shared VID/PID pair for Vendor Class devices
|
||||
* with libusb: 0x16c0/0x5dc. Use this VID/PID pair ONLY if you understand
|
||||
* the implications!
|
||||
*/
|
||||
#define USB_CFG_DEVICE_VERSION (DEVICE_VER & 0xFF), ((DEVICE_VER >> 8) & 0xFF)
|
||||
/* Version number of the device: Minor number first, then major number.
|
||||
*/
|
||||
#define USB_CFG_VENDOR_NAME 'c','o','s','e','y','f','a','n','n','i','t','u','t','t','i'
|
||||
#define USB_CFG_VENDOR_NAME_LEN 15
|
||||
/* These two values define the vendor name returned by the USB device. The name
|
||||
* must be given as a list of characters under single quotes. The characters
|
||||
* are interpreted as Unicode (UTF-16) entities.
|
||||
* If you don't want a vendor name string, undefine these macros.
|
||||
* ALWAYS define a vendor name containing your Internet domain name if you use
|
||||
* obdev's free shared VID/PID pair. See the file USB-IDs-for-free.txt for
|
||||
* details.
|
||||
*/
|
||||
#define USB_CFG_DEVICE_NAME 'R','O','M','E','O'
|
||||
#define USB_CFG_DEVICE_NAME_LEN 5
|
||||
/* Same as above for the device name. If you don't want a device name, undefine
|
||||
* the macros. See the file USB-IDs-for-free.txt before you assign a name if
|
||||
* you use a shared VID/PID.
|
||||
*/
|
||||
#define USB_CFG_SERIAL_NUMBER '0'
|
||||
#define USB_CFG_SERIAL_NUMBER_LEN 1
|
||||
/* Same as above for the serial number. If you don't want a serial number,
|
||||
* undefine the macros.
|
||||
* It may be useful to provide the serial number through other means than at
|
||||
* compile time. See the section about descriptor properties below for how
|
||||
* to fine tune control over USB descriptors such as the string descriptor
|
||||
* for the serial number.
|
||||
*/
|
||||
#define USB_CFG_DEVICE_CLASS 0
|
||||
#define USB_CFG_DEVICE_SUBCLASS 0
|
||||
/* See USB specification if you want to conform to an existing device class.
|
||||
* Class 0xff is "vendor specific".
|
||||
*/
|
||||
#define USB_CFG_INTERFACE_CLASS 3 /* HID */
|
||||
#define USB_CFG_INTERFACE_SUBCLASS 1 /* Boot */
|
||||
#define USB_CFG_INTERFACE_PROTOCOL 1 /* Keyboard */
|
||||
/* See USB specification if you want to conform to an existing device class or
|
||||
* protocol. The following classes must be set at interface level:
|
||||
* HID class is 3, no subclass and protocol required (but may be useful!)
|
||||
* CDC class is 2, use subclass 2 and protocol 1 for ACM
|
||||
*/
|
||||
#define USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH 0
|
||||
/* Define this to the length of the HID report descriptor, if you implement
|
||||
* an HID device. Otherwise don't define it or define it to 0.
|
||||
* If you use this define, you must add a PROGMEM character array named
|
||||
* "usbHidReportDescriptor" to your code which contains the report descriptor.
|
||||
* Don't forget to keep the array and this define in sync!
|
||||
*/
|
||||
|
||||
/* #define USB_PUBLIC static */
|
||||
/* Use the define above if you #include usbdrv.c instead of linking against it.
|
||||
* This technique saves a couple of bytes in flash memory.
|
||||
*/
|
||||
|
||||
/* ------------------- Fine Control over USB Descriptors ------------------- */
|
||||
/* If you don't want to use the driver's default USB descriptors, you can
|
||||
* provide our own. These can be provided as (1) fixed length static data in
|
||||
* flash memory, (2) fixed length static data in RAM or (3) dynamically at
|
||||
* runtime in the function usbFunctionDescriptor(). See usbdrv.h for more
|
||||
* information about this function.
|
||||
* Descriptor handling is configured through the descriptor's properties. If
|
||||
* no properties are defined or if they are 0, the default descriptor is used.
|
||||
* Possible properties are:
|
||||
* + USB_PROP_IS_DYNAMIC: The data for the descriptor should be fetched
|
||||
* at runtime via usbFunctionDescriptor(). If the usbMsgPtr mechanism is
|
||||
* used, the data is in FLASH by default. Add property USB_PROP_IS_RAM if
|
||||
* you want RAM pointers.
|
||||
* + USB_PROP_IS_RAM: The data returned by usbFunctionDescriptor() or found
|
||||
* in static memory is in RAM, not in flash memory.
|
||||
* + USB_PROP_LENGTH(len): If the data is in static memory (RAM or flash),
|
||||
* the driver must know the descriptor's length. The descriptor itself is
|
||||
* found at the address of a well known identifier (see below).
|
||||
* List of static descriptor names (must be declared PROGMEM if in flash):
|
||||
* char usbDescriptorDevice[];
|
||||
* char usbDescriptorConfiguration[];
|
||||
* char usbDescriptorHidReport[];
|
||||
* char usbDescriptorString0[];
|
||||
* int usbDescriptorStringVendor[];
|
||||
* int usbDescriptorStringDevice[];
|
||||
* int usbDescriptorStringSerialNumber[];
|
||||
* Other descriptors can't be provided statically, they must be provided
|
||||
* dynamically at runtime.
|
||||
*
|
||||
* Descriptor properties are or-ed or added together, e.g.:
|
||||
* #define USB_CFG_DESCR_PROPS_DEVICE (USB_PROP_IS_RAM | USB_PROP_LENGTH(18))
|
||||
*
|
||||
* The following descriptors are defined:
|
||||
* USB_CFG_DESCR_PROPS_DEVICE
|
||||
* USB_CFG_DESCR_PROPS_CONFIGURATION
|
||||
* USB_CFG_DESCR_PROPS_STRINGS
|
||||
* USB_CFG_DESCR_PROPS_STRING_0
|
||||
* USB_CFG_DESCR_PROPS_STRING_VENDOR
|
||||
* USB_CFG_DESCR_PROPS_STRING_PRODUCT
|
||||
* USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER
|
||||
* USB_CFG_DESCR_PROPS_HID
|
||||
* USB_CFG_DESCR_PROPS_HID_REPORT
|
||||
* USB_CFG_DESCR_PROPS_UNKNOWN (for all descriptors not handled by the driver)
|
||||
*
|
||||
* Note about string descriptors: String descriptors are not just strings, they
|
||||
* are Unicode strings prefixed with a 2 byte header. Example:
|
||||
* int serialNumberDescriptor[] = {
|
||||
* USB_STRING_DESCRIPTOR_HEADER(6),
|
||||
* 'S', 'e', 'r', 'i', 'a', 'l'
|
||||
* };
|
||||
*/
|
||||
|
||||
#define USB_CFG_DESCR_PROPS_DEVICE 0
|
||||
#define USB_CFG_DESCR_PROPS_CONFIGURATION USB_PROP_IS_DYNAMIC
|
||||
//#define USB_CFG_DESCR_PROPS_CONFIGURATION 0
|
||||
#define USB_CFG_DESCR_PROPS_STRINGS 0
|
||||
#define USB_CFG_DESCR_PROPS_STRING_0 0
|
||||
#define USB_CFG_DESCR_PROPS_STRING_VENDOR 0
|
||||
#define USB_CFG_DESCR_PROPS_STRING_PRODUCT 0
|
||||
#define USB_CFG_DESCR_PROPS_STRING_SERIAL_NUMBER 0
|
||||
#define USB_CFG_DESCR_PROPS_HID USB_PROP_IS_DYNAMIC
|
||||
//#define USB_CFG_DESCR_PROPS_HID 0
|
||||
#define USB_CFG_DESCR_PROPS_HID_REPORT USB_PROP_IS_DYNAMIC
|
||||
//#define USB_CFG_DESCR_PROPS_HID_REPORT 0
|
||||
#define USB_CFG_DESCR_PROPS_UNKNOWN 0
|
||||
|
||||
#define usbMsgPtr_t unsigned short
|
||||
/* If usbMsgPtr_t is not defined, it defaults to 'uchar *'. We define it to
|
||||
* a scalar type here because gcc generates slightly shorter code for scalar
|
||||
* arithmetics than for pointer arithmetics. Remove this define for backward
|
||||
* type compatibility or define it to an 8 bit type if you use data in RAM only
|
||||
* and all RAM is below 256 bytes (tiny memory model in IAR CC).
|
||||
*/
|
||||
|
||||
/* ----------------------- Optional MCU Description ------------------------ */
|
||||
|
||||
/* The following configurations have working defaults in usbdrv.h. You
|
||||
* usually don't need to set them explicitly. Only if you want to run
|
||||
* the driver on a device which is not yet supported or with a compiler
|
||||
* which is not fully supported (such as IAR C) or if you use a differnt
|
||||
* interrupt than INT0, you may have to define some of these.
|
||||
*/
|
||||
/* #define USB_INTR_CFG MCUCR */
|
||||
/* #define USB_INTR_CFG_SET ((1 << ISC00) | (1 << ISC01)) */
|
||||
/* #define USB_INTR_CFG_CLR 0 */
|
||||
/* #define USB_INTR_ENABLE GIMSK */
|
||||
/* #define USB_INTR_ENABLE_BIT INT0 */
|
||||
/* #define USB_INTR_PENDING GIFR */
|
||||
/* #define USB_INTR_PENDING_BIT INTF0 */
|
||||
/* #define USB_INTR_VECTOR INT0_vect */
|
||||
|
||||
/* Set INT1 for D- falling edge to count SOF */
|
||||
/* #define USB_INTR_CFG EICRA */
|
||||
// #define USB_INTR_CFG_SET ((1 << ISC11) | (0 << ISC10))
|
||||
// /* #define USB_INTR_CFG_CLR 0 */
|
||||
// /* #define USB_INTR_ENABLE EIMSK */
|
||||
// #define USB_INTR_ENABLE_BIT INT1
|
||||
// /* #define USB_INTR_PENDING EIFR */
|
||||
// #define USB_INTR_PENDING_BIT INTF1
|
||||
// #define USB_INTR_VECTOR INT1_vect
|
||||
|
||||
#endif /* __usbconfig_h_included__ */
|
||||
@@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#pragma once
|
||||
|
||||
#define TAPPING_TERM 300
|
||||
#define TAPPING_TERM 200
|
||||
|
||||
#define MASTER_LEFT
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "pro_micro.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef USE_MATRIX_I2C
|
||||
# include "i2c.h"
|
||||
@@ -96,37 +96,38 @@ uint8_t matrix_cols(void)
|
||||
void tx_rx_leds_init(void)
|
||||
{
|
||||
#ifndef NO_DEBUG_LEDS
|
||||
TX_RX_LED_INIT;
|
||||
TXLED0;
|
||||
RXLED0;
|
||||
setPinOutput(B0);
|
||||
setPinOutput(D5);
|
||||
writePinHigh(B0);
|
||||
writePinHigh(D5);
|
||||
#endif
|
||||
}
|
||||
|
||||
void tx_led_on(void)
|
||||
{
|
||||
#ifndef NO_DEBUG_LEDS
|
||||
TXLED1;
|
||||
writePinLow(D5);
|
||||
#endif
|
||||
}
|
||||
|
||||
void tx_led_off(void)
|
||||
{
|
||||
#ifndef NO_DEBUG_LEDS
|
||||
TXLED0;
|
||||
writePinHigh(D5);
|
||||
#endif
|
||||
}
|
||||
|
||||
void rx_led_on(void)
|
||||
{
|
||||
#ifndef NO_DEBUG_LEDS
|
||||
RXLED1;
|
||||
writePinLow(B0);
|
||||
#endif
|
||||
}
|
||||
|
||||
void rx_led_off(void)
|
||||
{
|
||||
#ifndef NO_DEBUG_LEDS
|
||||
RXLED0;
|
||||
writePinHigh(B0);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0xD070
|
||||
#define VENDOR_ID 0x4250 // BP for Backprop
|
||||
#define PRODUCT_ID 0x4D4C // ML for Multi
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER Backprop Studio
|
||||
#define PRODUCT Doro67 Multi PCB
|
||||
|
||||
76
keyboards/doro67/multi/keymaps/via/keymap.c
Normal file
76
keyboards/doro67/multi/keymaps/via/keymap.c
Normal file
@@ -0,0 +1,76 @@
|
||||
/* Copyright 2019 ShadeDream
|
||||
*
|
||||
* 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] = {
|
||||
/* Default layer
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
|
||||
* │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bspace │Ins│
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
|
||||
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │Del│
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
|
||||
* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgU│
|
||||
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
|
||||
* │ LShift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │RShift│ ↑ │PgD│
|
||||
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
|
||||
* │LCtl│LGui│LAlt│ Space │RAlt│ Fn │ │ ← │ ↓ │ → │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
|
||||
*/
|
||||
[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_INS,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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_PGDN,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
/* Fn layer
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
|
||||
* │ ` │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
|
||||
* │BLTog│BLS│BL-│BL+│Rst│ │ │ │ │ │ │ │ │ │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
|
||||
*/
|
||||
[1] = LAYOUT_65_ansi_blocker(
|
||||
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, _______, _______,
|
||||
BL_TOGG, BL_STEP, BL_DEC, BL_INC, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[2] = LAYOUT_65_ansi_blocker(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[3] = LAYOUT_65_ansi_blocker(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
};
|
||||
43
keyboards/doro67/multi/keymaps/via/readme.md
Normal file
43
keyboards/doro67/multi/keymaps/via/readme.md
Normal file
@@ -0,0 +1,43 @@
|
||||
# Default Doro67 ANSI layout.
|
||||
|
||||
**THIS IS THE DEFAULT ANSI KEYMAP (AVAILABILITY: CHINA + INTERNATIONAL GB)**
|
||||
The "multi" directory includes keymaps for the multi-layout PCB, which supports ANSI, ISO, and multi (split backspace & non-blocker).
|
||||
The keymap you choose from the "multi" directory must correspond to the integrated plate option you chose.
|
||||
|
||||
The multi-layout PCB and RGB pcb were the only two options available to NON-china buyers.
|
||||
If you purchased an RGB PCB, please see the 'rgb' directory.
|
||||
|
||||
This is the default ANSI layout that comes flashed on the Doro67 multi PCB with
|
||||
the exception of adding backtick as it was not mapped.
|
||||
|
||||
Default layer:
|
||||
|
||||
```
|
||||
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
|
||||
│Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bspace │Ins│
|
||||
├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
|
||||
│ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │Del│
|
||||
├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
|
||||
│ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgU│
|
||||
├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
|
||||
│ LShift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │RShift│ ↑ │PgD│
|
||||
├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
|
||||
│LCtl│LGui│LAlt│ Space │RAlt│ Fn │ │ ← │ ↓ │ → │
|
||||
└────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
|
||||
```
|
||||
|
||||
Fn layer:
|
||||
|
||||
```
|
||||
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
|
||||
│ ` │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ │ │
|
||||
├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
|
||||
│BLTog│BLS│BL-│BL+│Rst│ │ │ │ │ │ │ │ │ │ │
|
||||
├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
|
||||
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
|
||||
│ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
|
||||
│ │ │ │ │ │ │ │ │ │ │
|
||||
└────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
|
||||
```
|
||||
2
keyboards/doro67/multi/keymaps/via/rules.mk
Normal file
2
keyboards/doro67/multi/keymaps/via/rules.mk
Normal file
@@ -0,0 +1,2 @@
|
||||
VIA_ENABLE = yes
|
||||
LTO_ENABLE = yes
|
||||
@@ -3,8 +3,8 @@
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x0000
|
||||
#define VENDOR_ID 0x4250 // BP for Backprop
|
||||
#define PRODUCT_ID 0x5245 // RE for Regular
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER Backprop Studio
|
||||
#define PRODUCT Doro67 Regular PCB
|
||||
@@ -28,4 +28,3 @@
|
||||
#define MATRIX_COL_PINS { B0, B1, B2, B3, D4, D6, D7, B4, B5, B6, C6, C7, F5, F6, F7 }
|
||||
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
|
||||
76
keyboards/doro67/regular/keymaps/via/keymap.c
Normal file
76
keyboards/doro67/regular/keymaps/via/keymap.c
Normal file
@@ -0,0 +1,76 @@
|
||||
/* Copyright 2019 MechMerlin
|
||||
*
|
||||
* 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] = {
|
||||
/* Default layer
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
|
||||
* │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bspace │Ins│
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
|
||||
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │Del│
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
|
||||
* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgU│
|
||||
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
|
||||
* │ LShift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │RShift│ ↑ │PgD│
|
||||
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
|
||||
* │LCtl│LGui│LAlt│ Space │RAlt│ Fn │ │ ← │ ↓ │ → │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
|
||||
*/
|
||||
[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_INS,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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_PGDN,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
/* Fn layer
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
|
||||
* │ ` │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
|
||||
* │ │ │ │ │Rst│ │ │ │ │ │ │ │ │ │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
|
||||
*/
|
||||
[1] = LAYOUT_65_ansi_blocker(
|
||||
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, _______, _______,
|
||||
_______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[2] = LAYOUT_65_ansi_blocker(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[3] = LAYOUT_65_ansi_blocker(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
};
|
||||
5
keyboards/doro67/regular/keymaps/via/readme.md
Normal file
5
keyboards/doro67/regular/keymaps/via/readme.md
Normal file
@@ -0,0 +1,5 @@
|
||||
# The default keymap for doro67
|
||||
|
||||
**THIS IS THE DEFAULT KEYMAP DIRECTORY (AVAILABILITY: CHINA GB ONLY)**
|
||||
If you are a non-china buyer, you probably have the multi PCB or rgb PCB.
|
||||
Please look at the "multi" and "rgb" readme files.
|
||||
2
keyboards/doro67/regular/keymaps/via/rules.mk
Normal file
2
keyboards/doro67/regular/keymaps/via/rules.mk
Normal file
@@ -0,0 +1,2 @@
|
||||
VIA_ENABLE = yes
|
||||
LTO_ENABLE = yes
|
||||
@@ -20,8 +20,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x0000
|
||||
#define VENDOR_ID 0x4250 // BP for Backprop
|
||||
#define PRODUCT_ID 0x5247 // RG for RGB
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER Backprop Studio
|
||||
#define PRODUCT Doro67 RGB PCB
|
||||
|
||||
77
keyboards/doro67/rgb/keymaps/via/keymap.c
Normal file
77
keyboards/doro67/rgb/keymaps/via/keymap.c
Normal file
@@ -0,0 +1,77 @@
|
||||
/* Copyright 2019 MechMerlin
|
||||
*
|
||||
* 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] = {
|
||||
/* Default layer
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
|
||||
* │Esc│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │Bspace │Ins│
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
|
||||
* │ Tab │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ [ │ ] │ \ │Del│
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
|
||||
* │ Caps │ A │ S │ D │ F │ G │ H │ J │ K │ L │ ; │ ' │ Enter │PgU│
|
||||
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
|
||||
* │ LShift │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ / │RShift│ ↑ │PgD│
|
||||
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
|
||||
* │LCtl│LGui│LAlt│ Space │RAlt│ Fn │ │ ← │ ↓ │ → │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
|
||||
*/
|
||||
[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_INS,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_DEL,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_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_PGDN,
|
||||
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_LEFT, KC_DOWN, KC_RGHT
|
||||
),
|
||||
|
||||
/* Fn layer
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┬───┐
|
||||
* │ ` │F1 │F2 │F3 │F4 │F5 │F6 │F7 │F8 │F9 │F10│F11│F12│ │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┼───┤
|
||||
* │BEST │URL│ │ │Rst│ │ │ │ │ │ │ │ │ │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┼───┤
|
||||
* │ RGB │Mo+│Hu+│Sa+│Va+│Sp+│ │ │ │ │ │ │ │ │
|
||||
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┬───┼───┤
|
||||
* │ │Mo-│Hu-│Sa-│Va-│Sp-│ │ │ │ │ │ │ │ │
|
||||
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬─┬───┼───┼───┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┘ └───┴───┴───┘
|
||||
*/
|
||||
[1] = LAYOUT_65_ansi_blocker(
|
||||
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, _______, _______,
|
||||
_______, _______, _______, _______, RESET, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
RGB_TOG, RGB_MOD, RGB_HUI, RGB_SAI, RGB_VAI, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, RGB_RMOD,RGB_HUD, RGB_SAD, RGB_VAD, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[2] = LAYOUT_65_ansi_blocker(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
[3] = LAYOUT_65_ansi_blocker(
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
};
|
||||
|
||||
7
keyboards/doro67/rgb/keymaps/via/readme.md
Normal file
7
keyboards/doro67/rgb/keymaps/via/readme.md
Normal file
@@ -0,0 +1,7 @@
|
||||
# The default keymap for rgb
|
||||
|
||||
**RGB PCB (AVAILABILITY: CHINA + INTERNATIONAL GB)**
|
||||
The "rgb" directory includes the keymap for the RGB PCB.
|
||||
|
||||
The multi-layout PCB and RGB pcb were the only two options available to NON-china buyers.
|
||||
If you purchased a non-rgb PCB, please see the 'multi' directory.
|
||||
2
keyboards/doro67/rgb/keymaps/via/rules.mk
Normal file
2
keyboards/doro67/rgb/keymaps/via/rules.mk
Normal file
@@ -0,0 +1,2 @@
|
||||
VIA_ENABLE = yes
|
||||
LTO_ENABLE = yes
|
||||
@@ -29,24 +29,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#include "serial.h"
|
||||
|
||||
// from pro_micro.h
|
||||
#define TX_RX_LED_INIT DDRD |= (1<<5), DDRB |= (1<<0)
|
||||
|
||||
#ifndef DISABLE_PROMICRO_LEDs
|
||||
#define TXLED0 PORTD |= (1<<5)
|
||||
#define TXLED1 PORTD &= ~(1<<5)
|
||||
#define RXLED0 PORTB |= (1<<0)
|
||||
#define RXLED1 PORTB &= ~(1<<0)
|
||||
#else
|
||||
#define TXLED0
|
||||
#define TXLED1
|
||||
#define RXLED0
|
||||
#define RXLED1
|
||||
#endif
|
||||
|
||||
#ifndef DEBOUNCE
|
||||
# define DEBOUNCE 5
|
||||
#endif
|
||||
@@ -108,11 +94,12 @@ void matrix_init(void) {
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
TX_RX_LED_INIT;
|
||||
setPinOutput(B0);
|
||||
setPinOutput(D5);
|
||||
|
||||
#ifdef DISABLE_PROMICRO_LEDs
|
||||
PORTD |= (1<<5);
|
||||
PORTB |= (1<<0);
|
||||
writePinHigh(B0);
|
||||
writePinHigh(D5);
|
||||
#endif
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
@@ -158,10 +145,14 @@ int serial_transaction(void) {
|
||||
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
|
||||
int ret=serial_update_buffers();
|
||||
if (ret ) {
|
||||
if(ret==2)RXLED1;
|
||||
#ifndef DISABLE_PROMICRO_LEDs
|
||||
if(ret==2) writePinLow(B0);
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
RXLED0;
|
||||
#ifndef DISABLE_PROMICRO_LEDs
|
||||
writePinHigh(B0);
|
||||
#endif
|
||||
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||
matrix[slaveOffset+i] = serial_slave_buffer[i];
|
||||
}
|
||||
@@ -197,8 +188,10 @@ uint8_t matrix_master_scan(void) {
|
||||
}
|
||||
|
||||
if( serial_transaction() ) {
|
||||
#ifndef DISABLE_PROMICRO_LEDs
|
||||
// turn on the indicator led when halves are disconnected
|
||||
TXLED1;
|
||||
writePinLow(D5);
|
||||
#endif
|
||||
|
||||
error_count++;
|
||||
|
||||
@@ -210,8 +203,10 @@ uint8_t matrix_master_scan(void) {
|
||||
}
|
||||
}
|
||||
} else {
|
||||
#ifndef DISABLE_PROMICRO_LEDs
|
||||
// turn off the indicator led on no error
|
||||
TXLED0;
|
||||
writePinHigh(D5);
|
||||
#endif
|
||||
error_count = 0;
|
||||
}
|
||||
matrix_scan_quantum();
|
||||
|
||||
@@ -29,8 +29,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "pro_micro.h"
|
||||
#include "config.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef USE_I2C
|
||||
# include "i2c.h"
|
||||
@@ -100,7 +100,8 @@ void matrix_init(void)
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
TX_RX_LED_INIT;
|
||||
setPinOutput(B0);
|
||||
setPinOutput(D5);
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
@@ -201,7 +202,7 @@ uint8_t matrix_scan(void)
|
||||
if( serial_transaction() ) {
|
||||
#endif
|
||||
// turn on the indicator led when halves are disconnected
|
||||
TXLED1;
|
||||
writePinLow(D5);
|
||||
|
||||
error_count++;
|
||||
|
||||
@@ -214,7 +215,7 @@ uint8_t matrix_scan(void)
|
||||
}
|
||||
} else {
|
||||
// turn off the indicator led on no error
|
||||
TXLED0;
|
||||
writePinHigh(D5);
|
||||
error_count = 0;
|
||||
}
|
||||
matrix_scan_quantum();
|
||||
|
||||
@@ -29,7 +29,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "pro_micro.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef USE_MATRIX_I2C
|
||||
# include "i2c.h"
|
||||
@@ -99,9 +99,10 @@ void matrix_init(void)
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
TX_RX_LED_INIT;
|
||||
TXLED0;
|
||||
RXLED0;
|
||||
setPinOutput(B0);
|
||||
setPinOutput(D5);
|
||||
writePinHigh(B0);
|
||||
writePinHigh(D5);
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
@@ -180,10 +181,10 @@ int serial_transaction(void) {
|
||||
int slaveOffset = (isLeftHand) ? (ROWS_PER_HAND) : 0;
|
||||
int ret=serial_update_buffers();
|
||||
if (ret ) {
|
||||
if(ret==2)RXLED1;
|
||||
if(ret==2) writePinLow(B0);
|
||||
return 1;
|
||||
}
|
||||
RXLED0;
|
||||
writePinHigh(B0);
|
||||
for (int i = 0; i < ROWS_PER_HAND; ++i) {
|
||||
matrix[slaveOffset+i] = serial_slave_buffer[i];
|
||||
}
|
||||
@@ -235,7 +236,7 @@ uint8_t matrix_master_scan(void) {
|
||||
if( serial_transaction() ) {
|
||||
#endif
|
||||
// turn on the indicator led when halves are disconnected
|
||||
TXLED1;
|
||||
writePinLow(D5);
|
||||
|
||||
error_count++;
|
||||
|
||||
@@ -248,7 +249,7 @@ uint8_t matrix_master_scan(void) {
|
||||
}
|
||||
} else {
|
||||
// turn off the indicator led on no error
|
||||
TXLED0;
|
||||
writePinHigh(D5);
|
||||
error_count = 0;
|
||||
}
|
||||
matrix_scan_quantum();
|
||||
|
||||
@@ -29,8 +29,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "pro_micro.h"
|
||||
#include "config.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef USE_MATRIX_I2C
|
||||
# include "i2c.h"
|
||||
@@ -100,7 +100,8 @@ void matrix_init(void)
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
TX_RX_LED_INIT;
|
||||
setPinOutput(B0);
|
||||
setPinOutput(D5);
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
@@ -201,7 +202,7 @@ uint8_t matrix_scan(void)
|
||||
if( serial_transaction() ) {
|
||||
#endif
|
||||
// turn on the indicator led when halves are disconnected
|
||||
TXLED1;
|
||||
writePinLow(D5);
|
||||
|
||||
error_count++;
|
||||
|
||||
@@ -214,7 +215,7 @@ uint8_t matrix_scan(void)
|
||||
}
|
||||
} else {
|
||||
// turn off the indicator led on no error
|
||||
TXLED0;
|
||||
writePinHigh(D5);
|
||||
error_count = 0;
|
||||
}
|
||||
matrix_scan_quantum();
|
||||
|
||||
@@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "pro_micro.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef USE_MATRIX_I2C
|
||||
# include "i2c.h"
|
||||
@@ -100,9 +100,10 @@ void matrix_init(void)
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
TX_RX_LED_INIT;
|
||||
TXLED0;
|
||||
RXLED0;
|
||||
setPinOutput(B0);
|
||||
setPinOutput(D5);
|
||||
writePinHigh(B0);
|
||||
writePinHigh(D5);
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
@@ -185,10 +186,10 @@ int serial_transaction(int master_changed) {
|
||||
int ret=serial_update_buffers();
|
||||
#endif
|
||||
if (ret ) {
|
||||
if(ret==2) RXLED1;
|
||||
if(ret==2) writePinLow(B0);
|
||||
return 1;
|
||||
}
|
||||
RXLED0;
|
||||
writePinHigh(B0);
|
||||
memcpy(&matrix[slaveOffset],
|
||||
(void *)serial_slave_buffer, sizeof(serial_slave_buffer));
|
||||
return 0;
|
||||
@@ -239,7 +240,7 @@ uint8_t matrix_master_scan(void) {
|
||||
if( serial_transaction(mchanged) ) {
|
||||
#endif
|
||||
// turn on the indicator led when halves are disconnected
|
||||
TXLED1;
|
||||
writePinLow(D5);
|
||||
|
||||
error_count++;
|
||||
|
||||
@@ -252,7 +253,7 @@ uint8_t matrix_master_scan(void) {
|
||||
}
|
||||
} else {
|
||||
// turn off the indicator led on no error
|
||||
TXLED0;
|
||||
writePinHigh(D5);
|
||||
error_count = 0;
|
||||
}
|
||||
matrix_scan_quantum();
|
||||
|
||||
@@ -9,7 +9,7 @@ MCU = atmega32u4
|
||||
# QMK DFU qmk-dfu
|
||||
# ATmega32A bootloadHID
|
||||
# ATmega328P USBasp
|
||||
BOOTLOADER = atmel-dfu
|
||||
BOOTLOADER = caterina
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#define TAPPING_TERM 300
|
||||
#define TAPPING_TERM 200
|
||||
|
||||
#ifdef OLED_DRIVER_ENABLE
|
||||
#define OLED_DISPLAY_128X64
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
/* Copyright 2020 ninjonas
|
||||
*
|
||||
* 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 "ninjonas.h"
|
||||
|
||||
#ifdef ENCODER_ENABLE
|
||||
void encoder_update_user(uint8_t index, bool clockwise) {
|
||||
if (index == 0) {
|
||||
switch (get_highest_layer(layer_state)) {
|
||||
case _LOWER:
|
||||
if (clockwise) {
|
||||
tap_code16(SGUI(KC_TAB));
|
||||
} else {
|
||||
tap_code16(LGUI(KC_TAB));
|
||||
}
|
||||
break;
|
||||
case _RAISE:
|
||||
if (clockwise) {
|
||||
tap_code(KC_PGUP);
|
||||
} else {
|
||||
tap_code(KC_PGDN);
|
||||
}
|
||||
break;
|
||||
case _ADJUST:
|
||||
if (clockwise) {
|
||||
rgblight_increase_hue();
|
||||
} else {
|
||||
rgblight_decrease_hue();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (clockwise) {
|
||||
tap_code(KC_BRIU);
|
||||
} else {
|
||||
tap_code(KC_BRID);
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else if (index == 1) {
|
||||
switch (get_highest_layer(layer_state)) {
|
||||
case _LOWER:
|
||||
if (clockwise) {
|
||||
tap_code(KC_UP);
|
||||
} else {
|
||||
tap_code(KC_DOWN);
|
||||
}
|
||||
break;
|
||||
case _RAISE:
|
||||
if (clockwise) {
|
||||
tap_code16(LCTL(KC_TAB));
|
||||
} else {
|
||||
tap_code16(LCTL(LSFT(KC_TAB)));
|
||||
}
|
||||
break;
|
||||
case _ADJUST:
|
||||
if (clockwise) {
|
||||
rgblight_increase_val();
|
||||
} else {
|
||||
rgblight_decrease_val();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
if (clockwise) {
|
||||
tap_code(KC_VOLU);
|
||||
} else {
|
||||
tap_code(KC_VOLD);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -24,7 +24,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// |--------+-----——-+——------+-——-----+——------+——-----| |------—+——------+——------+——------+——------+--------|
|
||||
_____________________QWERTY_L2______________________, _____________________QWERTY_R2______________________,
|
||||
// |--------+-----——-+——------+-——-----+——------+——-----+———-----------. ,——————————————+------—+——------+——------+——------+——------+--------|
|
||||
_____________________QWERTY_L3______________________,XXXXXXX,KC_LALT, T_CPNU,XXXXXXX,_____________________QWERTY_R3______________________,
|
||||
_____________________QWERTY_L3______________________,XXXXXXX,KC_LALT, T_CPAP,XXXXXXX,_____________________QWERTY_R3______________________,
|
||||
// `--------------------------+--------+--------+-------+-------+------| |------+-------+-------+--------+--------+--------+--------+--------'
|
||||
_____________MOD_LEFT_____________,T_LBRC, T_RBRC,________MOD_RIGHT________,KC_MUTE
|
||||
// `----------------------------------------' `----------------------------------------'
|
||||
@@ -36,7 +36,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// |--------+-----——-+——------+-——-----+——------+——-----| |------—+——------+——------+——------+——------+--------|
|
||||
_____________________DVORAK_L2______________________, _____________________DVORAK_R2______________________,
|
||||
// |--------+-----——-+——------+-——-----+——------+——-----+———-----------. ,——————————————+------—+——------+——------+——------+——------+--------|
|
||||
_____________________DVORAK_L3______________________,XXXXXXX,KC_LALT, T_CPNU,XXXXXXX,_____________________DVORAK_R3______________________,
|
||||
_____________________DVORAK_L3______________________,XXXXXXX,KC_LALT, T_CPAP,XXXXXXX,_____________________DVORAK_R3______________________,
|
||||
// `--------------------------+--------+--------+-------+-------+------| |------+-------+-------+--------+--------+--------+--------+--------'
|
||||
_____________MOD_LEFT_____________,T_LBRC, T_RBRC,________MOD_RIGHT________,KC_MUTE
|
||||
// `----------------------------------------' `----------------------------------------'
|
||||
@@ -48,7 +48,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// |--------+-----——-+——------+-——-----+——------+——-----| |------—+——------+——------+——------+——------+--------|
|
||||
_____________________COLEMAK_L2_____________________, _____________________COLEMAK_R2_____________________,
|
||||
// |--------+-----——-+——------+-——-----+——------+——-----+———-----------. ,——————————————+------—+——------+——------+——------+——------+--------|
|
||||
_____________________COLEMAK_L3_____________________,XXXXXXX,KC_LALT, T_CPNU,XXXXXXX,_____________________COLEMAK_R3_____________________,
|
||||
_____________________COLEMAK_L3_____________________,XXXXXXX,KC_LALT, T_CPAP,XXXXXXX,_____________________COLEMAK_R3_____________________,
|
||||
// `--------------------------+--------+--------+-------+-------+------| |------+-------+-------+--------+--------+--------+--------+--------'
|
||||
_____________MOD_LEFT_____________,T_LBRC, T_RBRC,________MOD_RIGHT________,KC_MUTE
|
||||
// `----------------------------------------' `----------------------------------------'
|
||||
|
||||
@@ -105,8 +105,12 @@ void oled_white_space(void){
|
||||
oled_write_P(PSTR(" "), false);
|
||||
}
|
||||
|
||||
void oled_slash_separator(void){
|
||||
oled_write_P(PSTR(" / "), false);
|
||||
}
|
||||
|
||||
void render_layout_state(void) {
|
||||
oled_write_P(PSTR("\nLayout: "), false);
|
||||
oled_write_P(PSTR("Layout: "), false);
|
||||
switch (biton32(default_layer_state)) {
|
||||
case _COLEMAK:
|
||||
oled_write_P(PSTR("Colemak"), false);
|
||||
@@ -121,6 +125,37 @@ void render_layout_state(void) {
|
||||
oled_write_ln_P(PSTR("Undefined"), false);
|
||||
}
|
||||
}
|
||||
#ifdef ENCODER_ENABLE
|
||||
static void render_encoder_state(void) {
|
||||
oled_write_P(PSTR("\nEnc: "), false);
|
||||
bool lower = layer_state_is(_LOWER) & !layer_state_is(_ADJUST);
|
||||
bool raise = layer_state_is(_RAISE) & !layer_state_is(_ADJUST);
|
||||
bool adjust = layer_state_is(_ADJUST);
|
||||
|
||||
if(lower){
|
||||
oled_write_P(PSTR("APPSW"), left_encoder_rotated);
|
||||
oled_slash_separator();
|
||||
oled_write_P(PSTR("UPDN"), right_encoder_rotated);
|
||||
} else if(raise){
|
||||
oled_write_P(PSTR("PGUD"), left_encoder_rotated);
|
||||
oled_slash_separator();
|
||||
oled_write_P(PSTR("TABSW"), right_encoder_rotated);
|
||||
} else if(adjust){
|
||||
oled_write_P(PSTR("RHUE"), left_encoder_rotated);
|
||||
oled_slash_separator();
|
||||
oled_write_P(PSTR("RBRI"), right_encoder_rotated);
|
||||
} else {
|
||||
oled_write_P(PSTR("BRI"), left_encoder_rotated);
|
||||
oled_slash_separator();
|
||||
oled_write_P(PSTR("VOL"), right_encoder_rotated);
|
||||
}
|
||||
|
||||
if (timer_elapsed(encoder_rotated_timer) > 200) {
|
||||
left_encoder_rotated = false;
|
||||
right_encoder_rotated = false;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
static void render_layer_state(void) {
|
||||
oled_write_P(PSTR("\nLayer:"), false);
|
||||
@@ -156,6 +191,9 @@ void render_mod_state(uint8_t modifiers) {
|
||||
static void render_status(void) {
|
||||
render_qmk_logo();
|
||||
render_layout_state();
|
||||
#ifdef ENCODER_ENABLE
|
||||
render_encoder_state();
|
||||
#endif
|
||||
render_layer_state();
|
||||
render_mod_state(get_mods()|get_oneshot_mods());
|
||||
}
|
||||
|
||||
@@ -3,5 +3,4 @@ ENCODER_ENABLE = yes # Enables the use of one or more encoders
|
||||
RGBLIGHT_ENABLE = yes # Enable keyboard RGB underglow
|
||||
LINK_TIME_OPTIMIZATION_ENABLE = yes
|
||||
|
||||
SRC += encoder.c \
|
||||
oled.c
|
||||
SRC += oled.c
|
||||
@@ -125,7 +125,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
XXXXXXX, XXXXXXX, _____________MOUSE_1______________, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, _____________MOUSE_2______________, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
__________________________________, __________________________________
|
||||
__________________________________, _______, _______, _______, K_CPRF
|
||||
),
|
||||
|
||||
/* ADJUST
|
||||
|
||||
@@ -1 +1,2 @@
|
||||
OLED_DRIVER_ENABLE = yes
|
||||
LINK_TIME_OPTIMIZATION_ENABLE = yes
|
||||
@@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "pro_micro.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef USE_MATRIX_I2C
|
||||
# include "i2c.h"
|
||||
@@ -101,9 +101,10 @@ void matrix_init(void)
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
TX_RX_LED_INIT;
|
||||
TXLED0;
|
||||
RXLED0;
|
||||
setPinOutput(B0);
|
||||
setPinOutput(D5);
|
||||
writePinHigh(B0);
|
||||
writePinHigh(D5);
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
@@ -188,10 +189,10 @@ int serial_transaction(int master_changed) {
|
||||
int ret=serial_update_buffers();
|
||||
#endif
|
||||
if (ret ) {
|
||||
if(ret==2) RXLED1;
|
||||
if(ret==2) writePinLow(B0);
|
||||
return 1;
|
||||
}
|
||||
RXLED0;
|
||||
writePinHigh(B0);
|
||||
memcpy(&matrix[slaveOffset],
|
||||
(void *)serial_slave_buffer, SERIAL_SLAVE_BUFFER_LENGTH);
|
||||
return 0;
|
||||
@@ -240,7 +241,7 @@ uint8_t matrix_master_scan(void) {
|
||||
if( serial_transaction(mchanged) ) {
|
||||
#endif
|
||||
// turn on the indicator led when halves are disconnected
|
||||
TXLED1;
|
||||
writePinLow(D5);
|
||||
|
||||
error_count++;
|
||||
|
||||
@@ -253,7 +254,7 @@ uint8_t matrix_master_scan(void) {
|
||||
}
|
||||
} else {
|
||||
// turn off the indicator led on no error
|
||||
TXLED0;
|
||||
writePinHigh(D5);
|
||||
error_count = 0;
|
||||
}
|
||||
matrix_scan_quantum();
|
||||
|
||||
@@ -27,5 +27,5 @@
|
||||
#define USE_SERIAL_PD2
|
||||
|
||||
#define TAPPING_FORCE_HOLD
|
||||
#define TAPPING_TERM 300
|
||||
#define TAPPING_TERM 200
|
||||
#define RETRO_TAPPPING
|
||||
@@ -31,7 +31,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
_____________________QWERTY_L3______________________, LT_RAI, LT_LOW, _____________________QWERTY_R3______________________,
|
||||
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
________MOD_LEFT_________, K_LAPP, K_RAPP, ________MOD_RIGHT________
|
||||
________MOD_LEFT_________, XXXXXXX, XXXXXXX, ________MOD_RIGHT________
|
||||
//`---------------------------------------' `---------------------------------------'
|
||||
),
|
||||
|
||||
@@ -43,7 +43,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
_____________________DVORAK_L3______________________, LT_RAI, LT_LOW, _____________________DVORAK_R3______________________,
|
||||
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
________MOD_LEFT_________, K_LAPP, K_RAPP, ________MOD_RIGHT________
|
||||
________MOD_LEFT_________, XXXXXXX, XXXXXXX, ________MOD_RIGHT________
|
||||
//`---------------------------------------' `---------------------------------------'
|
||||
),
|
||||
|
||||
@@ -55,7 +55,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
_____________________COLEMAK_L3_____________________, LT_RAI, LT_LOW, _____________________COLEMAK_R3_____________________,
|
||||
//|---------+---------+---------+---------+---------+---------+---------| |---------+---------+---------+---------+---------+---------+---------|
|
||||
________MOD_LEFT_________, K_LAPP, K_RAPP, ________MOD_RIGHT________
|
||||
________MOD_LEFT_________, XXXXXXX, XXXXXXX, ________MOD_RIGHT________
|
||||
//`---------------------------------------' `---------------------------------------'
|
||||
),
|
||||
|
||||
|
||||
252
keyboards/wallaby/config.h
Normal file
252
keyboards/wallaby/config.h
Normal file
@@ -0,0 +1,252 @@
|
||||
/*
|
||||
Copyright 2020 Koichi Katano
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x5967
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER Koichi Katano
|
||||
#define PRODUCT Wallaby
|
||||
#define DESCRIPTION A Tenkeyless PCB
|
||||
|
||||
/* 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 { B5, B4, B3, B2, B1, B0 }
|
||||
#define MATRIX_COL_PINS { D5, C7, C6, D4, D0, E6, F0, F1, F4, F5, F6, F7, D7, D6, D1, D2, D3 }
|
||||
#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 BACKLIGHT_PIN B7
|
||||
// #define BACKLIGHT_BREATHING
|
||||
// #define BACKLIGHT_LEVELS 3
|
||||
|
||||
// #define RGB_DI_PIN E2
|
||||
// #ifdef RGB_DI_PIN
|
||||
// #define RGBLED_NUM 16
|
||||
// #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_ANIMATIONS
|
||||
// /*== 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 userful for the Windows task manager shortcut (ctrl+shift+esc).
|
||||
*/
|
||||
// #define GRAVE_ESC_CTRL_OVERRIDE
|
||||
|
||||
/*
|
||||
* Force NKRO
|
||||
*
|
||||
* Force NKRO (nKey Rollover) to be enabled by default, regardless of the saved
|
||||
* state in the bootmagic EEPROM settings. (Note that NKRO must be enabled in the
|
||||
* makefile for this to work.)
|
||||
*
|
||||
* If forced on, NKRO can be disabled via magic key (default = LShift+RShift+N)
|
||||
* until the next keyboard reset.
|
||||
*
|
||||
* NKRO may prevent your keystrokes from being detected in the BIOS, but it is
|
||||
* fully operational during normal computer usage.
|
||||
*
|
||||
* For a less heavy-handed approach, enable NKRO via magic key (LShift+RShift+N)
|
||||
* or via bootmagic (hold SPACE+N while plugging in the keyboard). Once set by
|
||||
* bootmagic, NKRO mode will always be enabled until it is toggled again during a
|
||||
* power-up.
|
||||
*
|
||||
*/
|
||||
//#define FORCE_NKRO
|
||||
|
||||
/*
|
||||
* Magic Key Options
|
||||
*
|
||||
* Magic keys are hotkey commands that allow control over firmware functions of
|
||||
* the keyboard. They are best used in combination with the HID Listen program,
|
||||
* found here: https://www.pjrc.com/teensy/hid_listen.html
|
||||
*
|
||||
* The options below allow the magic key functionality to be changed. This is
|
||||
* useful if your keyboard/keypad is missing keys and you want magic key support.
|
||||
*
|
||||
*/
|
||||
|
||||
/* key combination for magic key command */
|
||||
/* defined by default; to change, uncomment and set to the combination you want */
|
||||
// #define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)
|
||||
|
||||
/* control how magic key switches layers */
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS true
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS true
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM false
|
||||
|
||||
/* override magic key keymap */
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_FKEYS
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_NKEYS
|
||||
//#define MAGIC_KEY_SWITCH_LAYER_WITH_CUSTOM
|
||||
//#define MAGIC_KEY_HELP H
|
||||
//#define MAGIC_KEY_HELP_ALT SLASH
|
||||
//#define MAGIC_KEY_DEBUG D
|
||||
//#define MAGIC_KEY_DEBUG_MATRIX X
|
||||
//#define MAGIC_KEY_DEBUG_KBD K
|
||||
//#define MAGIC_KEY_DEBUG_MOUSE M
|
||||
//#define MAGIC_KEY_VERSION V
|
||||
//#define MAGIC_KEY_STATUS S
|
||||
//#define MAGIC_KEY_CONSOLE C
|
||||
//#define MAGIC_KEY_LAYER0 0
|
||||
//#define MAGIC_KEY_LAYER0_ALT GRAVE
|
||||
//#define MAGIC_KEY_LAYER1 1
|
||||
//#define MAGIC_KEY_LAYER2 2
|
||||
//#define MAGIC_KEY_LAYER3 3
|
||||
//#define MAGIC_KEY_LAYER4 4
|
||||
//#define MAGIC_KEY_LAYER5 5
|
||||
//#define MAGIC_KEY_LAYER6 6
|
||||
//#define MAGIC_KEY_LAYER7 7
|
||||
//#define MAGIC_KEY_LAYER8 8
|
||||
//#define MAGIC_KEY_LAYER9 9
|
||||
//#define MAGIC_KEY_BOOTLOADER B
|
||||
//#define MAGIC_KEY_BOOTLOADER_ALT ESC
|
||||
//#define MAGIC_KEY_LOCK CAPS
|
||||
//#define MAGIC_KEY_EEPROM E
|
||||
//#define MAGIC_KEY_EEPROM_CLEAR BSPACE
|
||||
//#define MAGIC_KEY_NKRO N
|
||||
//#define MAGIC_KEY_SLEEP_LED Z
|
||||
|
||||
/*
|
||||
* 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
|
||||
|
||||
/* disable these deprecated features by default */
|
||||
#ifndef LINK_TIME_OPTIMIZATION_ENABLE
|
||||
#define NO_ACTION_MACRO
|
||||
#define NO_ACTION_FUNCTION
|
||||
#endif
|
||||
/*
|
||||
* MIDI options
|
||||
*/
|
||||
|
||||
/* Prevent use of disabled MIDI features in the keymap */
|
||||
//#define MIDI_ENABLE_STRICT 1
|
||||
|
||||
/* enable basic MIDI features:
|
||||
- MIDI notes can be sent when in Music mode is on
|
||||
*/
|
||||
//#define MIDI_BASIC
|
||||
|
||||
/* enable advanced MIDI features:
|
||||
- MIDI notes can be added to the keymap
|
||||
- Octave shift and transpose
|
||||
- Virtual sustain, portamento, and modulation wheel
|
||||
- etc.
|
||||
*/
|
||||
//#define MIDI_ADVANCED
|
||||
|
||||
/* override number of MIDI tone keycodes (each octave adds 12 keycodes and allocates 12 bytes) */
|
||||
//#define MIDI_TONE_KEYCODE_OCTAVES 1
|
||||
|
||||
/*
|
||||
* HD44780 LCD Display Configuration
|
||||
*/
|
||||
/*
|
||||
#define LCD_LINES 2 //< number of visible lines of the display
|
||||
#define LCD_DISP_LENGTH 16 //< visibles characters per line of the display
|
||||
|
||||
#define LCD_IO_MODE 1 //< 0: memory mapped mode, 1: IO port mode
|
||||
|
||||
#if LCD_IO_MODE
|
||||
#define LCD_PORT PORTB //< port for the LCD lines
|
||||
#define LCD_DATA0_PORT LCD_PORT //< port for 4bit data bit 0
|
||||
#define LCD_DATA1_PORT LCD_PORT //< port for 4bit data bit 1
|
||||
#define LCD_DATA2_PORT LCD_PORT //< port for 4bit data bit 2
|
||||
#define LCD_DATA3_PORT LCD_PORT //< port for 4bit data bit 3
|
||||
#define LCD_DATA0_PIN 4 //< pin for 4bit data bit 0
|
||||
#define LCD_DATA1_PIN 5 //< pin for 4bit data bit 1
|
||||
#define LCD_DATA2_PIN 6 //< pin for 4bit data bit 2
|
||||
#define LCD_DATA3_PIN 7 //< pin for 4bit data bit 3
|
||||
#define LCD_RS_PORT LCD_PORT //< port for RS line
|
||||
#define LCD_RS_PIN 3 //< pin for RS line
|
||||
#define LCD_RW_PORT LCD_PORT //< port for RW line
|
||||
#define LCD_RW_PIN 2 //< pin for RW line
|
||||
#define LCD_E_PORT LCD_PORT //< port for Enable line
|
||||
#define LCD_E_PIN 1 //< pin for Enable line
|
||||
#endif
|
||||
*/
|
||||
|
||||
/* Bootmagic Lite key configuration */
|
||||
// #define BOOTMAGIC_LITE_ROW 0
|
||||
// #define BOOTMAGIC_LITE_COLUMN 0
|
||||
101
keyboards/wallaby/info.json
Normal file
101
keyboards/wallaby/info.json
Normal file
@@ -0,0 +1,101 @@
|
||||
{
|
||||
"keyboard_name": "Wallaby",
|
||||
"url": "https://github.com/kkatano/wallaby",
|
||||
"maintainer": "Koichi Katano",
|
||||
"width": 18.26,
|
||||
"height": 6.47,
|
||||
"layouts": {
|
||||
"LAYOUT_tkl_ansi": {
|
||||
"key_count": 87,
|
||||
"layout": [
|
||||
{"label":"1", "x":0, "y":0},
|
||||
{"label":"2", "x":2, "y":0},
|
||||
{"label":"3", "x":3, "y":0},
|
||||
{"label":"4", "x":4, "y":0},
|
||||
{"label":"5", "x":5, "y":0},
|
||||
{"label":"6", "x":6.5, "y":0},
|
||||
{"label":"7", "x":7.5, "y":0},
|
||||
{"label":"8", "x":8.5, "y":0},
|
||||
{"label":"9", "x":9.5, "y":0},
|
||||
{"label":"10", "x":11, "y":0},
|
||||
{"label":"11", "x":12, "y":0},
|
||||
{"label":"12", "x":13, "y":0},
|
||||
{"label":"13", "x":14, "y":0},
|
||||
{"label":"14", "x":15.26, "y":0},
|
||||
{"label":"15", "x":16.26, "y":0},
|
||||
{"label":"16", "x":17.26, "y":0},
|
||||
{"label":"17", "x":0, "y":1.47},
|
||||
{"label":"18", "x":1, "y":1.47},
|
||||
{"label":"19", "x":2, "y":1.47},
|
||||
{"label":"20", "x":3, "y":1.47},
|
||||
{"label":"21", "x":4, "y":1.47},
|
||||
{"label":"22", "x":5, "y":1.47},
|
||||
{"label":"23", "x":6, "y":1.47},
|
||||
{"label":"24", "x":7, "y":1.47},
|
||||
{"label":"25", "x":8, "y":1.47},
|
||||
{"label":"26", "x":9, "y":1.47},
|
||||
{"label":"27", "x":10, "y":1.47},
|
||||
{"label":"28", "x":11, "y":1.47},
|
||||
{"label":"29", "x":12, "y":1.47},
|
||||
{"label":"30", "x":13, "y":1.47, "w":2},
|
||||
{"label":"31", "x":15.26, "y":1.47},
|
||||
{"label":"32", "x":16.26, "y":1.47},
|
||||
{"label":"33", "x":17.26, "y":1.47},
|
||||
{"label":"34", "x":0, "y":2.47, "w":1.5},
|
||||
{"label":"35", "x":1.5, "y":2.47},
|
||||
{"label":"36", "x":2.5, "y":2.47},
|
||||
{"label":"37", "x":3.5, "y":2.47},
|
||||
{"label":"38", "x":4.5, "y":2.47},
|
||||
{"label":"39", "x":5.5, "y":2.47},
|
||||
{"label":"40", "x":6.5, "y":2.47},
|
||||
{"label":"41", "x":7.5, "y":2.47},
|
||||
{"label":"42", "x":8.5, "y":2.47},
|
||||
{"label":"43", "x":9.5, "y":2.47},
|
||||
{"label":"44", "x":10.5, "y":2.47},
|
||||
{"label":"45", "x":11.5, "y":2.47},
|
||||
{"label":"46", "x":12.5, "y":2.47},
|
||||
{"label":"47", "x":13.5, "y":2.47, "w":1.5},
|
||||
{"label":"48", "x":15.26, "y":2.47},
|
||||
{"label":"49", "x":16.26, "y":2.47},
|
||||
{"label":"50", "x":17.26, "y":2.47},
|
||||
{"label":"51", "x":0, "y":3.47, "w":1.75},
|
||||
{"label":"52", "x":1.75, "y":3.47},
|
||||
{"label":"53", "x":2.75, "y":3.47},
|
||||
{"label":"54", "x":3.75, "y":3.47},
|
||||
{"label":"55", "x":4.75, "y":3.47},
|
||||
{"label":"56", "x":5.75, "y":3.47},
|
||||
{"label":"57", "x":6.75, "y":3.47},
|
||||
{"label":"58", "x":7.75, "y":3.47},
|
||||
{"label":"59", "x":8.75, "y":3.47},
|
||||
{"label":"60", "x":9.75, "y":3.47},
|
||||
{"label":"61", "x":10.75, "y":3.47},
|
||||
{"label":"62", "x":11.75, "y":3.47},
|
||||
{"label":"63", "x":12.75, "y":3.47, "w":2.25},
|
||||
{"label":"64", "x":0, "y":4.47, "w":2.25},
|
||||
{"label":"65", "x":2.25, "y":4.47},
|
||||
{"label":"66", "x":3.25, "y":4.47},
|
||||
{"label":"67", "x":4.25, "y":4.47},
|
||||
{"label":"68", "x":5.25, "y":4.47},
|
||||
{"label":"69", "x":6.25, "y":4.47},
|
||||
{"label":"70", "x":7.25, "y":4.47},
|
||||
{"label":"71", "x":8.25, "y":4.47},
|
||||
{"label":"72", "x":9.25, "y":4.47},
|
||||
{"label":"73", "x":10.25, "y":4.47},
|
||||
{"label":"74", "x":11.25, "y":4.47},
|
||||
{"label":"75", "x":12.25, "y":4.47, "w":2.75},
|
||||
{"label":"76", "x":16.26, "y":4.47},
|
||||
{"label":"77", "x":0, "y":5.47, "w":1.25},
|
||||
{"label":"78", "x":1.25, "y":5.47, "w":1.25},
|
||||
{"label":"79", "x":2.5, "y":5.47, "w":1.25},
|
||||
{"label":"80", "x":3.75, "y":5.47, "w":6.25},
|
||||
{"label":"81", "x":10, "y":5.47, "w":1.25},
|
||||
{"label":"82", "x":11.25, "y":5.47, "w":1.25},
|
||||
{"label":"83", "x":12.5, "y":5.47, "w":1.25},
|
||||
{"label":"84", "x":13.75, "y":5.47, "w":1.25},
|
||||
{"label":"85", "x":15.26, "y":5.47},
|
||||
{"label":"86", "x":16.26, "y":5.47},
|
||||
{"label":"87", "x":17.26, "y":5.47}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
27
keyboards/wallaby/keymaps/default/keymap.c
Normal file
27
keyboards/wallaby/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,27 @@
|
||||
/* Copyright 2020 Koichi Katano
|
||||
*
|
||||
* 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] = {
|
||||
LAYOUT_tkl_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_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_APP, KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT
|
||||
)
|
||||
};
|
||||
1
keyboards/wallaby/keymaps/default/readme.md
Normal file
1
keyboards/wallaby/keymaps/default/readme.md
Normal file
@@ -0,0 +1 @@
|
||||
# The default keymap for wallaby
|
||||
13
keyboards/wallaby/readme.md
Normal file
13
keyboards/wallaby/readme.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# wallaby
|
||||
|
||||
A Tenkeyless PCB for YMDK aluminium case compatible with Filco
|
||||
|
||||
* Keyboard Maintainer: [Koichi Katano](https://github.com/kkatano)
|
||||
* Hardware Supported: Wallaby PCB
|
||||
* Hardware Availability: https://github.com/kkatano/wallaby
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make wallaby:default
|
||||
|
||||
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).
|
||||
34
keyboards/wallaby/rules.mk
Normal file
34
keyboards/wallaby/rules.mk
Normal file
@@ -0,0 +1,34 @@
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
# Teensy halfkay
|
||||
# Pro Micro caterina
|
||||
# Atmel DFU atmel-dfu
|
||||
# LUFA DFU lufa-dfu
|
||||
# QMK DFU qmk-dfu
|
||||
# ATmega32A bootloadHID
|
||||
# ATmega328P USBasp
|
||||
BOOTLOADER = atmel-dfu
|
||||
|
||||
# Build Options
|
||||
# change yes to no to disable
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
|
||||
MOUSEKEY_ENABLE = yes # Mouse keys
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
CONSOLE_ENABLE = yes # Console for debug
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
NKRO_ENABLE = no # USB Nkey Rollover
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
RGBLIGHT_ENABLE = no # Enable keyboard RGB underglow
|
||||
MIDI_ENABLE = no # MIDI support
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
FAUXCLICKY_ENABLE = no # Use buzzer to emulate clicky switches
|
||||
HD44780_ENABLE = no # Enable support for HD44780 based LCDs
|
||||
|
||||
LAYOUTS = tkl_ansi
|
||||
25
keyboards/wallaby/wallaby.c
Normal file
25
keyboards/wallaby/wallaby.c
Normal file
@@ -0,0 +1,25 @@
|
||||
/* Copyright 2020 Koichi Katano
|
||||
*
|
||||
* 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 "wallaby.h"
|
||||
|
||||
bool led_update_kb(led_t led_state) {
|
||||
if (led_update_user(led_state)) {
|
||||
writePin(B6, led_state.caps_lock);
|
||||
writePin(B7, led_state.scroll_lock);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
44
keyboards/wallaby/wallaby.h
Normal file
44
keyboards/wallaby/wallaby.h
Normal file
@@ -0,0 +1,44 @@
|
||||
/* Copyright 2020 Koichi Katano
|
||||
*
|
||||
* 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"
|
||||
|
||||
/* This is a shortcut to help you visually see your layout.
|
||||
*
|
||||
* The first section contains all of the arguments representing the physical
|
||||
* layout of the board and position of the keys.
|
||||
*
|
||||
* The second converts the arguments into a two-dimensional array which
|
||||
* represents the switch matrix.
|
||||
*/
|
||||
#define LAYOUT_tkl_ansi( \
|
||||
k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, 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, k3D, \
|
||||
k40, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, k4F, \
|
||||
k50, k51, k52, k56, k5A, k5B, k5C, k5D, k5E, k5F, k5G \
|
||||
) \
|
||||
{ \
|
||||
{ k00, k01, k02, k03, k04, k05, k06, k07, k08, k09, k0A, k0B, k0C, KC_NO, 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, KC_NO, k3D, KC_NO, KC_NO, KC_NO }, \
|
||||
{ k40, KC_NO, k42, k43, k44, k45, k46, k47, k48, k49, k4A, k4B, k4C, KC_NO, KC_NO, k4F, KC_NO }, \
|
||||
{ k50, k51, k52, KC_NO, KC_NO, KC_NO, k56, KC_NO, KC_NO, KC_NO, k5A, k5B, k5C, k5D, k5E, k5F, k5G } \
|
||||
}
|
||||
127
keyboards/xd75/keymaps/neothefox/keymap.c
Normal file
127
keyboards/xd75/keymaps/neothefox/keymap.c
Normal file
@@ -0,0 +1,127 @@
|
||||
/* Copyright 2017 Wunder
|
||||
*
|
||||
* 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
|
||||
|
||||
// Layer shorthand
|
||||
#define LOWER MO(_LOWER)
|
||||
#define RAISE MO(_RAISE)
|
||||
#define SYSTEM MO(_SYSTEM)
|
||||
#define MPASTE LSFT(KC_INSERT)
|
||||
|
||||
enum xd75_layers {
|
||||
_QWERTY,
|
||||
_LOWER,
|
||||
_RAISE,
|
||||
_SYSTEM
|
||||
};
|
||||
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
/* QWERTY
|
||||
* .--------------------------------------------------------------------------------------------------------------------------------------.
|
||||
* | ESC | 1 | 2 | 3 | 4 | 5 | - | ` | = | 6 | 7 | 8 | 9 | 0 | BACKSP |
|
||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
|
||||
* | TAB | Q | W | E | R | T | [ | \ | ] | Y | U | I | O | P | ' |
|
||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
|
||||
* | CAP LK | A | S | D | F | G | INSERT | HOME | PG UP | H | J | K | L | ; | ENTER |
|
||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
|
||||
* | LSHIFT | Z | X | C | V | B | DEL | END | PG DN | N | M | , | . | / | RSHIFT |
|
||||
* |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
|
||||
* | LCTRL | GUI | MENU | ALT | LOWER | SPACE | SPACE | SPACE | SPACE | SPACE | RAISE | LEFT | DOWN | UP | RIGHT |
|
||||
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
||||
*/
|
||||
|
||||
[_QWERTY] = LAYOUT_ortho_5x15( /* QWERTY */
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_MINS, KC_GRV, KC_EQL, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_LBRC, KC_BSLS, KC_RBRC, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_QUOT,
|
||||
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_INS, KC_HOME, KC_PGUP, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_DEL, KC_END, KC_PGDN, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT,
|
||||
KC_LCTL, KC_LGUI, KC_MENU, KC_LALT, LOWER, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_SPC, RAISE, KC_LEFT, KC_DOWN, KC_UP, KC_RIGHT
|
||||
),
|
||||
|
||||
/* SYSTEM
|
||||
* .--------------------------------------------------------------------------------------------------------------------------------------.
|
||||
* | RESET | DEBUG | | | | | | | | | | | | | |
|
||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
* | | | | | | |RGB_TOG |RGB_VAI |RGB VAD | | | PASTE | PR SCR | SCR LK | PAUSE |
|
||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
* | | | | | | |RGB_MOD |RGB_SAI |RGB_HUI | | | | | | |
|
||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
* | | | | | | | |RGB_SAD |RGB_HUD | | | | | | |
|
||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
||||
*/
|
||||
|
||||
[_SYSTEM] = LAYOUT_ortho_5x15( /* FUNCTION */
|
||||
RESET, DEBUG, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, RGB_TOG, RGB_VAI, RGB_VAD, _______, _______, MPASTE, KC_PSCR, KC_SLCK, KC_PAUSE,
|
||||
_______, _______, _______, _______, _______, _______, RGB_MOD, RGB_SAI, RGB_HUI, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, RGB_SAD, RGB_HUD, _______, _______, _______, _______, _______, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______
|
||||
),
|
||||
|
||||
/* LOWER
|
||||
* .--------------------------------------------------------------------------------------------------------------------------------------.
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
|
||||
* | ~ | ! | @ | # | $ | % | | | | ^ | & | * | ( | ) | ' |
|
||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
|
||||
* | DELETE | F1 | F2 | F3 | F4 | F5 | | | | F6 | _ | + | { | } | | |
|
||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
|
||||
* | | F7 | F8 | F9 | F10 | F11 | | | | F12 | ISO ~ | ISO | | Home | End | |
|
||||
* |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
|
||||
* | | | | | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
||||
*/
|
||||
|
||||
[_LOWER] = LAYOUT_ortho_5x15( /* LOWER */
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
KC_TILD, KC_EXLM, KC_AT, KC_HASH, KC_DLR, KC_PERC, _______, _______, _______, KC_CIRC, KC_AMPR, KC_ASTR, KC_LPRN, KC_RPRN, KC_BSPC,
|
||||
KC_DEL, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, KC_F6, KC_UNDS, KC_PLUS, KC_LCBR, KC_RCBR, KC_PIPE,
|
||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, _______, KC_F12,S(KC_NUHS),S(KC_NUBS),KC_HOME,KC_END, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||
),
|
||||
|
||||
/* RAISE
|
||||
* .--------------------------------------------------------------------------------------------------------------------------------------.
|
||||
* | | | | | | | | | | | | | | | |
|
||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------|
|
||||
* | ` | 1 | 2 | 3 | 4 | 5 | | | | 6 | 7 | 8 | 9 | 0 | ' |
|
||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+-----------------+--------|
|
||||
* | | F1 | F2 | F3 | F4 | F5 | | | | F6 | - | = | [ | ] | \ |
|
||||
* |--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------+--------------------------+--------|
|
||||
* | | F7 | F8 | F9 | F10 | F11 | | | | F12 | ISO # | ISO / | Pg Up | Pg Dn | |
|
||||
* |--------+--------+--------+--------+--------+-----------------+--------+--------+--------+--------+-----------------+--------+--------|
|
||||
* | | | | | | | | | | | | Next | Vol- | Vol+ | Play |
|
||||
* '--------------------------------------------------------------------------------------------------------------------------------------'
|
||||
*/
|
||||
|
||||
[_RAISE] = LAYOUT_ortho_5x15( /* QWERTY */
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, _______, _______, _______, KC_6, KC_7, KC_8, KC_9, KC_0, KC_BSPC,
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, _______, _______, _______, KC_F6, KC_MINUS,KC_EQL, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
_______, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, _______, _______, _______, KC_F12, KC_NUHS, KC_NUBS, KC_PGUP, KC_PGDN, _______,
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, KC_MNXT, KC_VOLD, KC_VOLU, KC_MPLY
|
||||
)
|
||||
};
|
||||
|
||||
// SYSTEM layer toggle
|
||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
return update_tri_layer_state(state, _LOWER, _RAISE, _SYSTEM);
|
||||
}
|
||||
|
||||
1
keyboards/xd75/keymaps/neothefox/readme.md
Normal file
1
keyboards/xd75/keymaps/neothefox/readme.md
Normal file
@@ -0,0 +1 @@
|
||||
# A OLKB-like layout for XD75
|
||||
@@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "pro_micro.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef USE_MATRIX_I2C
|
||||
# include "i2c.h"
|
||||
@@ -102,9 +102,10 @@ void matrix_init(void)
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
TX_RX_LED_INIT;
|
||||
TXLED0;
|
||||
RXLED0;
|
||||
setPinOutput(B0);
|
||||
setPinOutput(D5);
|
||||
writePinHigh(D5);
|
||||
writePinHigh(B0);
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
@@ -189,10 +190,10 @@ int serial_transaction(int master_changed) {
|
||||
int ret=serial_update_buffers();
|
||||
#endif
|
||||
if (ret ) {
|
||||
if(ret==2) RXLED1;
|
||||
if(ret==2) writePinLow(B0);
|
||||
return 1;
|
||||
}
|
||||
RXLED0;
|
||||
writePinHigh(B0);
|
||||
memcpy(&matrix[slaveOffset],
|
||||
(void *)serial_slave_buffer, SERIAL_SLAVE_BUFFER_LENGTH);
|
||||
return 0;
|
||||
@@ -241,7 +242,7 @@ uint8_t matrix_master_scan(void) {
|
||||
if( serial_transaction(mchanged) ) {
|
||||
#endif
|
||||
// turn on the indicator led when halves are disconnected
|
||||
TXLED1;
|
||||
writePinLow(D5);
|
||||
|
||||
error_count++;
|
||||
|
||||
@@ -254,7 +255,7 @@ uint8_t matrix_master_scan(void) {
|
||||
}
|
||||
} else {
|
||||
// turn off the indicator led on no error
|
||||
TXLED0;
|
||||
writePinHigh(D5);
|
||||
error_count = 0;
|
||||
}
|
||||
matrix_scan_quantum();
|
||||
|
||||
@@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "pro_micro.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef USE_MATRIX_I2C
|
||||
# include "i2c.h"
|
||||
@@ -102,9 +102,10 @@ void matrix_init(void)
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
TX_RX_LED_INIT;
|
||||
TXLED0;
|
||||
RXLED0;
|
||||
setPinOutput(B0);
|
||||
setPinOutput(D5);
|
||||
writePinHigh(D5);
|
||||
writePinHigh(B0);
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
@@ -189,10 +190,10 @@ int serial_transaction(int master_changed) {
|
||||
int ret=serial_update_buffers();
|
||||
#endif
|
||||
if (ret ) {
|
||||
if(ret==2) RXLED1;
|
||||
if(ret==2) writePinLow(B0);
|
||||
return 1;
|
||||
}
|
||||
RXLED0;
|
||||
writePinHigh(B0);
|
||||
memcpy(&matrix[slaveOffset],
|
||||
(void *)serial_slave_buffer, sizeof(serial_slave_buffer));
|
||||
return 0;
|
||||
@@ -240,7 +241,7 @@ uint8_t matrix_master_scan(void) {
|
||||
if( serial_transaction(mchanged) ) {
|
||||
#endif
|
||||
// turn on the indicator led when halves are disconnected
|
||||
TXLED1;
|
||||
writePinLow(D5);
|
||||
|
||||
error_count++;
|
||||
|
||||
@@ -253,7 +254,7 @@ uint8_t matrix_master_scan(void) {
|
||||
}
|
||||
} else {
|
||||
// turn off the indicator led on no error
|
||||
TXLED0;
|
||||
writePinHigh(D5);
|
||||
error_count = 0;
|
||||
}
|
||||
matrix_scan_quantum();
|
||||
|
||||
@@ -30,7 +30,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#include "util.h"
|
||||
#include "matrix.h"
|
||||
#include "split_util.h"
|
||||
#include "pro_micro.h"
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef USE_MATRIX_I2C
|
||||
# include "i2c.h"
|
||||
@@ -102,9 +102,10 @@ void matrix_init(void)
|
||||
unselect_rows();
|
||||
init_cols();
|
||||
|
||||
TX_RX_LED_INIT;
|
||||
TXLED0;
|
||||
RXLED0;
|
||||
setPinOutput(B0);
|
||||
setPinOutput(D5);
|
||||
writePinHigh(B0);
|
||||
writePinHigh(D5);
|
||||
|
||||
// initialize matrix state: all keys off
|
||||
for (uint8_t i=0; i < MATRIX_ROWS; i++) {
|
||||
@@ -189,10 +190,10 @@ int serial_transaction(int master_changed) {
|
||||
int ret=serial_update_buffers();
|
||||
#endif
|
||||
if (ret ) {
|
||||
if(ret==2) RXLED1;
|
||||
if(ret==2) writePinLow(B0);
|
||||
return 1;
|
||||
}
|
||||
RXLED0;
|
||||
writePinHigh(B0);
|
||||
memcpy(&matrix[slaveOffset],
|
||||
(void *)serial_slave_buffer, sizeof(serial_slave_buffer));
|
||||
return 0;
|
||||
@@ -240,7 +241,7 @@ uint8_t matrix_master_scan(void) {
|
||||
if( serial_transaction(mchanged) ) {
|
||||
#endif
|
||||
// turn on the indicator led when halves are disconnected
|
||||
TXLED1;
|
||||
writePinLow(D5);
|
||||
|
||||
error_count++;
|
||||
|
||||
@@ -253,7 +254,7 @@ uint8_t matrix_master_scan(void) {
|
||||
}
|
||||
} else {
|
||||
// turn off the indicator led on no error
|
||||
TXLED0;
|
||||
writePinHigh(D5);
|
||||
error_count = 0;
|
||||
}
|
||||
matrix_scan_quantum();
|
||||
|
||||
@@ -24,17 +24,17 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
|
||||
KC_LSFT,KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM,KC_DOT, KC_SLSH,KC_ENT,
|
||||
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
|
||||
KC_LCTL,KC_LGUI,KC_LALT,KC_RALT,LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT,KC_DOWN,KC_UP, KC_RGHT
|
||||
KC_LCTL,KC_LGUI,KC_LALT,KC_DEL, LOWER, KC_SPC, KC_SPC, RAISE, KC_LEFT,KC_DOWN,KC_UP, KC_RGHT
|
||||
// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
|
||||
),
|
||||
|
||||
[_LOWER] = LAYOUT_ortho_4x12 (
|
||||
// ┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, _______,
|
||||
_______,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_LBRC,KC_RBRC,KC_BSLS,KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R,_______,_______,
|
||||
_______,KC_MINS,KC_EQL, KC_LBRC,KC_RBRC,KC_BSLS,KC_GRV, _______,_______,_______,_______,_______,
|
||||
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
|
||||
_______,KC_UNDS,KC_PLUS,KC_LCBR,KC_RCBR,KC_PIPE,KC_BTN1,KC_BTN2,_______,_______,_______,_______,
|
||||
_______,KC_UNDS,KC_PLUS,KC_LCBR,KC_RCBR,KC_PIPE,KC_TILD,_______,_______,_______,_______,_______,
|
||||
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
|
||||
_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______,_______
|
||||
// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
|
||||
@@ -42,13 +42,13 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
[_RAISE] = LAYOUT_ortho_4x12 (
|
||||
// ┌───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┬───────┐
|
||||
KC_TILD,KC_EXLM,KC_AT, KC_HASH,KC_DLR, KC_PERC,KC_CIRC,KC_AMPR,KC_ASTR,KC_LPRN,KC_RPRN,KC_DEL,
|
||||
_______,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, _______,
|
||||
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
|
||||
KC_CAPS,KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_MINS,KC_EQL, KC_LBRC,KC_RBRC,KC_BSLS,
|
||||
_______,KC_F11, KC_F12, _______,_______,_______,KC_HOME,KC_PGUP,_______,_______,_______,_______,
|
||||
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
|
||||
_______,KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_UNDS,KC_PLUS,KC_LCBR,KC_RCBR,KC_PIPE,
|
||||
_______,_______,_______,KC_CAPS,_______,KC_PGDN,KC_END, KC_PGDN,_______,KC_BTN1,KC_BTN2,_______,
|
||||
// ├───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┼───────┤
|
||||
_______,_______,_______,_______,TGLOWER,_______,_______,_______,KC_HOME,KC_PGDN,KC_PGUP, KC_END
|
||||
_______,_______,_______,_______,TGLOWER,_______,_______,_______,KC_MS_L,KC_MS_D,KC_MS_U,KC_MS_R
|
||||
// └───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┴───────┘
|
||||
),
|
||||
|
||||
|
||||
@@ -2,6 +2,8 @@
|
||||
|
||||
We list each subcommand here explicitly because all the reliable ways of searching for modules are slow and delay startup.
|
||||
"""
|
||||
from milc import cli
|
||||
|
||||
from . import cformat
|
||||
from . import compile
|
||||
from . import config
|
||||
@@ -16,3 +18,6 @@ from . import kle2json
|
||||
from . import new
|
||||
from . import pyformat
|
||||
from . import pytest
|
||||
|
||||
if not hasattr(cli, 'config_source'):
|
||||
cli.log.warning("Your QMK CLI is out of date. Please upgrade with `pip3 install --upgrade qmk` or by using your package manager.")
|
||||
|
||||
@@ -8,13 +8,17 @@ from argparse import FileType
|
||||
from milc import cli
|
||||
|
||||
import qmk.path
|
||||
from qmk.commands import compile_configurator_json, create_make_command, find_keyboard_keymap, parse_configurator_json
|
||||
from qmk.decorators import automagic_keyboard, automagic_keymap
|
||||
from qmk.commands import compile_configurator_json, create_make_command, parse_configurator_json
|
||||
|
||||
|
||||
@cli.argument('filename', nargs='?', arg_only=True, type=FileType('r'), help='The configurator export to compile')
|
||||
@cli.argument('-kb', '--keyboard', help='The keyboard to build a firmware for. Ignored when a configurator export is supplied.')
|
||||
@cli.argument('-km', '--keymap', help='The keymap to build a firmware for. Ignored when a configurator export is supplied.')
|
||||
@cli.argument('-n', '--dry-run', arg_only=True, action='store_true', help="Don't actually build, just show the make command to be run.")
|
||||
@cli.subcommand('Compile a QMK Firmware.')
|
||||
@automagic_keyboard
|
||||
@automagic_keymap
|
||||
def compile(cli):
|
||||
"""Compile a QMK Firmware.
|
||||
|
||||
@@ -22,8 +26,10 @@ def compile(cli):
|
||||
|
||||
If a keyboard and keymap are provided this command will build a firmware based on that.
|
||||
"""
|
||||
command = None
|
||||
|
||||
if cli.args.filename:
|
||||
# If a configurator JSON was provided skip straight to compiling it
|
||||
# If a configurator JSON was provided generate a keymap and compile it
|
||||
# FIXME(skullydazed): add code to check and warn if the keymap already exists when compiling a json keymap.
|
||||
user_keymap = parse_configurator_json(cli.args.filename)
|
||||
keymap_path = qmk.path.keymap(user_keymap['keyboard'])
|
||||
@@ -32,16 +38,23 @@ def compile(cli):
|
||||
cli.log.info('Wrote keymap to {fg_cyan}%s/%s/keymap.c', keymap_path, user_keymap['keymap'])
|
||||
|
||||
else:
|
||||
# Perform the action the user specified
|
||||
user_keyboard, user_keymap = find_keyboard_keymap()
|
||||
if user_keyboard and user_keymap:
|
||||
if cli.config.compile.keyboard and cli.config.compile.keymap:
|
||||
# Generate the make command for a specific keyboard/keymap.
|
||||
command = create_make_command(user_keyboard, user_keymap)
|
||||
command = create_make_command(cli.config.compile.keyboard, cli.config.compile.keymap)
|
||||
|
||||
else:
|
||||
cli.log.error('You must supply a configurator export, both `--keyboard` and `--keymap`, or be in a directory for a keyboard or keymap.')
|
||||
cli.echo('usage: qmk compile [-h] [-b] [-kb KEYBOARD] [-km KEYMAP] [filename]')
|
||||
return False
|
||||
elif not cli.config.compile.keyboard:
|
||||
cli.log.error('Could not determine keyboard!')
|
||||
elif not cli.config.compile.keymap:
|
||||
cli.log.error('Could not determine keymap!')
|
||||
|
||||
cli.log.info('Compiling keymap with {fg_cyan}%s\n\n', ' '.join(command))
|
||||
subprocess.run(command)
|
||||
# Compile the firmware, if we're able to
|
||||
if command:
|
||||
cli.log.info('Compiling keymap with {fg_cyan}%s', ' '.join(command))
|
||||
if not cli.args.dry_run:
|
||||
cli.echo('\n')
|
||||
subprocess.run(command)
|
||||
|
||||
else:
|
||||
cli.log.error('You must supply a configurator export, both `--keyboard` and `--keymap`, or be in a directory for a keyboard or keymap.')
|
||||
cli.echo('usage: qmk compile [-h] [-b] [-kb KEYBOARD] [-km KEYMAP] [filename]')
|
||||
return False
|
||||
|
||||
@@ -6,9 +6,11 @@ A bootloader must be specified.
|
||||
import subprocess
|
||||
from argparse import FileType
|
||||
|
||||
import qmk.path
|
||||
from milc import cli
|
||||
from qmk.commands import compile_configurator_json, create_make_command, find_keyboard_keymap, parse_configurator_json
|
||||
|
||||
import qmk.path
|
||||
from qmk.decorators import automagic_keyboard, automagic_keymap
|
||||
from qmk.commands import compile_configurator_json, create_make_command, parse_configurator_json
|
||||
|
||||
|
||||
def print_bootloader_help():
|
||||
@@ -28,12 +30,15 @@ def print_bootloader_help():
|
||||
cli.echo('For more info, visit https://docs.qmk.fm/#/flashing')
|
||||
|
||||
|
||||
@cli.argument('-bl', '--bootloader', default='flash', help='The flash command, corresponding to qmk\'s make options of bootloaders.')
|
||||
@cli.argument('filename', nargs='?', arg_only=True, type=FileType('r'), help='The configurator export JSON to compile.')
|
||||
@cli.argument('-b', '--bootloaders', action='store_true', help='List the available bootloaders.')
|
||||
@cli.argument('-bl', '--bootloader', default='flash', help='The flash command, corresponding to qmk\'s make options of bootloaders.')
|
||||
@cli.argument('-km', '--keymap', help='The keymap to build a firmware for. Use this if you dont have a configurator file. Ignored when a configurator file is supplied.')
|
||||
@cli.argument('-kb', '--keyboard', help='The keyboard to build a firmware for. Use this if you dont have a configurator file. Ignored when a configurator file is supplied.')
|
||||
@cli.argument('-b', '--bootloaders', action='store_true', help='List the available bootloaders.')
|
||||
@cli.argument('-n', '--dry-run', arg_only=True, action='store_true', help="Don't actually build, just show the make command to be run.")
|
||||
@cli.subcommand('QMK Flash.')
|
||||
@automagic_keyboard
|
||||
@automagic_keymap
|
||||
def flash(cli):
|
||||
"""Compile and or flash QMK Firmware or keyboard/layout
|
||||
|
||||
@@ -42,12 +47,13 @@ def flash(cli):
|
||||
|
||||
If no file is supplied, keymap and keyboard are expected.
|
||||
|
||||
If bootloader is omitted, the one according to the rules.mk will be used.
|
||||
|
||||
If bootloader is omitted the make system will use the configured bootloader for that keyboard.
|
||||
"""
|
||||
command = ''
|
||||
|
||||
if cli.args.bootloaders:
|
||||
# Provide usage and list bootloaders
|
||||
cli.echo('usage: qmk flash [-h] [-b] [-kb KEYBOARD] [-km KEYMAP] [-bl BOOTLOADER] [filename]')
|
||||
cli.echo('usage: qmk flash [-h] [-b] [-n] [-kb KEYBOARD] [-km KEYMAP] [-bl BOOTLOADER] [filename]')
|
||||
print_bootloader_help()
|
||||
return False
|
||||
|
||||
@@ -60,16 +66,23 @@ def flash(cli):
|
||||
cli.log.info('Wrote keymap to {fg_cyan}%s/%s/keymap.c', keymap_path, user_keymap['keymap'])
|
||||
|
||||
else:
|
||||
# Perform the action the user specified
|
||||
user_keyboard, user_keymap = find_keyboard_keymap()
|
||||
if user_keyboard and user_keymap:
|
||||
if cli.config.flash.keyboard and cli.config.flash.keymap:
|
||||
# Generate the make command for a specific keyboard/keymap.
|
||||
command = create_make_command(user_keyboard, user_keymap, cli.args.bootloader)
|
||||
command = create_make_command(cli.config.flash.keyboard, cli.config.flash.keymap, cli.args.bootloader)
|
||||
|
||||
else:
|
||||
cli.log.error('You must supply a configurator export or both `--keyboard` and `--keymap`.')
|
||||
cli.echo('usage: qmk flash [-h] [-b] [-kb KEYBOARD] [-km KEYMAP] [-bl BOOTLOADER] [filename]')
|
||||
return False
|
||||
elif not cli.config.flash.keyboard:
|
||||
cli.log.error('Could not determine keyboard!')
|
||||
elif not cli.config.flash.keymap:
|
||||
cli.log.error('Could not determine keymap!')
|
||||
|
||||
cli.log.info('Flashing keymap with {fg_cyan}%s\n\n', ' '.join(command))
|
||||
subprocess.run(command)
|
||||
# Compile the firmware, if we're able to
|
||||
if command:
|
||||
cli.log.info('Compiling keymap with {fg_cyan}%s', ' '.join(command))
|
||||
if not cli.args.dry_run:
|
||||
cli.echo('\n')
|
||||
subprocess.run(command)
|
||||
|
||||
else:
|
||||
cli.log.error('You must supply a configurator export, both `--keyboard` and `--keymap`, or be in a directory for a keyboard or keymap.')
|
||||
cli.echo('usage: qmk flash [-h] [-b] [-n] [-kb KEYBOARD] [-km KEYMAP] [-bl BOOTLOADER] [filename]')
|
||||
return False
|
||||
|
||||
@@ -1,12 +1,15 @@
|
||||
"""List the keymaps for a specific keyboard
|
||||
"""
|
||||
from milc import cli
|
||||
|
||||
import qmk.keymap
|
||||
from qmk.decorators import automagic_keyboard
|
||||
from qmk.errors import NoSuchKeyboardError
|
||||
|
||||
|
||||
@cli.argument("-kb", "--keyboard", help="Specify keyboard name. Example: 1upkeyboards/1up60hse")
|
||||
@cli.subcommand("List the keymaps for a specific keyboard")
|
||||
@automagic_keyboard
|
||||
def list_keymaps(cli):
|
||||
"""List the keymaps for a specific keyboard
|
||||
"""
|
||||
|
||||
@@ -4,12 +4,15 @@ import shutil
|
||||
from pathlib import Path
|
||||
|
||||
import qmk.path
|
||||
from qmk.decorators import automagic_keyboard, automagic_keymap
|
||||
from milc import cli
|
||||
|
||||
|
||||
@cli.argument('-kb', '--keyboard', help='Specify keyboard name. Example: 1upkeyboards/1up60hse')
|
||||
@cli.argument('-km', '--keymap', help='Specify the name for the new keymap directory')
|
||||
@cli.subcommand('Creates a new keymap for the keyboard of your choosing')
|
||||
@automagic_keyboard
|
||||
@automagic_keymap
|
||||
def new_keymap(cli):
|
||||
"""Creates a new keymap for the keyboard of your choosing.
|
||||
"""
|
||||
|
||||
@@ -1,12 +1,8 @@
|
||||
"""Helper functions for commands.
|
||||
"""
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
from milc import cli
|
||||
|
||||
import qmk.keymap
|
||||
from qmk.path import is_keyboard, is_keymap_dir, under_qmk_firmware
|
||||
|
||||
|
||||
def create_make_command(keyboard, keymap, target=None):
|
||||
@@ -59,71 +55,6 @@ def compile_configurator_json(user_keymap, bootloader=None):
|
||||
return create_make_command(user_keymap['keyboard'], user_keymap['keymap'], bootloader)
|
||||
|
||||
|
||||
def find_keyboard_keymap():
|
||||
"""Returns `(keyboard_name, keymap_name)` based on the user's current environment.
|
||||
|
||||
This determines the keyboard and keymap name using the following precedence order:
|
||||
|
||||
* Command line flags (--keyboard and --keymap)
|
||||
* Current working directory
|
||||
* `keyboards/<keyboard_name>`
|
||||
* `keyboards/<keyboard_name>/keymaps/<keymap_name>`
|
||||
* `layouts/**/<keymap_name>`
|
||||
* `users/<keymap_name>`
|
||||
* Configuration
|
||||
* cli.config.<subcommand>.keyboard
|
||||
* cli.config.<subcommand>.keymap
|
||||
"""
|
||||
# Check to make sure their copy of MILC supports config_source
|
||||
if not hasattr(cli, 'config_source'):
|
||||
cli.log.error("Your QMK CLI is out of date. Please upgrade using pip3 or your package manager.")
|
||||
exit(1)
|
||||
|
||||
# State variables
|
||||
relative_cwd = under_qmk_firmware()
|
||||
keyboard_name = ""
|
||||
keymap_name = ""
|
||||
|
||||
# If the keyboard or keymap are passed as arguments use that in preference to anything else
|
||||
if cli.config_source[cli._entrypoint.__name__]['keyboard'] == 'argument':
|
||||
keyboard_name = cli.config[cli._entrypoint.__name__]['keyboard']
|
||||
if cli.config_source[cli._entrypoint.__name__]['keymap'] == 'argument':
|
||||
keymap_name = cli.config[cli._entrypoint.__name__]['keymap']
|
||||
|
||||
if not keyboard_name or not keymap_name:
|
||||
# If we don't have a keyboard_name and keymap_name from arguments try to derive one or both
|
||||
if relative_cwd and relative_cwd.parts and relative_cwd.parts[0] == 'keyboards':
|
||||
# Try to determine the keyboard and/or keymap name
|
||||
current_path = Path('/'.join(relative_cwd.parts[1:]))
|
||||
|
||||
if current_path.parts[-2] == 'keymaps':
|
||||
if not keymap_name:
|
||||
keymap_name = current_path.parts[-1]
|
||||
if not keyboard_name:
|
||||
keyboard_name = '/'.join(current_path.parts[:-2])
|
||||
elif not keyboard_name and is_keyboard(current_path):
|
||||
keyboard_name = str(current_path)
|
||||
|
||||
elif relative_cwd and relative_cwd.parts and relative_cwd.parts[0] == 'layouts':
|
||||
# Try to determine the keymap name from the community layout
|
||||
if is_keymap_dir(relative_cwd) and not keymap_name:
|
||||
keymap_name = relative_cwd.name
|
||||
|
||||
elif relative_cwd and relative_cwd.parts and relative_cwd.parts[0] == 'users':
|
||||
# Try to determine the keymap name based on which userspace they're in
|
||||
if not keymap_name and len(relative_cwd.parts) > 1:
|
||||
keymap_name = relative_cwd.parts[1]
|
||||
|
||||
# If we still don't have a keyboard and keymap check the config
|
||||
if not keyboard_name and cli.config[cli._entrypoint.__name__]['keyboard']:
|
||||
keyboard_name = cli.config[cli._entrypoint.__name__]['keyboard']
|
||||
|
||||
if not keymap_name and cli.config[cli._entrypoint.__name__]['keymap']:
|
||||
keymap_name = cli.config[cli._entrypoint.__name__]['keymap']
|
||||
|
||||
return (keyboard_name, keymap_name)
|
||||
|
||||
|
||||
def parse_configurator_json(configurator_file):
|
||||
"""Open and parse a configurator json export
|
||||
"""
|
||||
|
||||
85
lib/python/qmk/decorators.py
Normal file
85
lib/python/qmk/decorators.py
Normal file
@@ -0,0 +1,85 @@
|
||||
"""Helpful decorators that subcommands can use.
|
||||
"""
|
||||
import functools
|
||||
from pathlib import Path
|
||||
|
||||
from milc import cli
|
||||
|
||||
from qmk.path import is_keyboard, is_keymap_dir, under_qmk_firmware
|
||||
|
||||
|
||||
def automagic_keyboard(func):
|
||||
"""Sets `cli.config.<subcommand>.keyboard` based on environment.
|
||||
|
||||
This will rewrite cli.config.<subcommand>.keyboard if the user did not pass `--keyboard` and the directory they are currently in is a keyboard or keymap directory.
|
||||
"""
|
||||
@functools.wraps(func)
|
||||
def wrapper(*args, **kwargs):
|
||||
# Check to make sure their copy of MILC supports config_source
|
||||
if not hasattr(cli, 'config_source'):
|
||||
cli.log.error("This subcommand requires a newer version of the QMK CLI. Please upgrade using `pip3 install --upgrade qmk` or your package manager.")
|
||||
exit(1)
|
||||
|
||||
# Ensure that `--keyboard` was not passed and CWD is under `qmk_firmware/keyboards`
|
||||
if cli.config_source[cli._entrypoint.__name__]['keyboard'] != 'argument':
|
||||
relative_cwd = under_qmk_firmware()
|
||||
|
||||
if relative_cwd and len(relative_cwd.parts) > 1 and relative_cwd.parts[0] == 'keyboards':
|
||||
# Attempt to extract the keyboard name from the current directory
|
||||
current_path = Path('/'.join(relative_cwd.parts[1:]))
|
||||
|
||||
if 'keymaps' in current_path.parts:
|
||||
# Strip current_path of anything after `keymaps`
|
||||
keymap_index = len(current_path.parts) - current_path.parts.index('keymaps') - 1
|
||||
current_path = current_path.parents[keymap_index]
|
||||
|
||||
if is_keyboard(current_path):
|
||||
cli.config[cli._entrypoint.__name__]['keyboard'] = str(current_path)
|
||||
cli.config_source[cli._entrypoint.__name__]['keyboard'] = 'keyboard_directory'
|
||||
|
||||
return func(*args, **kwargs)
|
||||
|
||||
return wrapper
|
||||
|
||||
|
||||
def automagic_keymap(func):
|
||||
"""Sets `cli.config.<subcommand>.keymap` based on environment.
|
||||
|
||||
This will rewrite cli.config.<subcommand>.keymap if the user did not pass `--keymap` and the directory they are currently in is a keymap, layout, or user directory.
|
||||
"""
|
||||
@functools.wraps(func)
|
||||
def wrapper(*args, **kwargs):
|
||||
# Check to make sure their copy of MILC supports config_source
|
||||
if not hasattr(cli, 'config_source'):
|
||||
cli.log.error("This subcommand requires a newer version of the QMK CLI. Please upgrade using `pip3 install --upgrade qmk` or your package manager.")
|
||||
exit(1)
|
||||
|
||||
# Ensure that `--keymap` was not passed and that we're under `qmk_firmware`
|
||||
if cli.config_source[cli._entrypoint.__name__]['keymap'] != 'argument':
|
||||
relative_cwd = under_qmk_firmware()
|
||||
|
||||
if relative_cwd and len(relative_cwd.parts) > 1:
|
||||
# If we're in `qmk_firmware/keyboards` and `keymaps` is in our path, try to find the keyboard name.
|
||||
if relative_cwd.parts[0] == 'keyboards' and 'keymaps' in relative_cwd.parts:
|
||||
current_path = Path('/'.join(relative_cwd.parts[1:])) # Strip 'keyboards' from the front
|
||||
|
||||
if 'keymaps' in current_path.parts and current_path.name != 'keymaps':
|
||||
while current_path.parent.name != 'keymaps':
|
||||
current_path = current_path.parent
|
||||
cli.config[cli._entrypoint.__name__]['keymap'] = current_path.name
|
||||
cli.config_source[cli._entrypoint.__name__]['keyboard'] = 'keymap_directory'
|
||||
|
||||
# If we're in `qmk_firmware/layouts` guess the name from the community keymap they're in
|
||||
elif relative_cwd.parts[0] == 'layouts' and is_keymap_dir(relative_cwd):
|
||||
cli.config[cli._entrypoint.__name__]['keymap'] = relative_cwd.name
|
||||
cli.config_source[cli._entrypoint.__name__]['keyboard'] = 'layouts_directory'
|
||||
|
||||
# If we're in `qmk_firmware/users` guess the name from the userspace they're in
|
||||
elif relative_cwd.parts[0] == 'users':
|
||||
# Guess the keymap name based on which userspace they're in
|
||||
cli.config[cli._entrypoint.__name__]['keymap'] = relative_cwd.parts[1]
|
||||
cli.config_source[cli._entrypoint.__name__]['keyboard'] = 'users_directory'
|
||||
|
||||
return func(*args, **kwargs)
|
||||
|
||||
return wrapper
|
||||
@@ -65,7 +65,7 @@ def normpath(path):
|
||||
path = Path(path)
|
||||
|
||||
if path.is_absolute():
|
||||
return Path(path)
|
||||
return path
|
||||
|
||||
return Path(os.environ['ORIG_CWD']) / path
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
// This is the default EEPROM max address to use for dynamic keymaps.
|
||||
// The default is the ATmega32u4 EEPROM max address.
|
||||
// Explicitly override it if the keyboard uses a microcontroller with
|
||||
// Explicitly override it if the keyboard uses a microcontroller with
|
||||
// more EEPROM *and* it makes sense to increase it.
|
||||
#ifndef DYNAMIC_KEYMAP_EEPROM_MAX_ADDR
|
||||
# define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 1023
|
||||
@@ -210,9 +210,9 @@ void dynamic_keymap_macro_send(uint8_t id) {
|
||||
++p;
|
||||
}
|
||||
|
||||
// Send the macro string one or two chars at a time
|
||||
// by making temporary 1 or 2 char strings
|
||||
char data[3] = {0, 0, 0};
|
||||
// Send the macro string one or three chars at a time
|
||||
// by making temporary 1 or 3 char strings
|
||||
char data[4] = {0, 0, 0, 0};
|
||||
// We already checked there was a null at the end of
|
||||
// the buffer, so this cannot go past the end
|
||||
while (1) {
|
||||
@@ -223,10 +223,12 @@ void dynamic_keymap_macro_send(uint8_t id) {
|
||||
break;
|
||||
}
|
||||
// If the char is magic (tap, down, up),
|
||||
// add the next char (key to use) and send a 2 char string.
|
||||
// add the next char (key to use) and send a 3 char string.
|
||||
if (data[0] == SS_TAP_CODE || data[0] == SS_DOWN_CODE || data[0] == SS_UP_CODE) {
|
||||
data[1] = eeprom_read_byte(p++);
|
||||
if (data[1] == 0) {
|
||||
data[1] = data[0];
|
||||
data[0] = SS_QMK_PREFIX;
|
||||
data[2] = eeprom_read_byte(p++);
|
||||
if (data[2] == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,96 +13,159 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef KEYMAP_BELGIAN_H
|
||||
#define KEYMAP_BELGIAN_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "keymap.h"
|
||||
|
||||
// Normal characters
|
||||
// Line 1
|
||||
#define BE_SUP2 KC_GRV
|
||||
#define BE_AMP KC_1
|
||||
#define BE_EACU KC_2
|
||||
#define BE_QUOT KC_3
|
||||
#define BE_APOS KC_4
|
||||
#define BE_LPRN KC_5
|
||||
#define BE_PARA KC_6
|
||||
#define BE_EGRV KC_7
|
||||
#define BE_EXLM KC_8
|
||||
#define BE_CCED KC_9
|
||||
#define BE_AGRV KC_0
|
||||
#define BE_RPRN KC_MINS
|
||||
#define BE_MINS KC_EQL
|
||||
// clang-format off
|
||||
|
||||
// Line 2
|
||||
#define BE_A KC_Q
|
||||
#define BE_Z KC_W
|
||||
#define BE_CIRC KC_LBRC
|
||||
#define BE_DLR KC_RBRC
|
||||
/*
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ ² │ & │ é │ " │ ' │ ( │ § │ è │ ! │ ç │ à │ ) │ - │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ A │ Z │ E │ R │ T │ Y │ U │ I │ O │ P │ ^ │ $ │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ Q │ S │ D │ F │ G │ H │ J │ K │ L │ M │ ù │ µ │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ < │ W │ X │ C │ V │ B │ N │ , │ ; │ : │ = │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define BE_SUP2 KC_GRV // ²
|
||||
#define BE_AMPR KC_1 // &
|
||||
#define BE_EACU KC_2 // é
|
||||
#define BE_DQUO KC_3 // "
|
||||
#define BE_QUOT KC_4 // '
|
||||
#define BE_LPRN KC_5 // (
|
||||
#define BE_SECT KC_6 // §
|
||||
#define BE_EGRV KC_7 // è
|
||||
#define BE_EXLM KC_8 // !
|
||||
#define BE_CCED KC_9 // ç
|
||||
#define BE_AGRV KC_0 // à
|
||||
#define BE_RPRN KC_MINS // )
|
||||
#define BE_MINS KC_EQL // -
|
||||
// Row 2
|
||||
#define BE_A KC_Q // A
|
||||
#define BE_Z KC_W // Z
|
||||
#define BE_E KC_E // E
|
||||
#define BE_R KC_R // R
|
||||
#define BE_T KC_T // T
|
||||
#define BE_Y KC_Y // Y
|
||||
#define BE_U KC_U // U
|
||||
#define BE_I KC_I // I
|
||||
#define BE_O KC_O // O
|
||||
#define BE_P KC_P // P
|
||||
#define BE_DCIR KC_LBRC // ^ (dead)
|
||||
#define BE_DLR KC_RBRC // $
|
||||
// Row 3
|
||||
#define BE_Q KC_A // Q
|
||||
#define BE_S KC_S // S
|
||||
#define BE_D KC_D // D
|
||||
#define BE_F KC_F // F
|
||||
#define BE_G KC_G // G
|
||||
#define BE_H KC_H // H
|
||||
#define BE_J KC_K // J
|
||||
#define BE_K KC_K // K
|
||||
#define BE_L KC_L // L
|
||||
#define BE_M KC_SCLN // M
|
||||
#define BE_UGRV KC_QUOT // ù
|
||||
#define BE_MICR KC_NUHS // µ
|
||||
// Row 4
|
||||
#define BE_LABK KC_NUBS // <
|
||||
#define BE_W KC_Z // W
|
||||
#define BE_X KC_X // X
|
||||
#define BE_C KC_C // C
|
||||
#define BE_V KC_V // V
|
||||
#define BE_B KC_B // B
|
||||
#define BE_N KC_N // N
|
||||
#define BE_COMM KC_M // ,
|
||||
#define BE_SCLN KC_COMM // ;
|
||||
#define BE_COLN KC_DOT // :
|
||||
#define BE_EQL KC_SLSH // =
|
||||
|
||||
// Line 3
|
||||
#define BE_Q KC_A
|
||||
#define BE_M KC_SCLN
|
||||
#define BE_UGRV KC_QUOT
|
||||
#define BE_MU KC_NUHS
|
||||
/* Shifted symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ ³ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ° │ _ │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ ¨ │ * │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ % │ £ │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ > │ │ │ │ │ │ │ ? │ . │ / │ + │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define BE_SUP3 S(BE_SUP2) // ³
|
||||
#define BE_1 S(BE_AMPR) // 1
|
||||
#define BE_2 S(BE_EACU) // 2
|
||||
#define BE_3 S(BE_DQUO) // 3
|
||||
#define BE_4 S(BE_QUOT) // 4
|
||||
#define BE_5 S(BE_LPRN) // 5
|
||||
#define BE_6 S(BE_SECT) // 6
|
||||
#define BE_7 S(BE_EGRV) // 7
|
||||
#define BE_8 S(BE_EXLM) // 8
|
||||
#define BE_9 S(BE_CCED) // 9
|
||||
#define BE_0 S(BE_AGRV) // 0
|
||||
#define BE_RNGA S(BE_RPRN) // °
|
||||
#define BE_UNDS S(BE_MINS) // _
|
||||
// Row 2
|
||||
#define BE_DIAE S(BE_DCIR) // ¨ (dead)
|
||||
#define BE_ASTR S(BE_DLR) // *
|
||||
// Row 3
|
||||
#define BE_PERC S(BE_UGRV) // %
|
||||
#define BE_PND S(BE_MICR) // £
|
||||
// Row 4
|
||||
#define BE_RABK S(BE_LABK) // >
|
||||
#define BE_QUES S(BE_COMM) // ?
|
||||
#define BE_DOT S(BE_SCLN) // .
|
||||
#define BE_SLSH S(BE_COLN) // /
|
||||
#define BE_PLUS S(BE_EQL) // +
|
||||
|
||||
// Line 4
|
||||
#define BE_LESS KC_NUBS
|
||||
#define BE_W KC_Z
|
||||
#define BE_COMM KC_M
|
||||
#define BE_SCLN KC_COMM
|
||||
#define BE_COLN KC_DOT
|
||||
#define BE_EQL KC_SLSH
|
||||
/* AltGr symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ │ | │ @ │ # │ │ │ ^ │ │ │ { │ } │ │ │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ │ │ € │ │ │ │ │ │ │ │ [ │ ] │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ ´ │ ` │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ \ │ │ │ │ │ │ │ │ │ │ ~ │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define BE_PIPE ALGR(BE_AMPR) // |
|
||||
#define BE_AT ALGR(BE_EACU) // @
|
||||
#define BE_HASH ALGR(BE_DQUO) // #
|
||||
#define BE_CIRC ALGR(BE_SECT) // ^
|
||||
#define BE_LCBR ALGR(BE_CCED) // {
|
||||
#define BE_RCBR ALGR(BE_AGRV) // }
|
||||
// Row 2
|
||||
#define BE_EURO ALGR(BE_E) // €
|
||||
#define BE_LBRC ALGR(BE_DCIR) // [
|
||||
#define BE_RBRC ALGR(BE_DLR) // ]
|
||||
// Row 3
|
||||
#define BE_ACUT ALGR(BE_UGRV) // ´ (dead)
|
||||
#define BE_GRV ALGR(BE_MICR) // ` (dead)
|
||||
// Row 4
|
||||
#define BE_BSLS ALGR(BE_LABK) // (backslash)
|
||||
#define BE_TILD ALGR(BE_EQL) // ~
|
||||
|
||||
// Shifted characters
|
||||
// Line 1
|
||||
#define BE_SUP3 KC_TILD
|
||||
#define BE_1 LSFT(KC_1)
|
||||
#define BE_2 LSFT(KC_2)
|
||||
#define BE_3 LSFT(KC_3)
|
||||
#define BE_4 LSFT(KC_4)
|
||||
#define BE_5 LSFT(KC_5)
|
||||
#define BE_6 LSFT(KC_6)
|
||||
#define BE_7 LSFT(KC_7)
|
||||
#define BE_8 LSFT(KC_8)
|
||||
#define BE_9 LSFT(KC_9)
|
||||
#define BE_0 LSFT(KC_0)
|
||||
#define BE_OVRR KC_UNDS
|
||||
#define BE_UNDS KC_PLUS
|
||||
|
||||
// Line 2
|
||||
#define BE_UMLT LSFT(BE_CIRC)
|
||||
#define BE_PND LSFT(BE_DLR)
|
||||
|
||||
// Line 3
|
||||
#define BE_PERC LSFT(BE_UGRV)
|
||||
|
||||
// Line 4
|
||||
#define BE_GRTR LSFT(BE_LESS)
|
||||
#define BE_QUES LSFT(BE_COMM)
|
||||
#define BE_DOT LSFT(BE_SCLN)
|
||||
#define BE_SLSH LSFT(BE_COLN)
|
||||
#define BE_PLUS LSFT(BE_EQL)
|
||||
|
||||
// Alt Gr-ed characters
|
||||
// Line 1
|
||||
#define BE_PIPE ALGR(KC_1)
|
||||
#define BE_AT ALGR(KC_2)
|
||||
#define BE_HASH ALGR(KC_3)
|
||||
#define BE_LCBR ALGR(KC_9)
|
||||
#define BE_RCBR ALGR(KC_0)
|
||||
|
||||
// Line 2
|
||||
#define BE_EURO ALGR(KC_E)
|
||||
#define BE_LSBR ALGR(BE_CIRC)
|
||||
#define BE_RSBR ALGR(BE_DLR)
|
||||
|
||||
// Line 3
|
||||
#define BE_ACUT ALGR(BE_UGRV)
|
||||
#define BE_GRV ALGR(BE_MU)
|
||||
|
||||
// Line 4
|
||||
#define BE_BSLS ALGR(BE_LESS)
|
||||
#define BE_TILT ALGR(BE_EQL)
|
||||
|
||||
#endif
|
||||
// DEPRECATED
|
||||
#define BE_AMP BE_AMPR
|
||||
#define BE_APOS BE_QUOT
|
||||
#define BE_PARA BE_SECT
|
||||
#define BE_MU BE_MICR
|
||||
#define BE_LESS BE_LABK
|
||||
#define BE_OVRR BE_RNGA
|
||||
#define BE_UMLT BE_DIAE
|
||||
#define BE_GRTR BE_RABK
|
||||
#define BE_LSBR BE_LBRC
|
||||
#define BE_RSBR BE_RBRC
|
||||
#define BE_TILT BE_TILD
|
||||
|
||||
@@ -14,61 +14,167 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef KEYMAP_BR_ABNT2_H
|
||||
#define KEYMAP_BR_ABNT2_H
|
||||
#pragma once
|
||||
|
||||
#include "keymap.h"
|
||||
|
||||
/* Scan codes for the Brazilian ABNT2 keyboard layout */
|
||||
// clang-format off
|
||||
|
||||
#define BR_CCDL KC_SCLN // Ç same scancode as ;: on US layout
|
||||
#define BR_SCLN KC_SLSH // ;: same scancode as /? on US layout
|
||||
#define BR_QUOT KC_GRV // '" same scancode as `~ on US layout
|
||||
#define BR_TILD KC_QUOT // ~^ dead keys, same scancode as '" on US layout
|
||||
#define BR_ACUT KC_LBRC // ´` dead keys, same scancode as [{ on US layout
|
||||
#define BR_LBRC KC_RBRC // [{ same scancode as ]} on US layout
|
||||
#define BR_RBRC KC_BSLS // ]} same scancode as \| on US layout
|
||||
#define BR_BSLS KC_NUBS // \| uses the non-US hash scancode (#~, sometimes §±)
|
||||
#define BR_SLSH KC_INT1 // /? uses the INTL1 scancode
|
||||
/*
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ ' │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ ´ │ [ │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Ç │ ~ │ ] │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
|
||||
* │ │ \ │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ ; │ / │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬──┴─┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define BR_QUOT KC_GRV // '
|
||||
#define BR_1 KC_1 // 1
|
||||
#define BR_2 KC_2 // 2
|
||||
#define BR_3 KC_3 // 3
|
||||
#define BR_4 KC_4 // 4
|
||||
#define BR_5 KC_5 // 5
|
||||
#define BR_6 KC_6 // 6
|
||||
#define BR_7 KC_7 // 7
|
||||
#define BR_8 KC_8 // 8
|
||||
#define BR_9 KC_9 // 9
|
||||
#define BR_0 KC_0 // 0
|
||||
#define BR_MINS KC_MINS // -
|
||||
#define BR_EQL KC_EQL // =
|
||||
// Row 2
|
||||
#define BR_Q KC_Q // Q
|
||||
#define BR_W KC_W // W
|
||||
#define BR_E KC_E // E
|
||||
#define BR_R KC_R // R
|
||||
#define BR_T KC_T // T
|
||||
#define BR_Y KC_Y // Y
|
||||
#define BR_U KC_U // U
|
||||
#define BR_I KC_I // I
|
||||
#define BR_O KC_O // O
|
||||
#define BR_P KC_P // P
|
||||
#define BR_ACUT KC_LBRC // ´ (dead)
|
||||
#define BR_LBRC KC_RBRC // [
|
||||
// Row 3
|
||||
#define BR_A KC_A // A
|
||||
#define BR_S KC_S // S
|
||||
#define BR_D KC_D // D
|
||||
#define BR_F KC_F // F
|
||||
#define BR_G KC_G // G
|
||||
#define BR_H KC_H // H
|
||||
#define BR_J KC_J // J
|
||||
#define BR_K KC_K // K
|
||||
#define BR_L KC_L // L
|
||||
#define BR_CCED KC_SCLN // Ç
|
||||
#define BR_TILD KC_QUOT // ~ (dead)
|
||||
#define BR_RBRC KC_BSLS // ]
|
||||
// Row 4
|
||||
#define BR_BSLS KC_NUBS // (backslash)
|
||||
#define BR_Z KC_Z // Z
|
||||
#define BR_X KC_X // X
|
||||
#define BR_C KC_C // C
|
||||
#define BR_V KC_V // V
|
||||
#define BR_B KC_B // B
|
||||
#define BR_N KC_N // N
|
||||
#define BR_M KC_M // M
|
||||
#define BR_COMM KC_COMM // ,
|
||||
#define BR_DOT KC_DOT // .
|
||||
#define BR_SCLN KC_SLSH // ;
|
||||
#define BR_SLSH KC_INT1 // /
|
||||
// Numpad
|
||||
#define BR_PDOT KC_PCMM // .
|
||||
#define BR_PCMM KC_PDOT // ,
|
||||
|
||||
#define BR_COLN LSFT(BR_SCLN) // shifted :
|
||||
#define BR_DQT LSFT(BR_QUOT) // shifted "
|
||||
#define BR_CIRC LSFT(BR_TILD) // shifted ^ (dead key)
|
||||
#define BR_GRAV LSFT(BR_ACUT) // shifted ` (dead key)
|
||||
#define BR_LCBR LSFT(BR_LBRC) // shifted {
|
||||
#define BR_RCBR LSFT(BR_RBRC) // shifted }
|
||||
#define BR_PIPE LSFT(BR_BSLS) // shifted |
|
||||
#define BR_QUES LSFT(BR_SLSH) // shifted ?
|
||||
#define BR_TRMA LSFT(KC_6) // shifted ¨ (dead key - trema accent)
|
||||
/* Shifted symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ " │ ! │ @ │ # │ $ │ % │ ¨ │ & │ * │ ( │ ) │ _ │ + │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ ` │ { │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ ^ │ } │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
|
||||
* │ │ | │ │ │ │ │ │ │ │ < │ > │ : │ ? │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬──┴─┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define BR_DQUO S(BR_QUOT) // "
|
||||
#define BR_EXLM S(BR_1) // !
|
||||
#define BR_AT S(BR_2) // @
|
||||
#define BR_HASH S(BR_3) // #
|
||||
#define BR_DLR S(BR_4) // $
|
||||
#define BR_PERC S(BR_5) // %
|
||||
#define BR_DIAE S(BR_6) // ¨ (dead)
|
||||
#define BR_AMPR S(BR_7) // &
|
||||
#define BR_ASTR S(BR_8) // *
|
||||
#define BR_LPRN S(BR_9) // (
|
||||
#define BR_RPRN S(BR_0) // )
|
||||
#define BR_UNDS S(BR_MINS) // _
|
||||
#define BR_PLUS S(BR_EQL) // +
|
||||
// Row 2
|
||||
#define BR_GRV S(BR_ACUT) // ` (dead)
|
||||
#define BR_LCBR S(BR_LBRC) // {
|
||||
// Row 3
|
||||
#define BR_CIRC S(BR_TILD) // ^ (dead)
|
||||
#define BR_RCBR S(BR_RBRC) // }
|
||||
// Row 4
|
||||
#define BR_PIPE S(BR_BSLS) // |
|
||||
#define BR_LABK S(BR_COMM) // <
|
||||
#define BR_RABK S(BR_DOT) // >
|
||||
#define BR_COLN S(BR_SCLN) // :
|
||||
#define BR_QUES S(BR_SLSH) // ?
|
||||
|
||||
// On the ABNT2 the keypad comma and the keypad dot scancodes are switched
|
||||
// (presumably because in Brazil comma is used as the decimal separator)
|
||||
#define BR_KPDT KC_KP_COMMA // keypad .
|
||||
#define BR_KPCM KC_KP_DOT // keypad ,
|
||||
/* AltGr symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ │ ¹ │ ² │ ³ │ £ │ ¢ │ ¬ │ │ │ │ │ │ § │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ │ │ ° │ │ │ │ │ │ │ │ │ ª │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ º │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
|
||||
* │ │ │ │ │ ₢ │ │ │ │ │ │ │ │ │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬──┴─┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define BR_SUP1 ALGR(BR_1) // ¹
|
||||
#define BR_SUP2 ALGR(BR_2) // ²
|
||||
#define BR_SUP3 ALGR(BR_3) // ³
|
||||
#define BR_PND ALGR(BR_4) // £
|
||||
#define BR_CENT ALGR(BR_5) // ¢
|
||||
#define BR_NOT ALGR(BR_6) // ¬
|
||||
#define BR_SECT ALGR(BR_EQL) // §
|
||||
// Row 2
|
||||
#define BR_DEG ALGR(BR_E) // °
|
||||
#define BR_FORD ALGR(BR_LBRC) // ª
|
||||
// Row 3
|
||||
#define BR_MORD ALGR(BR_RBRC) // º
|
||||
// Row 4
|
||||
#define BR_CRUZ ALGR(BR_C) // ₢
|
||||
|
||||
#define BR_1UP LALT(KC_1) // 1 superscript ¹ alt+1
|
||||
#define BR_2UP LALT(KC_2) // 2 superscript ² alt+2
|
||||
#define BR_3UP LALT(KC_3) // 3 superscript ³ alt+3
|
||||
#define BR_PND LALT(KC_4) // Pound sign £ alt+4
|
||||
#define BR_CENT LALT(KC_5) // Cent sign ¢ alt+5
|
||||
#define BR_NOT LALT(KC_6) // Not sign ¬ alt+6
|
||||
#define BR_SECT LALT(KC_EQL) // Section sign § alt+=
|
||||
#define BR_FORD LALT(BR_LBRC) // Feminine Ordinal Sign ª alt+[
|
||||
#define BR_MORD LALT(BR_RBRC) // Masculine Ordinal Sign º alt+]
|
||||
#define BR_DGRE LALT(BR_SLSH) // Degree sign ° alt+/
|
||||
// DEPRECATED
|
||||
#define BR_CCDL BR_CCED
|
||||
#define BR_DQT BR_DQUO
|
||||
#define BR_TRMA BR_DIAE
|
||||
#define BR_GRAV BR_GRV
|
||||
#define BR_KPDT BR_PDOT
|
||||
#define BR_KPCM BR_PCMM
|
||||
#define BR_1UP BR_SUP1
|
||||
#define BR_2UP BR_SUP2
|
||||
#define BR_3UP BR_SUP3
|
||||
#define BR_ASLS BR_SLSH
|
||||
#define BR_AQST BR_QUES
|
||||
|
||||
#define BR_EURO LALT(KC_E) // Euro sign € alt+e
|
||||
#define BR_NDTD LALT(BR_TILD) // Non-dead key tilde ~ alt+~
|
||||
#define BR_NDAC LALT(BR_ACUT) // Non-dead key acute accent ´ alt+´
|
||||
#define BR_NDGV LALT(BR_QUOT) // Non-dead key grave accent ` alt+'
|
||||
#define BR_NDCR LALT(BR_CIRC) // Non-dead key circumflex accent ^ alt+^ (alt+shift+~)
|
||||
#define BR_NDTR LALT(BR_TRMA) // Non-dead key trema accent ¨ alt+¨ (alt+shift+6)
|
||||
|
||||
// For 101-key keyboard layouts, the ABNT2 layout allows
|
||||
// the slash and question mark to be typed using alt+q and alt+w.
|
||||
// The shortcuts are provided here for completeness' sake,
|
||||
// but it's recommended to use BR_SLSH and BR_QUES instead
|
||||
#define BR_ASLS LALT(KC_Q)
|
||||
#define BR_AQST LALT(KC_W)
|
||||
|
||||
#endif
|
||||
// Not present on Windows 10?
|
||||
#define BR_NDTD ALGR(BR_TILD) // ~
|
||||
#define BR_NDAC ALGR(BR_ACUT) // ´
|
||||
#define BR_NDGV ALGR(BR_QUOT) // `
|
||||
#define BR_NDCR ALGR(BR_CIRC) // ^
|
||||
#define BR_NDTR ALGR(BR_DIAE) // ¨
|
||||
|
||||
@@ -13,82 +13,153 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef KEYMAP_FRENCH_H
|
||||
#define KEYMAP_FRENCH_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "keymap.h"
|
||||
|
||||
// Normal characters
|
||||
#define FR_SUP2 KC_GRV
|
||||
#define FR_AMP KC_1
|
||||
#define FR_EACU KC_2
|
||||
#define FR_QUOT KC_3
|
||||
#define FR_APOS KC_4
|
||||
#define FR_LPRN KC_5
|
||||
#define FR_MINS KC_6
|
||||
#define FR_EGRV KC_7
|
||||
#define FR_UNDS KC_8
|
||||
#define FR_CCED KC_9
|
||||
#define FR_AGRV KC_0
|
||||
#define FR_RPRN KC_MINS
|
||||
#define FR_EQL KC_EQL
|
||||
// clang-format off
|
||||
|
||||
#define FR_A KC_Q
|
||||
#define FR_Z KC_W
|
||||
#define FR_CIRC KC_LBRC
|
||||
#define FR_DLR KC_RBRC
|
||||
/*
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ ² │ & │ é │ " │ ' │ ( │ - │ è │ _ │ ç │ à │ ) │ = │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ A │ Z │ E │ R │ T │ Y │ U │ I │ O │ P │ ^ │ $ │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ Q │ S │ D │ F │ G │ H │ J │ K │ L │ M │ ù │ * │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ < │ W │ X │ C │ V │ B │ N │ , │ ; │ : │ ! │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define FR_SUP2 KC_GRV // ²
|
||||
#define FR_AMPR KC_1 // &
|
||||
#define FR_EACU KC_2 // é
|
||||
#define FR_DQUO KC_3 // "
|
||||
#define FR_QUOT KC_4 // '
|
||||
#define FR_LPRN KC_5 // (
|
||||
#define FR_MINS KC_6 // -
|
||||
#define FR_EGRV KC_7 // è
|
||||
#define FR_UNDS KC_8 // _
|
||||
#define FR_CCED KC_9 // ç
|
||||
#define FR_AGRV KC_0 // à
|
||||
#define FR_RPRN KC_MINS // )
|
||||
#define FR_EQL KC_EQL // =
|
||||
// Row 2
|
||||
#define FR_A KC_Q // A
|
||||
#define FR_Z KC_W // Z
|
||||
#define FR_E KC_E // E
|
||||
#define FR_R KC_R // R
|
||||
#define FR_T KC_T // T
|
||||
#define FR_Y KC_Y // Y
|
||||
#define FR_U KC_U // U
|
||||
#define FR_I KC_I // I
|
||||
#define FR_O KC_O // O
|
||||
#define FR_P KC_P // P
|
||||
#define FR_CIRC KC_LBRC // ^ (dead)
|
||||
#define FR_DLR KC_RBRC // $
|
||||
// Row 3
|
||||
#define FR_Q KC_A // Q
|
||||
#define FR_S KC_S // S
|
||||
#define FR_D KC_D // D
|
||||
#define FR_F KC_F // F
|
||||
#define FR_G KC_G // G
|
||||
#define FR_H KC_H // H
|
||||
#define FR_J KC_J // J
|
||||
#define FR_K KC_K // K
|
||||
#define FR_L KC_L // L
|
||||
#define FR_M KC_SCLN // M
|
||||
#define FR_UGRV KC_QUOT // ù
|
||||
#define FR_ASTR KC_NUHS // *
|
||||
// Row 4
|
||||
#define FR_LABK KC_NUBS // <
|
||||
#define FR_W KC_Z // W
|
||||
#define FR_X KC_X // X
|
||||
#define FR_C KC_C // C
|
||||
#define FR_V KC_V // V
|
||||
#define FR_B KC_B // B
|
||||
#define FR_N KC_N // N
|
||||
#define FR_COMM KC_M // ,
|
||||
#define FR_SCLN KC_COMM // ;
|
||||
#define FR_COLN KC_DOT // :
|
||||
#define FR_EXLM KC_SLSH // !
|
||||
|
||||
#define FR_Q KC_A
|
||||
#define FR_M KC_SCLN
|
||||
#define FR_UGRV KC_QUOT
|
||||
#define FR_ASTR KC_NUHS
|
||||
/* Shifted symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ° │ + │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ ¨ │ £ │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ % │ µ │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ > │ │ │ │ │ │ │ ? │ . │ / │ § │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define FR_1 S(FR_AMPR) // 1
|
||||
#define FR_2 S(FR_EACU) // 2
|
||||
#define FR_3 S(FR_DQUO) // 3
|
||||
#define FR_4 S(FR_QUOT) // 4
|
||||
#define FR_5 S(FR_LPRN) // 5
|
||||
#define FR_6 S(FR_MINS) // 6
|
||||
#define FR_7 S(FR_EGRV) // 7
|
||||
#define FR_8 S(FR_UNDS) // 8
|
||||
#define FR_9 S(FR_CCED) // 9
|
||||
#define FR_0 S(FR_AGRV) // 0
|
||||
#define FR_DEG S(FR_RPRN) // °
|
||||
#define FR_PLUS S(FR_EQL) // +
|
||||
// Row 2
|
||||
#define FR_DIAE S(FR_CIRC) // ¨ (dead)
|
||||
#define FR_PND S(FR_DLR) // £
|
||||
// Row 3
|
||||
#define FR_PERC S(FR_UGRV) // %
|
||||
#define FR_MICR S(FR_ASTR) // µ
|
||||
// Row 4
|
||||
#define FR_RABK S(FR_LABK) // >
|
||||
#define FR_QUES S(FR_COMM) // ?
|
||||
#define FR_DOT S(FR_SCLN) // .
|
||||
#define FR_SLSH S(FR_COLN) // /
|
||||
#define FR_SECT S(FR_EXLM) // §
|
||||
|
||||
#define FR_LESS KC_NUBS
|
||||
#define FR_W KC_Z
|
||||
#define FR_COMM KC_M
|
||||
#define FR_SCLN KC_COMM
|
||||
#define FR_COLN KC_DOT
|
||||
#define FR_EXLM KC_SLSH
|
||||
/* AltGr symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ │ │ ~ │ # │ { │ [ │ | │ ` │ \ │ │ @ │ ] │ } │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ │ │ € │ │ │ │ │ │ │ │ │ ¤ │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define FR_TILD ALGR(FR_EACU) // ~ (dead)
|
||||
#define FR_HASH ALGR(FR_DQUO) // #
|
||||
#define FR_LCBR ALGR(FR_QUOT) // {
|
||||
#define FR_LBRC ALGR(FR_LPRN) // [
|
||||
#define FR_PIPE ALGR(FR_MINS) // |
|
||||
#define FR_GRV ALGR(FR_EGRV) // ` (dead)
|
||||
#define FR_BSLS ALGR(FR_UNDS) // (backslash)
|
||||
#define FR_AT ALGR(FR_AGRV) // @
|
||||
#define FR_RBRC ALGR(FR_RPRN) // ]
|
||||
#define FR_RCBR ALGR(FR_EQL) // }
|
||||
// Row 2
|
||||
#define FR_EURO ALGR(KC_E) // €
|
||||
#define FR_CURR ALGR(FR_DLR) // ¤
|
||||
|
||||
// Shifted characters
|
||||
#define FR_1 LSFT(KC_1)
|
||||
#define FR_2 LSFT(KC_2)
|
||||
#define FR_3 LSFT(KC_3)
|
||||
#define FR_4 LSFT(KC_4)
|
||||
#define FR_5 LSFT(KC_5)
|
||||
#define FR_6 LSFT(KC_6)
|
||||
#define FR_7 LSFT(KC_7)
|
||||
#define FR_8 LSFT(KC_8)
|
||||
#define FR_9 LSFT(KC_9)
|
||||
#define FR_0 LSFT(KC_0)
|
||||
#define FR_OVRR LSFT(FR_RPRN)
|
||||
#define FR_PLUS LSFT(FR_EQL)
|
||||
|
||||
#define FR_UMLT LSFT(FR_CIRC)
|
||||
#define FR_PND LSFT(FR_DLR)
|
||||
#define FR_PERC LSFT(FR_UGRV)
|
||||
#define FR_MU LSFT(FR_ASTR)
|
||||
|
||||
#define FR_GRTR LSFT(FR_LESS)
|
||||
#define FR_QUES LSFT(FR_COMM)
|
||||
#define FR_DOT LSFT(FR_SCLN)
|
||||
#define FR_SLSH LSFT(FR_COLN)
|
||||
#define FR_SECT LSFT(FR_EXLM)
|
||||
|
||||
// Alt Gr-ed characters
|
||||
#define FR_TILD ALGR(KC_2)
|
||||
#define FR_HASH ALGR(KC_3)
|
||||
#define FR_LCBR ALGR(KC_4)
|
||||
#define FR_LBRC ALGR(KC_5)
|
||||
#define FR_PIPE ALGR(KC_6)
|
||||
#define FR_GRV ALGR(KC_7)
|
||||
#define FR_BSLS ALGR(KC_8)
|
||||
#define FR_CCIRC ALGR(KC_9)
|
||||
#define FR_AT ALGR(KC_0)
|
||||
#define FR_RBRC ALGR(FR_RPRN)
|
||||
#define FR_RCBR ALGR(FR_EQL)
|
||||
|
||||
#define FR_EURO ALGR(KC_E)
|
||||
#define FR_BULT ALGR(FR_DLR)
|
||||
|
||||
#endif
|
||||
// DEPRECATED
|
||||
#define FR_AMP FR_AMPR
|
||||
#define FR_APOS FR_QUOT
|
||||
#define FR_LESS FR_LABK
|
||||
#define FR_OVRR FR_DEG
|
||||
#define FR_UMLT FR_DIAE
|
||||
#define FR_MU FR_MICR
|
||||
#define FR_GRTR FR_RABK
|
||||
#define FR_CCIRC FR_CIRC
|
||||
#define FR_BULT FR_CURR
|
||||
|
||||
@@ -14,98 +14,153 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef KEYMAP_GERMAN
|
||||
#define KEYMAP_GERMAN
|
||||
#pragma once
|
||||
|
||||
#include "keymap.h"
|
||||
|
||||
// normal characters
|
||||
#define DE_Z KC_Y
|
||||
#define DE_Y KC_Z
|
||||
// clang-format off
|
||||
|
||||
#define DE_A KC_A
|
||||
#define DE_B KC_B
|
||||
#define DE_C KC_C
|
||||
#define DE_D KC_D
|
||||
#define DE_E KC_E
|
||||
#define DE_F KC_F
|
||||
#define DE_G KC_G
|
||||
#define DE_H KC_H
|
||||
#define DE_I KC_I
|
||||
#define DE_J KC_J
|
||||
#define DE_K KC_K
|
||||
#define DE_L KC_L
|
||||
#define DE_M KC_M
|
||||
#define DE_N KC_N
|
||||
#define DE_O KC_O
|
||||
#define DE_P KC_P
|
||||
#define DE_Q KC_Q
|
||||
#define DE_R KC_R
|
||||
#define DE_S KC_S
|
||||
#define DE_T KC_T
|
||||
#define DE_U KC_U
|
||||
#define DE_V KC_V
|
||||
#define DE_W KC_W
|
||||
#define DE_X KC_X
|
||||
/*
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ ^ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ß │ ´ │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ Q │ W │ E │ R │ T │ Z │ U │ I │ O │ P │ Ü │ + │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Ö │ Ä │ # │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ < │ Y │ X │ C │ V │ B │ N │ M │ , │ . │ - │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define DE_CIRC KC_GRV // ^ (dead)
|
||||
#define DE_1 KC_1 // 1
|
||||
#define DE_2 KC_2 // 2
|
||||
#define DE_3 KC_3 // 3
|
||||
#define DE_4 KC_4 // 4
|
||||
#define DE_5 KC_5 // 5
|
||||
#define DE_6 KC_6 // 6
|
||||
#define DE_7 KC_7 // 7
|
||||
#define DE_8 KC_8 // 8
|
||||
#define DE_9 KC_9 // 9
|
||||
#define DE_0 KC_0 // 0
|
||||
#define DE_SS KC_MINS // ß
|
||||
#define DE_ACUT KC_EQL // ´ (dead)
|
||||
// Row 2
|
||||
#define DE_Q KC_Q // Q
|
||||
#define DE_W KC_W // W
|
||||
#define DE_E KC_E // E
|
||||
#define DE_R KC_R // R
|
||||
#define DE_T KC_T // T
|
||||
#define DE_Z KC_Y // Z
|
||||
#define DE_U KC_U // U
|
||||
#define DE_I KC_I // I
|
||||
#define DE_O KC_O // O
|
||||
#define DE_P KC_P // P
|
||||
#define DE_UDIA KC_LBRC // Ü
|
||||
#define DE_PLUS KC_RBRC // +
|
||||
// Row 3
|
||||
#define DE_A KC_A // A
|
||||
#define DE_S KC_S // S
|
||||
#define DE_D KC_D // D
|
||||
#define DE_F KC_F // F
|
||||
#define DE_G KC_G // G
|
||||
#define DE_H KC_H // H
|
||||
#define DE_J KC_J // J
|
||||
#define DE_K KC_K // K
|
||||
#define DE_L KC_L // L
|
||||
#define DE_ODIA KC_SCLN // Ö
|
||||
#define DE_ADIA KC_QUOT // Ä
|
||||
#define DE_HASH KC_NUHS // #
|
||||
// Row 4
|
||||
#define DE_LABK KC_NUBS // <
|
||||
#define DE_Y KC_Z // Y
|
||||
#define DE_X KC_X // X
|
||||
#define DE_C KC_C // C
|
||||
#define DE_V KC_V // V
|
||||
#define DE_B KC_B // B
|
||||
#define DE_N KC_N // N
|
||||
#define DE_M KC_M // M
|
||||
#define DE_COMM KC_COMM // ,
|
||||
#define DE_DOT KC_DOT // .
|
||||
#define DE_MINS KC_SLSH // -
|
||||
|
||||
#define DE_0 KC_0
|
||||
#define DE_1 KC_1
|
||||
#define DE_2 KC_2
|
||||
#define DE_3 KC_3
|
||||
#define DE_4 KC_4
|
||||
#define DE_5 KC_5
|
||||
#define DE_6 KC_6
|
||||
#define DE_7 KC_7
|
||||
#define DE_8 KC_8
|
||||
#define DE_9 KC_9
|
||||
/* Shifted symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ ° │ ! │ " │ § │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ * │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ ' │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define DE_DEG S(DE_CIRC) // °
|
||||
#define DE_EXLM S(DE_1) // !
|
||||
#define DE_DQUO S(DE_2) // "
|
||||
#define DE_SECT S(DE_3) // §
|
||||
#define DE_DLR S(DE_4) // $
|
||||
#define DE_PERC S(DE_5) // %
|
||||
#define DE_AMPR S(DE_6) // &
|
||||
#define DE_SLSH S(DE_7) // /
|
||||
#define DE_LPRN S(DE_8) // (
|
||||
#define DE_RPRN S(DE_9) // )
|
||||
#define DE_EQL S(DE_0) // =
|
||||
#define DE_QUES S(DE_SS) // ?
|
||||
#define DE_GRV S(DE_ACUT) // ` (dead)
|
||||
// Row 2
|
||||
#define DE_ASTR S(DE_PLUS) // *
|
||||
// Row 3
|
||||
#define DE_QUOT S(DE_HASH) // '
|
||||
// Row 4
|
||||
#define DE_RABK S(DE_LABK) // >
|
||||
#define DE_SCLN S(DE_COMM) // ;
|
||||
#define DE_COLN S(DE_DOT) // :
|
||||
#define DE_UNDS S(DE_MINS) // _
|
||||
|
||||
#define DE_DOT KC_DOT
|
||||
#define DE_COMM KC_COMM
|
||||
/* AltGr symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ │ │ ² │ ³ │ │ │ │ { │ [ │ ] │ } │ \ │ │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ @ │ │ € │ │ │ │ │ │ │ │ │ ~ │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ | │ │ │ │ │ │ │ µ │ │ │ │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define DE_SUP2 ALGR(DE_2) // ²
|
||||
#define DE_SUP3 ALGR(DE_3) // ³
|
||||
#define DE_LCBR ALGR(DE_7) // {
|
||||
#define DE_LBRC ALGR(DE_8) // [
|
||||
#define DE_RBRC ALGR(DE_9) // ]
|
||||
#define DE_RCBR ALGR(DE_0) // }
|
||||
#define DE_BSLS ALGR(DE_SS) // (backslash)
|
||||
// Row 2
|
||||
#define DE_AT ALGR(DE_Q) // @
|
||||
#define DE_EURO ALGR(DE_E) // €
|
||||
#define DE_TILD ALGR(DE_PLUS) // ~
|
||||
// Row 4
|
||||
#define DE_PIPE ALGR(DE_LABK) // |
|
||||
#define DE_MICR ALGR(DE_M) // µ
|
||||
|
||||
#define DE_SS KC_MINS
|
||||
#define DE_AE KC_QUOT
|
||||
#define DE_UE KC_LBRC
|
||||
#define DE_OE KC_SCLN
|
||||
|
||||
#define DE_CIRC KC_GRAVE // accent circumflex ^ and ring °
|
||||
#define DE_ACUT KC_EQL // accent acute ´ and grave `
|
||||
#define DE_PLUS KC_RBRC // + and * and ~
|
||||
#define DE_HASH KC_BSLS // # and '
|
||||
#define DE_LESS KC_NUBS // < and > and |
|
||||
#define DE_MINS KC_SLSH // - and _
|
||||
|
||||
// shifted characters
|
||||
#define DE_RING LSFT(DE_CIRC) // °
|
||||
#define DE_EXLM LSFT(KC_1) // !
|
||||
#define DE_DQOT LSFT(KC_2) // "
|
||||
#define DE_PARA LSFT(KC_3) // §
|
||||
#define DE_DLR LSFT(KC_4) // $
|
||||
#define DE_PERC LSFT(KC_5) // %
|
||||
#define DE_AMPR LSFT(KC_6) // &
|
||||
#define DE_SLSH LSFT(KC_7) // /
|
||||
#define DE_LPRN LSFT(KC_8) // (
|
||||
#define DE_RPRN LSFT(KC_9) // )
|
||||
#define DE_EQL LSFT(KC_0) // =
|
||||
#define DE_QST LSFT(DE_SS) // ?
|
||||
#define DE_GRV LSFT(DE_ACUT) // `
|
||||
#define DE_ASTR LSFT(DE_PLUS) // *
|
||||
#define DE_QUOT LSFT(DE_HASH) // '
|
||||
#define DE_MORE LSFT(DE_LESS) // >
|
||||
#define DE_COLN LSFT(KC_DOT) // :
|
||||
#define DE_SCLN LSFT(KC_COMM) // ;
|
||||
#define DE_UNDS LSFT(DE_MINS) // _
|
||||
|
||||
// Alt Gr-ed characters
|
||||
#define DE_SQ2 ALGR(KC_2) // ²
|
||||
#define DE_SQ3 ALGR(KC_3) // ³
|
||||
#define DE_LCBR ALGR(KC_7) // {
|
||||
#define DE_LBRC ALGR(KC_8) // [
|
||||
#define DE_RBRC ALGR(KC_9) // ]
|
||||
#define DE_RCBR ALGR(KC_0) // }
|
||||
#define DE_BSLS ALGR(DE_SS) // backslash
|
||||
#define DE_AT ALGR(KC_Q) // @
|
||||
#define DE_EURO ALGR(KC_E) // €
|
||||
#define DE_TILD ALGR(DE_PLUS) // ~
|
||||
#define DE_PIPE ALGR(DE_LESS) // |
|
||||
|
||||
#endif
|
||||
// DEPRECATED
|
||||
#define DE_UE DE_UDIA
|
||||
#define DE_OE DE_ODIA
|
||||
#define DE_AE DE_ADIA
|
||||
#define DE_LESS DE_LABK
|
||||
#define DE_RING DE_DEG
|
||||
#define DE_DQOT DE_DQUO
|
||||
#define DE_PARA DE_SECT
|
||||
#define DE_QST DE_QUES
|
||||
#define DE_MORE DE_RABK
|
||||
#define DE_SQ2 DE_SUP2
|
||||
#define DE_SQ3 DE_SUP3
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/* Copyright 2019 Torben Hoffmann
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
@@ -14,40 +13,113 @@
|
||||
* 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 "keymap.h"
|
||||
// For software implementation of norman
|
||||
#define NM_Q KC_Q
|
||||
#define NM_W KC_W
|
||||
#define NM_D KC_E
|
||||
#define NM_F KC_R
|
||||
#define NM_K KC_T
|
||||
#define NM_J KC_Y
|
||||
#define NM_U KC_U
|
||||
#define NM_R KC_I
|
||||
#define NM_L KC_O
|
||||
#define NM_SCLN KC_P
|
||||
#define NM_COLN LSFT(NM_SCLN)
|
||||
|
||||
#define NM_A KC_A
|
||||
#define NM_S KC_S
|
||||
#define NM_E KC_D
|
||||
#define NM_T KC_F
|
||||
#define NM_G KC_G
|
||||
#define NM_Y KC_H
|
||||
#define NM_N KC_J
|
||||
#define NM_I KC_K
|
||||
#define NM_O KC_L
|
||||
#define NM_H KC_SCLN
|
||||
// clang-format off
|
||||
|
||||
#define NM_Z KC_Z
|
||||
#define NM_X KC_X
|
||||
#define NM_C KC_C
|
||||
#define NM_V KC_V
|
||||
#define NM_B KC_B
|
||||
#define NM_P KC_N
|
||||
#define NM_M KC_M
|
||||
#define NM_COMM KC_COMM
|
||||
#define NM_DOT KC_DOT
|
||||
#define NM_SLSH KC_SLSH
|
||||
/*
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ ` │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ - │ = │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ Q │ W │ D │ F │ K │ J │ U │ R │ L │ ; │ [ │ ] │ \ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
|
||||
* │ │ A │ S │ E │ T │ G │ Y │ N │ I │ O │ H │ ' │ │
|
||||
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
|
||||
* │ │ Z │ X │ C │ V │ B │ P │ M │ , │ . │ / │ │
|
||||
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define NM_GRV KC_GRV // `
|
||||
#define NM_1 KC_1 // 1
|
||||
#define NM_2 KC_2 // 2
|
||||
#define NM_3 KC_3 // 3
|
||||
#define NM_4 KC_4 // 4
|
||||
#define NM_5 KC_5 // 5
|
||||
#define NM_6 KC_6 // 6
|
||||
#define NM_7 KC_7 // 7
|
||||
#define NM_8 KC_8 // 8
|
||||
#define NM_9 KC_9 // 9
|
||||
#define NM_0 KC_0 // 0
|
||||
#define NM_MINS KC_MINS // -
|
||||
#define NM_EQL KC_EQL // =
|
||||
// Row 2
|
||||
#define NM_Q KC_Q // Q
|
||||
#define NM_W KC_W // W
|
||||
#define NM_D KC_E // D
|
||||
#define NM_F KC_R // F
|
||||
#define NM_K KC_T // K
|
||||
#define NM_J KC_Y // J
|
||||
#define NM_U KC_U // U
|
||||
#define NM_R KC_I // R
|
||||
#define NM_L KC_O // L
|
||||
#define NM_SCLN KC_P // ;
|
||||
#define NM_LBRC KC_LBRC // [
|
||||
#define NM_RBRC KC_RBRC // ]
|
||||
#define NM_BSLS KC_BSLS // (backslash)
|
||||
// Row 3
|
||||
#define NM_A KC_A // A
|
||||
#define NM_S KC_S // S
|
||||
#define NM_E KC_D // E
|
||||
#define NM_T KC_F // T
|
||||
#define NM_G KC_G // G
|
||||
#define NM_Y KC_H // Y
|
||||
#define NM_N KC_J // N
|
||||
#define NM_I KC_K // I
|
||||
#define NM_O KC_L // O
|
||||
#define NM_H KC_SCLN // H
|
||||
#define NM_QUOT KC_QUOT // '
|
||||
// Row 4
|
||||
#define NM_Z KC_Z // Z
|
||||
#define NM_X KC_X // X
|
||||
#define NM_C KC_C // C
|
||||
#define NM_V KC_V // V
|
||||
#define NM_B KC_B // B
|
||||
#define NM_P KC_N // P
|
||||
#define NM_M KC_M // M
|
||||
#define NM_COMM KC_COMM // ,
|
||||
#define NM_DOT KC_DOT // .
|
||||
#define NM_SLSH KC_SLSH // /
|
||||
|
||||
/* Shifted symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ ; │ { │ } │ | │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ " │ │
|
||||
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
|
||||
* │ │ │ │ │ │ │ │ │ < │ > │ ? │ │
|
||||
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define NM_TILD S(NM_GRV) // ~
|
||||
#define NM_EXLM S(NM_1) // !
|
||||
#define NM_AT S(NM_2) // @
|
||||
#define NM_HASH S(NM_3) // #
|
||||
#define NM_DLR S(NM_4) // $
|
||||
#define NM_PERC S(NM_5) // %
|
||||
#define NM_CIRC S(NM_6) // ^
|
||||
#define NM_AMPR S(NM_7) // &
|
||||
#define NM_ASTR S(NM_8) // *
|
||||
#define NM_LPRN S(NM_9) // (
|
||||
#define NM_RPRN S(NM_0) // )
|
||||
#define NM_UNDS S(NM_MINS) // _
|
||||
#define NM_PLUS S(NM_EQL) // +
|
||||
// Row 2
|
||||
#define NM_COLN S(NM_SCLN) // :
|
||||
#define NM_LCBR S(NM_LBRC) // {
|
||||
#define NM_RCBR S(NM_RBRC) // }
|
||||
#define NM_PIPE S(NM_BSLS) // |
|
||||
// Row 3
|
||||
#define NM_DQUO S(NM_QUOT) // "
|
||||
// Row 4
|
||||
#define NM_LABK S(NM_COMM) // <
|
||||
#define NM_RABK S(NM_DOT) // >
|
||||
#define NM_QUES S(NM_SLSH) // ?
|
||||
|
||||
@@ -13,35 +13,53 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef KEYMAP_PLOVER_H
|
||||
#define KEYMAP_PLOVER_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "keymap.h"
|
||||
|
||||
#define PV_NUM KC_1
|
||||
#define PV_LS KC_Q
|
||||
#define PV_LT KC_W
|
||||
#define PV_LP KC_E
|
||||
#define PV_LH KC_R
|
||||
#define PV_LK KC_S
|
||||
#define PV_LW KC_D
|
||||
#define PV_LR KC_F
|
||||
// clang-format off
|
||||
|
||||
/*
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ │Num│ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ S │ T │ P │ H │ │ * │ F │ P │ L │ T │ D │ │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴─────┤
|
||||
* │ │ │ K │ W │ R │ │ │ R │ B │ G │ S │ Z │ │
|
||||
* ├──────┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────────┤
|
||||
* │ │ │ │ A │ O │ │ E │ U │ │ │ │ │
|
||||
* ├────┬───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define PV_NUM KC_1
|
||||
|
||||
// Row 2
|
||||
#define PV_LS KC_Q
|
||||
#define PV_LT KC_W
|
||||
#define PV_LP KC_E
|
||||
#define PV_LH KC_R
|
||||
#define PV_STAR KC_Y
|
||||
#define PV_RF KC_U
|
||||
#define PV_RP KC_I
|
||||
#define PV_RL KC_O
|
||||
#define PV_RT KC_P
|
||||
#define PV_RD KC_LBRC
|
||||
#define PV_RR KC_J
|
||||
#define PV_RB KC_K
|
||||
#define PV_RG KC_L
|
||||
#define PV_RS KC_SCLN
|
||||
#define PV_RZ KC_QUOT
|
||||
#define PV_RF KC_U
|
||||
#define PV_RP KC_I
|
||||
#define PV_RL KC_O
|
||||
#define PV_RT KC_P
|
||||
#define PV_RD KC_LBRC
|
||||
|
||||
#define PV_A KC_C
|
||||
#define PV_O KC_V
|
||||
#define PV_E KC_N
|
||||
#define PV_U KC_M
|
||||
// Row 3
|
||||
#define PV_LK KC_S
|
||||
#define PV_LW KC_D
|
||||
#define PV_LR KC_F
|
||||
#define PV_RR KC_J
|
||||
#define PV_RB KC_K
|
||||
#define PV_RG KC_L
|
||||
#define PV_RS KC_SCLN
|
||||
#define PV_RZ KC_QUOT
|
||||
|
||||
#endif
|
||||
// Row 4
|
||||
#define PV_A KC_C
|
||||
#define PV_O KC_V
|
||||
#define PV_E KC_N
|
||||
#define PV_U KC_M
|
||||
|
||||
151
quantum/keymap_extras/keymap_portuguese.h
Normal file
151
quantum/keymap_extras/keymap_portuguese.h
Normal file
@@ -0,0 +1,151 @@
|
||||
/* Copyright 2020
|
||||
*
|
||||
* 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 "keymap.h"
|
||||
|
||||
// clang-format off
|
||||
|
||||
/*
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ \ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ « │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ + │ ´ │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Ç │ º │ ~ │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define PT_BSLS KC_GRV // (backslash)
|
||||
#define PT_1 KC_1 // 1
|
||||
#define PT_2 KC_2 // 2
|
||||
#define PT_3 KC_3 // 3
|
||||
#define PT_4 KC_4 // 4
|
||||
#define PT_5 KC_5 // 5
|
||||
#define PT_6 KC_6 // 6
|
||||
#define PT_7 KC_7 // 7
|
||||
#define PT_8 KC_8 // 8
|
||||
#define PT_9 KC_9 // 9
|
||||
#define PT_0 KC_0 // 0
|
||||
#define PT_QUOT KC_MINS // '
|
||||
#define PT_LDAQ KC_EQL // «
|
||||
// Row 2
|
||||
#define PT_Q KC_Q // Q
|
||||
#define PT_W KC_W // W
|
||||
#define PT_E KC_E // E
|
||||
#define PT_R KC_R // R
|
||||
#define PT_T KC_T // T
|
||||
#define PT_Y KC_Y // Y
|
||||
#define PT_U KC_U // U
|
||||
#define PT_I KC_I // I
|
||||
#define PT_O KC_O // O
|
||||
#define PT_P KC_P // P
|
||||
#define PT_PLUS KC_LBRC // +
|
||||
#define PT_ACUT KC_RBRC // ´ (dead)
|
||||
// Row 3
|
||||
#define PT_A KC_A // A
|
||||
#define PT_S KC_S // S
|
||||
#define PT_D KC_D // D
|
||||
#define PT_F KC_F // F
|
||||
#define PT_G KC_G // G
|
||||
#define PT_H KC_H // H
|
||||
#define PT_J KC_J // J
|
||||
#define PT_K KC_K // K
|
||||
#define PT_L KC_L // L
|
||||
#define PT_CCED KC_SCLN // Ç
|
||||
#define PT_MORD KC_QUOT // º
|
||||
#define PT_TILD KC_NUHS // ~ (dead)
|
||||
// Row 4
|
||||
#define PT_LABK KC_NUBS // <
|
||||
#define PT_Z KC_Z // Z
|
||||
#define PT_X KC_X // X
|
||||
#define PT_C KC_C // C
|
||||
#define PT_V KC_V // V
|
||||
#define PT_B KC_B // B
|
||||
#define PT_N KC_N // N
|
||||
#define PT_M KC_M // M
|
||||
#define PT_COMM KC_COMM // ,
|
||||
#define PT_DOT KC_DOT // .
|
||||
#define PT_MINS KC_SLSH // -
|
||||
|
||||
/* Shifted symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ | │ ! │ " │ # │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ » │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ * │ ` │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ ª │ ^ │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define PT_PIPE S(PT_BSLS) // |
|
||||
#define PT_EXLM S(PT_1) // !
|
||||
#define PT_DQUO S(PT_2) // "
|
||||
#define PT_HASH S(PT_3) // #
|
||||
#define PT_DLR S(PT_4) // $
|
||||
#define PT_PERC S(PT_5) // %
|
||||
#define PT_AMPR S(PT_6) // &
|
||||
#define PT_SLSH S(PT_7) // /
|
||||
#define PT_LPRN S(PT_8) // (
|
||||
#define PT_RPRN S(PT_9) // )
|
||||
#define PT_EQL S(PT_0) // =
|
||||
#define PT_QUES S(PT_QUOT) // ?
|
||||
#define PT_RDAQ S(PT_LDAQ) // »
|
||||
// Row 2
|
||||
#define PT_ASTR S(PT_PLUS) // *
|
||||
#define PT_GRV S(PT_ACUT) // ` (dead)
|
||||
// Row 3
|
||||
#define PT_FORD S(PT_MORD) // ª
|
||||
#define PT_CIRC S(PT_TILD) // ^ (dead)
|
||||
// Row 4
|
||||
#define PT_RABK S(PT_LABK) // >
|
||||
#define PT_SCLN S(PT_COMM) // ;
|
||||
#define PT_COLN S(PT_DOT) // :
|
||||
#define PT_UNDS S(PT_MINS) // _
|
||||
|
||||
/* AltGr symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ │ │ @ │ £ │ § │ │ │ { │ [ │ ] │ } │ │ │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ │ │ € │ │ │ │ │ │ │ │ ¨ │ │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define PT_AT ALGR(PT_2) // @
|
||||
#define PT_PND ALGR(PT_3) // £
|
||||
#define PT_SECT ALGR(PT_4) // §
|
||||
#define PT_LCBR ALGR(PT_7) // {
|
||||
#define PT_LBRC ALGR(PT_8) // [
|
||||
#define PT_RBRC ALGR(PT_9) // ]
|
||||
#define PT_RCBR ALGR(PT_0) // }
|
||||
// Row 2
|
||||
#define PT_DIAE ALGR(PT_PLUS) // ¨ (dead)
|
||||
#define PT_EURO ALGR(PT_E) // €
|
||||
@@ -1,5 +1,4 @@
|
||||
/* Copyright 2018 Žan Pevec
|
||||
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -15,93 +14,158 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef KEYMAP_SLOVENIAN
|
||||
#define KEYMAP_SLOVENIAN
|
||||
#pragma once
|
||||
|
||||
#include "keymap.h"
|
||||
|
||||
// Swapped Z and Y
|
||||
#define SI_Z KC_Y
|
||||
#define SI_Y KC_Z
|
||||
// clang-format off
|
||||
|
||||
// Special characters
|
||||
#define SI_CV KC_SCLN
|
||||
#define SI_SV KC_LBRC
|
||||
#define SI_ZV KC_BSLS
|
||||
/*
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ ¸ │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ + │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ Q │ W │ E │ R │ T │ Z │ U │ I │ O │ P │ Š │ Đ │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Č │ Ć │ Ž │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ < │ Y │ X │ C │ V │ B │ N │ M │ , │ . │ - │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define SI_CEDL KC_GRV // ¸ (dead)
|
||||
#define SI_1 KC_1 // 1
|
||||
#define SI_2 KC_2 // 2
|
||||
#define SI_3 KC_3 // 3
|
||||
#define SI_4 KC_4 // 4
|
||||
#define SI_5 KC_5 // 5
|
||||
#define SI_6 KC_6 // 6
|
||||
#define SI_7 KC_7 // 7
|
||||
#define SI_8 KC_8 // 8
|
||||
#define SI_9 KC_9 // 9
|
||||
#define SI_0 KC_0 // 0
|
||||
#define SI_QUOT KC_MINS // '
|
||||
#define SI_PLUS KC_EQL // +
|
||||
// Row 2
|
||||
#define SI_Q KC_Q // Q
|
||||
#define SI_W KC_W // W
|
||||
#define SI_E KC_E // E
|
||||
#define SI_R KC_R // R
|
||||
#define SI_T KC_T // T
|
||||
#define SI_Z KC_Y // Z
|
||||
#define SI_U KC_U // U
|
||||
#define SI_I KC_I // I
|
||||
#define SI_O KC_O // O
|
||||
#define SI_P KC_P // P
|
||||
#define SI_SCAR KC_LBRC // Š
|
||||
#define SI_DSTR KC_RBRC // Đ
|
||||
// Row 3
|
||||
#define SI_A KC_A // A
|
||||
#define SI_S KC_S // S
|
||||
#define SI_D KC_D // D
|
||||
#define SI_F KC_F // F
|
||||
#define SI_G KC_G // G
|
||||
#define SI_H KC_H // H
|
||||
#define SI_J KC_J // J
|
||||
#define SI_K KC_K // K
|
||||
#define SI_L KC_L // L
|
||||
#define SI_CCAR KC_SCLN // Č
|
||||
#define SI_CACU KC_QUOT // Ć
|
||||
#define SI_ZCAR KC_NUHS // Ž
|
||||
// Row 4
|
||||
#define SI_LABK KC_NUBS // <
|
||||
#define SI_Y KC_Z // Y
|
||||
#define SI_X KC_X // X
|
||||
#define SI_C KC_C // C
|
||||
#define SI_V KC_V // V
|
||||
#define SI_B KC_B // B
|
||||
#define SI_N KC_N // N
|
||||
#define SI_M KC_M // M
|
||||
#define SI_COMM KC_COMM // ,
|
||||
#define SI_DOT KC_DOT // .
|
||||
#define SI_MINS KC_SLSH // -
|
||||
|
||||
#define SI_A KC_A
|
||||
#define SI_B KC_B
|
||||
#define SI_C KC_C
|
||||
#define SI_D KC_D
|
||||
#define SI_E KC_E
|
||||
#define SI_F KC_F
|
||||
#define SI_G KC_G
|
||||
#define SI_H KC_H
|
||||
#define SI_I KC_I
|
||||
#define SI_J KC_J
|
||||
#define SI_K KC_K
|
||||
#define SI_L KC_L
|
||||
#define SI_M KC_M
|
||||
#define SI_N KC_N
|
||||
#define SI_O KC_O
|
||||
#define SI_P KC_P
|
||||
#define SI_Q KC_Q
|
||||
#define SI_R KC_R
|
||||
#define SI_S KC_S
|
||||
#define SI_T KC_T
|
||||
#define SI_U KC_U
|
||||
#define SI_V KC_V
|
||||
#define SI_W KC_W
|
||||
#define SI_X KC_X
|
||||
/* Shifted symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ ¨ │ ! │ " │ # │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ * │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define SI_DIAE S(SI_CEDL) // ¨ (dead)
|
||||
#define SI_EXLM S(SI_1) // !
|
||||
#define SI_DQUO S(SI_2) // "
|
||||
#define SI_HASH S(SI_3) // #
|
||||
#define SI_DLR S(SI_4) // $
|
||||
#define SI_PERC S(SI_5) // %
|
||||
#define SI_AMPR S(SI_6) // &
|
||||
#define SI_SLSH S(SI_7) // /
|
||||
#define SI_LPRN S(SI_8) // (
|
||||
#define SI_RPRN S(SI_9) // )
|
||||
#define SI_EQL S(SI_0) // =
|
||||
#define SI_QUES S(SI_QUOT) // ?
|
||||
#define SI_ASTR S(SI_PLUS) // *
|
||||
// Row 4
|
||||
#define SI_RABK S(SI_LABK) // >
|
||||
#define SI_SCLN S(SI_COMM) // ;
|
||||
#define SI_COLN S(SI_DOT) // :
|
||||
#define SI_UNDS S(SI_MINS) // _
|
||||
|
||||
#define SI_0 KC_0
|
||||
#define SI_1 KC_1
|
||||
#define SI_2 KC_2
|
||||
#define SI_3 KC_3
|
||||
#define SI_4 KC_4
|
||||
#define SI_5 KC_5
|
||||
#define SI_6 KC_6
|
||||
#define SI_7 KC_7
|
||||
#define SI_8 KC_8
|
||||
#define SI_9 KC_9
|
||||
/* AltGr symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ │ ~ │ ˇ │ ^ │ ˘ │ ° │ ˛ │ ` │ ˙ │ ´ │ ˝ │ │ │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ \ │ | │ € │ │ │ │ │ │ │ │ ÷ │ × │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ │ │ │ [ │ ] │ │ │ ł │ Ł │ │ ß │ ¤ │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ │ │ │ │ @ │ { │ } │ § │ │ │ │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define SI_TILD ALGR(SI_1) // ~
|
||||
#define SI_CARN ALGR(SI_2) // ˇ (dead)
|
||||
#define SI_CIRC ALGR(SI_3) // ^ (dead)
|
||||
#define SI_BREV ALGR(SI_4) // ˘ (dead)
|
||||
#define SI_DEG ALGR(SI_5) // ° (dead)
|
||||
#define SI_OGON ALGR(SI_6) // ˛ (dead)
|
||||
#define SI_GRV ALGR(SI_7) // `
|
||||
#define SI_DOTA ALGR(SI_8) // ˙ (dead)
|
||||
#define SI_ACCU ALGR(SI_9) // ´ (dead)
|
||||
#define SI_DACU ALGR(SI_0) // ˝ (dead)
|
||||
// Row 2
|
||||
#define SI_BSLS ALGR(SI_Q) // (backslash)
|
||||
#define SI_PIPE ALGR(SI_W) // |
|
||||
#define SI_EURO ALGR(SI_E) // €
|
||||
#define SI_DIV ALGR(SI_SCAR) // ÷
|
||||
#define SI_MUL ALGR(SI_DSTR) // ×
|
||||
// Row 3
|
||||
#define SI_LBRC ALGR(SI_F) // [
|
||||
#define SI_RBRC ALGR(SI_G) // ]
|
||||
#define SI_LLST ALGR(SI_K) // ł
|
||||
#define SI_CLST ALGR(SI_L) // Ł
|
||||
#define SI_SS ALGR(SI_CACU) // ß
|
||||
#define SI_CURR ALGR(SI_ZCAR) // ¤
|
||||
// Row 4
|
||||
#define SI_AT ALGR(SI_V) // @
|
||||
#define SI_LCBR ALGR(SI_B) // {
|
||||
#define SI_RCBR ALGR(SI_N) // }
|
||||
#define SI_SECT ALGR(SI_M) // §
|
||||
|
||||
#define SI_DOT KC_DOT
|
||||
#define SI_COMM KC_COMM
|
||||
|
||||
#define SI_PLUS KC_EQL // + and * and ~
|
||||
#define SI_QOT KC_MINS // Single quote
|
||||
#define SI_MINS KC_SLSH // - and _
|
||||
|
||||
// shifted characters
|
||||
#define SI_EXLM LSFT(KC_1) // !
|
||||
#define SI_DQOT LSFT(KC_2) // "
|
||||
#define SI_HASH LSFT(KC_3) // #
|
||||
#define SI_DLR LSFT(KC_4) // $
|
||||
#define SI_PERC LSFT(KC_5) // %
|
||||
#define SI_AMPR LSFT(KC_6) // &
|
||||
#define SI_SLSH LSFT(KC_7) // /
|
||||
#define SI_LPRN LSFT(KC_8) // (
|
||||
#define SI_RPRN LSFT(KC_9) // )
|
||||
#define SI_EQL LSFT(KC_0) // =
|
||||
#define SI_QST LSFT(SI_QOT) // ?
|
||||
#define SI_ASTR LSFT(SI_PLUS) // *
|
||||
#define SI_COLN LSFT(KC_DOT) // :
|
||||
#define SI_SCLN LSFT(KC_COMM) // ;
|
||||
#define SI_UNDS LSFT(SI_MINS) // _
|
||||
|
||||
// Alt Gr-ed characters
|
||||
#define SI_CIRC ALGR(KC_3) // ^
|
||||
#define SI_DEG ALGR(KC_5) // °
|
||||
#define SI_GRV ALGR(KC_7) // `
|
||||
#define SI_ACCU ALGR(KC_9) // ´
|
||||
#define SI_LCBR ALGR(KC_B) // {
|
||||
#define SI_RCBR ALGR(KC_N) // }
|
||||
#define SI_LBRC ALGR(KC_F) // [
|
||||
#define SI_RBRC ALGR(KC_G) // ]
|
||||
#define SI_BSLS ALGR(KC_Q) // backslash
|
||||
#define SI_AT ALGR(KC_V) // @
|
||||
#define SI_EURO ALGR(KC_E) // €
|
||||
#define SI_TILD ALGR(KC_1) // ~
|
||||
#define SI_PIPE ALGR(KC_W) // |
|
||||
|
||||
#endif
|
||||
// DEPRECATED
|
||||
#define SI_QOT SI_QUOT
|
||||
#define SI_SV SI_SCAR
|
||||
#define SI_CV SI_CCAR
|
||||
#define SI_ZV SI_ZCAR
|
||||
#define SI_DQOT SI_DQUO
|
||||
#define SI_QST SI_QUES
|
||||
|
||||
@@ -13,61 +13,150 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#ifndef KEYMAP_SPANISH_H
|
||||
#define KEYMAP_SPANISH_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "keymap.h"
|
||||
|
||||
// Normal characters
|
||||
#define ES_OVRR KC_GRV
|
||||
#define ES_APOS KC_MINS
|
||||
#define ES_IEXL KC_EQL
|
||||
// clang-format off
|
||||
|
||||
#define ES_GRV KC_LBRC
|
||||
#define ES_PLUS KC_RBRC
|
||||
/*
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ º │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ ' │ ¡ │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ ` │ + │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Ñ │ ´ │ Ç │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define ES_MORD KC_GRV // º
|
||||
#define ES_1 KC_1 // 1
|
||||
#define ES_2 KC_2 // 2
|
||||
#define ES_3 KC_3 // 3
|
||||
#define ES_4 KC_4 // 4
|
||||
#define ES_5 KC_5 // 5
|
||||
#define ES_6 KC_6 // 6
|
||||
#define ES_7 KC_7 // 7
|
||||
#define ES_8 KC_8 // 8
|
||||
#define ES_9 KC_9 // 9
|
||||
#define ES_0 KC_0 // 0
|
||||
#define ES_QUOT KC_MINS // '
|
||||
#define ES_IEXL KC_EQL // ¡
|
||||
// Row 2
|
||||
#define ES_Q KC_Q // Q
|
||||
#define ES_W KC_W // W
|
||||
#define ES_E KC_E // E
|
||||
#define ES_R KC_R // R
|
||||
#define ES_T KC_T // T
|
||||
#define ES_Y KC_Y // Y
|
||||
#define ES_U KC_U // U
|
||||
#define ES_I KC_I // I
|
||||
#define ES_O KC_O // O
|
||||
#define ES_P KC_P // P
|
||||
#define ES_GRV KC_LBRC // ` (dead)
|
||||
#define ES_PLUS KC_RBRC // +
|
||||
// Row 3
|
||||
#define ES_A KC_A // A
|
||||
#define ES_S KC_S // S
|
||||
#define ES_D KC_D // D
|
||||
#define ES_F KC_F // F
|
||||
#define ES_G KC_G // G
|
||||
#define ES_H KC_H // H
|
||||
#define ES_J KC_J // J
|
||||
#define ES_K KC_K // K
|
||||
#define ES_L KC_L // L
|
||||
#define ES_NTIL KC_SCLN // Ñ
|
||||
#define ES_ACUT KC_QUOT // ´ (dead)
|
||||
#define ES_CCED KC_NUHS // Ç
|
||||
// Row 4
|
||||
#define ES_LABK KC_NUBS // <
|
||||
#define ES_Z KC_Z // Z
|
||||
#define ES_X KC_X // X
|
||||
#define ES_C KC_C // C
|
||||
#define ES_V KC_V // V
|
||||
#define ES_B KC_B // B
|
||||
#define ES_N KC_N // N
|
||||
#define ES_M KC_M // M
|
||||
#define ES_COMM KC_COMM // ,
|
||||
#define ES_DOT KC_DOT // .
|
||||
#define ES_MINS KC_SLSH // -
|
||||
|
||||
#define ES_NTIL KC_SCLN
|
||||
#define ES_ACUT KC_QUOT
|
||||
#define ES_CCED KC_NUHS
|
||||
/* Shifted symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ ª │ ! │ " │ · │ $ │ % │ & │ / │ ( │ ) │ = │ ? │ ¿ │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ ^ │ * │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ ¨ │ │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define ES_FORD S(ES_MORD) // ª
|
||||
#define ES_EXLM S(ES_1) // !
|
||||
#define ES_DQUO S(ES_2) // "
|
||||
#define ES_BULT S(ES_3) // ·
|
||||
#define ES_DLR S(ES_4) // $
|
||||
#define ES_PERC S(ES_5) // %
|
||||
#define ES_AMPR S(ES_6) // &
|
||||
#define ES_SLSH S(ES_7) // /
|
||||
#define ES_LPRN S(ES_8) // (
|
||||
#define ES_RPRN S(ES_9) // )
|
||||
#define ES_EQL S(ES_0) // =
|
||||
#define ES_QUES S(ES_QUOT) // ?
|
||||
#define ES_IQUE S(ES_IEXL) // ¿
|
||||
// Row 2
|
||||
#define ES_CIRC S(ES_GRV) // ^ (dead)
|
||||
#define ES_ASTR S(ES_PLUS) // *
|
||||
// Row 3
|
||||
#define ES_DIAE S(ES_GRV) // ¨ (dead)
|
||||
// Row 4
|
||||
#define ES_RABK S(ES_LABK) // >
|
||||
#define ES_SCLN S(KC_COMM) // ;
|
||||
#define ES_COLN S(KC_DOT) // :
|
||||
#define ES_UNDS S(ES_MINS) // _
|
||||
|
||||
#define ES_LESS KC_NUBS
|
||||
#define ES_MINS KC_SLSH
|
||||
/* AltGr symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ \ │ | │ @ │ # │ ~ │ € │ ¬ │ │ │ │ │ │ │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ [ │ ] │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ { │ } │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define ES_BSLS ALGR(ES_MORD) // (backslash)
|
||||
#define ES_PIPE ALGR(ES_1) // |
|
||||
#define ES_AT ALGR(ES_2) // @
|
||||
#define ES_HASH ALGR(ES_3) // #
|
||||
#define ES_TILD ALGR(ES_4) // ~
|
||||
#define ES_EURO ALGR(ES_5) // €
|
||||
#define ES_NOT ALGR(ES_6) // ¬
|
||||
// Row 2
|
||||
#define ES_LBRC ALGR(ES_GRV) // [
|
||||
#define ES_RBRC ALGR(ES_PLUS) // ]
|
||||
// Row 3
|
||||
#define ES_LCBR ALGR(ES_ACUT) // {
|
||||
#define ES_RCBR ALGR(ES_CCED) // }
|
||||
|
||||
// Shifted characters
|
||||
#define ES_ASML LSFT(ES_OVRR)
|
||||
#define ES_QUOT LSFT(KC_2)
|
||||
#define ES_OVDT LSFT(KC_3)
|
||||
#define ES_AMPR LSFT(KC_6)
|
||||
#define ES_SLSH LSFT(KC_7)
|
||||
#define ES_LPRN LSFT(KC_8)
|
||||
#define ES_RPRN LSFT(KC_9)
|
||||
#define ES_EQL LSFT(KC_0)
|
||||
#define ES_QUES LSFT(ES_APOS)
|
||||
#define ES_IQUE LSFT(ES_IEXL)
|
||||
|
||||
#define ES_CIRC LSFT(ES_GRV)
|
||||
#define ES_ASTR LSFT(ES_PLUS)
|
||||
|
||||
#define ES_UMLT LSFT(ES_GRV)
|
||||
|
||||
#define ES_GRTR LSFT(ES_LESS)
|
||||
#define ES_SCLN LSFT(KC_COMM)
|
||||
#define ES_COLN LSFT(KC_DOT)
|
||||
#define ES_UNDS LSFT(ES_MINS)
|
||||
|
||||
// Alt Gr-ed characters
|
||||
#define ES_BSLS ALGR(ES_OVRR)
|
||||
#define ES_PIPE ALGR(KC_1)
|
||||
#define ES_AT ALGR(KC_2)
|
||||
#define ES_HASH ALGR(KC_3)
|
||||
#define ES_TILD ALGR(ES_NTIL)
|
||||
#define ES_EURO ALGR(KC_5)
|
||||
#define ES_NOT ALGR(KC_6)
|
||||
|
||||
#define ES_LBRC ALGR(ES_GRV)
|
||||
#define ES_RBRC ALGR(ES_PLUS)
|
||||
|
||||
#define ES_LCBR ALGR(ES_ACUT)
|
||||
#define ES_RCBR ALGR(ES_CCED)
|
||||
|
||||
#endif
|
||||
// DEPRECATED
|
||||
#define ES_OVRR ES_MORD
|
||||
#define ES_APOS ES_QUOT
|
||||
#define ES_LESS ES_LABK
|
||||
#define ES_ASML ES_FORD
|
||||
#define ES_OVDT ES_BULT
|
||||
#define ES_UMLT ES_DIAE
|
||||
#define ES_GRTR ES_RABK
|
||||
|
||||
@@ -14,74 +14,165 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef KEYMAP_SWEDISH_H
|
||||
#define KEYMAP_SWEDISH_H
|
||||
#pragma once
|
||||
|
||||
#include "keymap.h"
|
||||
|
||||
// Normal characters
|
||||
#define SE_HALF KC_GRV
|
||||
#define SE_PLUS KC_MINS
|
||||
#define SE_ACUT KC_EQL
|
||||
// clang-format off
|
||||
|
||||
#define SE_AM KC_LBRC
|
||||
#define SE_QUOT KC_RBRC // this is the "umlaut" char on Nordic keyboards, Apple layout
|
||||
#define SE_AE KC_QUOT // ä
|
||||
#define SE_OSLH KC_SCLN // ö
|
||||
#define SE_APOS KC_NUHS
|
||||
/*
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ § │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ + │ ´ │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ Q │ W │ E │ R │ T │ Y │ U │ I │ O │ P │ Å │ ¨ │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ A │ S │ D │ F │ G │ H │ J │ K │ L │ Ö │ Ä │ ' │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ < │ Z │ X │ C │ V │ B │ N │ M │ , │ . │ - │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define SE_SECT KC_GRV // §
|
||||
#define SE_1 KC_1 // 1
|
||||
#define SE_2 KC_2 // 2
|
||||
#define SE_3 KC_3 // 3
|
||||
#define SE_4 KC_4 // 4
|
||||
#define SE_5 KC_5 // 5
|
||||
#define SE_6 KC_6 // 6
|
||||
#define SE_7 KC_7 // 7
|
||||
#define SE_8 KC_8 // 8
|
||||
#define SE_9 KC_9 // 9
|
||||
#define SE_0 KC_0 // 0
|
||||
#define SE_PLUS KC_MINS // +
|
||||
#define SE_ACUT KC_EQL // ´ (dead)
|
||||
// Row 2
|
||||
#define SE_Q KC_Q // Q
|
||||
#define SE_W KC_W // W
|
||||
#define SE_E KC_E // E
|
||||
#define SE_R KC_R // R
|
||||
#define SE_T KC_T // T
|
||||
#define SE_Y KC_Y // Y
|
||||
#define SE_U KC_U // U
|
||||
#define SE_I KC_I // I
|
||||
#define SE_O KC_O // O
|
||||
#define SE_P KC_P // P
|
||||
#define SE_ARNG KC_LBRC // Å
|
||||
#define SE_DIAE KC_RBRC // ¨ (dead)
|
||||
// Row 3
|
||||
#define SE_A KC_A // A
|
||||
#define SE_S KC_S // S
|
||||
#define SE_D KC_D // D
|
||||
#define SE_F KC_F // F
|
||||
#define SE_G KC_G // G
|
||||
#define SE_H KC_H // H
|
||||
#define SE_J KC_J // J
|
||||
#define SE_K KC_K // K
|
||||
#define SE_L KC_L // L
|
||||
#define SE_ODIA KC_SCLN // Ö
|
||||
#define SE_ADIA KC_QUOT // Ä
|
||||
#define SE_QUOT KC_NUHS // '
|
||||
// Row 4
|
||||
#define SE_LABK KC_NUBS // <
|
||||
#define SE_Z KC_Z // Z
|
||||
#define SE_X KC_X // X
|
||||
#define SE_C KC_C // C
|
||||
#define SE_V KC_V // V
|
||||
#define SE_B KC_B // B
|
||||
#define SE_N KC_N // N
|
||||
#define SE_M KC_M // M
|
||||
#define SE_COMM KC_COMM // ,
|
||||
#define SE_DOT KC_DOT // .
|
||||
#define SE_MINS KC_SLSH // -
|
||||
|
||||
#define SE_LESS KC_NUBS
|
||||
#define SE_MINS KC_SLSH
|
||||
/* Shifted symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ ½ │ ! │ " │ # │ ¤ │ % │ & │ / │ ( │ ) │ = │ ? │ ` │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ ^ │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ * │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ > │ │ │ │ │ │ │ │ ; │ : │ _ │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define SE_HALF S(SE_SECT) // ½
|
||||
#define SE_EXLM S(SE_1) // !
|
||||
#define SE_DQUO S(SE_2) // "
|
||||
#define SE_HASH S(SE_3) // #
|
||||
#define SE_CURR S(SE_4) // ¤
|
||||
#define SE_PERC S(SE_5) // %
|
||||
#define SE_AMPR S(SE_6) // &
|
||||
#define SE_SLSH S(SE_7) // /
|
||||
#define SE_LPRN S(SE_8) // (
|
||||
#define SE_RPRN S(SE_9) // )
|
||||
#define SE_EQL S(SE_0) // =
|
||||
#define SE_QUES S(SE_PLUS) // ?
|
||||
#define SE_GRV S(SE_ACUT) // ` (dead)
|
||||
// Row 2
|
||||
#define SE_CIRC S(SE_DIAE) // ^ (dead)
|
||||
// Row 3
|
||||
#define SE_ASTR S(SE_QUOT) // *
|
||||
// Row 4
|
||||
#define SE_RABK S(SE_LABK) // >
|
||||
#define SE_SCLN S(SE_COMM) // ;
|
||||
#define SE_COLN S(SE_DOT) // :
|
||||
#define SE_UNDS S(SE_MINS) // _
|
||||
|
||||
// Shifted characters
|
||||
#define SE_SECT LSFT(SE_HALF)
|
||||
#define SE_QUO2 LSFT(KC_2)
|
||||
#define SE_BULT LSFT(KC_4)
|
||||
#define SE_AMPR LSFT(KC_6)
|
||||
#define SE_SLSH LSFT(KC_7)
|
||||
#define SE_LPRN LSFT(KC_8)
|
||||
#define SE_RPRN LSFT(KC_9)
|
||||
#define SE_EQL LSFT(KC_0)
|
||||
#define SE_QUES LSFT(SE_PLUS)
|
||||
#define SE_GRV LSFT(SE_ACUT)
|
||||
/* AltGr symbols
|
||||
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
|
||||
* │ │ │ @ │ £ │ $ │ € │ │ { │ [ │ ] │ } │ \ │ │ │
|
||||
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ ~ │ │
|
||||
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐ │
|
||||
* │ │ │ │ │ │ │ │ │ │ │ │ │ │ │
|
||||
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴───┴────┤
|
||||
* │ │ | │ │ │ │ │ │ │ µ │ │ │ │ │
|
||||
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬────┬────┤
|
||||
* │ │ │ │ │ │ │ │ │
|
||||
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
|
||||
*/
|
||||
// Row 1
|
||||
#define SE_AT ALGR(SE_2) // @
|
||||
#define SE_PND ALGR(SE_3) // £
|
||||
#define SE_DLR ALGR(SE_4) // $
|
||||
#define SE_EURO ALGR(SE_5) // €
|
||||
#define SE_LCBR ALGR(SE_7) // {
|
||||
#define SE_LBRC ALGR(SE_8) // [
|
||||
#define SE_RBRC ALGR(SE_9) // ]
|
||||
#define SE_RCBR ALGR(SE_0) // }
|
||||
#define SE_BSLS ALGR(SE_PLUS) // (backslash)
|
||||
// Row 2
|
||||
#define SE_TILD ALGR(SE_DIAE) // ~ (dead)
|
||||
// Row 4
|
||||
#define SE_PIPE ALGR(SE_LABK) // |
|
||||
#define SE_MICR ALGR(SE_M) // µ
|
||||
|
||||
#define SE_CIRC LSFT(KC_RBRC) // ^
|
||||
// DEPRECATED
|
||||
#include "keymap_nordic.h"
|
||||
|
||||
#define SE_GRTR LSFT(SE_LESS)
|
||||
#define SE_SCLN LSFT(KC_COMM)
|
||||
#define SE_COLN LSFT(KC_DOT)
|
||||
#define SE_UNDS LSFT(SE_MINS)
|
||||
#undef NO_AE
|
||||
#undef NO_CIRC
|
||||
#undef NO_OSLH
|
||||
|
||||
// Alt Gr-ed characters
|
||||
#define SE_AT ALGR(KC_2)
|
||||
#define SE_PND ALGR(KC_3)
|
||||
#define SE_DLR ALGR(KC_4)
|
||||
#define SE_LCBR ALGR(KC_7)
|
||||
#define SE_LBRC ALGR(KC_8)
|
||||
#define SE_RBRC ALGR(KC_9)
|
||||
#define SE_RCBR ALGR(KC_0)
|
||||
#define SE_PIPE ALGR(KC_NUBS)
|
||||
|
||||
#define SE_EURO ALGR(KC_E)
|
||||
#define SE_TILD ALGR(SE_QUOT)
|
||||
|
||||
#define SE_BSLS ALGR(KC_MINS)
|
||||
#define SE_MU ALGR(KC_M)
|
||||
|
||||
#define SE_AA KC_LBRC // å
|
||||
#define SE_ASTR LSFT(KC_BSLS) // *
|
||||
|
||||
// Norwegian unique MAC characters (not vetted for Swedish)
|
||||
#define SE_ACUT_MAC KC_EQL // =
|
||||
#define SE_APOS_MAC KC_NUBS // '
|
||||
#define SE_AT_MAC KC_BSLS // @
|
||||
#define SE_BSLS_MAC ALGR(LSFT(KC_7)) // '\'
|
||||
#define SE_DLR_MAC ALGR(KC_4) // $
|
||||
#define SE_GRV_MAC ALGR(SE_BSLS) // `
|
||||
#define SE_GRTR_MAC LSFT(KC_GRV) // >
|
||||
#define SE_LCBR_MAC ALGR(LSFT(KC_8)) // {
|
||||
#define SE_LESS_MAC KC_GRV // <
|
||||
#define SE_PIPE_MAC ALGR(KC_7) // |
|
||||
#define SE_RCBR_MAC ALGR(LSFT(KC_9)) // }
|
||||
|
||||
#endif
|
||||
#define NO_AE SE_AE
|
||||
#define NO_CIRC SE_CIRC
|
||||
#define NO_OSLH SE_ODIA
|
||||
#define NO_AA SE_ARNG
|
||||
#define NO_ASTR SE_ASTR
|
||||
// Swedish macOS symbols (not vetted)
|
||||
#define NO_ACUT_MAC SE_ACUT
|
||||
#define NO_APOS_MAC SE_LABK
|
||||
#define NO_AT_MAC SE_ADIA
|
||||
#define NO_BSLS_MAC S(SE_LCBR)
|
||||
#define NO_DLR_MAC SE_CURR
|
||||
#define NO_GRV_MAC SE_BSLS
|
||||
#define NO_GRTR_MAC SE_HALF
|
||||
#define NO_LCBR_MAC S(SE_LBRC)
|
||||
#define NO_LESS_MAC SE_SECT
|
||||
#define NO_PIPE_MAC SE_LCBR
|
||||
#define NO_RCBR_MAC S(SE_RBRC)
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user