aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/README.md2
-rw-r--r--docs/_langs.md2
-rw-r--r--docs/_summary.md9
-rw-r--r--docs/adc_driver.md50
-rw-r--r--docs/cli.md46
-rw-r--r--docs/cli_development.md32
-rw-r--r--docs/coding_conventions_c.md2
-rw-r--r--docs/coding_conventions_python.md2
-rw-r--r--docs/compatible_microcontrollers.md47
-rw-r--r--docs/config_options.md7
-rw-r--r--docs/contributing.md12
-rw-r--r--docs/custom_quantum_functions.md129
-rw-r--r--docs/de/README.md33
-rw-r--r--docs/de/_summary.md121
-rw-r--r--docs/de/driver_installation_zadig.md47
-rw-r--r--docs/de/newbs.md22
-rw-r--r--docs/de/newbs_building_firmware.md78
-rw-r--r--docs/de/newbs_flashing.md369
-rw-r--r--docs/de/newbs_getting_started.md101
-rw-r--r--docs/de/newbs_learn_more_resources.md14
-rw-r--r--docs/de/newbs_testing_debugging.md100
-rw-r--r--docs/documentation_templates.md8
-rw-r--r--docs/es/README.md4
-rw-r--r--docs/es/_summary.md208
-rw-r--r--docs/faq_build.md35
-rw-r--r--docs/faq_debug.md70
-rw-r--r--docs/faq_keymap.md63
-rw-r--r--docs/feature_advanced_keycodes.md4
-rw-r--r--docs/feature_bootmagic.md62
-rw-r--r--docs/feature_debounce_type.md10
-rw-r--r--docs/feature_dynamic_macros.md75
-rw-r--r--docs/feature_haptic_feedback.md16
-rw-r--r--docs/feature_leader_key.md8
-rw-r--r--docs/feature_macros.md19
-rw-r--r--docs/feature_rgb_matrix.md28
-rw-r--r--docs/feature_rgblight.md18
-rw-r--r--docs/feature_tap_dance.md2
-rw-r--r--docs/feature_userspace.md10
-rw-r--r--docs/flashing_bootloadhid.md2
-rw-r--r--docs/fr-fr/README.md4
-rw-r--r--docs/fr-fr/_summary.md162
-rw-r--r--docs/fr-fr/faq_build.md28
-rw-r--r--docs/fr-fr/faq_debug.md71
-rw-r--r--docs/fr-fr/faq_keymap.md67
-rw-r--r--docs/getting_started_build_tools.md15
-rw-r--r--docs/getting_started_github.md2
-rw-r--r--docs/getting_started_introduction.md2
-rw-r--r--docs/getting_started_make_guide.md2
-rw-r--r--docs/hardware_drivers.md2
-rw-r--r--docs/he-il/README.md4
-rw-r--r--docs/he-il/_summary.md211
-rw-r--r--docs/index.html28
-rw-r--r--docs/ja/README.md37
-rw-r--r--docs/ja/_summary.md121
-rw-r--r--docs/ja/arm_debugging.md92
-rw-r--r--docs/ja/config_options.md376
-rw-r--r--docs/ja/newbs.md41
-rw-r--r--docs/ja/newbs_best_practices.md263
-rw-r--r--docs/ja/newbs_building_firmware.md99
-rw-r--r--docs/ja/newbs_building_firmware_configurator.md113
-rw-r--r--docs/ja/newbs_flashing.md400
-rw-r--r--docs/ja/newbs_getting_started.md122
-rw-r--r--docs/ja/newbs_learn_more_resources.md32
-rw-r--r--docs/ja/newbs_testing_debugging.md107
-rw-r--r--docs/keycodes.md110
-rw-r--r--docs/newbs.md2
-rw-r--r--docs/newbs_best_practices.md163
-rw-r--r--docs/newbs_git_best_practices.md16
-rw-r--r--docs/newbs_git_resolving_merge_conflicts.md79
-rw-r--r--docs/newbs_git_resynchronize_a_branch.md71
-rw-r--r--docs/newbs_git_using_your_master_branch.md74
-rw-r--r--docs/proton_c_conversion.md2
-rw-r--r--docs/pt-br/README.md31
-rw-r--r--docs/pt-br/_summary.md121
-rw-r--r--docs/ru-ru/_summary.md123
-rw-r--r--docs/ru-ru/becoming_a_qmk_collaborator.md9
-rw-r--r--docs/ru-ru/getting_started_build_tools.md15
-rw-r--r--docs/ru-ru/getting_started_getting_help.md15
-rw-r--r--docs/ru-ru/getting_started_github.md58
-rw-r--r--docs/ru-ru/getting_started_introduction.md58
-rw-r--r--docs/translating.md50
-rw-r--r--docs/ws2812_driver.md13
-rw-r--r--docs/zh-cn/README.md4
-rw-r--r--docs/zh-cn/faq_build.md28
-rw-r--r--docs/zh-cn/faq_debug.md68
-rw-r--r--docs/zh-cn/faq_keymap.md63
86 files changed, 4195 insertions, 1246 deletions
diff --git a/docs/README.md b/docs/README.md
index 22ab243cd..9f9ca166b 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -15,7 +15,7 @@ QMK (*Quantum Mechanical Keyboard*) is an open source community that maintains Q
15 15
16If you plan on contributing a keymap, keyboard, or features to QMK, the easiest thing to do is [fork the repo through Github](https://github.com/qmk/qmk_firmware#fork-destination-box), and clone your repo locally to make your changes, push them, then open a [Pull Request](https://github.com/qmk/qmk_firmware/pulls) from your fork. 16If you plan on contributing a keymap, keyboard, or features to QMK, the easiest thing to do is [fork the repo through Github](https://github.com/qmk/qmk_firmware#fork-destination-box), and clone your repo locally to make your changes, push them, then open a [Pull Request](https://github.com/qmk/qmk_firmware/pulls) from your fork.
17 17
18Otherwise, you can either download it directly ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), or clone it via git (`git@github.com:qmk/qmk_firmware.git`), or https (`https://github.com/qmk/qmk_firmware.git`). 18Otherwise, you can clone it directly with `git clone https://github.com/qmk/qmk_firmware`. Do not download the zip or tar files; a git repository is required to download the submodules in order to compile.
19 19
20## How to Compile 20## How to Compile
21 21
diff --git a/docs/_langs.md b/docs/_langs.md
index 7a7f127a9..f7b375fb9 100644
--- a/docs/_langs.md
+++ b/docs/_langs.md
@@ -4,4 +4,6 @@
4 - [:es: Español](/es/) 4 - [:es: Español](/es/)
5 - [:fr: Français](/fr-fr/) 5 - [:fr: Français](/fr-fr/)
6 - [:he: עברית](/he-il/) 6 - [:he: עברית](/he-il/)
7 - [:brazil: Português](/pt-br/)
7 - [:ru: Русский](/ru-ru/) 8 - [:ru: Русский](/ru-ru/)
9 - [:jp: 日本語](/ja/)
diff --git a/docs/_summary.md b/docs/_summary.md
index dc6e88f95..f6b03867f 100644
--- a/docs/_summary.md
+++ b/docs/_summary.md
@@ -3,7 +3,10 @@
3 * [Building Your First Firmware](newbs_building_firmware.md) 3 * [Building Your First Firmware](newbs_building_firmware.md)
4 * [Flashing Firmware](newbs_flashing.md) 4 * [Flashing Firmware](newbs_flashing.md)
5 * [Testing and Debugging](newbs_testing_debugging.md) 5 * [Testing and Debugging](newbs_testing_debugging.md)
6 * [Git Best Practices](newbs_best_practices.md) 6 * [Best Git Practices](newbs_git_best_practices.md)
7 * [Using Your Fork's Master](newbs_git_using_your_master_branch.md)
8 * [Resolving Merge Conflicts](newbs_git_resolving_merge_conflicts.md)
9 * [Resynchronizing a Branch](newbs_git_resynchronize_a_branch.md)
7 * [Learning Resources](newbs_learn_more_resources.md) 10 * [Learning Resources](newbs_learn_more_resources.md)
8 11
9* [QMK Basics](README.md) 12* [QMK Basics](README.md)
@@ -33,6 +36,7 @@
33 * [Keymap Overview](keymap.md) 36 * [Keymap Overview](keymap.md)
34 37
35* [Hardware](hardware.md) 38* [Hardware](hardware.md)
39 * [Compatible Microcontrollers](compatible_microcontrollers.md)
36 * [AVR Processors](hardware_avr.md) 40 * [AVR Processors](hardware_avr.md)
37 * [Drivers](hardware_drivers.md) 41 * [Drivers](hardware_drivers.md)
38 42
@@ -97,6 +101,7 @@
97 * [Hand Wiring Guide](hand_wire.md) 101 * [Hand Wiring Guide](hand_wire.md)
98 * [ISP Flashing Guide](isp_flashing_guide.md) 102 * [ISP Flashing Guide](isp_flashing_guide.md)
99 * [ARM Debugging Guide](arm_debugging.md) 103 * [ARM Debugging Guide](arm_debugging.md)
104 * [ADC Driver](adc_driver.md)
100 * [I2C Driver](i2c_driver.md) 105 * [I2C Driver](i2c_driver.md)
101 * [WS2812 Driver](ws2812_driver.md) 106 * [WS2812 Driver](ws2812_driver.md)
102 * [GPIO Controls](internals_gpio_control.md) 107 * [GPIO Controls](internals_gpio_control.md)
@@ -110,7 +115,7 @@
110 * [Using Eclipse with QMK](other_eclipse.md) 115 * [Using Eclipse with QMK](other_eclipse.md)
111 * [Using VSCode with QMK](other_vscode.md) 116 * [Using VSCode with QMK](other_vscode.md)
112 * [Support](support.md) 117 * [Support](support.md)
113 * [How to add translations](translating.md) 118 * [Translating the QMK Docs](translating.md)
114 119
115* QMK Internals (In Progress) 120* QMK Internals (In Progress)
116 * [Defines](internals_defines.md) 121 * [Defines](internals_defines.md)
diff --git a/docs/adc_driver.md b/docs/adc_driver.md
new file mode 100644
index 000000000..26e148add
--- /dev/null
+++ b/docs/adc_driver.md
@@ -0,0 +1,50 @@
1# ADC Driver
2
3QMK can leverage the Analog-to-Digital Converter (ADC) on supported MCUs to measure voltages on certain pins. This can be useful for implementing things such as battery level indicators for Bluetooth keyboards, or volume controls using a potentiometer, as opposed to a [rotary encoder](feature_encoders.md).
4
5This driver is currently AVR-only. The values returned are 10-bit integers (0-1023) mapped between 0V and VCC (usually 5V or 3.3V).
6
7## Usage
8
9To use this driver, add the following to your `rules.mk`:
10
11```make
12SRC += analog.c
13```
14
15Then place this include at the top of your code:
16
17```c
18#include "analog.h"
19```
20
21## Channels
22
23|Channel|AT90USB64/128|ATmega16/32U4|ATmega32A|ATmega328P|
24|-------|-------------|-------------|---------|----------|
25|0 |`F0` |`F0` |`A0` |`C0` |
26|1 |`F1` |`F1` |`A1` |`C1` |
27|2 |`F2` | |`A2` |`C2` |
28|3 |`F3` | |`A3` |`C3` |
29|4 |`F4` |`F4` |`A4` |`C4` |
30|5 |`F5` |`F5` |`A5` |`C5` |
31|6 |`F6` |`F6` |`A6` |* |
32|7 |`F7` |`F7` |`A7` |* |
33|8 | |`D4` | | |
34|9 | |`D6` | | |
35|10 | |`D7` | | |
36|11 | |`B4` | | |
37|12 | |`B5` | | |
38|13 | |`B6` | | |
39
40<sup>\* The ATmega328P possesses two extra ADC channels; however, they are not present on the DIP pinout, and are not shared with GPIO pins. You can use `adc_read()` directly to gain access to these.</sup>
41
42## Functions
43
44|Function |Description |
45|----------------------------|-------------------------------------------------------------------------------------------------------------------|
46|`analogReference(mode)` |Sets the analog voltage reference source. Must be one of `ADC_REF_EXTERNAL`, `ADC_REF_POWER` or `ADC_REF_INTERNAL`.|
47|`analogRead(pin)` |Reads the value from the specified Arduino pin, eg. `4` for ADC6 on the ATmega32U4. |
48|`analogReadPin(pin)` |Reads the value from the specified QMK pin, eg. `F6` for ADC6 on the ATmega32U4. |
49|`pinToMux(pin)` |Translates a given QMK pin to a mux value. If an unsupported pin is given, returns the mux value for "0V (GND)". |
50|`adc_read(mux)` |Reads the value from the ADC according to the specified mux. See your MCU's datasheet for more information. |
diff --git a/docs/cli.md b/docs/cli.md
index e655b0ee8..1c0952722 100644
--- a/docs/cli.md
+++ b/docs/cli.md
@@ -95,6 +95,30 @@ qmk compile <configuratorExport.json>
95qmk compile -kb <keyboard_name> -km <keymap_name> 95qmk compile -kb <keyboard_name> -km <keymap_name>
96``` 96```
97 97
98## `qmk flash`
99
100This command is similar to `qmk compile`, but can also target a bootloader. The bootloader is optional, and is set to `:flash` by default.
101To specify a different bootloader, use `-bl <bootloader>`. Visit <https://docs.qmk.fm/#/flashing>
102for more details of the available bootloaders.
103
104**Usage for Configurator Exports**:
105
106```
107qmk flash <configuratorExport.json> -bl <bootloader>
108```
109
110**Usage for Keymaps**:
111
112```
113qmk flash -kb <keyboard_name> -km <keymap_name> -bl <bootloader>
114```
115
116**Listing the Bootloaders**
117
118```
119qmk flash -b
120```
121
98## `qmk config` 122## `qmk config`
99 123
100This command lets you configure the behavior of QMK. For the full `qmk config` documentation see [CLI Configuration](cli_configuration.md). 124This command lets you configure the behavior of QMK. For the full `qmk config` documentation see [CLI Configuration](cli_configuration.md).
@@ -135,6 +159,28 @@ Creates a keymap.c from a QMK Configurator export.
135qmk json-keymap [-o OUTPUT] filename 159qmk json-keymap [-o OUTPUT] filename
136``` 160```
137 161
162## `qmk kle2json`
163
164This 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.
165
166**Usage**:
167
168```
169qmk kle2json [-f] <filename>
170```
171
172**Examples**:
173
174```
175$ qmk kle2json kle.txt
176☒ File info.json already exists, use -f or --force to overwrite.
177```
178
179```
180$ qmk kle2json -f kle.txt -f
181Ψ Wrote out to info.json
182```
183
138## `qmk list-keyboards` 184## `qmk list-keyboards`
139 185
140This command lists all the keyboards currently defined in `qmk_firmware` 186This command lists all the keyboards currently defined in `qmk_firmware`
diff --git a/docs/cli_development.md b/docs/cli_development.md
index f5c7ad139..cc8c59d06 100644
--- a/docs/cli_development.md
+++ b/docs/cli_development.md
@@ -173,3 +173,35 @@ You will only be able to access these arguments using `cli.args`. For example:
173``` 173```
174cli.log.info('Reading from %s and writing to %s', cli.args.filename, cli.args.output) 174cli.log.info('Reading from %s and writing to %s', cli.args.filename, cli.args.output)
175``` 175```
176
177# Testing, and Linting, and Formatting (oh my!)
178
179We use nose2, flake8, and yapf to test, lint, and format code. You can use the `pytest` and `pyformat` subcommands to run these tests:
180
181### Testing and Linting
182
183 qmk pytest
184
185### Formatting
186
187 qmk pyformat
188
189## Formatting Details
190
191We use [yapf](https://github.com/google/yapf) to automatically format code. Our configuration is in the `[yapf]` section of `setup.cfg`.
192
193?> Tip- Many editors can use yapf as a plugin to automatically format code as you type.
194
195## Testing Details
196
197Our tests can be found in `lib/python/qmk/tests/`. You will find both unit and integration tests in this directory. We hope you will write both unit and integration tests for your code, but if you do not please favor integration tests.
198
199If your PR does not include a comprehensive set of tests please add comments like this to your code so that other people know where they can help:
200
201 # TODO(unassigned/<yourGithubUsername>): Write <unit|integration> tests
202
203We use [nose2](https://nose2.readthedocs.io/en/latest/getting_started.html) to run our tests. You can refer to the nose2 documentation for more details on what you can do in your test functions.
204
205## Linting Details
206
207We use flake8 to lint our code. Your code should pass flake8 before you open a PR. This will be checked when you run `qmk pytest` and by CI when you submit a PR.
diff --git a/docs/coding_conventions_c.md b/docs/coding_conventions_c.md
index 08994bfbb..16e28b288 100644
--- a/docs/coding_conventions_c.md
+++ b/docs/coding_conventions_c.md
@@ -14,7 +14,7 @@ Most of our style is pretty easy to pick up on, but right now it's not entirely
14 * Think of them as a story describing the feature 14 * Think of them as a story describing the feature
15 * Use them liberally to explain why particular decisions were made. 15 * Use them liberally to explain why particular decisions were made.
16 * Do not write obvious comments 16 * Do not write obvious comments
17 * If you not sure if a comment is obvious, go ahead and include it. 17 * If you're not sure if a comment is obvious, go ahead and include it.
18* In general we don't wrap lines, they can be as long as needed. If you do choose to wrap lines please do not wrap any wider than 76 columns. 18* In general we don't wrap lines, they can be as long as needed. If you do choose to wrap lines please do not wrap any wider than 76 columns.
19* We use `#pragma once` at the start of header files rather than old-style include guards (`#ifndef THIS_FILE_H`, `#define THIS_FILE_H`, ..., `#endif`) 19* We use `#pragma once` at the start of header files rather than old-style include guards (`#ifndef THIS_FILE_H`, `#define THIS_FILE_H`, ..., `#endif`)
20* We accept both forms of preprocessor if's: `#ifdef DEFINED` and `#if defined(DEFINED)` 20* We accept both forms of preprocessor if's: `#ifdef DEFINED` and `#if defined(DEFINED)`
diff --git a/docs/coding_conventions_python.md b/docs/coding_conventions_python.md
index 694aa38cf..9dd95e4b7 100644
--- a/docs/coding_conventions_python.md
+++ b/docs/coding_conventions_python.md
@@ -8,7 +8,7 @@ Most of our style follows PEP8 with some local modifications to make things less
8 * Think of them as a story describing the feature 8 * Think of them as a story describing the feature
9 * Use them liberally to explain why particular decisions were made. 9 * Use them liberally to explain why particular decisions were made.
10 * Do not write obvious comments 10 * Do not write obvious comments
11 * If you not sure if a comment is obvious, go ahead and include it. 11 * If you're not sure if a comment is obvious, go ahead and include it.
12* We require useful docstrings for all functions. 12* We require useful docstrings for all functions.
13* In general we don't wrap lines, they can be as long as needed. If you do choose to wrap lines please do not wrap any wider than 76 columns. 13* In general we don't wrap lines, they can be as long as needed. If you do choose to wrap lines please do not wrap any wider than 76 columns.
14* Some of our practices conflict with the wider python community to make our codebase more approachable to non-pythonistas. 14* Some of our practices conflict with the wider python community to make our codebase more approachable to non-pythonistas.
diff --git a/docs/compatible_microcontrollers.md b/docs/compatible_microcontrollers.md
index 6e3f8372c..85dd440d3 100644
--- a/docs/compatible_microcontrollers.md
+++ b/docs/compatible_microcontrollers.md
@@ -1,25 +1,36 @@
1# Atmel AVR 1# Compatible Microcontrollers
2 2
3QMK should run on any Atmel AVR processor with enough Flash. It has been tested on the following: 3QMK runs on any USB-capable AVR or ARM microcontroller with enough flash space - generally 32kB or more, though it will *just* squeeze into 16kB with most features disabled.
4 4
5* ATmega32U4 ([PJRC Teensy 2.0](http://www.pjrc.com/teensy/)) 5## Atmel AVR
6* AT90USB1286 ([PJRC Teensy++ 2.0](http://www.pjrc.com/teensy/))
7* AT90USB1287 ([Atmel USBKEY](http://www.atmel.com/tools/AT90USBKEY.aspx))
8* ATmega168P with using [V-USB](http://www.obdev.at/products/vusb/index.html)
9* ATmega328P with using [V-USB](http://www.obdev.at/products/vusb/index.html)
10* ATmega32U2
11* AT90USB1286, 646, 647 should work
12* AT90USB162 testing...
13 6
14NOTE: To enable full features of firmware you'll need 32KB flash size. 7The following use [LUFA](https://www.fourwalledcubicle.com/LUFA.php) as the USB stack:
15 8
16Please add any tested microcontrollers to this list. 9* [ATmega16U2](https://www.microchip.com/wwwproducts/en/ATmega16U2) / [ATmega32U2](https://www.microchip.com/wwwproducts/en/ATmega32U2)
10* [ATmega16U4](https://www.microchip.com/wwwproducts/en/ATmega16U4) / [ATmega32U4](https://www.microchip.com/wwwproducts/en/ATmega32U4)
11* [AT90USB64](https://www.microchip.com/wwwproducts/en/AT90USB646) / [AT90USB128](https://www.microchip.com/wwwproducts/en/AT90USB1286)
17 12
18# ARM 13Certain MCUs which do not have native USB will use [V-USB](https://www.obdev.at/products/vusb/index.html) instead:
19 14
20You can also use any ARM processor that [ChibiOS](http://www.chibios.org) supports. The following processors have been tested: 15* [ATmega32A](https://www.microchip.com/wwwproducts/en/ATmega32A)
16* [ATmega328P](https://www.microchip.com/wwwproducts/en/ATmega328P)
21 17
22* [Kinetis MKL26Z64](http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/kinetis-cortex-m-mcus/l-series-ultra-low-power-m0-plus/kinetis-kl2x-48-mhz-usb-ultra-low-power-microcontrollers-mcus-based-on-arm-cortex-m0-plus-core:KL2x) 18## ARM
23* [Kinetis MK20DX128](http://www.nxp.com/assets/documents/data/en/data-sheets/K20P64M50SF0.pdf) 19
24* [Kinetis MK20DX128](http://www.nxp.com/assets/documents/data/en/data-sheets/K20P64M50SF0.pdf) 20You can also use any ARM chip with USB that [ChibiOS](http://www.chibios.org) supports. Most have plenty of flash. Known to work are:
25* [Kinetis MK20DX256](http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/kinetis-cortex-m-mcus/k-series-performance-m4/k2x-usb/kinetis-k20-72-mhz-full-speed-usb-mixed-signal-integration-microcontrollers-mcus-based-on-arm-cortex-m4-core:K20_72) 21
22### STMicroelectronics (STM32)
23
24 * [STM32F0x2](https://www.st.com/en/microcontrollers-microprocessors/stm32f0x2.html)
25 * [STM32F103](https://www.st.com/en/microcontrollers-microprocessors/stm32f103.html)
26 * [STM32F303](https://www.st.com/en/microcontrollers-microprocessors/stm32f303.html)
27
28### NXP (Kinetis)
29
30 * [MKL26Z64](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/kl-series-cortex-m0-plus/kinetis-kl2x-72-96-mhz-usb-ultra-low-power-microcontrollers-mcus-based-on-arm-cortex-m0-plus-core:KL2x)
31 * [MK20DX128](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/k-series-cortex-m4/k2x-usb/kinetis-k20-50-mhz-full-speed-usb-mixed-signal-integration-microcontrollers-based-on-arm-cortex-m4-core:K20_50)
32 * [MK20DX256](https://www.nxp.com/products/processors-and-microcontrollers/arm-microcontrollers/general-purpose-mcus/k-series-cortex-m4/k2x-usb/kinetis-k20-72-mhz-full-speed-usb-mixed-signal-integration-microcontrollers-mcus-based-on-arm-cortex-m4-core:K20_72)
33
34## Atmel ATSAM
35
36There is limited support for one of Atmel's ATSAM microcontrollers, that being the [ATSAMD51J18A](https://www.microchip.com/wwwproducts/en/ATSAMD51J18A) used by the [Massdrop keyboards](https://github.com/qmk/qmk_firmware/tree/master/keyboards/massdrop).
diff --git a/docs/config_options.md b/docs/config_options.md
index abd98ec8a..0cf3fb78a 100644
--- a/docs/config_options.md
+++ b/docs/config_options.md
@@ -196,8 +196,8 @@ If you define these options you will enable the associated feature, which may in
196 * units to step when in/decreasing saturation 196 * units to step when in/decreasing saturation
197* `#define RGBLIGHT_VAL_STEP 12` 197* `#define RGBLIGHT_VAL_STEP 12`
198 * units to step when in/decreasing value (brightness) 198 * units to step when in/decreasing value (brightness)
199* `#define RGBW_BB_TWI` 199* `#define RGBW`
200 * bit-bangs TWI to EZ RGBW LEDs (only required for Ergodox EZ) 200 * Enables RGBW LED support
201 201
202## Mouse Key Options 202## Mouse Key Options
203 203
@@ -348,7 +348,8 @@ Use these to enable or disable building certain features. The more you have enab
348* `NO_USB_STARTUP_CHECK` 348* `NO_USB_STARTUP_CHECK`
349 * Disables usb suspend check after keyboard startup. Usually the keyboard waits for the host to wake it up before any tasks are performed. This is useful for split keyboards as one half will not get a wakeup call but must send commands to the master. 349 * Disables usb suspend check after keyboard startup. Usually the keyboard waits for the host to wake it up before any tasks are performed. This is useful for split keyboards as one half will not get a wakeup call but must send commands to the master.
350* `LINK_TIME_OPTIMIZATION_ENABLE` 350* `LINK_TIME_OPTIMIZATION_ENABLE`
351 = Enables Link Time Optimization (`LTO`) when compiling the keyboard. This makes the process take longer, but can significantly reduce the compiled size (and since the firmware is small, the added time is not noticable). However, this will automatically disable the old Macros and Functions features automatically, as these break when `LTO` is enabled. It does this by automatically defining `NO_ACTION_MACRO` and `NO_ACTION_FUNCTION` 351 * Enables Link Time Optimization (`LTO`) when compiling the keyboard. This makes the process take longer, but can significantly reduce the compiled size (and since the firmware is small, the added time is not noticeable). However, this will automatically disable the old Macros and Functions features automatically, as these break when `LTO` is enabled. It does this by automatically defining `NO_ACTION_MACRO` and `NO_ACTION_FUNCTION`
352 * Alternatively, you can use `LTO_ENABLE` instead of `LINK_TIME_OPTIMIZATION_ENABLE`.
352 353
353## USB Endpoint Limitations 354## USB Endpoint Limitations
354 355
diff --git a/docs/contributing.md b/docs/contributing.md
index 04dc0da20..7c365b418 100644
--- a/docs/contributing.md
+++ b/docs/contributing.md
@@ -101,6 +101,18 @@ enum my_keycodes {
101}; 101};
102``` 102```
103 103
104### Previewing the Documentation
105
106Before opening a pull request, you can preview your changes if you have set up the development environment by running this command from the `qmk_firmware/` folder:
107
108 ./bin/qmk docs
109
110or if you only have Python 3 installed:
111
112 python3 -m http.server 8936
113
114and navigating to `http://localhost:8936/`.
115
104## Keymaps 116## Keymaps
105 117
106Most first-time QMK contributors start with their personal keymaps. We try to keep keymap standards pretty casual (keymaps, after all, reflect the personality of their creators) but we do ask that you follow these guidelines to make it easier for others to discover and learn from your keymap. 118Most first-time QMK contributors start with their personal keymaps. We try to keep keymap standards pretty casual (keymaps, after all, reflect the personality of their creators) but we do ask that you follow these guidelines to make it easier for others to discover and learn from your keymap.
diff --git a/docs/custom_quantum_functions.md b/docs/custom_quantum_functions.md
index 839d49ca0..71a30bc7c 100644
--- a/docs/custom_quantum_functions.md
+++ b/docs/custom_quantum_functions.md
@@ -90,68 +90,93 @@ keyrecord_t record {
90 90
91# LED Control 91# LED Control
92 92
93QMK provides methods to read the 5 LEDs defined as part of the HID spec: 93QMK provides methods to read 5 of the LEDs defined in the HID spec:
94 94
95* `USB_LED_NUM_LOCK` 95* Num Lock
96* `USB_LED_CAPS_LOCK` 96* Caps Lock
97* `USB_LED_SCROLL_LOCK` 97* Scroll Lock
98* `USB_LED_COMPOSE` 98* Compose
99* `USB_LED_KANA` 99* Kana
100 100
101These five constants correspond to the positional bits of the host LED state. 101There are two ways to get the lock LED state:
102There are two ways to get the host LED state:
103 102
104* by implementing `led_set_user()` 103* by implementing `bool led_update_kb(led_t led_state)` or `_user(led_t led_state)`; or
105* by calling `host_keyboard_leds()` 104* by calling `led_t host_keyboard_led_state()`
106 105
107## `led_set_user()` 106!> `host_keyboard_led_state()` may already reflect a new value before `led_update_user()` is called.
108 107
109This function will be called when the state of one of those 5 LEDs changes. It receives the LED state as a parameter. 108Two more deprecated functions exist that provide the LED state as a `uint8_t`:
110Use the `IS_LED_ON(usb_led, led_name)` and `IS_LED_OFF(usb_led, led_name)` macros to check the LED status.
111 109
112!> `host_keyboard_leds()` may already reflect a new value before `led_set_user()` is called. 110* `uint8_t led_set_kb(uint8_t usb_led)` and `_user(uint8_t usb_led)`
111* `uint8_t host_keyboard_leds()`
113 112
114### Example `led_set_user()` Implementation 113## `led_update_user()`
114
115This function will be called when the state of one of those 5 LEDs changes. It receives the LED state as a struct parameter.
116
117By convention, return `true` from `led_update_user()` to get the `led_update_kb()` hook to run its code, and
118return `false` when you would prefer not to run the code in `led_update_kb()`.
119
120Some examples include:
121
122 - overriding the LEDs to use them for something else like layer indication
123 - return `false` because you do not want the `_kb()` function to run, as it would override your layer behavior.
124 - play a sound when an LED turns on or off.
125 - return `true` because you want the `_kb` function to run, and this is in addition to the default LED behavior.
126
127?> Because the `led_set_*` functions return `void` instead of `bool`, they do not allow for overriding the keyboard LED control, and thus it's recommended to use `led_update_*` instead.
128
129### Example `led_update_kb()` Implementation
115 130
116```c 131```c
117void led_set_user(uint8_t usb_led) { 132bool led_update_kb(led_t led_state) {
118 if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) { 133 bool res = led_update_user(led_state);
119 writePinLow(B0); 134 if(res) {
120 } else { 135 // writePin sets the pin high for 1 and low for 0.
121 writePinHigh(B0); 136 // In this example the pins are inverted, setting
122 } 137 // it low/0 turns it on, and high/1 turns the LED off.
123 if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) { 138 // This behavior depends on whether the LED is between the pin
124 writePinLow(B1); 139 // and VCC or the pin and GND.
125 } else { 140 writePin(B0, !led_state.num_lock);
126 writePinHigh(B1); 141 writePin(B1, !led_state.caps_lock);
127 } 142 writePin(B2, !led_state.scroll_lock);
128 if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) { 143 writePin(B3, !led_state.compose);
129 writePinLow(B2); 144 writePin(B4, !led_state.kana);
130 } else {
131 writePinHigh(B2);
132 } 145 }
133 if (IS_LED_ON(usb_led, USB_LED_COMPOSE)) { 146 return res;
134 writePinLow(B3); 147}
135 } else { 148```
136 writePinHigh(B3); 149
137 } 150### Example `led_update_user()` Implementation
138 if (IS_LED_ON(usb_led, USB_LED_KANA)) { 151
139 writePinLow(B4); 152This incomplete example would play a sound if Caps Lock is turned on or off. It returns `true`, because you also want the LEDs to maintain their state.
140 } else { 153
141 writePinHigh(B4); 154```c
155#ifdef AUDIO_ENABLE
156 float caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND);
157 float caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND);
158#endif
159
160bool led_update_user(led_t led_state) {
161 #ifdef AUDIO_ENABLE
162 static uint8_t caps_state = 0;
163 if (caps_state != led_state.caps_lock) {
164 led_state.caps_lock ? PLAY_SONG(caps_on) : PLAY_SONG(caps_off);
165 caps_state = led_state.caps_lock;
142 } 166 }
167 #endif
168 return true;
143} 169}
144``` 170```
145 171
146### `led_set_*` Function Documentation 172### `led_update_*` Function Documentation
147 173
148* Keyboard/Revision: `void led_set_kb(uint8_t usb_led)` 174* Keyboard/Revision: `bool led_update_kb(led_t led_state)`
149* Keymap: `void led_set_user(uint8_t usb_led)` 175* Keymap: `bool led_update_user(led_t led_state)`
150 176
151## `host_keyboard_leds()` 177## `host_keyboard_led_state()`
152 178
153Call this function to get the last received LED state. This is useful for reading the LED state outside `led_set_*`, e.g. in [`matrix_scan_user()`](#matrix-scanning-code). 179Call this function to get the last received LED state as a `led_t`. This is useful for reading the LED state outside `led_update_*`, e.g. in [`matrix_scan_user()`](#matrix-scanning-code).
154For convenience, you can use the `IS_HOST_LED_ON(led_name)` and `IS_HOST_LED_OFF(led_name)` macros instead of calling and checking `host_keyboard_leds()` directly.
155 180
156## Setting Physical LED State 181## Setting Physical LED State
157 182
@@ -369,7 +394,7 @@ void keyboard_post_init_user(void) {
369 // Set default layer, if enabled 394 // Set default layer, if enabled
370 if (user_config.rgb_layer_change) { 395 if (user_config.rgb_layer_change) {
371 rgblight_enable_noeeprom(); 396 rgblight_enable_noeeprom();
372 rgblight_sethsv_noeeprom_cyan(); 397 rgblight_sethsv_noeeprom_cyan();
373 rgblight_mode_noeeprom(1); 398 rgblight_mode_noeeprom(1);
374 } 399 }
375} 400}
@@ -417,18 +442,18 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
417 } 442 }
418 return true; // Let QMK send the enter press/release events 443 return true; // Let QMK send the enter press/release events
419 case RGB_LYR: // This allows me to use underglow as layer indication, or as normal 444 case RGB_LYR: // This allows me to use underglow as layer indication, or as normal
420 if (record->event.pressed) { 445 if (record->event.pressed) {
421 user_config.rgb_layer_change ^= 1; // Toggles the status 446 user_config.rgb_layer_change ^= 1; // Toggles the status
422 eeconfig_update_user(user_config.raw); // Writes the new status to EEPROM 447 eeconfig_update_user(user_config.raw); // Writes the new status to EEPROM
423 if (user_config.rgb_layer_change) { // if layer state indication is enabled, 448 if (user_config.rgb_layer_change) { // if layer state indication is enabled,
424 layer_state_set(layer_state); // then immediately update the layer color 449 layer_state_set(layer_state); // then immediately update the layer color
425 } 450 }
426 } 451 }
427 return false; break; 452 return false; break;
428 case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // For any of the RGB codes (see quantum_keycodes.h, L400 for reference) 453 case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // For any of the RGB codes (see quantum_keycodes.h, L400 for reference)
429 if (record->event.pressed) { //This disables layer indication, as it's assumed that if you're changing this ... you want that disabled 454 if (record->event.pressed) { //This disables layer indication, as it's assumed that if you're changing this ... you want that disabled
430 if (user_config.rgb_layer_change) { // only if this is enabled 455 if (user_config.rgb_layer_change) { // only if this is enabled
431 user_config.rgb_layer_change = false; // disable it, and 456 user_config.rgb_layer_change = false; // disable it, and
432 eeconfig_update_user(user_config.raw); // write the setings to EEPROM 457 eeconfig_update_user(user_config.raw); // write the setings to EEPROM
433 } 458 }
434 } 459 }
@@ -441,7 +466,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
441And lastly, you want to add the `eeconfig_init_user` function, so that when the EEPROM is reset, you can specify default values, and even custom actions. To force an EEPROM reset, use the `EEP_RST` keycode or [Bootmagic](feature_bootmagic.md) functionallity. For example, if you want to set rgb layer indication by default, and save the default valued. 466And lastly, you want to add the `eeconfig_init_user` function, so that when the EEPROM is reset, you can specify default values, and even custom actions. To force an EEPROM reset, use the `EEP_RST` keycode or [Bootmagic](feature_bootmagic.md) functionallity. For example, if you want to set rgb layer indication by default, and save the default valued.
442 467
443```c 468```c
444void eeconfig_init_user(void) { // EEPROM is getting reset! 469void eeconfig_init_user(void) { // EEPROM is getting reset!
445 user_config.raw = 0; 470 user_config.raw = 0;
446 user_config.rgb_layer_change = true; // We want this enabled by default 471 user_config.rgb_layer_change = true; // We want this enabled by default
447 eeconfig_update_user(user_config.raw); // Write default value to EEPROM now 472 eeconfig_update_user(user_config.raw); // Write default value to EEPROM now
@@ -466,7 +491,7 @@ The `val` is the value of the data that you want to write to EEPROM. And the `e
466 491
467By default, the tapping term is defined globally, and is not configurable by key. For most users, this is perfectly fine. But in come cases, dual function keys would be greatly improved by different timeouts than `LT` keys, or because some keys may be easier to hold than others. Instead of using custom key codes for each, this allows for per key configurable `TAPPING_TERM`. 492By default, the tapping term is defined globally, and is not configurable by key. For most users, this is perfectly fine. But in come cases, dual function keys would be greatly improved by different timeouts than `LT` keys, or because some keys may be easier to hold than others. Instead of using custom key codes for each, this allows for per key configurable `TAPPING_TERM`.
468 493
469To enable this functionality, you need to add `#define TAPPING_TERM_PER_KEY` to your `config.h`, first. 494To enable this functionality, you need to add `#define TAPPING_TERM_PER_KEY` to your `config.h`, first.
470 495
471 496
472## Example `get_tapping_term` Implementation 497## Example `get_tapping_term` Implementation
diff --git a/docs/de/README.md b/docs/de/README.md
new file mode 100644
index 000000000..88239d45d
--- /dev/null
+++ b/docs/de/README.md
@@ -0,0 +1,33 @@
1# Quantum Mechanical Keyboard Firmware
2
3[![Aktuelle Version](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)
4[![Build Status](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware)
5[![Discord](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh)
6[![Docs Status](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
7[![GitHub contributors](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly)
8[![GitHub forks](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/)
9
10## Was ist QMK Firmware?
11
12QMK (*Quantum Mechanical Keyboard*) ist eine Open-Source-Community, welche die QMK-Firmware, die QMK-Toolbox, [qmk.fm](https://qmk.fm) und diese Dokumententation betreut. QMK-Firmware ist eine Weiterentwicklung der [tmk\_keyboard](http://github.com/tmk/tmk_keyboard)-Tastatur-Firmware mit vielen nützlichen Zusatzfunktionen für Atmel AVR-Prozessoren. Ursprünglich wurde sie für Produkte von [OLKB](http://olkb.com), das [ErgoDox EZ](http://www.ergodox-ez.com) und das [Clueboard](http://clueboard.co/) entwickelt. Im Laufe der Zeit wurde sie mit Hilfe von [ChibiOS](http://chibios.org) auch für die ARM-Architektur angepasst. Außerdem ist es inzwischen möglich, auch handverdrahtete Tastaturen und selbst geätzte PCBs mit QMK zu verwenden.
13
14## Bezugsquelle für QMK
15
16Wenn Du vorhast, deine Tastatur, Tastaturbelegung oder Features zu QMK beizusteuern, geht das am einfachsten, indem Du das [Repository auf Github](https://github.com/qmk/qmk_firmware#fork-destination-box) forkst, die Änderungen in deinem lokalen Repo vornimmst und anschließend einen [Pull Request](https://github.com/qmk/qmk_firmware/pulls) einreichst.
17
18Ansonsten kannst Du es als [zip](https://github.com/qmk/qmk_firmware/zipball/master) oder [tar](https://github.com/qmk/qmk_firmware/tarball/master) herunterladen, oder es direkt via git klonen (`git clone git@github.com:qmk/qmk_firmware.git` bzw. `git clone https://github.com/qmk/qmk_firmware.git`).
19
20
21## Anleitung fürs Kompilieren
22
23Bevor Du in der Lage bist, die Firmware zu kompilieren, musst Du eine [Entwicklungsumgebung](de/getting_started_build_tools.md) für AVR und/oder ARM aufsetzen. Danach kannst Du mit dem `make` Befehl eine Keymap für deine Tastatur erzeugen. Die Notation dafür ist:
24
25 make planck/rev4:default
26
27Dies generiert die Revision `rev4` für eine Tastatur vom Type `planck` mit der `default` Tastaturbelegung. Nicht alle Tastaturen haben Revisionen (auch bekannt als Subprojekt oder Unterordner) weswegen dies auch ausgelassen werden kann:
28
29 make preonic:default
30
31## Möglichkeiten der Anpassung
32
33QMK hat viele [Features](de/features.md), die es zu entdecken gibt. In der [Dokumentation](https://docs.qmk.fmk) kannst Du Dir einen Überblick verschaffen. Die meisten Features basieren darauf, die [Tastaturbelegung](de/keymap.md) anzupassen und das Verhalten der [Keycodes](de/keycodes.md) zu verändern.
diff --git a/docs/de/_summary.md b/docs/de/_summary.md
new file mode 100644
index 000000000..f3ce806ba
--- /dev/null
+++ b/docs/de/_summary.md
@@ -0,0 +1,121 @@
1* [Anleitung für Anfänger](de/newbs.md)
2 * [Erste Schritte](de/newbs_getting_started.md)
3 * [Die erste Firmware](de/newbs_building_firmware.md)
4 * [Firmware flashen](de/newbs_flashing.md)
5 * [Testen und Debuggen](de/newbs_testing_debugging.md)
6 * [Git Tips und Tricks](de/newbs_best_practices.md)
7 * [Hilfreiche Ressourcen](de/newbs_learn_more_resources.md)
8
9* [QMK Basics](de/README.md)
10 * [QMK Einführung](de/getting_started_introduction.md)
11 * [QMK CLI](de/cli.md)
12 * [QMK CLI Konfiguration](de/cli_configuration.md)
13 * [Zu QMK beitragen](de/contributing.md)
14 * [Anleitung für Github](de/getting_started_github.md)
15 * [Nach Hilfe fragen](de/getting_started_getting_help.md)
16
17* [Breaking Changes](de/breaking_changes.md)
18 * [2019 Aug 30](de/ChangeLog/20190830.md)
19
20* [FAQ](de/faq.md)
21 * [Häufige Fragen](de/faq_general.md)
22 * [Build/Kompilieren](de/faq_build.md)
23 * [Debugging/Troubleshooting](de/faq_debug.md)
24 * [Keymap](de/faq_keymap.md)
25 * [Treiber Installation mit Zadig](de/driver_installation_zadig.md)
26
27* Detailierte Guides
28 * [Build Tools installieren](de/getting_started_build_tools.md)
29 * [Vagrant Guide](de/getting_started_vagrant.md)
30 * [Build/Compile Anleitung](de/getting_started_make_guide.md)
31 * [Firmware flashen](de/flashing.md)
32 * [Funktionalität anpassen](de/custom_quantum_functions.md)
33 * [Keymap Überblick](de/keymap.md)
34
35* [Hardware](de/hardware.md)
36 * [AVR Prozessoren](de/hardware_avr.md)
37 * [Treiber](de/hardware_drivers.md)
38
39* Referenz
40 * [Tastatur Richtlinien](de/hardware_keyboard_guidelines.md)
41 * [Konfigurations Optionen](de/config_options.md)
42 * [Keycodes](de/keycodes.md)
43 * [Coding Konventionen - C](de/coding_conventions_c.md)
44 * [Coding Konventionen - Python](de/coding_conventions_python.md)
45 * [Dokumentations Best Practices](de/documentation_best_practices.md)
46 * [Dokumentations Templates](de/documentation_templates.md)
47 * [Glossar](de/reference_glossary.md)
48 * [Unit Testing](de/unit_testing.md)
49 * [Nützliche Funktionen](de/ref_functions.md)
50 * [Configurator Support](de/reference_configurator_support.md)
51 * [info.json Format](de/reference_info_json.md)
52 * [Python CLI Development](de/cli_development.md)
53
54* [Features](de/features.md)
55 * [Basic Keycodes](de/keycodes_basic.md)
56 * [US ANSI Shifted Keys](de/keycodes_us_ansi_shifted.md)
57 * [Quantum Keycodes](de/quantum_keycodes.md)
58 * [Advanced Keycodes](de/feature_advanced_keycodes.md)
59 * [Audio](de/feature_audio.md)
60 * [Auto Shift](de/feature_auto_shift.md)
61 * [Backlight](de/feature_backlight.md)
62 * [Bluetooth](de/feature_bluetooth.md)
63 * [Bootmagic](de/feature_bootmagic.md)
64 * [Combos](de/feature_combo.md)
65 * [Command](de/feature_command.md)
66 * [Debounce API](de/feature_debounce_type.md)
67 * [DIP Switch](de/feature_dip_switch.md)
68 * [Dynamic Macros](de/feature_dynamic_macros.md)
69 * [Encoders](de/feature_encoders.md)
70 * [Grave Escape](de/feature_grave_esc.md)
71 * [Haptic Feedback](de/feature_haptic_feedback.md)
72 * [HD44780 LCD Controller](de/feature_hd44780.md)
73 * [Key Lock](de/feature_key_lock.md)
74 * [Layouts](de/feature_layouts.md)
75 * [Leader Key](de/feature_leader_key.md)
76 * [LED Matrix](de/feature_led_matrix.md)
77 * [Macros](de/feature_macros.md)
78 * [Mouse Keys](de/feature_mouse_keys.md)
79 * [OLED Driver](de/feature_oled_driver.md)
80 * [One Shot Keys](de/feature_advanced_keycodes.md#one-shot-keys)
81 * [Pointing Device](de/feature_pointing_device.md)
82 * [PS/2 Mouse](de/feature_ps2_mouse.md)
83 * [RGB Lighting](de/feature_rgblight.md)
84 * [RGB Matrix](de/feature_rgb_matrix.md)
85 * [Space Cadet](de/feature_space_cadet.md)
86 * [Split Keyboard](de/feature_split_keyboard.md)
87 * [Stenography](de/feature_stenography.md)
88 * [Swap Hands](de/feature_swap_hands.md)
89 * [Tap Dance](de/feature_tap_dance.md)
90 * [Terminal](de/feature_terminal.md)
91 * [Thermal Printer](de/feature_thermal_printer.md)
92 * [Unicode](de/feature_unicode.md)
93 * [Userspace](de/feature_userspace.md)
94 * [Velocikey](de/feature_velocikey.md)
95
96* Für Maker und Modder
97 * [Hand Wiring Guide](de/hand_wire.md)
98 * [ISP Flashing Guide](de/isp_flashing_guide.md)
99 * [ARM Debugging Guide](de/arm_debugging.md)
100 * [I2C Driver](de/i2c_driver.md)
101 * [GPIO Controls](de/internals_gpio_control.md)
102 * [Proton C Conversion](de/proton_c_conversion.md)
103
104* Für ein tieferes Verständnis
105 * [Wie Tastaturen funktionieren](de/how_keyboards_work.md)
106 * [QMK verstehen](de/understanding_qmk.md)
107
108* Andere Themen
109 * [Eclipse mit QMK](de/other_eclipse.md)
110 * [VSCode mit QMK](de/other_vscode.md)
111 * [Support](de/support.md)
112 * [Übersetzungen](de/translating.md)
113
114* QMK Internals (In Progress)
115 * [Defines](de/internals_defines.md)
116 * [Input Callback Reg](de/internals_input_callback_reg.md)
117 * [Midi Device](de/internals_midi_device.md)
118 * [Midi Device Setup Process](de/internals_midi_device_setup_process.md)
119 * [Midi Util](de/internals_midi_util.md)
120 * [Send Functions](de/internals_send_functions.md)
121 * [Sysex Tools](de/internals_sysex_tools.md)
diff --git a/docs/de/driver_installation_zadig.md b/docs/de/driver_installation_zadig.md
new file mode 100644
index 000000000..bd04e0543
--- /dev/null
+++ b/docs/de/driver_installation_zadig.md
@@ -0,0 +1,47 @@
1# Bootloader Treiber Installation mit Zadig
2
3QMK erscheint für den Host als normales HID Eingabegerät und benötigt deshalb keine zusätzlichen Treiber. Der Bootloader, den Du für das Flashen der Firmware benötigst, jedoch meistens schon.
4
5Hierzu gibt es zwei Ausnahmen: den Caterina Bootloader, meistens auf Pro Micros, sowie den HalfKay Bootloader auf PJRC Teensys. Diese erscheinen als serieller Port und als generisches HID Gerät und benötigen keine Treiber.
6
7Wir empfehlen deshalb [Zadig](https://zadig.akeo.ie/). Wenn Du die Entwicklungsumgebung mit MSYS2 oder WSL installiert hast, wird dich dass `qmk_install.sh` Skript gefragt haben, ob es die Treiber für dich installieren sollte.
8
9## Installation
10
11Versetze deine Tastatur in den Bootloader-Modus, entweder durch Betätigung des physischen `RESET` Schalters - meist auf der Unterseite der Platine - oder durch das Auslösen des Key-Codes `RESET` bzw. `KC_RESET` (sollte in der zur Tastatur gehörigen `keycode.c` zu entnehmen sein). Sollte deine Tastatur weder noch besitzen, versuche es damit die `Escape`-Taste oder `Leertaste + B` zu halten während Du die Tastatur mit dem PC verbindest (Siehe auch [Bootmagic](de/feature_bootmagic.md) für weitere Details). Ein paar Tastaturen benutzen das [Command](de/feature_command.md)-Feature an Stelle von Bootmagic; in diesem Fall kannst du mit den Tastenkombinationen `linkes Shift + rechtes Shift + B` oder `linkes Shift + rechtes Shift + Escape` zu jeder Zeit in den Bootloader wechseln solange die Tastatur verbunden ist.
12
13Eingie Tastaturen haben u.U. spezielle Anweisungen um in den Bootloader-Modus zu gelangen. Zum Beispiel kann die [Bootmagic-Lite](de/feature_bootmagic.md#bootmagic-lite)-Taste (default: Escape) auf eine andere Taste gemappt sein; oder die magische Kombination (default: linkes Shift+rechtes Shift) verwendet anstatt Shift die STRG-Tasten. Die zur Tastatur gehörige README sollte dir Aufschluss darüber geben wie der Bootloader-Modus ausgelöst werden kann wenn Du unsicher bist.
14
15Um ein Gerät mit USBaspLoader in den Bootloader-Modus zu versetzen, halte `BOOT` gedrückt während Du den `RESET`-Knopf drückst.
16Alternativ, halte `BOOT` gedrückt während Du das USB-Kabel einsteckst.
17
18Zadig sollte das Bootloader-Gerät automatisch erkennen. Manchmal musst Du zusätzlich noch **Options → List All Devices** auswählen.
19
20 - Tastaturen mit Atmel AVR MCUs sollten als `ATm32U4DFU` (oder ähnlich) angezeigt werden, mit der Vendor ID `03EB`.
21 - USBasp werden als `USBasp` angezeigt, mit VID/PID `16C0:05DC`.
22 - Tastaturen AVR controller und dem QMK-DFU Bootloader haben den namen `<Tastatur Name> Bootloader` und die VID `03EB`.
23 - Die meisten ARM Tastaturen werden als `STM32 BOOTLOADER` angezeigt, mit VID/PID `0483:DF11`.
24
25!> Sollte Zadig ein oder mehrere Geräte mit `HidUsb`-Treiber anzeigen, dann ist deine Tastatur wahrscheinlich nicht im Bootloader-Modus. Der Pfeil wird orange eingefärbt sein und Du wirst nach einer Bestätigung gefragt um Veränderungen am System vorzunehmen. In diesem Fall **fahre nicht fort**!
26
27Wenn der Pfeil grün angezeigt wird, wähle den Treiber aus und klicke auf **Treiber installieren**. Der `libusb-win32`-Treiber sollte gewöhnlich für AVR verwendet werden und `WinUSB` für ARM. Sollte es danach noch nicht möglich sein die Tastatur zu flashen, versuche es mit einem anderen Treiber. Für USBaspLoader Geräte, die über die Befehlszeile mit MSYS2 geflasht werden, wird der `libusbk`-Treiber empfohlen. Ansonsten sollte `libusb-win32` funktionieren wenn die QMK Toolbox verwendet wird.
28
29![Zadig mit Bootloader-Treiber korrekt installiert](https://i.imgur.com/b8VgXzx.png)
30
31Entferne nun deine Tastatur und verbinde sie erneut um sicherzugehen dass der neue Treiber erfolgreich installiert wurde. Wenn Du QMK Toolbox benutzt, starte die Anwendung zur Sicherheit einmal neu, da Veränderungen am Treiber manchmal nicht richtig erkannt werden. Wenn dies immer noch nicht erfolgreich war hilft es an dieser Stelle manchmal ein Neustart des Computers.
32
33## Wiederherstellung einer Installation für ein falsches Gerät
34
35Wenn Du feststellst dass Du anschließend auf deiner Tastatur nicht mehr tippen kannst, ist etwas bei der Installation schief gelaufen. Ein häufiger Fehler ist es dass die Tastatur nicht im Bootloader-Modus war und stattdessen der Treiber für das HID-Gerät ersetzt wurde. Dies kannst Du einfach mit Zadig überprüfen, eine funktionierende Tastatur verwendet als Treiber `HidUsb` auf allen Interfaces .
36
37![Eine funktionierende Tastatur aus Zadigs Sicht](https://i.imgur.com/Hx0E5kC.png)
38
39Öffne den Geräte-Manager und suche nach einem Gerät das wie deine Tastatur aussieht.
40
41![Die Tastatur mit dem falschen Treiber installiert, im Geräte-Manager](https://i.imgur.com/L3wvX8f.png)
42
43Rechtsklick und **Gerät deinstallieren** anklicken. Bitte gehe sicher dass in diesem Schritt auch **Treibersoftware für dieses Gerät löschen** markiert ist.
44
45![Der "Gerät deinstallieren"-Dialog, mit "Treibersoftware für dieses Gerät entfernen" markiert](https://i.imgur.com/aEs2RuA.png)
46
47Klick **Aktion → Suche nach veränderter Hardware**. Nun solltest Du wieder in der Lage sein normal zu tippen. Vergewissere dich mit Hilfe von Zadig dass die Tastatur nun `HidUsb` als Treiber verwendet. Wenn dies der Fall ist sollte wieder alles funktionieren.
diff --git a/docs/de/newbs.md b/docs/de/newbs.md
new file mode 100644
index 000000000..61139a99e
--- /dev/null
+++ b/docs/de/newbs.md
@@ -0,0 +1,22 @@
1# Anleitung für absolute Beginner
2QMK ist eine mächtige Open Source Firmware für mechanische Tastaturen. Mit QMK kannst Du deine Tastatur sowohl sehr einfach als auch sehr umfangreich anpassen. Menschen unterschiedlichen Wissensstandes - vom kompletten Anfänger bis zum erfahrenen Programmierer - haben ihre Tastaturen mit QMK erfolgreich auf ihre persönlichen Bedürfnisse angepasst. Diese Anleitung soll Dir unabhängig von deinen Vorkenntnissen dabei helfen dies ebenfalls zu bewältigen.
3
4Bist Du unsicher ob deine Tastatur QMK unterstützt? Wenn es eine mechanische Tastatur ist, die Du selbst gebaut hast, stehen deine Chancen gut. Wir unterstützen eine [Vielzahl](https://qmk.fm/keyboards/) selbst gebauter Tastaturen, sodass selbst wenn deine jetzige Tastatur nicht unterstützt wird Du keine Probleme haben solltest eine für deine Anforderungen zu finden.
5
6## Übersicht
7
8Diese Anleitung ist in 7 Abschnitte unterteilt:
9
10* [Die ersten Schritte](newbs_getting_started.md)
11* [Die erste Firmware auf der Kommandozeile erzeugen](newbs_building_firmware.md)
12* [Die erste Firmware mit der Online GUI erzeugen](newbs_building_firmware_configurator.md)
13* [Firmware flashen](newbs_flashing.md)
14* [Testen und Debuggen](newbs_testing_debugging.md)
15* [Git Leitfaden](newbs_best_practices.md)
16* [Weitere hilfreiche Ressourcen für Anfänger](newbs_learn_more_resources.md)
17
18Diese Anleitung richtet sich an Personen, die vorher noch nie Software kompiliert haben. Die Entscheidungen und Empfehlungen basieren auf dieser Grundannahme. Es gibt unterschiedliche Herangehensweisen für viele der Prozeduren und wir unterstützen die meisten Alternativen. Wenn Du mal nicht weiter weißt oder Dir nicht sicher bist, wie Du an ein Problem herangehen sollst, kannst Du uns gerne [um Hilfe bitten](getting_started_getting_help.md).
19
20## Weitere Ressourcen
21
22* [Thomas Baart's QMK Basics Blog](https://thomasbaart.nl/category/mechanical-keyboards/firmware/qmk/qmk-basics/) – Ein äußerst hilfreicher Blog eines Community-Mitglieds, der einige Grundlagen der QMK-Firmware aus der Sicht des Benutzers erklärt (auf Englisch).
diff --git a/docs/de/newbs_building_firmware.md b/docs/de/newbs_building_firmware.md
new file mode 100644
index 000000000..b6d484024
--- /dev/null
+++ b/docs/de/newbs_building_firmware.md
@@ -0,0 +1,78 @@
1# Eine eigene Firmware erstellen
2
3Nachdem Du nun eine funktionierende Entwicklungsumgebung aufgesetzt hast, bist Du nun bereit, deine eigene Firmware zu erstellen. Dieses Sektion des Guides wird zwischen drei Programmen hin- und herwechseln: deinem Dateimanager, deinem Texteditor und der Befehlszeile. Lasse diese drei Fenster geöffnet, bis Du fertig und zufrieden mit deiner Tastatur-Firmware bist.
4
5Solltest Du die Befehlszeile zwischenzeitlich geschlossen haben, vergiss nicht wieder in das richtige Verzeichnis zu navigieren, benutze dazu den Befehl `cd qmk_firmware`.
6
7## Navigiere in deinen Keymap Ordner
8
9Beginne damit, in das `keymaps` Verzeichnis für deine Tastatur zu navigieren.
10
11Wenn Du macOS oder Windows benutzt, kannst Du einfach in das keymaps Verzeichnis wechseln.
12
13?> macOS:<br>
14 open keyboards/<keyboard_folder>/keymaps
15
16?> Windows:<br>
17 start .\\keyboards\\<keyboard_folder>\\keymaps
18
19## Eine Kopie der `default` Tastaturbelegung erstellen
20
21Wenn Du den `keymaps` Ordner geöffnet hast, solltest Du zuerst eine Kopie des `default` Verzeichnisses erstellen. Wir empfehlen dafür deinen GitHub Benutzernamen zu verweden, aber Du kannst auch jeden anderen Namen verwenden solange er nur aus Kleinbuchstaben, Zahlen und Unterstrichen besteht.
22
23Um den Prozess zu automatisieren kannst Du dazu auch das Skript `new_keymap.sh` verwenden.
24
25Navigiere dazu in das `qmk_firmware/util` Verzeichnis und gib folgenden Befehl ein:
26
27```
28./new_keymap.sh <keyboard path> <username>
29```
30
31Um zum Beispiel den Benutzernamen John für die Tastaturbelegung eines 1up60hse zu verwenden, würdest Du Folgendes eingeben:
32
33```
34./new_keymap.sh 1upkeyboards/1up60hse john
35```
36
37## Öffne `keymap.c` in deinem bevorzugtem Text Editor
38
39Öffne deine `keymap.c`. In dieser Datei findest Du die Strukturen, die das Verhalten deiner Tastatur bestimmen. Oben in der `keymap.c` befinden sich Definitionen (defines) und Aufzählungen (enums), die die Tastaturbelegung leserlicher machen sollen. Weiter unten wirst Du eine Zeile finden, die wie folgt aussieht:
40
41 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
42
43Diese Zeile markiert den Anfang der Liste der Ebenen (Layers). Darunter befinden sich Zeilen die entweder `LAYOUT` oder `KEYMAP` enthalten, das deutet auf den Start einer Ebene hin. Danach folgt eine Liste von Tasten, die dieser Ebene zugewiesen sind.
44
45!> Beim Bearbeiten einer Tastaturbelegung solltest Du darauf achten, keine Kommata hinzuzufügen oder zu entfernen. Ansonsten kann dies dazu führen, dass deine Firmware nicht mehr kompiliert und es ist nicht immer einfach festzustellen, wo genau ein Komma zuviel oder zu wenig ist. Die letzte Zeile hat am Ende kein Komma, die Zeilen davor jedoch schon.
46
47## Personalisiere die Tastaturbelegung nach deinen Wünschen
48
49Wie Du diesen Schritt abschließt ist vollkommen Dir überlassen. Ändere die eine Sache die Dich stört oder verändere alles von Grund auf. Du kannst Ebenen entfernen die Du nicht brauchst oder Neue hinzufügen, bis zu 32 Stück. Die folgende Dokumentation verrät Dir was Du hier alles definieren kannst:
50
51* [Keycodes](de/keycodes.md)
52* [Features](de/features.md)
53* [FAQ](de/faq.md)
54
55?> Während Du langsam ein Gefühl dafür kriegst wie Keymaps funktionieren, solltest Du darauf achten nicht zuviel auf einmal zu verändern. Größere Änderungen machen es schwieriger, Probleme zu debuggen.
56
57## Deine Firmware erzeugen
58
59Wenn Du damit fertig bist, deine Tastaturbelegung anzupassen, musst Du noch die Firmware erzeugen. Öffne dazu wieder die Befehlszeile und führe folgenden Befehl aus:
60
61 make <my_keyboard>:<my_keymap>
62
63Wenn deine Tastaturbelegung z.B. "xyverz" heißt und Du die Belegung für ein rev5 planck erzeugen möchtest, lautet der Befehl:
64
65 make planck/rev5:xyverz
66
67Während des Kompiliervorgangs wird viel Text auf dem Bildschirm ausgegeben. Es sollte am Ende mit etwas enden das ungefähr so aussieht:
68
69```
70Linking: .build/planck_rev5_xyverz.elf [OK]
71Creating load file for flashing: .build/planck_rev5_xyverz.hex [OK]
72Copying planck_rev5_xyverz.hex to qmk_firmware folder [OK]
73Checking file size of planck_rev5_xyverz.hex [OK]
74 * File size is fine - 18392/28672
75```
76
77## Deine Firmware flashen
78Bitte fahre mit [Firmware flashen](de/newbs_flashing.md) fort, um zu erfahren, wie Du deine neue Firmware auf deine Tastatur flashen kannst.
diff --git a/docs/de/newbs_flashing.md b/docs/de/newbs_flashing.md
new file mode 100644
index 000000000..940438669
--- /dev/null
+++ b/docs/de/newbs_flashing.md
@@ -0,0 +1,369 @@
1# Deine Tastatur flashen
2
3Nachdem deine Firmware nun fertig ist musst Du Sie noch auf deine Tastatur flashen.
4
5## Flash-Vorgang mit QMK Toolbox
6
7Der einfachste Weg deine Tastatur zu flashen ist mit Hilfe der [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases)
8
9Leider ist die QMK Toolbox derzeit nur für Windows und macOS verfügbar. Wenn Du Linux benutzt (oder es vorziehst die Firmware mit der Kommandozeile zu flashen) solltest Du die Methode benutzen die [hier](de/newbs_flashing.md#tastatur-mit-der-befehlszeile-flashen) beschrieben wird.
10
11### Lade die Datei in QMK Toolbox
12
13Beginne damit die Datei in der QMK Toolbox Anwendung zu laden. Versichere dich dass Du die Firmware-Datei im Finder oder Explorer findest. Deine Tastatur-Firmware sollte entweder vom Typ `.hex` oder `.bin` sein sein. QMK sollte die für deine Tastatur entsprechende Datei automatisch in das Root-Verzeichnis (normalerweise `qmk_firmware`) kopieren.
14
15?> Wenn Du Windows oder macOS benutzt kannst Du mit folgenden Befehlen ganz einfach das aktuelle Firmware-Verzeichnis im Explorer oder Finder öffnen.
16
17#### Windows:
18
19``` start . ```
20
21#### macOS:
22
23``` open . ```
24
25Die Firmware-Dateien folgen dabei immer folgendem Schema:
26
27 <meine_Tastatur>_<meine_Tastaturbelegung>.{bin,hex}
28
29Zum Beispiel würde ein `planck/rev5` mit der `default` Tastaturbelegung folgenden Dateinamen haben:
30
31 planck_rev5_default.hex
32
33Wenn Du die Firmware-Datei gefunden hast kannst Du sie in das "Local file" ("Lokale Datei") Feld in der QMK Toolbox ziehen, alternativ kannst Du auf "Öffnen" klicken und in das Verzeichnis navigieren indem sich die Firmware-Datei befindet.
34
35### Die Tastatur in den DFU (Bootloader) Modus versetzen
36
37Um deine angepasste Firmware auf deine Tastatur zu flashen musst Du diese erst in einen speziellen "flashing"-Modus versetzen. Während die Tastatur in diesem Modus ist kannst Du nicht auf ihr tippen oder sie wie gewohnt als Tastatur benutzen. Es ist wichtig dass der flashing-Prozesses nicht unterbrochen oder die Tastatur ausstöpselst wird, da der Vorgang ansonst wiederholt werden muss.
38
39Verschiedene Tastaturen verwenden unterschiedliche Methoden um in den Bootloader-Modus zu gelangen. Wenn dein PCB im Moment QMK oder TMK verwendet und Du keine spezifischen Anweisungen erhalten hast probiere die folgenden Methoden in dieser Reihenfolge:
40
41* Halte beide Shift-Tasten und drücke `Pause`
42* Halte beide Shift-Tasten und drücke `B`
43* Entferne deine Tastatur vom Computer, drücke gleichzeitig `Leertaste` und `B`, verbinde die Tastatur wieder mit dem Computer und warte eine Sekunde bevor Du die Tasten wieder loslässt.
44* Drücke den physischen `RESET`-Knopf auf der Unterseite des PCBs
45* Suche auf dem PCB den Pin mit dem Label `RESET`, verbinde diesen mit deinem GND-Pin
46* Suche auf dem PCB den Pin mit dem Label `BOOT0`, verbinde diesen mit GND und schließe die Tastatur wieder an den PC an TODO: DIS IS DANGEROUS!!
47
48Wenn Du damit erfolgreich warst solltest Du in der QMK Toolbox eine Nachricht sehen die ungefähr so aussieht:
49
50```
51*** Clueboard - Clueboard 66% HotSwap disconnected -- 0xC1ED:0x2390
52*** DFU device connected
53```
54
55### Tastatur flashen
56
57Klicke auf den `Flash`-Knopf in der QMK Toolbox. Die Ausgabe wird ungefähr so aussehen:
58
59```
60*** Clueboard - Clueboard 66% HotSwap disconnected -- 0xC1ED:0x2390
61*** DFU device connected
62*** Attempting to flash, please don't remove device
63>>> dfu-programmer atmega32u4 erase --force
64 Erasing flash... Success
65 Checking memory from 0x0 to 0x6FFF... Empty.
66>>> dfu-programmer atmega32u4 flash qmk_firmware/clueboard_66_hotswap_skully.hex
67 Checking memory from 0x0 to 0x55FF... Empty.
68 0% 100% Programming 0x5600 bytes...
69 [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
70 0% 100% Reading 0x7000 bytes...
71 [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
72 Validating... Success
73 0x5600 bytes written into 0x7000 bytes memory (76.79%).
74>>> dfu-programmer atmega32u4 reset
75
76*** DFU device disconnected
77*** Clueboard - Clueboard 66% HotSwap connected -- 0xC1ED:0x2390
78```
79
80## Tastatur mit der Befehlszeile flashen
81
82Zunächst solltest Du versuchen herauszufinden welchen Bootlader deine Tastatur benutzt. Diese vier Bootloader sind am Weitesten verbreitet:
83
84| MCU | Bootloader |
85| --- | --- |
86| Pro-Micro und Klone | CATERINA |
87| Teensy | Halfkay |
88| OLKB Boards | QMK-DFU |
89| sonstige atmega32u4 | DFU |
90
91Auf der Seite [Flash Anleitung und Bootloader Informationen](de/flashing.md) kannst Du mehr über das Thema erfahren.
92
93Wenn Du weißt welchen Bootloader deine Tastaur verwendet, kannst Du diese Information bei der Kompilation hinzufügen um den Flash-Vorgang mit dem `make`-Befehl zu automatisieren.
94```rules.mk
95...
96BOOTLOADER = caterina
97...
98```
99
100### DFU
101
102Wenn Du den DFU-Bootloader verwendest und Du bereit bist deine Firmware zu kompilieren und zu flashen, öffne ein Befehlszeile und führe folgenden Befehl aus:
103
104 make <meine_Tastatur>:<meine_Tastaturbelegung>:dfu
105
106Wenn deine Tastaturbelegung z.B den Namen "xzverz" trägt und Du ein rev5 planck flashen möchtest sähe der Befehl wie folgt aus:
107
108 make planck/rev5:xyverz:dfu
109
110
111Nachdem der Vorgang abgeschlossen ist sollte die Ausgabe ungefähr so aussehen:
112
113```
114Linking: .build/planck_rev5_xyverz.elf [OK]
115Creating load file for flashing: .build/planck_rev5_xyverz.hex [OK]
116Copying planck_rev5_xyverz.hex to qmk_firmware folder [OK]
117Checking file size of planck_rev5_xyverz.hex
118 * File size is fine - 18574/28672
119 ```
120
121Wenn dieser Punkt erreicht ist wird das Build-Skript alle 5 Sekunden nach einem DFU Bootloader suchen. Dieser Vorgang wird wiederholt bis er erfolgreich ist oder abgebrochen wird.
122
123 dfu-programmer: no device present.
124 Error: Bootloader not found. Trying again in 5s.
125
126Wenn diese Nachricht erscheint konnte das Build-Skript den Controller nicht eigenständig in den DFU Modus versetzen (z.B. weil der Modus in rules.mk falsch gesetzt wurde oder ein Problem mit der Hardware besteht), wenn dies eintritt musst Du die oben beschrieben Schritte benutzen um den Controller in den DFU Modus zu versetzen. Danach sollte die Ausgabe ungefähr so aussehen:
127
128```
129*** Attempting to flash, please don't remove device
130>>> dfu-programmer atmega32u4 erase --force
131 Erasing flash... Success
132 Checking memory from 0x0 to 0x6FFF... Empty.
133>>> dfu-programmer atmega32u4 flash qmk_firmware/clueboard_66_hotswap_skully.hex
134 Checking memory from 0x0 to 0x55FF... Empty.
135 0% 100% Programming 0x5600 bytes...
136 [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
137 0% 100% Reading 0x7000 bytes...
138 [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
139 Validating... Success
140 0x5600 bytes written into 0x7000 bytes memory (76.79%).
141>>> dfu-programmer atmega32u4 reset
142```
143
144?> Wenn Du mit diesem Schritt Probleme hast (z.B. `dfu-programmer: no device present`) hilft dir hoffentlich der Abschnitt [Häufig gestellte Fragen (Build/Kompilieren)](de/faq_build.md).
145
146#### DFU Befehle
147
148Es gibt verschiedene DFU Befehle um die Firmware auf ein DFU Gerät zu flashen:
149
150* `:dfu` - Dies ist die default Option. Es wird gecheckt ob ein DFU Gerät verfügbar ist, ist dies der Fall wird die Firmware geflasht. Dieser Check wird alle 5 Sekunden ausgeführt bis ein DFU Gerät erkannt wird.
151* `:dfu-ee` - Der Flash-Vorgang benutzt eine `.eep` Datei anstatt einer `.hex` Datei. Dies ist eher unüblich.
152* `:dfu-split-left` - Dies flasht die Firmware wie gewohnt (`:dfu`). Allerdings nur die "linke Seite" der EEPROM für geteilte Tastaturen. _Dies ist ideal für auf Elite C basierenden geteilten Tastaturen._
153* `:dfu-split-right` - Dies flasht die Firmware wie gewohnt (`:dfu`). Allerdings nur die "rechte Seite" der EEPROM für geteilte Tastaturen. _Dies ist ideal für auf Elite C basierenden geteilten Tastaturen._
154
155
156### Caterina
157Für Arduinos und andere ProMicro Klone (z.B. SparkFun ProMicro), wenn Du bereit bist zu kompilieren und die Tastatur zu flashen, öffne ein Befehlszeilen-Fenster und führe den Build-Befehl aus:
158
159 make <meine_Tastatur>:<meine_Tastaturbelegung>:avrdude
160
161Wenn deine Tastaturbelegung zum Beispiel den Namen "xyverz" hat und Du eine Tastaturbelegung für ein "rev2 Lets Split" erzeugen möchtest, lautet der Befehl dafür:
162
163 make lets_split/rev2:xyverz:avrdude
164
165Nachdem die Kompilation abgeschlossen ist sollte die Ausgabe ungefähr so aussehen:
166
167```
168Linking: .build/lets_split_rev2_xyverz.elf [OK]
169Creating load file for flashing: .build/lets_split_rev2_xyverz.hex [OK]
170Checking file size of lets_split_rev2_xyverz.hex [OK]
171 * File size is fine - 27938/28672
172Detecting USB port, reset your controller now..............
173```
174
175Nun wird die Tastatur automatisch zurückgesetzt und das Skript wird die Firmware flashen sobald es den Bootloader erkennt. Die Ausgabe sollte ungefähr so aussehen:
176
177```
178Detected controller on USB port at /dev/ttyS15
179
180Connecting to programmer: .
181Found programmer: Id = "CATERIN"; type = S
182 Software Version = 1.0; No Hardware Version given.
183Programmer supports auto addr increment.
184Programmer supports buffered memory access with buffersize=128 bytes.
185
186Programmer supports the following devices:
187 Device code: 0x44
188
189avrdude.exe: AVR device initialized and ready to accept instructions
190
191Reading | ################################################## | 100% 0.00s
192
193avrdude.exe: Device signature = 0x1e9587 (probably m32u4)
194avrdude.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed
195 To disable this feature, specify the -D option.
196avrdude.exe: erasing chip
197avrdude.exe: reading input file "./.build/lets_split_rev2_xyverz.hex"
198avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex auto detected as Intel Hex
199avrdude.exe: writing flash (27938 bytes):
200
201Writing | ################################################## | 100% 2.40s
202
203avrdude.exe: 27938 bytes of flash written
204avrdude.exe: verifying flash memory against ./.build/lets_split_rev2_xyverz.hex:
205avrdude.exe: load data flash data from input file ./.build/lets_split_rev2_xyverz.hex:
206avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex auto detected as Intel Hex
207avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex contains 27938 bytes
208avrdude.exe: reading on-chip flash data:
209
210Reading | ################################################## | 100% 0.43s
211
212avrdude.exe: verifying ...
213avrdude.exe: 27938 bytes of flash verified
214
215avrdude.exe: safemode: Fuses OK (E:CB, H:D8, L:FF)
216
217avrdude.exe done. Thank you.
218```
219Sollten dabei Probleme auftreten (z.B. "Zugriff verweigert" / "Permission denied") muss der Make-Befehl mit privilegierten Berechtigungen ausgeführt werden:
220
221 sudo make <meine_Tastatur>:<meine_Tastaturbelegung>:avrdude
222
223Zusätzlich ist es möglich mehrere Tastaturen in einem Vorgang zu flashen:
224
225 make <keyboard>:<keymap>:avrdude-loop
226
227Du kannst den Loop mit STRG + C unterbrechen sobald der Vorgang abgeschlossen ist. Die korrekte Tastenkombination kann abweichen und hängt vom Betriebssystem ab.
228
229
230### HalfKay
231
232Für Tastaturen mit PJRC Controllern (Teensy's), wenn Du bereit bist zu kompilieren und die Tastatur zu flashen, öffne ein Befehlszeilen-Fenster und führe den Build-Befehl aus:
233
234 make <meine_Tastatur>:<meine_Tastaturbelegung>:teensy
235
236Wenn deine Tastaturbelegung zum Beispiel den Namen "xyverz" hat und Du eine Tastaturbelegung für ein Ergodox oder Ergodox EZ erzeugen möchtest, lautet der Befehl dafür:
237
238 make ergodox_ez:xyverz:teensy
239
240Nachdem die Kompilation abgeschlossen ist sollte die Ausgabe ungefähr so aussehen:
241
242```
243Linking: .build/ergodox_ez_xyverz.elf [OK]
244Creating load file for flashing: .build/ergodox_ez_xyverz.hex [OK]
245Checking file size of ergodox_ez_xyverz.hex [OK]
246 * File size is fine - 25584/32256
247 Teensy Loader, Command Line, Version 2.1
248Read "./.build/ergodox_ez_xyverz.hex": 25584 bytes, 79.3% usage
249Waiting for Teensy device...
250 (hint: press the reset button)
251 ```
252
253An diesem Punkt solltest Du die Tastatur zurücksetzen um den Flash-Vorgang auszulösen. Wenn dies abgeschlossen ist sollte die Ausgabe ungefähr so aussehen:
254
255 ```
256Found HalfKay Bootloader
257Read "./.build/ergodox_ez_xyverz.hex": 28532 bytes, 88.5% usage
258Programming.............................................................
259...................................................
260Booting
261```
262
263### BootloadHID
264
265Für auf Bootmapper Client(BMC)/bootloaderHID/ATmega32A basierende Tastaturen, wenn Du bereit bist zu kompilieren und die Tastatur zu flashen, öffne ein Befehlszeilen-Fenster und führe den Build-Befehl aus:
266
267 make <meine_Tastatur>:<meine_Tastaturbelegung>:bootloaderHID
268
269Wenn deine Tastaturbelegung zum Beispiel den Namen "xyverz" hat und Du eine Tastaturbelegung für ein jj40 erzeugen möchtest, lautet der Befehl dafür:
270
271 make jj40:xyverz:bootloaderHID
272
273Nachdem die Kompilation abgeschlossen ist sollte die Ausgabe ungefähr so aussehen:
274
275```
276Linking: .build/jj40_default.elf [OK]
277Creating load file for flashing: .build/jj40_default.hex [OK]
278Copying jj40_default.hex to qmk_firmware folder [OK]
279Checking file size of jj40_default.hex [OK]
280 * The firmware size is fine - 21920/28672 (6752 bytes free)
281```
282
283Wenn dieser Punkt erreicht ist wird das Build-Skript alle 5 Sekunden nach einem DFU Bootloader suchen. Dieser Vorgang wird wiederholt bis er erfolgreich ist oder abgebrochen wird.
284
285```
286Error opening HIDBoot device: The specified device was not found
287Trying again in 5s.
288```
289
290An diesem Punkt solltest Du die Tastatur zurücksetzen um den Flash-Vorgang auszulösen. Wenn dies abgeschlossen ist sollte die Ausgabe ungefähr so aussehen:
291
292```
293Page size = 128 (0x80)
294Device size = 32768 (0x8000); 30720 bytes remaining
295Uploading 22016 (0x5600) bytes starting at 0 (0x0)
2960x05580 ... 0x05600
297```
298
299### STM32 (ARM)
300
301Für die meisten ARM Tastaturen (inkl. Proton C, Planck Rev 6 und Preonic Rev 3), wenn Du bereit bist zu kompilieren und die Tastatur zu flashen, öffne ein Befehlszeilen-Fenster und führe den Build-Befehl aus:
302
303 make <meine_Tastatur>:<meine_Tastaturbelegung>:dfu-util
304
305Wenn deine Tastaturbelegung zum Beispiel den Namen "xyverz" hat und Du eine Tastaturbelegung für ein Planck Revision 6 erzeugen möchtest, benutze dafür den folgenden Befehl und reboote die Tastatur in den Bootloader (kurz bevor der Kompiliervorgang abgeschlossen ist):
306
307 make planck/rev6:xyverz:dfu-util
308
309Nachdem der Kompiliervorgang abgeschlossen ist sollte die Ausgabe ungefähr so aussehen:
310
311Für auf Bootmapper Client(BMC)/bootloaderHID/ATmega32A basierende Tastaturen, wenn Du bereit bist zu kompilieren und die Tastatur zu flashen, öffne ein Befehlszeilen-Fenster und führe den Build-Befehl aus:
312
313 make <meine_Tastatur>:<meine_Tastaturbelegung>:bootloaderHID
314
315Wenn deine Tastaturbelegung zum Beispiel den Namen "xyverz" hat und Du eine Tastaturbelegung für ein jj40 erzeugen möchtest, lautet der Befehl dafür:
316```
317Linking: .build/planck_rev6_xyverz.elf [OK]
318Creating binary load file for flashing: .build/planck_rev6_xyverz.bin [OK]
319Creating load file for flashing: .build/planck_rev6_xyverz.hex [OK]
320
321Size after:
322 text data bss dec hex filename
323 0 41820 0 41820 a35c .build/planck_rev6_xyverz.hex
324
325Copying planck_rev6_xyverz.bin to qmk_firmware folder [OK]
326dfu-util 0.9
327
328Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
329Copyright 2010-2016 Tormod Volden and Stefan Schmidt
330This program is Free Software and has ABSOLUTELY NO WARRANTY
331Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
332
333Invalid DFU suffix signature
334A valid DFU suffix will be required in a future dfu-util release!!!
335Opening DFU capable USB device...
336ID 0483:df11
337Run-time device DFU version 011a
338Claiming USB DFU Interface...
339Setting Alternate Setting #0 ...
340Determining device status: state = dfuERROR, status = 10
341dfuERROR, clearing status
342Determining device status: state = dfuIDLE, status = 0
343dfuIDLE, continuing
344DFU mode device DFU version 011a
345Device returned transfer size 2048
346DfuSe interface name: "Internal Flash "
347Downloading to address = 0x08000000, size = 41824
348Download [=========================] 100% 41824 bytes
349Download done.
350File downloaded successfully
351Transitioning to dfuMANIFEST state
352```
353
354#### STM32 Befehle
355
356Für Tastaturen mit STM32 Controller sind die DFU Befehle wie folgt:
357
358* `:dfu-util` - The default command for flashing to STM32 devices.
359* `:dfu-util` - Der Standard-Befehl für STM32 Geräte.
360* `:dfu-util-wait` - Funktioniert wie der Standard-Befehl, aber mit einem 10 Sekunden Timeout bevor erneut versucht wird die Firmware zu flashen. Mit dem Parameter `TIME_DELAY=20` auf der Befehlszeile kann der Timeout beeinflusst werden.
361 * z.B.: `make <meine_Tastatur>:<meine_Tastaturbelegung>:dfu-util TIME_DELAY=5`
362* `:dfu-util-split-left` - Gleiche Funktionsweise wie `dfu-util`, jedoch wird zusätzlich das EEPROM Setting "linke Seite" für geteilte Tastaturen gesetzt.
363* `:dfu-util-split-right` - Gleiche Funktionsweise wie `dfu-util`, jedoch wird zusätzlich das EEPROM Setting "rechte Seite" für geteilte Tastaturen gesetzt.
364
365## Probier's aus!
366
367Herzlichen Glückwunsch! Deine individuell angepasst Firmware wurde auf deine Tastatur übertragen!
368
369 Probiere deine neue Tastatur aus und gehe sicher dass alles wie gewünscht funktioniert. Wir haben einen weiteren Artikel zum Thema [Testen und Debuggen](de/newbs_testing_debugging.md) verfasst der sich mit Problembeseitigung beschäftigt um den Beginnger-Guide abzuschließen.
diff --git a/docs/de/newbs_getting_started.md b/docs/de/newbs_getting_started.md
new file mode 100644
index 000000000..8240f2baf
--- /dev/null
+++ b/docs/de/newbs_getting_started.md
@@ -0,0 +1,101 @@
1# Einleitung
2Genau wie in einem Computer befindet sich auch in einer Tastatur ein Prozessor.
3
4Dieser Prozessor führt Software aus, die registriert wenn Tasten gedrückt bzw. wieder losgelassen werden und leitet die entsprechenden Signale an den Computer weiter.
5
6QMK übernimmt die Rolle dieser Software und teilt dem Host-Computer den aktuellen Zustand der Tastatur mit. Wenn Du eine Tastaturbelegung definierst, ist dies äquivalent zu einem ausführbarem Programm, das auf deiner Tastatur läuft.
7
8QMK möchte seine BenutzerInnen in die Lage versetzen, simple Aufgaben möglichst einfach zu gestalten und gleichzeitig komplexe Dinge zu ermöglichen, die mit normalen Tastaturen ohne zusätzliche Software undenkbar wären. Du musst nicht programmieren können, um abgefahrene Tastaturbelegungen zu gestalten - es reicht wenn Du eine Idee hast und ein paar einfache syntaktische Regeln verstehen kannst.
9
10# Los geht's!
11Bevor Du damit loslegen kannst, deine Tastaturbelegung zu erstellen, musst Du ein wenig Software installieren und Dir eine Entwicklungsumgebung aufsetzen. Die gute Nachricht ist, dass das nur einmal erledigt werden muss, egal für wie viele verschiedene Tastaturen Du hinterher Firmware entwickeln willst.
12
13Wenn Du es vorziehst mit einer grafischen Oberfläche zu entwickeln kannst Du auch dazu gerne direkt mit dem online [QMK Konfigurator](https://config.qmk.fm) loslegen. Siehe auch: [Firmware mit der Online GUI erzeugen](de/newbs_building_firmware_configurator.md)
14
15## Software herunterladen
16
17### Text Editor
18
19Du wirst ein Programm benötigen, mit dem Du **plain text** (= reiner Text) Dateien bearbeiten und speichern kannst. Wenn Du Windows benutzt, reicht dafür schon das normale `Notepad` und für Linux z.B. `gedit` oder `leafpad`. Beide sind sehr rudimentäre Editoren deren Funktionsumfang aber vollkommen ausreicht. Für macOS' standard `TextEdit` muss man ein bisschen vorsichtig sein und darauf achten, beim Speichern explizit unter _Format_ die Option _Reiner Text_ auszuwählen.
20
21Ansonsten ist es empfehlenswert, einen Editor herunterzuladen der für die Programmierung und das Bearbeiten von Code ausgelegt ist wie z.b [Notepad++](http://notepad-plus-plus.org/), [Sublime Text](https://www.sublimetext.com/) oder [VS Code](https://code.visualstudio.com/).
22
23?> Immer noch unsicher, welcher Text Editor der Richtige für Dich ist? Laurence Bradford hat eine hervorragende [Einleitung](https://learntocodewith.me/programming/basics/text-editors/) zu dem Thema geschrieben (auf Englisch).
24
25### QMK Toolbox
26
27QMK Toolbox ist ein optionales grafisches Programm für Windows und macOS, das es erleichtern soll, deine Tastatur zu programmieren und zu debuggen. Du wirst es höchstwahrscheinlich früher oder später als unverzichtbar ansehen, wenn es darum geht eine Tastatur einfach zu flashen oder zu debuggen, da es ermöglicht, sich debug-Nachrichten direkt anzeigen zu lassen.
28
29[Hier kannst Du die aktuelle Version herunterladen.](https://github.com/qmk/qmk_toolbox/releases/latest)
30
31* Für Windows: `qmk_toolbox.exe` (portable) oder `qmk_toolbox_install.exe` (installer)
32* Für macOS: `QMK.Toolbox.app.zip` (portable) oder `QMK.Toolbox.pkg` (installer)
33
34## Die Entwicklungsumgebung aufsetzen
35
36
37Wir haben versucht, die Installation der Entwicklungsumgebung für QMK so einfach wie möglich zu gestalten. Alles, was Du tun musst, ist eine Linux oder Unix Umgebung aufzusetzen, danach macht QMK den Rest.
38
39?> Wenn Du das erste Mal mit der Linux/Unix Befehlszeile arbeitest, schadet es nicht, sich mit ein paar Grundlagen und Befehlen vertraut zu machen. Diese Ressourcen sollten ausreichen, um sich das Nötigste anzueignen um mit QMK arbeiten zu können:<br>
40[Erforderliche Linux Grundlagen](https://www.guru99.com/must-know-linux-commands.html)<br>
41[Noch ein paar Linux Befehle](https://www.tjhsst.edu/~dhyatt/superap/unixcmd.html)
42
43### Windows
44
45Du wirst MSYS2 (o.Ä.) und Git benötigen.
46
47* Befolge die Installationsanleitung auf der [MSYS2 Homepage](http://www.msys2.org)
48* Schließe alle offenen MSYS2 Fenster und öffne ein neues MSYS2 MinGW 64-bit Terminal
49* Installiere Git mit dem Kommando: `pacman -S git`
50
51### macOS
52
53Du wirst Homebrew benötigen. Folge dafür den Anweisungen auf der [Homebrew homepage](https://brew.sh).
54
55Nachdem Homebrew erfolgreich installiert ist, kannst Du mit _QMK aufsetzen_ fortfahren.
56
57### Linux
58
59Du benötigst Git, aber es ist ziemlich wahrscheinlich, dass es bereits installiert ist. Sollte dies nicht der Fall sein, kannst Du es mit dem folgenden Aufruf installieren:
60
61* Debian / Ubuntu / Devuan: `apt-get install git`
62* Fedora / Red Hat / CentOS: `yum install git`
63* Arch Linux: `pacman -S git`
64
65?> Docker ist ebenfalls eine Option für alle Plattformen. [Hier](de/getting_started_build_tools.md#docker) kannst Du dazu weitere Informationen finden.
66
67## QMK aufsetzen
68Wenn Du damit fertig bist, deine Linux/Unix Umgebung zu installieren, kannst Du damit fortfahren QMK herunterzuladen. Dafür werden wir mit Git das QMK Repository "klonen". Öffne ein Terminal oder ein MSYS2 MinGW Fenster, dies wirst Du für den Rest der Anleitung benötigen. In diesem Fenster rufst Du nun die beiden folgenden Kommandos auf:
69
70```shell
71git clone --recurse-submodules https://github.com/qmk/qmk_firmware.git
72cd qmk_firmware
73```
74?> Wenn Du bereits weißt, [wie man GitHub benutzt](de/getting_started_github.md), empfehlen wir, dass Du Dir ein eigenen Fork erstellst. Wenn Du nicht weißt, was das bedeuten soll, kannst Du diesen Ratschlag getrost ignorieren.
75
76QMK liefert ein Script mit, das helfen soll, Dir alles Weitere abzunehmen. Du kannst es mit dem folgenden Befehl aufrufen:
77
78 util/qmk_install.sh
79
80## Die Build-Umgebung testen
81
82Nun sollte hoffentlich alles Nötige für eine funktionierende QMK Build-Umgebung installiert sein und Du solltest in der Lage sein, die QMK-Firmware zu kompilieren. Um dies mit einer `default` Tastaturbelegung zu testen, kannst Du den folgenden Befehl ausprobieren:
83
84 make <keyboard>:default
85
86Der Befehl um z.B. die Firmware für ein _Clueboard 66%_ zu erzeugen lautet:
87
88 make clueboard/66/rev3:default
89
90Wenn es fertig ist, sollte der Output ungefähr so ähnlich wie das Folgende aussehen:
91
92```
93Linking: .build/clueboard_66_rev3_default.elf [OK]
94Creating load file for flashing: .build/clueboard_66_rev3_default.hex [OK]
95Copying clueboard_66_rev3_default.hex to qmk_firmware folder [OK]
96Checking file size of clueboard_66_rev3_default.hex [OK]
97 * The firmware size is fine - 26356/28672 (2316 bytes free)
98```
99
100# Eine eigene Tastaturbelegung erstellen
101Du bist nun fertig mit dem Setup der Entwicklungsumgebung und solltest somit in der Lage sein, deine eigenen Tastaturbelegungen zu erstellen. Um fortzufahren, folge bitte der nächsten Anleitung unter [Die erste Firmware](de/newbs_building_firmware.md).
diff --git a/docs/de/newbs_learn_more_resources.md b/docs/de/newbs_learn_more_resources.md
new file mode 100644
index 000000000..59b72152d
--- /dev/null
+++ b/docs/de/newbs_learn_more_resources.md
@@ -0,0 +1,14 @@
1# Lernmaterial
2
3Diese weiterführenden Ressourcen sind darauf ausgerichtet, Neulingen der QMK Commmunity mehr Informationen und ein besseres Verständnis zu einzelnen Themen zu bieten.
4
5Git Ressourcen:
6
7* [Gutes allgemeines Tutorial](https://www.codecademy.com/learn/learn-git) (auf Englisch)
8* [Git spielerisch anhand von Beispielen lernen](https://learngitbranching.js.org/) (auf Englisch)
9* [Mehr über den allgemeinen Umgang mit Github](getting_started_github.md)
10* [Mehr über Git im Bezug zu QMK](contributing.md)
11
12Mehr über die Arbeit mit der Befehlszeile:
13
14* [Gutes allgemeines Tutorial über die Arbeit mit der Befehlszeile](https://www.codecademy.com/learn/learn-the-command-line) (auf Englisch)
diff --git a/docs/de/newbs_testing_debugging.md b/docs/de/newbs_testing_debugging.md
new file mode 100644
index 000000000..acc067e10
--- /dev/null
+++ b/docs/de/newbs_testing_debugging.md
@@ -0,0 +1,100 @@
1# Testen und Debuggen
2
3Nachdem Du deine Tastatur mit deiner angepassten Firmware geflasht hast, ist es nun an der Zeit sie auszuprobieren. Mit ein bisschen Glück sollte alles ohne Probleme funktionieren, wenn dies nicht der Fall ist, soll dieses Dokument dir dabei helfen, herauszufinden wo das Problem liegt.
4
5## Testen
6
7Die Tastatur zu testen ist relativ selbsterklärend. Drücke jede der Tasten um dich zu versichern, dass der gesendete Keyode der ist, den du erwarten würdest. Dafür gibt es sogar ein paar Programme die helfen sollen, dass keine Taste ausgelassen wurde.
8
9Anmerkung: Diese Programme werden weder von QMK bereitgestellt oder gutgeheißen.
10
11* [Switch Hitter](https://elitekeyboards.com/switchhitter.php) (Nur für Windows)
12* [Keyboard Viewer](https://www.imore.com/how-use-keyboard-viewer-your-mac) (Nur für Mac)
13* [Keyboard Tester](http://www.keyboardtester.com) (Web basiert)
14* [Keyboard Checker](http://keyboardchecker.com) (Web basiert)
15
16## Debuggen
17
18Deine Tastatur wird Debug Informationen liefern wenn Du `CONSOLE_ENABLE = yes` in deiner `rules.mk` gesetzt hast. Die default-Ausgabe ist sehr beschränkt und kann wenn nötig durch die Aktivierung des Debug-Modes erhöht werden. Benutze dafür entweder den `DEBUG` Keycode in deiner Tastaturbelegung, das [Command](de/feature_command.md)-Feature oder füge den folgenden Code zu deiner Tastaturbelegung hinzu.
19
20```c
21void keyboard_post_init_user(void) {
22 // Customise these values to desired behaviour
23 debug_enable=true;
24 debug_matrix=true;
25 //debug_keyboard=true;
26 //debug_mouse=true;
27}
28```
29
30### Debuggen mit der QMK Toolbox
31
32Für kompatible Plattformen kann die [QMK Toolbox](https://github.com/qmk/qmk_toolbox) benutzt werden um Debug-Nachrichten deiner Tastatur anzuzeigen.
33
34### Debuggen mit hid_listen
35
36Bevorzugst Du es lieber auf der Befehlszeile zu debuggen? Dafür eignet sich das Programm [hid_listen](https://www.pjrc.com/teensy/hid_listen.html) von PJRC. Binaries sind für Windows, Linux und MacOS verfügbar.
37
38<!-- FIXME: Describe the debugging messages here. -->
39
40## Eigene Debug-Nachrichten senden
41
42Manchmal ist es hilfreich Debug-Nachrichten innerhalb deines eigenen [Custom Codes](de/custom_quantum_functions.md) zu drucken. Das ist ziemlich einfach. Beginne damit `print.h` am Anfang deiner Datei zu inkludieren:
43
44 #include <print.h>
45
46Danach stehen dir verschiedene Druck-Funktionen zur Verfügung:
47
48* `print("string")`: Druckt einen simplen String
49* `uprintf("%s string", var)`: Druckt einen formatierten String
50* `dprint("string")` Druckt einen simplen String, aber nur wenn der Debug-Mode aktiviert ist
51* `dprintf("%s string", var)`: Druckt einen formatierten String, aber nur wenn der Debug-Mode aktiviert ist
52
53## Debug Beispiele
54
55Anbei findest Du eine Sammlung von hilfreichen Beispielen. Für weitere Informationen Informationen sei an dieser Stelle auf [Debugging/Troubleshooting QMK](de/faq_debug.md) verwiesen.
56
57### Which matrix position is this keypress?
58### Welche Matrix Position hat dieser Tastenanschlag
59
60Beim Portieren, oder bei der Fehlerdiagnose von PCB Problemen, ist es nützlich sich anzeigen zu lassen ob ein Tastenanschlag richtig erkannt wurde. Um die Protokollierung für diesen Fall zu aktivieren, füge bitte folgenden Code zu deiner Tastaturbelegung `keymap.c` hinzu.
61
62```c
63bool process_record_user(uint16_t keycode, keyrecord_t *record) {
64 // Wenn 'console' aktiviert ist wird die Matrix-Position und der Status jedes Tastenanschlags ausgegeben
65#ifdef CONSOLE_ENABLE
66 uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
67#endif
68 return true;
69}
70```
71
72Beispiel Ausgabe:
73```text
74Waiting for device:.......
75Listening:
76KL: kc: 169, col: 0, row: 0, pressed: 1
77KL: kc: 169, col: 0, row: 0, pressed: 0
78KL: kc: 174, col: 1, row: 0, pressed: 1
79KL: kc: 174, col: 1, row: 0, pressed: 0
80KL: kc: 172, col: 2, row: 0, pressed: 1
81KL: kc: 172, col: 2, row: 0, pressed: 0
82```
83
84### Wieviel Zeit wurde benötigt um einen Tastenanschlag zu detektieren?
85
86Wenn Performance-Probleme auftreten ist es hilfreich die Frequenz, mit der die Matrix gescannt wird, zu wissen. Um dies in diesem Fall zu aktiveren füge, den folgenden Code zu deiner Tastaturbelegung in `config.h` hinzu.
87
88```c
89#define DEBUG_MATRIX_SCAN_RATE
90```
91
92Beispiel Ausgabe
93```text
94 > matrix scan frequency: 315
95 > matrix scan frequency: 313
96 > matrix scan frequency: 316
97 > matrix scan frequency: 316
98 > matrix scan frequency: 316
99 > matrix scan frequency: 316
100```
diff --git a/docs/documentation_templates.md b/docs/documentation_templates.md
index ba3830b64..85d3893b7 100644
--- a/docs/documentation_templates.md
+++ b/docs/documentation_templates.md
@@ -28,9 +28,9 @@ the Ctrl, Alt, or GUI modifiers are held down.
28 28
29A compact 40% (12x4) ortholinear keyboard kit made and sold by OLKB and Massdrop. [More info on qmk.fm](http://qmk.fm/planck/) 29A compact 40% (12x4) ortholinear keyboard kit made and sold by OLKB and Massdrop. [More info on qmk.fm](http://qmk.fm/planck/)
30 30
31Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert) 31* Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)
32Hardware Supported: Planck PCB rev1, rev2, rev3, rev4, Teensy 2.0 32* Hardware Supported: Planck PCB rev1, rev2, rev3, rev4, Teensy 2.0
33Hardware Availability: [OLKB.com](https://olkb.com), [Massdrop](https://www.massdrop.com/buy/planck-mechanical-keyboard?mode=guest_open) 33* Hardware Availability: [OLKB.com](https://olkb.com), [Massdrop](https://www.massdrop.com/buy/planck-mechanical-keyboard?mode=guest_open)
34 34
35Make example for this keyboard (after setting up your build environment): 35Make example for this keyboard (after setting up your build environment):
36 36
@@ -38,5 +38,3 @@ Make example for this keyboard (after setting up your build environment):
38 38
39See 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). 39See 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).
40``` 40```
41
42There needs to be two spaces at the end of the `Keyboard Maintainer` and `Hardware Supported` lines for it to render correctly with Markdown.
diff --git a/docs/es/README.md b/docs/es/README.md
index 73e7a7097..d39b27800 100644
--- a/docs/es/README.md
+++ b/docs/es/README.md
@@ -19,7 +19,7 @@ De cualquier manera, también puedes descargarlo directamente en formatos ([zip]
19 19
20## Cómo compilar 20## Cómo compilar
21 21
22Antes de poder compilar, necesitarás [instalar un entorno](getting_started_build_tools.md) para el desarrollo de AVR y/o ARM. Una vez hayas completado este paso, usarás el comando `make` para compilar un teclado y keymap con la siguiente notación: 22Antes de poder compilar, necesitarás [instalar un entorno](es/getting_started_build_tools.md) para el desarrollo de AVR y/o ARM. Una vez hayas completado este paso, usarás el comando `make` para compilar un teclado y keymap con la siguiente notación:
23 23
24 make planck/rev4:default 24 make planck/rev4:default
25 25
@@ -29,4 +29,4 @@ Este ejemplo compilaría la revisión `rev4` del teclado `planck` con el keymap
29 29
30## Cómo personalizar 30## Cómo personalizar
31 31
32QMK tiene montones de [características](features.md) para explorar, y una buena cantidad de [documentación de referencia](http://docs.qmk.fm) en la que sumergirse. Se pueden sacar provecho de la mayoría de las características modificando tu [keymap](keymap.md), y cambiando los [keycodes](keycodes.md). 32QMK tiene montones de [características](es/features.md) para explorar, y una buena cantidad de [documentación de referencia](http://docs.qmk.fm) en la que sumergirse. Se pueden sacar provecho de la mayoría de las características modificando tu [keymap](es/keymap.md), y cambiando los [keycodes](es/keycodes.md).
diff --git a/docs/es/_summary.md b/docs/es/_summary.md
index 684d7ab6c..03bf05ba8 100644
--- a/docs/es/_summary.md
+++ b/docs/es/_summary.md
@@ -1,121 +1,121 @@
1* [Guía completa para novatos](newbs.md) 1* [Guía completa para novatos](es/newbs.md)
2 * [Empezando](newbs_getting_started.md) 2 * [Empezando](es/newbs_getting_started.md)
3 * [Construyendo tu primer firmare](newbs_building_firmware.md) 3 * [Construyendo tu primer firmare](es/newbs_building_firmware.md)
4 * [Flasheando el firmware](newbs_flashing.md) 4 * [Flasheando el firmware](es/newbs_flashing.md)
5 * [Testeando y depurando ](newbs_testing_debugging.md) 5 * [Testeando y depurando ](es/newbs_testing_debugging.md)
6 * [Mejores práticas](newbs_best_practices.md) 6 * [Mejores práticas](es/newbs_best_practices.md)
7 * [Recursos de aprendizaje](newbs_learn_more_resources.md) 7 * [Recursos de aprendizaje](es/newbs_learn_more_resources.md)
8 8
9* [QMK Basics](README.md) 9* [QMK Basics](es/README.md)
10 * [Introducción a QMK](getting_started_introduction.md) 10 * [Introducción a QMK](es/getting_started_introduction.md)
11 * [QMK CLI](cli.md) 11 * [QMK CLI](es/cli.md)
12 * [Configuración de QMK CLI](cli_configuration.md) 12 * [Configuración de QMK CLI](es/cli_configuration.md)
13 * [Contribuyendo a QMK](contributing.md) 13 * [Contribuyendo a QMK](es/contributing.md)
14 * [Cómo usar Github](getting_started_github.md) 14 * [Cómo usar Github](es/getting_started_github.md)
15 * [Obtener ayuda](getting_started_getting_help.md) 15 * [Obtener ayuda](es/getting_started_getting_help.md)
16 16
17* [Cambios incompatibles](breaking_changes.md) 17* [Cambios incompatibles](es/breaking_changes.md)
18 * [30 Ago 2019](ChangeLog/20190830.md) 18 * [30 Ago 2019](es/ChangeLog/20190830.md)
19 19
20* [Preguntas frecuentes](faq.md) 20* [Preguntas frecuentes](es/faq.md)
21 * [General](faq_general.md) 21 * [General](es/faq_general.md)
22 * [Construir/Compilar QMK](faq_build.md) 22 * [Construir/Compilar QMK](es/faq_build.md)
23 * [Depurando/Encontrando problemas en QMK](faq_debug.md) 23 * [Depurando/Encontrando problemas en QMK](es/faq_debug.md)
24 * [Keymap](faq_keymap.md) 24 * [Keymap](es/faq_keymap.md)
25 * [Instalación de drivers con Zadig](driver_installation_zadig.md) 25 * [Instalación de drivers con Zadig](es/driver_installation_zadig.md)
26 26
27* Guías detalladas 27* Guías detalladas
28 * [Instalar herramientas construcción](getting_started_build_tools.md) 28 * [Instalar herramientas construcción](es/getting_started_build_tools.md)
29 * [Guía Vagrant](getting_started_vagrant.md) 29 * [Guía Vagrant](es/getting_started_vagrant.md)
30 * [Instrucciones de Construcción/Compilado](getting_started_make_guide.md) 30 * [Instrucciones de Construcción/Compilado](es/getting_started_make_guide.md)
31 * [Flasheando Firmware](flashing.md) 31 * [Flasheando Firmware](es/flashing.md)
32 * [Personalizando funcionalidad](custom_quantum_functions.md) 32 * [Personalizando funcionalidad](es/custom_quantum_functions.md)
33 * [Visión general del Keymap](keymap.md) 33 * [Visión general del Keymap](es/keymap.md)
34 34
35* [Hardware](hardware.md) 35* [Hardware](es/hardware.md)
36 * [Procesadores AVR](hardware_avr.md) 36 * [Procesadores AVR](es/hardware_avr.md)
37 * [Drivers](hardware_drivers.md) 37 * [Drivers](es/hardware_drivers.md)
38 38
39* Referencia 39* Referencia
40 * [Pautas de teclados](hardware_keyboard_guidelines.md) 40 * [Pautas de teclados](es/hardware_keyboard_guidelines.md)
41 * [Opciones de configuración](config_options.md) 41 * [Opciones de configuración](es/config_options.md)
42 * [Keycodes](keycodes.md) 42 * [Keycodes](es/keycodes.md)
43 * [Convenciones de código - C](coding_conventions_c.md) 43 * [Convenciones de código - C](es/coding_conventions_c.md)
44 * [Convenciones de código - Python](coding_conventions_python.md) 44 * [Convenciones de código - Python](es/coding_conventions_python.md)
45 * [Mejores prácticas de documentación](documentation_best_practices.md) 45 * [Mejores prácticas de documentación](es/documentation_best_practices.md)
46 * [Plantillas de documentación](documentation_templates.md) 46 * [Plantillas de documentación](es/documentation_templates.md)
47 * [Glosario](reference_glossary.md) 47 * [Glosario](es/reference_glossary.md)
48 * [Tests unitarios](unit_testing.md) 48 * [Tests unitarios](es/unit_testing.md)
49 * [Funciones útiles](ref_functions.md) 49 * [Funciones útiles](es/ref_functions.md)
50 * [Sporte configurador](reference_configurator_support.md) 50 * [Sporte configurador](es/reference_configurator_support.md)
51 * [Formato info.json](reference_info_json.md) 51 * [Formato info.json](es/reference_info_json.md)
52 * [Desarrollo Python CLI](cli_development.md) 52 * [Desarrollo Python CLI](es/cli_development.md)
53 53
54* [Características](features.md) 54* [Características](es/features.md)
55 * [Keycodes Básicos](keycodes_basic.md) 55 * [Keycodes Básicos](es/keycodes_basic.md)
56 * [Teclas US ANSI Shifted](keycodes_us_ansi_shifted.md) 56 * [Teclas US ANSI Shifted](es/keycodes_us_ansi_shifted.md)
57 * [Keycodes Quantum](quantum_keycodes.md) 57 * [Keycodes Quantum](es/quantum_keycodes.md)
58 * [Keycodes Avanzados](feature_advanced_keycodes.md) 58 * [Keycodes Avanzados](es/feature_advanced_keycodes.md)
59 * [Audio](feature_audio.md) 59 * [Audio](es/feature_audio.md)
60 * [Auto Shift](feature_auto_shift.md) 60 * [Auto Shift](es/feature_auto_shift.md)
61 * [Retroiluminación](feature_backlight.md) 61 * [Retroiluminación](es/feature_backlight.md)
62 * [Bluetooth](feature_bluetooth.md) 62 * [Bluetooth](es/feature_bluetooth.md)
63 * [Bootmagic](feature_bootmagic.md) 63 * [Bootmagic](es/feature_bootmagic.md)
64 * [Combos](feature_combo.md) 64 * [Combos](es/feature_combo.md)
65 * [Comando](feature_command.md) 65 * [Comando](es/feature_command.md)
66 * [API Debounce](feature_debounce_type.md) 66 * [API Debounce](es/feature_debounce_type.md)
67 * [Switch DIP](feature_dip_switch.md) 67 * [Switch DIP](es/feature_dip_switch.md)
68 * [Macros Dinámicas](feature_dynamic_macros.md) 68 * [Macros Dinámicas](es/feature_dynamic_macros.md)
69 * [Encoders](feature_encoders.md) 69 * [Encoders](es/feature_encoders.md)
70 * [Grave Escape](feature_grave_esc.md) 70 * [Grave Escape](es/feature_grave_esc.md)
71 * [Feedback Háptico](feature_haptic_feedback.md) 71 * [Feedback Háptico](es/feature_haptic_feedback.md)
72 * [Controlador LCD HD44780](feature_hd44780.md) 72 * [Controlador LCD HD44780](es/feature_hd44780.md)
73 * [Key Lock](feature_key_lock.md) 73 * [Key Lock](es/feature_key_lock.md)
74 * [Layouts](feature_layouts.md) 74 * [Layouts](es/feature_layouts.md)
75 * [Tecla Leader](feature_leader_key.md) 75 * [Tecla Leader](es/feature_leader_key.md)
76 * [Matriz LED](feature_led_matrix.md) 76 * [Matriz LED](es/feature_led_matrix.md)
77 * [Macros](feature_macros.md) 77 * [Macros](es/feature_macros.md)
78 * [Teclas del ratón](feature_mouse_keys.md) 78 * [Teclas del ratón](es/feature_mouse_keys.md)
79 * [Driver OLED](feature_oled_driver.md) 79 * [Driver OLED](es/feature_oled_driver.md)
80 * [Teclas One Shot](feature_advanced_keycodes.md#one-shot-keys) 80 * [Teclas One Shot](es/feature_advanced_keycodes.md#one-shot-keys)
81 * [Dispositivo de apuntado](feature_pointing_device.md) 81 * [Dispositivo de apuntado](es/feature_pointing_device.md)
82 * [Ratón PS/2](feature_ps2_mouse.md) 82 * [Ratón PS/2](es/feature_ps2_mouse.md)
83 * [Iluminación RGB](feature_rgblight.md) 83 * [Iluminación RGB](es/feature_rgblight.md)
84 * [Matriz RGB](feature_rgb_matrix.md) 84 * [Matriz RGB](es/feature_rgb_matrix.md)
85 * [Cadete espacial](feature_space_cadet.md) 85 * [Cadete espacial](es/feature_space_cadet.md)
86 * [Teclado dividido](feature_split_keyboard.md) 86 * [Teclado dividido](es/feature_split_keyboard.md)
87 * [Stenografía](feature_stenography.md) 87 * [Stenografía](es/feature_stenography.md)
88 * [Swap Hands](feature_swap_hands.md) 88 * [Swap Hands](es/feature_swap_hands.md)
89 * [Tap Dance](feature_tap_dance.md) 89 * [Tap Dance](es/feature_tap_dance.md)
90 * [Terminal](feature_terminal.md) 90 * [Terminal](es/feature_terminal.md)
91 * [Impresora Térmica](feature_thermal_printer.md) 91 * [Impresora Térmica](es/feature_thermal_printer.md)
92 * [Unicode](feature_unicode.md) 92 * [Unicode](es/feature_unicode.md)
93 * [Userspace](feature_userspace.md) 93 * [Userspace](es/feature_userspace.md)
94 * [Velocikey](feature_velocikey.md) 94 * [Velocikey](es/feature_velocikey.md)
95 95
96* Para Makers y Modders 96* Para Makers y Modders
97 * [Guía de cableado a mano](hand_wire.md) 97 * [Guía de cableado a mano](es/hand_wire.md)
98 * [Guía de flasheado de ISP](isp_flashing_guide.md) 98 * [Guía de flasheado de ISP](es/isp_flashing_guide.md)
99 * [Guía de depuración de ARM](arm_debugging.md) 99 * [Guía de depuración de ARM](es/arm_debugging.md)
100 * [Driver I2C](i2c_driver.md) 100 * [Driver I2C](es/i2c_driver.md)
101 * [Controles GPIO](internals_gpio_control.md) 101 * [Controles GPIO](es/internals_gpio_control.md)
102 * [Conversión Proton C](proton_c_conversion.md) 102 * [Conversión Proton C](es/proton_c_conversion.md)
103 103
104* Para entender en profundidad 104* Para entender en profundidad
105 * [Cómo funcionan los teclados](how_keyboards_work.md) 105 * [Cómo funcionan los teclados](es/how_keyboards_work.md)
106 * [Entendiendo QMK](understanding_qmk.md) 106 * [Entendiendo QMK](es/understanding_qmk.md)
107 107
108* Otros temas 108* Otros temas
109 * [Usando Eclipse con QMK](other_eclipse.md) 109 * [Usando Eclipse con QMK](es/other_eclipse.md)
110 * [Usando VSCode con QMK](other_vscode.md) 110 * [Usando VSCode con QMK](es/other_vscode.md)
111 * [Soporte](support.md) 111 * [Soporte](es/support.md)
112 * [Cómo añadir traducciones](translating.md) 112 * [Cómo añadir traducciones](es/translating.md)
113 113
114* QMK Internals (En progreso) 114* QMK Internals (En progreso)
115 * [Defines](internals_defines.md) 115 * [Defines](es/internals_defines.md)
116 * [Input Callback Reg](internals_input_callback_reg.md) 116 * [Input Callback Reg](es/internals_input_callback_reg.md)
117 * [Dispositivo Midi](internals_midi_device.md) 117 * [Dispositivo Midi](es/internals_midi_device.md)
118 * [Proceso de configuración de un dispositivo Midi](internals_midi_device_setup_process.md) 118 * [Proceso de configuración de un dispositivo Midi](es/internals_midi_device_setup_process.md)
119 * [Utilidad Midi](internals_midi_util.md) 119 * [Utilidad Midi](es/internals_midi_util.md)
120 * [Funciones Send](internals_send_functions.md) 120 * [Funciones Send](es/internals_send_functions.md)
121 * [Herramientas Sysex](internals_sysex_tools.md) 121 * [Herramientas Sysex](es/internals_sysex_tools.md)
diff --git a/docs/faq_build.md b/docs/faq_build.md
index f11cb76aa..618ae40f3 100644
--- a/docs/faq_build.md
+++ b/docs/faq_build.md
@@ -47,7 +47,7 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
47SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666" 47SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"
48``` 48```
49 49
50**/etc/udev/rules.d/55-catalina.rules:** 50**/etc/udev/rules.d/55-caterina.rules:**
51``` 51```
52# ModemManager should ignore the following devices 52# ModemManager should ignore the following devices
53ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1" 53ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"
@@ -69,6 +69,12 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", MODE:="066
69SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666" 69SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666"
70``` 70```
71 71
72**/etc/udev/rules.d/57-bootloadhid.rules:**
73```
74# bootloadHID
75SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", MODE:="0666"
76```
77
72### Serial device is not detected in bootloader mode on Linux 78### Serial device is not detected in bootloader mode on Linux
73Make sure your kernel has appropriate support for your device. If your device uses USB ACM, such as 79Make sure your kernel has appropriate support for your device. If your device uses USB ACM, such as
74Pro Micro (Atmega32u4), make sure to include `CONFIG_USB_ACM=y`. Other devices may require `USB_SERIAL` and any of its sub options. 80Pro Micro (Atmega32u4), make sure to include `CONFIG_USB_ACM=y`. Other devices may require `USB_SERIAL` and any of its sub options.
@@ -81,10 +87,6 @@ Re-running the QMK installation script (`./util/qmk_install.sh` from the `qmk_fi
81 87
82If that doesn't work, then you may need to download and run Zadig. See [Bootloader Driver Installation with Zadig](driver_installation_zadig.md) for more detailed information. 88If that doesn't work, then you may need to download and run Zadig. See [Bootloader Driver Installation with Zadig](driver_installation_zadig.md) for more detailed information.
83 89
84## WINAVR is Obsolete
85It is no longer recommended and may cause some problem.
86See [TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
87
88## USB VID and PID 90## USB VID and PID
89You can use any ID you want with editing `config.h`. Using any presumably unused ID will be no problem in fact except for very low chance of collision with other product. 91You can use any ID you want with editing `config.h`. Using any presumably unused ID will be no problem in fact except for very low chance of collision with other product.
90 92
@@ -97,29 +99,6 @@ You can buy a really unique VID:PID here. I don't think you need this for person
97- http://www.obdev.at/products/vusb/license.html 99- http://www.obdev.at/products/vusb/license.html
98- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1 100- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
99 101
100## Cortex: `cstddef: No such file or directory`
101GCC 4.8 of Ubuntu 14.04 had this problem and had to update to 4.9 with this PPA.
102https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
103
104https://github.com/tmk/tmk_keyboard/issues/212
105https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef
106https://developer.mbed.org/forum/mbed/topic/5205/
107
108## `clock_prescale_set` and `clock_div_1` Not Available
109Your toolchain is too old to support the MCU. For example WinAVR 20100110 doesn't support ATMega32u2.
110
111```
112Compiling C: ../../tmk_core/protocol/lufa/lufa.c
113avr-gcc -c -mmcu=atmega32u2 -gdwarf-2 -DF_CPU=16000000UL -DINTERRUPT_CONTROL_ENDPOINT -DBOOTLOADER_SIZE=4096 -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DVERSION=unknown -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_alps64/protocol/lufa/lufa.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_alps64_protocol_lufa_lufa.o.d ../../tmk_core/protocol/lufa/lufa.c -o obj_alps64/protocol/lufa/lufa.o
114../../tmk_core/protocol/lufa/lufa.c: In function 'setup_mcu':
115../../tmk_core/protocol/lufa/lufa.c:575: warning: implicit declaration of function 'clock_prescale_set'
116../../tmk_core/protocol/lufa/lufa.c:575: error: 'clock_div_1' undeclared (first use in this function)
117../../tmk_core/protocol/lufa/lufa.c:575: error: (Each undeclared identifier is reported only once
118../../tmk_core/protocol/lufa/lufa.c:575: error: for each function it appears in.)
119make: *** [obj_alps64/protocol/lufa/lufa.o] Error 1
120```
121
122
123## BOOTLOADER_SIZE for AVR 102## BOOTLOADER_SIZE for AVR
124Note that Teensy2.0++ bootloader size is 2048byte. Some Makefiles may have wrong comment. 103Note that Teensy2.0++ bootloader size is 2048byte. Some Makefiles may have wrong comment.
125 104
diff --git a/docs/faq_debug.md b/docs/faq_debug.md
index 5cc20251d..6c66defbd 100644
--- a/docs/faq_debug.md
+++ b/docs/faq_debug.md
@@ -27,7 +27,7 @@ You may need privilege to access the device on OS like Linux.
27Check: 27Check:
28- *hid_listen* finds your device. See above. 28- *hid_listen* finds your device. See above.
29- Enable debug with pressing **Magic**+d. See [Magic Commands](https://github.com/tmk/tmk_keyboard#magic-commands). 29- Enable debug with pressing **Magic**+d. See [Magic Commands](https://github.com/tmk/tmk_keyboard#magic-commands).
30- set `debug_enable=true` usually in `matrix_init()` in **matrix.c**. 30- set `debug_enable=true`. See [Testing and Debugging](newbs_testing_debugging.md#debugging)
31- try using 'print' function instead of debug print. See **common/print.h**. 31- try using 'print' function instead of debug print. See **common/print.h**.
32- disconnect other devices with console function. See [Issue #97](https://github.com/tmk/tmk_keyboard/issues/97). 32- disconnect other devices with console function. See [Issue #97](https://github.com/tmk/tmk_keyboard/issues/97).
33 33
@@ -112,56 +112,6 @@ In C `1` means one of [int] type which is [16 bit] in case of AVR so you can't s
112 112
113http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279 113http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
114 114
115
116## Bootloader Jump Doesn't Work
117Properly configure bootloader size in **Makefile**. With wrong section size bootloader won't probably start with **Magic command** and **Boot Magic**.
118```
119# Size of Bootloaders in bytes:
120# Atmel DFU loader(ATmega32U4) 4096
121# Atmel DFU loader(AT90USB128) 8192
122# LUFA bootloader(ATmega32U4) 4096
123# Arduino Caterina(ATmega32U4) 4096
124# USBaspLoader(ATmega***) 2048
125# Teensy halfKay(ATmega32U4) 512
126# Teensy++ halfKay(AT90USB128) 2048
127OPT_DEFS += -DBOOTLOADER_SIZE=4096
128```
129AVR Boot section size are defined by setting **BOOTSZ** fuse in fact. Consult with your MCU datasheet.
130Note that **Word**(2 bytes) size and address are used in datasheet while TMK uses **Byte**.
131
132AVR Boot section is located at end of Flash memory like the followings.
133```
134byte Atmel/LUFA(ATMega32u4) byte Atmel(AT90SUB1286)
1350x0000 +---------------+ 0x00000 +---------------+
136 | | | |
137 | | | |
138 | Application | | Application |
139 | | | |
140 = = = =
141 | | 32KB-4KB | | 128KB-8KB
1420x6000 +---------------+ 0x1E000 +---------------+
143 | Bootloader | 4KB | Bootloader | 8KB
1440x7FFF +---------------+ 0x1FFFF +---------------+
145
146
147byte Teensy(ATMega32u4) byte Teensy++(AT90SUB1286)
1480x0000 +---------------+ 0x00000 +---------------+
149 | | | |
150 | | | |
151 | Application | | Application |
152 | | | |
153 = = = =
154 | | 32KB-512B | | 128KB-2KB
1550x7E00 +---------------+ 0x1FC00 +---------------+
156 | Bootloader | 512B | Bootloader | 2KB
1570x7FFF +---------------+ 0x1FFFF +---------------+
158```
159
160And see this discussion for further reference.
161https://github.com/tmk/tmk_keyboard/issues/179
162
163If you are using a TeensyUSB, there is a [known bug](https://github.com/qmk/qmk_firmware/issues/164) in which the hardware reset button prevents the RESET key from working. Unplugging the keyboard and plugging it back in should resolve the problem.
164
165## Special Extra Key Doesn't Work (System, Audio Control Keys) 115## Special Extra Key Doesn't Work (System, Audio Control Keys)
166You need to define `EXTRAKEY_ENABLE` in `rules.mk` to use them in QMK. 116You need to define `EXTRAKEY_ENABLE` in `rules.mk` to use them in QMK.
167 117
@@ -194,24 +144,6 @@ If you would like to keep JTAG enabled, just add the following to your `config.h
194#define NO_JTAG_DISABLE 144#define NO_JTAG_DISABLE
195``` 145```
196 146
197## Adding LED Indicators of Lock Keys
198You need your own LED indicators for CapsLock, ScrollLock and NumLock? See this post.
199
200http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p191560
201
202## Program Arduino Micro/Leonardo
203Push reset button and then run command like this within 8 seconds.
204
205```
206avrdude -patmega32u4 -cavr109 -b57600 -Uflash:w:adb_usb.hex -P/dev/ttyACM0
207```
208
209Device name will vary depending on your system.
210
211http://arduino.cc/en/Main/ArduinoBoardMicro
212https://geekhack.org/index.php?topic=14290.msg1563867#msg1563867
213
214
215## USB 3 Compatibility 147## USB 3 Compatibility
216I heard some people have a problem with USB 3 port, try USB 2 port. 148I heard some people have a problem with USB 3 port, try USB 2 port.
217 149
diff --git a/docs/faq_keymap.md b/docs/faq_keymap.md
index 84d8548d4..2d00e8bef 100644
--- a/docs/faq_keymap.md
+++ b/docs/faq_keymap.md
@@ -67,24 +67,8 @@ After enabling this feature use keycodes `KC_LCAP`, `KC_LNUM` and `KC_LSCR` in y
67Old vintage mechanical keyboards occasionally have lock switches but modern ones don't have. ***You don't need this feature in most case and just use keycodes `KC_CAPS`, `KC_NLCK` and `KC_SLCK`.*** 67Old vintage mechanical keyboards occasionally have lock switches but modern ones don't have. ***You don't need this feature in most case and just use keycodes `KC_CAPS`, `KC_NLCK` and `KC_SLCK`.***
68 68
69## Input Special Characters Other Than ASCII like Cédille 'Ç' 69## Input Special Characters Other Than ASCII like Cédille 'Ç'
70NO UNIVERSAL METHOD TO INPUT THOSE WORKS OVER ALL SYSTEMS. You have to define **MACRO** in way specific to your OS or layout.
71 70
72See this post for example **MACRO** code. 71See the [Unicode](feature_unicode.md) feature.
73
74http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p195620
75
76On **Windows** you can use `AltGr` key or **Alt code**.
77* http://en.wikipedia.org/wiki/AltGr_key
78* http://en.wikipedia.org/wiki/Alt_code
79
80On **Mac** OS defines `Option` key combinations.
81* http://en.wikipedia.org/wiki/Option_key#Alternative_keyboard_input
82
83On **Xorg** you can use `compose` key, instead.
84* http://en.wikipedia.org/wiki/Compose_key
85
86And see this for **Unicode** input.
87* http://en.wikipedia.org/wiki/Unicode_input
88 72
89## `Fn` Key on macOS 73## `Fn` Key on macOS
90 74
@@ -130,51 +114,6 @@ https://github.com/tekezo/Karabiner/issues/403
130 114
131See the [Grave Escape](feature_grave_esc.md) feature. 115See the [Grave Escape](feature_grave_esc.md) feature.
132 116
133## Arrow on Right Modifier Keys with Dual-Role
134This turns right modifier keys into arrow keys when the keys are tapped while still modifiers when the keys are hold. In TMK the dual-role function is dubbed **TAP**.
135```
136
137#include "keymap_common.h"
138
139
140/* Arrow keys on right modifier keys with TMK dual role feature
141 *
142 * https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#213-modifier-with-tap-keydual-role
143 * https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
144 */
145const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
146 /* 0: qwerty */
147 [0] = LAYOUT( \
148 ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS,BSPC, \
149 TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
150 LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
151 LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, ESC, \
152 FN4, LGUI,LALT, SPC, APP, FN2, FN1, FN3),
153 [1] = LAYOUT( \
154 GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,TRNS, \
155 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
156 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
157 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN5, TRNS, \
158 TRNS,TRNS,TRNS, TRNS, TRNS,FN7, FN6, FN8),
159};
160
161const uint16_t PROGMEM fn_actions[] = {
162 [0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_UP),
163 [1] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_DOWN),
164 [2] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_LEFT),
165 [3] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RIGHT),
166 [4] = ACTION_LAYER_MOMENTARY(1),
167 [5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_PGUP),
168 [6] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_PGDN),
169 [7] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_HOME),
170 [8] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_END),
171};
172
173```
174
175Dual-role key: https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
176
177
178## Eject on Mac OSX 117## Eject on Mac OSX
179`KC_EJCT` keycode works on OSX. https://github.com/tmk/tmk_keyboard/issues/250 118`KC_EJCT` keycode works on OSX. https://github.com/tmk/tmk_keyboard/issues/250
180It seems Windows 10 ignores the code and Linux/Xorg recognizes but has no mapping by default. 119It seems Windows 10 ignores the code and Linux/Xorg recognizes but has no mapping by default.
diff --git a/docs/feature_advanced_keycodes.md b/docs/feature_advanced_keycodes.md
index f748ccd70..ec3807f40 100644
--- a/docs/feature_advanced_keycodes.md
+++ b/docs/feature_advanced_keycodes.md
@@ -15,7 +15,7 @@ This will allow you to use `FN_CAPS` and `ALT_TAB` in your keymap, keeping it mo
15 15
16## Caveats 16## Caveats
17 17
18Currently, `LT()` and `MT()` are limited to the [Basic Keycode set](keycodes_basic.md), meaning you can't use keycodes like `LCTL()`, `KC_TILD`, or anything greater than `0xFF`. Modifiers specified as part of a Layer Tap or Mod Tap's keycode will be ignored. If you need to apply modifiers to your tapped keycode, [Tap Dance](https://github.com/qmk/qmk_firmware/blob/master/docs/feature_tap_dance.md#example-5-using-tap-dance-for-advanced-mod-tap-and-layer-tap-keys) can be used to accomplish this. 18Currently, `LT()` and `MT()` are limited to the [Basic Keycode set](keycodes_basic.md), meaning you can't use keycodes like `LCTL()`, `KC_TILD`, or anything greater than `0xFF`. Modifiers specified as part of a Layer Tap or Mod Tap's keycode will be ignored. If you need to apply modifiers to your tapped keycode, [Tap Dance](feature_tap_dance.md#example-5-using-tap-dance-for-advanced-mod-tap-and-layer-tap-keys) can be used to accomplish this.
19 19
20Additionally, if at least one right-handed modifier is specified in a Mod Tap or Layer Tap, it will cause all modifiers specified to become right-handed, so it is not possible to mix and match the two. 20Additionally, if at least one right-handed modifier is specified in a Mod Tap or Layer Tap, it will cause all modifiers specified to become right-handed, so it is not possible to mix and match the two.
21 21
@@ -155,7 +155,7 @@ You can control the behavior of one shot keys by defining these in `config.h`:
155 155
156Sometimes, you want to activate a one-shot key as part of a macro or tap dance routine. 156Sometimes, you want to activate a one-shot key as part of a macro or tap dance routine.
157 157
158For one shot layers, you need to call `set_oneshot_layer(LAYER, ONESHOT_START)` on key down, and `set_oneshot_layer(ONESHOT_PRESSED)` on key up. If you want to cancel the oneshot, call `reset_oneshot_layer()`. 158For one shot layers, you need to call `set_oneshot_layer(LAYER, ONESHOT_START)` on key down, and `clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED)` on key up. If you want to cancel the oneshot, call `reset_oneshot_layer()`.
159 159
160For one shot mods, you need to call `set_oneshot_mods(MOD)` to set it, or `clear_oneshot_mods()` to cancel it. 160For one shot mods, you need to call `set_oneshot_mods(MOD)` to set it, or `clear_oneshot_mods()` to cancel it.
161 161
diff --git a/docs/feature_bootmagic.md b/docs/feature_bootmagic.md
index ed00d5129..a19b5e548 100644
--- a/docs/feature_bootmagic.md
+++ b/docs/feature_bootmagic.md
@@ -56,37 +56,37 @@ Hold down the Bootmagic key (Space by default) and the desired hotkey while plug
56 56
57## Keycodes 57## Keycodes
58 58
59|Keycode |Aliases |Description | 59|Key |Aliases |Description |
60|----------------------------------|---------|------------------------------------------| 60|----------------------------------|---------|--------------------------------------------------------------------------|
61|`MAGIC_CAPSLOCK_TO_CONTROL` | |Treat Caps Lock as Left Control | 61|`MAGIC_SWAP_CONTROL_CAPSLOCK` |`CL_SWAP`|Swap Caps Lock and Left Control |
62|`MAGIC_UNCAPSLOCK_TO_CONTROL` | |Stop treating Caps Lock as Left Control | 62|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` |`CL_NORM`|Unswap Caps Lock and Left Control |
63|`MAGIC_HOST_NKRO` | |Force N-Key Rollover (NKRO) on | 63|`MAGIC_CAPSLOCK_TO_CONTROL` |`CL_CTRL`|Treat Caps Lock as Control |
64|`MAGIC_UNHOST_NKRO` | |Force NKRO off | 64|`MAGIC_UNCAPSLOCK_TO_CONTROL` |`CL_CAPS`|Stop treating Caps Lock as Control |
65|`MAGIC_TOGGLE_NKRO` | |Turn NKRO on or off | 65|`MAGIC_SWAP_LCTL_LGUI` |`LCG_SWP`|Swap Left Control and GUI |
66|`MAGIC_NO_GUI` | |Disable the GUI keys (useful when gaming) | 66|`MAGIC_UNSWAP_LCTL_LGUI` |`LCG_NRM`|Unswap Left Control and GUI |
67|`MAGIC_UNNO_GUI` | |Enable the GUI keys | 67|`MAGIC_SWAP_RCTL_RGUI` |`RCG_SWP`|Swap Right Control and GUI |
68|`MAGIC_SWAP_ALT_GUI` |`AG_SWAP`|Swap Alt and GUI on both sides (for macOS)| 68|`MAGIC_UNSWAP_RCTL_RGUI` |`RCG_NRM`|Unswap Right Control and GUI |
69|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Alt and GUI | 69|`MAGIC_SWAP_CTL_GUI` |`CG_SWAP`|Swap Control and GUI on both sides |
70|`MAGIC_TOGGLE_ALT_GUI` |`AG_TOGG`|Toggle Alt and GUI swap | 70|`MAGIC_UNSWAP_CTL_GUI` |`CG_NORM`|Unswap Control and GUI on both sides |
71|`MAGIC_SWAP_CTL_GUI` |`CG_SWAP`|Swap Ctrl and GUI on both sides (for macOS)| 71|`MAGIC_TOGGLE_CTL_GUI` |`CG_TOGG`|Toggle Control and GUI swap on both sides |
72|`MAGIC_UNSWAP_CTL_GUI` |`CG_NORM`|Unswap Ctrl and GUI | 72|`MAGIC_SWAP_LALT_LGUI` |`LAG_SWP`|Swap Left Alt and GUI |
73|`MAGIC_TOGGLE_CTL_GUI` |`CG_TOGG`|Toggle Ctrl and GUI swap | 73|`MAGIC_UNSWAP_LALT_LGUI` |`LAG_NRM`|Unswap Left Alt and GUI |
74|`MAGIC_SWAP_BACKSLASH_BACKSPACE` | |Swap `\` and Backspace | 74|`MAGIC_SWAP_RALT_RGUI` |`RAG_SWP`|Swap Right Alt and GUI |
75|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`| |Unswap `\` and Backspace | 75|`MAGIC_UNSWAP_RALT_RGUI` |`RAG_NRM`|Unswap Right Alt and GUI |
76|`MAGIC_SWAP_CONTROL_CAPSLOCK` | |Swap Left Control and Caps Lock | 76|`MAGIC_SWAP_ALT_GUI` |`AG_SWAP`|Swap Alt and GUI on both sides |
77|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` | |Unswap Left Control and Caps Lock | 77|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Alt and GUI on both sides |
78|`MAGIC_SWAP_GRAVE_ESC` | |Swap <code>&#96;</code> and Escape | 78|`MAGIC_TOGGLE_ALT_GUI` |`AG_TOGG`|Toggle Alt and GUI swap on both sides |
79|`MAGIC_UNSWAP_GRAVE_ESC` | |Unswap <code>&#96;</code> and Escape | 79|`MAGIC_NO_GUI` |`GUI_OFF`|Disable the GUI keys |
80|`MAGIC_SWAP_LALT_LGUI` | |Swap Left Alt and Left GUI | 80|`MAGIC_UNNO_GUI` |`GUI_ON` |Enable the GUI keys |
81|`MAGIC_UNSWAP_LALT_LGUI` | |Unswap Left Alt and Left GUI | 81|`MAGIC_SWAP_GRAVE_ESC` |`GE_SWAP`|Swap <code>&#96;</code> and Escape |
82|`MAGIC_SWAP_RALT_RGUI` | |Swap Right Alt and Right GUI | 82|`MAGIC_UNSWAP_GRAVE_ESC` |`GE_NORM`|Unswap <code>&#96;</code> and Escape |
83|`MAGIC_UNSWAP_RALT_RGUI` | |Unswap Right Alt and Right GUI | 83|`MAGIC_SWAP_BACKSLASH_BACKSPACE` |`BS_SWAP`|Swap `\` and Backspace |
84|`MAGIC_SWAP_LCTL_LGUI` | |Swap Left Control and Left GUI | 84|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`|`BS_NORM`|Unswap `\` and Backspace |
85|`MAGIC_UNSWAP_LCTL_LGUI` | |Unswap Left Control and Left GUI | 85|`MAGIC_HOST_NKRO` |`NK_ON` |Enable N-key rollover |
86|`MAGIC_SWAP_RCTL_RGUI` | |Swap Right Control and Right GUI | 86|`MAGIC_UNHOST_NKRO` |`NK_OFF` |Disable N-key rollover |
87|`MAGIC_UNSWAP_RCTL_RGUI` | |Unswap Right Control and Right GUI | 87|`MAGIC_TOGGLE_NKRO` |`NK_TOGG`|Toggle N-key rollover |
88|`MAGIC_EE_HANDS_LEFT` | |Set "Left Hand" for EE_HANDS handedness | 88|`MAGIC_EE_HANDS_LEFT` |`EH_LEFT`|Set the master half of a split keyboard as the left hand (for `EE_HANDS`) |
89|`MAGIC_EE_HANDS_RIGHT` | |Set "Right Hand" for EE_HANDS handedness | 89|`MAGIC_EE_HANDS_RIGHT` |`EH_RGHT`|Set the master half of a split keyboard as the right hand (for `EE_HANDS`)|
90 90
91## Configuration 91## Configuration
92 92
diff --git a/docs/feature_debounce_type.md b/docs/feature_debounce_type.md
index 38eca3f37..b5e5b61bb 100644
--- a/docs/feature_debounce_type.md
+++ b/docs/feature_debounce_type.md
@@ -17,14 +17,14 @@ endif
17| DEBOUNCE_TYPE | Description | What else is needed | 17| DEBOUNCE_TYPE | Description | What else is needed |
18| ------------- | --------------------------------------------------- | ----------------------------- | 18| ------------- | --------------------------------------------------- | ----------------------------- |
19| Not defined | Use the default algorithm, currently sym_g | Nothing | 19| Not defined | Use the default algorithm, currently sym_g | Nothing |
20| custom | Use your own debounce.c | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions | 20| custom | Use your own debounce code | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions |
21| anything_else | Use another algorithm from quantum/debounce/* | Nothing | 21| anything_else | Use another algorithm from quantum/debounce/* | Nothing |
22 22
23**Regarding split keyboards**: 23**Regarding split keyboards**:
24The debounce code is compatible with split keyboards. 24The debounce code is compatible with split keyboards.
25 25
26# Use your own debouncing code 26# Use your own debouncing code
27* Set ```DEBOUNCE_TYPE = custom ```. 27* Set ```DEBOUNCE_TYPE = custom```.
28* Add ```SRC += debounce.c``` 28* Add ```SRC += debounce.c```
29* Add your own ```debounce.c```. Look at current implementations in ```quantum/debounce``` for examples. 29* Add your own ```debounce.c```. Look at current implementations in ```quantum/debounce``` for examples.
30* Debouncing occurs after every raw matrix scan. 30* Debouncing occurs after every raw matrix scan.
@@ -33,10 +33,10 @@ The debounce code is compatible with split keyboards.
33# Changing between included debouncing methods 33# Changing between included debouncing methods
34You can either use your own code, by including your own debounce.c, or switch to another included one. 34You can either use your own code, by including your own debounce.c, or switch to another included one.
35Included debounce methods are: 35Included debounce methods are:
36* eager_pr - debouncing per row. On any state change, response is immediate, followed by locking the row ```DEBOUNCE_DELAY``` milliseconds of no further input for that row. 36* eager_pr - debouncing per row. On any state change, response is immediate, followed by locking the row ```DEBOUNCE``` milliseconds of no further input for that row.
37For use in keyboards where refreshing ```NUM_KEYS``` 8-bit counters is computationally expensive / low scan rate, and fingers usually only hit one row at a time. This could be 37For use in keyboards where refreshing ```NUM_KEYS``` 8-bit counters is computationally expensive / low scan rate, and fingers usually only hit one row at a time. This could be
38appropriate for the ErgoDox models; the matrix is rotated 90°, and hence its "rows" are really columns, and each finger only hits a single "row" at a time in normal use. 38appropriate for the ErgoDox models; the matrix is rotated 90°, and hence its "rows" are really columns, and each finger only hits a single "row" at a time in normal use.
39* eager_pk - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE_DELAY``` milliseconds of no further input for that key 39* eager_pk - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE``` milliseconds of no further input for that key
40* sym_g - debouncing per keyboard. On any state change, a global timer is set. When ```DEBOUNCE_DELAY``` milliseconds of no changes has occured, all input changes are pushed. 40* sym_g - debouncing per keyboard. On any state change, a global timer is set. When ```DEBOUNCE``` milliseconds of no changes has occured, all input changes are pushed.
41 41
42 42
diff --git a/docs/feature_dynamic_macros.md b/docs/feature_dynamic_macros.md
index 0d11a2864..b86df6c60 100644
--- a/docs/feature_dynamic_macros.md
+++ b/docs/feature_dynamic_macros.md
@@ -4,51 +4,45 @@ QMK supports temporary macros created on the fly. We call these Dynamic Macros.
4 4
5You can store one or two macros and they may have a combined total of 128 keypresses. You can increase this size at the cost of RAM. 5You can store one or two macros and they may have a combined total of 128 keypresses. You can increase this size at the cost of RAM.
6 6
7To enable them, first add a new element to the end of your `keycodes` enum — `DYNAMIC_MACRO_RANGE`: 7To enable them, first include `DYNAMIC_MACRO_ENABLE = yes` in your `rules.mk`. Then, add the following keys to your keymap:
8 8
9```c 9|Key |Alias |Description |
10enum keycodes { 10|------------------|----------|---------------------------------------------------|
11 QWERTY = SAFE_RANGE, 11|`DYN_REC_START1` |`DM_REC1` |Start recording Macro 1 |
12 COLEMAK, 12|`DYN_REC_START2` |`DM_REC2` |Start recording Macro 2 |
13 DVORAK, 13|`DYN_MACRO_PLAY1` |`DM_PLY1` |Replay Macro 1 |
14 PLOVER, 14|`DYN_MACRO_PLAY2` |`DM_PLY2` |Replay Macro 2 |
15 LOWER, 15|`DYN_REC_STOP` |`DM_RSTP` |Finish the macro that is currently being recorded. |
16 RAISE,
17 BACKLIT,
18 EXT_PLV,
19 DYNAMIC_MACRO_RANGE,
20};
21```
22 16
23Your `keycodes` enum may have a slightly different name. You must add `DYNAMIC_MACRO_RANGE` as the last element because `dynamic_macros.h` will add some more keycodes after it. 17That should be everything necessary.
24 18
25Below it, include the `dynamic_macro.h` header: 19To start recording the macro, press either `DYN_REC_START1` or `DYN_REC_START2`.
26 20
27```c 21To finish the recording, press the `DYN_REC_STOP` layer button.
28 #include "dynamic_macro.h"`
29```
30 22
31Add the following keys to your keymap: 23To replay the macro, press either `DYN_MACRO_PLAY1` or `DYN_MACRO_PLAY2`.
32 24
33* `DYN_REC_START1` — start recording the macro 1, 25It is possible to replay a macro as part of a macro. It's ok to replay macro 2 while recording macro 1 and vice versa but never create recursive macros i.e. macro 1 that replays macro 1. If you do so and the keyboard will get unresponsive, unplug the keyboard and plug it again. You can disable this completly by defining `DYNAMIC_MACRO_NO_NESTING` in your `config.h` file.
34* `DYN_REC_START2` — start recording the macro 2,
35* `DYN_MACRO_PLAY1` — replay the macro 1,
36* `DYN_MACRO_PLAY2` — replay the macro 2,
37* `DYN_REC_STOP` — finish the macro that is currently being recorded.
38 26
39Add the following code to the very beginning of your `process_record_user()` function: 27?> For the details about the internals of the dynamic macros, please read the comments in the `process_dynamic_macro.h` and `process_dynamic_macro.c` files.
40 28
41```c 29## Customization
42 if (!process_record_dynamic_macro(keycode, record)) {
43 return false;
44 }
45```
46 30
47That should be everything necessary. To start recording the macro, press either `DYN_REC_START1` or `DYN_REC_START2`. To finish the recording, press the `DYN_REC_STOP` layer button. To replay the macro, press either `DYN_MACRO_PLAY1` or `DYN_MACRO_PLAY2`. 31There are a number of options added that should allow some additional degree of customization
48 32
49Note that it's possible to replay a macro as part of a macro. It's ok to replay macro 2 while recording macro 1 and vice versa but never create recursive macros i.e. macro 1 that replays macro 1. If you do so and the keyboard will get unresponsive, unplug the keyboard and plug it again. 33|Define |Default |Description |
34|----------------------------|----------------|-----------------------------------------------------------------------------------------------------------------|
35|`DYNAMIC_MACRO_SIZE` |128 |Sets the amount of memory that Dynamic Macros can use. This is a limited resource, dependent on the controller. |
36|`DYNAMIC_MACRO_USER_CALL` |*Not defined* |Defining this falls back to using the user `keymap.c` file to trigger the macro behavior. |
37|`DYNAMIC_MACRO_NO_NESTING` |*Not Defined* |Defining this disables the ability to call a macro from another macro (nested macros). |
50 38
51For users of the earlier versions of dynamic macros: It is still possible to finish the macro recording using just the layer modifier used to access the dynamic macro keys, without a dedicated `DYN_REC_STOP` key. If you want this behavior back, use the following snippet instead of the one above: 39
40If the LEDs start blinking during the recording with each keypress, it means there is no more space for the macro in the macro buffer. To fit the macro in, either make the other macro shorter (they share the same buffer) or increase the buffer size by adding the `DYNAMIC_MACRO_SIZE` define in your `config.h` (default value: 128; please read the comments for it in the header).
41
42
43### DYNAMIC_MACRO_USER_CALL
44
45For users of the earlier versions of dynamic macros: It is still possible to finish the macro recording using just the layer modifier used to access the dynamic macro keys, without a dedicated `DYN_REC_STOP` key. If you want this behavior back, add `#define DYNAMIC_MACRO_USER_CALL` to your `config.h` and insert the following snippet at the beginning of your `process_record_user()` function:
52 46
53```c 47```c
54 uint16_t macro_kc = (keycode == MO(_DYN) ? DYN_REC_STOP : keycode); 48 uint16_t macro_kc = (keycode == MO(_DYN) ? DYN_REC_STOP : keycode);
@@ -58,6 +52,15 @@ For users of the earlier versions of dynamic macros: It is still possible to fin
58 } 52 }
59``` 53```
60 54
61If the LEDs start blinking during the recording with each keypress, it means there is no more space for the macro in the macro buffer. To fit the macro in, either make the other macro shorter (they share the same buffer) or increase the buffer size by setting the `DYNAMIC_MACRO_SIZE` preprocessor macro (default value: 128; please read the comments for it in the header). 55### User Hooks
56
57There are a number of hooks that you can use to add custom functionality and feedback options to Dynamic Macro feature. This allows for some additional degree of customization.
58
59Note, that direction indicates which macro it is, with `1` being Macro 1, `-1` being Macro 2, and 0 being no macro.
60
61* `dynamic_macro_record_start_user(void)` - Triggered when you start recording a macro.
62* `dynamic_macro_play_user(int8_t direction)` - Triggered when you play back a macro.
63* `dynamic_macro_record_key_user(int8_t direction, keyrecord_t *record)` - Triggered on each keypress while recording a macro.
64* `dynamic_macro_record_end_user(int8_t direction)` - Triggered when the macro recording is stopped.
62 65
63For the details about the internals of the dynamic macros, please read the comments in the `dynamic_macro.h` header. 66Additionally, you can call `dynamic_macro_led_blink()` to flash the backlights if that feature is enabled.
diff --git a/docs/feature_haptic_feedback.md b/docs/feature_haptic_feedback.md
index d9e445de8..ff7337a51 100644
--- a/docs/feature_haptic_feedback.md
+++ b/docs/feature_haptic_feedback.md
@@ -2,7 +2,7 @@
2 2
3## Haptic feedback rules.mk options 3## Haptic feedback rules.mk options
4 4
5The following options are currently available for haptic feedback in `rule.mk`: 5The following options are currently available for haptic feedback in `rules.mk`:
6 6
7`HAPTIC_ENABLE += DRV2605L` 7`HAPTIC_ENABLE += DRV2605L`
8 8
@@ -41,11 +41,15 @@ First you will need a build a circuit to drive the solenoid through a mosfet as
41 41
42[Wiring diagram provided by Adafruit](https://playground.arduino.cc/uploads/Learning/solenoid_driver.pdf) 42[Wiring diagram provided by Adafruit](https://playground.arduino.cc/uploads/Learning/solenoid_driver.pdf)
43 43
44Select a pin that has PWM for the signal pin
45 44
46``` 45| Settings | Default | Description |
47#define SOLENOID_PIN *pin* 46|--------------------------|---------------|-------------------------------------------------------|
48``` 47|`SOLENOID_PIN` | *Not defined* |Configures the pin that the Solenoid is connected to. |
48|`SOLENOID_DEFAULT_DWELL` | `12` ms |Configures the default dwell time for the solenoid. |
49|`SOLENOID_MIN_DWELL` | `4` ms |Sets the lower limit for the dwell. |
50|`SOLENOID_MAX_DWELL` | `100` ms |Sets the upper limit for the dwell. |
51
52?> Dwell time is how long the "plunger" stays activated. The dwell time changes how the solenoid sounds.
49 53
50Beware that some pins may be powered during bootloader (ie. A13 on the STM32F303 chip) and will result in the solenoid kept in the on state through the whole flashing process. This may overheat and damage the solenoid. If you find that the pin the solenoid is connected to is triggering the solenoid during bootloader/DFU, select another pin. 54Beware that some pins may be powered during bootloader (ie. A13 on the STM32F303 chip) and will result in the solenoid kept in the on state through the whole flashing process. This may overheat and damage the solenoid. If you find that the pin the solenoid is connected to is triggering the solenoid during bootloader/DFU, select another pin.
51 55
@@ -151,4 +155,4 @@ This will set what sequence HPT_RST will set as the active mode. If not defined,
151 155
152### DRV2605L Continuous Haptic Mode 156### DRV2605L Continuous Haptic Mode
153 157
154This mode sets continuous haptic feedback with the option to increase or decrease strength. \ No newline at end of file 158This mode sets continuous haptic feedback with the option to increase or decrease strength.
diff --git a/docs/feature_leader_key.md b/docs/feature_leader_key.md
index 82cf78901..22370bf23 100644
--- a/docs/feature_leader_key.md
+++ b/docs/feature_leader_key.md
@@ -22,10 +22,10 @@ void matrix_scan_user(void) {
22 SEND_STRING("QMK is awesome."); 22 SEND_STRING("QMK is awesome.");
23 } 23 }
24 SEQ_TWO_KEYS(KC_D, KC_D) { 24 SEQ_TWO_KEYS(KC_D, KC_D) {
25 SEND_STRING(SS_LCTRL("a")SS_LCTRL("c")); 25 SEND_STRING(SS_LCTL("a") SS_LCTL("c"));
26 } 26 }
27 SEQ_THREE_KEYS(KC_D, KC_D, KC_S) { 27 SEQ_THREE_KEYS(KC_D, KC_D, KC_S) {
28 SEND_STRING("https://start.duckduckgo.com"SS_TAP(X_ENTER)); 28 SEND_STRING("https://start.duckduckgo.com\n");
29 } 29 }
30 SEQ_TWO_KEYS(KC_A, KC_S) { 30 SEQ_TWO_KEYS(KC_A, KC_S) {
31 register_code(KC_LGUI); 31 register_code(KC_LGUI);
@@ -115,11 +115,11 @@ void matrix_scan_user(void) {
115 115
116 SEQ_ONE_KEY(KC_E) { 116 SEQ_ONE_KEY(KC_E) {
117 // Anything you can do in a macro. 117 // Anything you can do in a macro.
118 SEND_STRING(SS_LCTRL(SS_LSFT("t"))); 118 SEND_STRING(SS_LCTL(SS_LSFT("t")));
119 did_leader_succeed = true; 119 did_leader_succeed = true;
120 } else 120 } else
121 SEQ_TWO_KEYS(KC_E, KC_D) { 121 SEQ_TWO_KEYS(KC_E, KC_D) {
122 SEND_STRING(SS_LGUI("r")"cmd"SS_TAP(KC_ENTER)SS_LCTRL("c")); 122 SEND_STRING(SS_LGUI("r") "cmd\n" SS_LCTL("c"));
123 did_leader_succeed = true; 123 did_leader_succeed = true;
124 } 124 }
125 leader_end(); 125 leader_end();
diff --git a/docs/feature_macros.md b/docs/feature_macros.md
index d81c3c655..c13ae8206 100644
--- a/docs/feature_macros.md
+++ b/docs/feature_macros.md
@@ -67,14 +67,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
67 case QMKURL: 67 case QMKURL:
68 if (record->event.pressed) { 68 if (record->event.pressed) {
69 // when keycode QMKURL is pressed 69 // when keycode QMKURL is pressed
70 SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER)); 70 SEND_STRING("https://qmk.fm/\n");
71 } else { 71 } else {
72 // when keycode QMKURL is released 72 // when keycode QMKURL is released
73 } 73 }
74 break; 74 break;
75 case MY_OTHER_MACRO: 75 case MY_OTHER_MACRO:
76 if (record->event.pressed) { 76 if (record->event.pressed) {
77 SEND_STRING(SS_LCTRL("ac")); // selects all and copies 77 SEND_STRING(SS_LCTL("ac")); // selects all and copies
78 } 78 }
79 break; 79 break;
80 } 80 }
@@ -109,18 +109,21 @@ Which would send "VE" followed by a `KC_HOME` tap, and "LO" (spelling "LOVE" if
109 109
110There's also a couple of mod shortcuts you can use: 110There's also a couple of mod shortcuts you can use:
111 111
112* `SS_LCTRL(string)` 112* `SS_LCTL(string)`
113* `SS_LGUI(string)`
114* `SS_LALT(string)`
115* `SS_LSFT(string)` 113* `SS_LSFT(string)`
116* `SS_RALT(string)` 114* `SS_LALT(string)`
115* `SS_LGUI(string)`, `SS_LCMD(string)` or `SS_LWIN(string)`
116* `SS_RCTL(string)`
117* `SS_RSFT(string)`
118* `SS_RALT(string)` or `SS_ALGR(string)`
119* `SS_RGUI(string)`, `SS_RCMD(string)` or `SS_RWIN(string)`
117 120
118These press the respective modifier, send the supplied string and then release the modifier. 121These press the respective modifier, send the supplied string and then release the modifier.
119They can be used like this: 122They can be used like this:
120 123
121 SEND_STRING(SS_LCTRL("a")); 124 SEND_STRING(SS_LCTL("a"));
122 125
123Which would send LCTRL+a (LCTRL down, a, LCTRL up) - notice that they take strings (eg `"k"`), and not the `X_K` keycodes. 126Which would send Left Control+`a` (Left Control down, `a`, Left Control up) - notice that they take strings (eg `"k"`), and not the `X_K` keycodes.
124 127
125### Alternative Keymaps 128### Alternative Keymaps
126 129
diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md
index b2850c3cf..5695acc50 100644
--- a/docs/feature_rgb_matrix.md
+++ b/docs/feature_rgb_matrix.md
@@ -107,7 +107,7 @@ Where `X_Y` is the location of the LED in the matrix defined by [the datasheet](
107 107
108--- 108---
109 109
110### WS2812 (AVR only) 110### WS2812
111 111
112There 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`: 112There 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`:
113 113
@@ -173,16 +173,20 @@ As mentioned earlier, the center of the keyboard by default is expected to be `{
173 173
174All RGB keycodes are currently shared with the RGBLIGHT system: 174All RGB keycodes are currently shared with the RGBLIGHT system:
175 175
176* `RGB_TOG` - toggle 176|Key |Aliases |Description |
177* `RGB_MOD` - cycle through modes 177|-------------------|----------|--------------------------------------------------------------------------------------|
178* `RGB_HUI` - increase hue 178|`RGB_TOG` | |Toggle RGB lighting on or off |
179* `RGB_HUD` - decrease hue 179|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held |
180* `RGB_SAI` - increase saturation 180|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held |
181* `RGB_SAD` - decrease saturation 181|`RGB_HUI` | |Increase hue, decrease hue when Shift is held |
182* `RGB_VAI` - increase value 182|`RGB_HUD` | |Decrease hue, increase hue when Shift is held |
183* `RGB_VAD` - decrease value 183|`RGB_SAI` | |Increase saturation, decrease saturation when Shift is held |
184* `RGB_SPI` - increase speed effect (no EEPROM support) 184|`RGB_SAD` | |Decrease saturation, increase saturation when Shift is held |
185* `RGB_SPD` - decrease speed effect (no EEPROM support) 185|`RGB_VAI` | |Increase value (brightness), decrease value when Shift is held |
186|`RGB_VAD` | |Decrease value (brightness), increase value when Shift is held |
187|`RGB_SPI` | |Increase effect speed (does not support eeprom yet), decrease speed when Shift is held|
188|`RGB_SPD` | |Decrease effect speed (does not support eeprom yet), increase speed when Shift is held|
189
186* `RGB_MODE_*` keycodes will generally work, but are not currently mapped to the correct effects for the RGB Matrix system 190* `RGB_MODE_*` keycodes will generally work, but are not currently mapped to the correct effects for the RGB Matrix system
187 191
188## RGB Matrix Effects 192## RGB Matrix Effects
@@ -282,7 +286,7 @@ You can disable a single effect by defining `DISABLE_[EFFECT_NAME]` in your `con
282 286
283## Custom RGB Matrix Effects 287## Custom RGB Matrix Effects
284 288
285By setting `RGB_MATRIX_CUSTOM_USER` (and/or `RGB_MATRIX_CUSTOM_KB`) in `rule.mk`, new effects can be defined directly from userspace, without having to edit any QMK core files. 289By 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.
286 290
287To declare new effects, create a new `rgb_matrix_user/kb.inc` that looks something like this: 291To declare new effects, create a new `rgb_matrix_user/kb.inc` that looks something like this:
288 292
diff --git a/docs/feature_rgblight.md b/docs/feature_rgblight.md
index be4ddfa72..69a6aaaed 100644
--- a/docs/feature_rgblight.md
+++ b/docs/feature_rgblight.md
@@ -6,7 +6,7 @@ QMK has the ability to control RGB LEDs attached to your keyboard. This is commo
6 6
7Some keyboards come with RGB LEDs preinstalled. Others must have them installed after the fact. See the [Hardware Modification](#hardware-modification) section for information on adding RGB lighting to your keyboard. 7Some keyboards come with RGB LEDs preinstalled. Others must have them installed after the fact. See the [Hardware Modification](#hardware-modification) section for information on adding RGB lighting to your keyboard.
8 8
9Currently QMK supports the following addressable LEDs on AVR microcontrollers (however, the white LED in RGBW variants is not supported): 9Currently QMK supports the following addressable LEDs (however, the white LED in RGBW variants is not supported):
10 10
11 * WS2811, WS2812, WS2812B, WS2812C, etc. 11 * WS2811, WS2812, WS2812B, WS2812C, etc.
12 * SK6812, SK6812MINI, SK6805 12 * SK6812, SK6812MINI, SK6805
@@ -48,12 +48,12 @@ Changing the **Value** sets the overall brightness.<br>
48|`RGB_TOG` | |Toggle RGB lighting on or off | 48|`RGB_TOG` | |Toggle RGB lighting on or off |
49|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held | 49|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held |
50|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held| 50|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held|
51|`RGB_HUI` | |Increase hue | 51|`RGB_HUI` | |Increase hue, decrease hue when Shift is held |
52|`RGB_HUD` | |Decrease hue | 52|`RGB_HUD` | |Decrease hue, increase hue when Shift is held |
53|`RGB_SAI` | |Increase saturation | 53|`RGB_SAI` | |Increase saturation, decrease saturation when Shift is held |
54|`RGB_SAD` | |Decrease saturation | 54|`RGB_SAD` | |Decrease saturation, increase saturation when Shift is held |
55|`RGB_VAI` | |Increase value (brightness) | 55|`RGB_VAI` | |Increase value (brightness), decrease value when Shift is held |
56|`RGB_VAD` | |Decrease value (brightness) | 56|`RGB_VAD` | |Decrease value (brightness), increase value when Shift is held |
57|`RGB_MODE_PLAIN` |`RGB_M_P `|Static (no animation) mode | 57|`RGB_MODE_PLAIN` |`RGB_M_P `|Static (no animation) mode |
58|`RGB_MODE_BREATHE` |`RGB_M_B` |Breathing animation mode | 58|`RGB_MODE_BREATHE` |`RGB_M_B` |Breathing animation mode |
59|`RGB_MODE_RAINBOW` |`RGB_M_R` |Rainbow animation mode | 59|`RGB_MODE_RAINBOW` |`RGB_M_R` |Rainbow animation mode |
@@ -363,8 +363,8 @@ Using the `rgblight_set_clipping_range()` function, you can prepare more buffers
363You can set the Clipping Range by executing the following code. 363You can set the Clipping Range by executing the following code.
364 364
365```c 365```c
366// some soruce 366// some source
367 rgblight_set_clipping_range(3, 4); 367rgblight_set_clipping_range(3, 4);
368``` 368```
369<img src="https://user-images.githubusercontent.com/2170248/55743785-2bd82a00-5a6e-11e9-9d4b-1b4ffaf4932b.JPG" alt="clip direct" width="70%"/> 369<img src="https://user-images.githubusercontent.com/2170248/55743785-2bd82a00-5a6e-11e9-9d4b-1b4ffaf4932b.JPG" alt="clip direct" width="70%"/>
370 370
diff --git a/docs/feature_tap_dance.md b/docs/feature_tap_dance.md
index 7427a7714..f48f11b1c 100644
--- a/docs/feature_tap_dance.md
+++ b/docs/feature_tap_dance.md
@@ -333,6 +333,8 @@ And then simply use `TD(X_CTL)` anywhere in your keymap.
333 333
334If you want to implement this in your userspace, then you may want to check out how [DanielGGordon](https://github.com/qmk/qmk_firmware/tree/master/users/gordon) has implemented this in their userspace. 334If you want to implement this in your userspace, then you may want to check out how [DanielGGordon](https://github.com/qmk/qmk_firmware/tree/master/users/gordon) has implemented this in their userspace.
335 335
336> In this configuration "hold" takes place **after** tap dance timeout (see `ACTION_TAP_DANCE_FN_ADVANCED_TIME`). To achieve instant hold, remove `state->interrupted` checks in conditions. As a result you may use comfortable longer tapping periods to have more time for taps and not to wait too long for holds (try starting with doubled `TAPPING_TERM`).
337
336### Example 5: Using tap dance for advanced mod-tap and layer-tap keys 338### Example 5: Using tap dance for advanced mod-tap and layer-tap keys
337 339
338Tap dance can be used to emulate `MT()` and `LT()` behavior when the tapped code is not a basic keycode. This is useful to send tapped keycodes that normally require `Shift`, such as parentheses or curly braces—or other modified keycodes, such as `Control + X`. 340Tap dance can be used to emulate `MT()` and `LT()` behavior when the tapped code is not a basic keycode. This is useful to send tapped keycodes that normally require `Shift`, such as parentheses or curly braces—or other modified keycodes, such as `Control + X`.
diff --git a/docs/feature_userspace.md b/docs/feature_userspace.md
index e162d423c..a2657c1f6 100644
--- a/docs/feature_userspace.md
+++ b/docs/feature_userspace.md
@@ -208,15 +208,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
208 clear_mods(); clear_oneshot_mods(); 208 clear_mods(); clear_oneshot_mods();
209 SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP); 209 SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP);
210 #ifndef FLASH_BOOTLOADER 210 #ifndef FLASH_BOOTLOADER
211 if ( (temp_mod | temp_osm) & MOD_MASK_SHIFT ) 211 if ((temp_mod | temp_osm) & MOD_MASK_SHIFT)
212 #endif 212 #endif
213 { // 213 {
214 SEND_STRING(":flash"); 214 SEND_STRING(":flash");
215 } 215 }
216 if ( (temp_mod | temp_osm) & MOD_MASK_CTRL) { 216 if ((temp_mod | temp_osm) & MOD_MASK_CTRL) {
217 SEND_STRING(" -j8 --output-sync"); 217 SEND_STRING(" -j8 --output-sync");
218 } 218 }
219 SEND_STRING(SS_TAP(X_ENTER)); 219 tap_code(KC_ENT);
220 set_mods(temp_mod); 220 set_mods(temp_mod);
221 } 221 }
222 break; 222 break;
diff --git a/docs/flashing_bootloadhid.md b/docs/flashing_bootloadhid.md
index c51d8ce4b..731d92772 100644
--- a/docs/flashing_bootloadhid.md
+++ b/docs/flashing_bootloadhid.md
@@ -13,7 +13,7 @@ General flashing sequence:
13 13
14## bootloadHID Flashing Target 14## bootloadHID Flashing Target
15 15
16Using the QMK installation script, detailed [here](newbs_getting_started.md), the required bootloadHID tools should be automatically installed. 16?> Using the QMK installation script, detailed [here](newbs_getting_started.md), the required bootloadHID tools should be automatically installed.
17 17
18To flash via the command line, use the target `:bootloadHID` by executing the following command: 18To flash via the command line, use the target `:bootloadHID` by executing the following command:
19 19
diff --git a/docs/fr-fr/README.md b/docs/fr-fr/README.md
index d3591554b..4527ec4b4 100644
--- a/docs/fr-fr/README.md
+++ b/docs/fr-fr/README.md
@@ -19,7 +19,7 @@ Sinon, vous pouvez aussi le télécharger directement en ([zip](https://github.c
19 19
20## Comment le compiler 20## Comment le compiler
21 21
22Avant d'être prêt à compiler vous allez devoir [installer un environnement](getting_started_build_tools.md) pour les développements AVR et/ou ARM. Une fois ceci fait, vous pourrez utiliser la commande `make` pour compiler le clavier et la disposition avec une commande de ce type : 22Avant d'être prêt à compiler vous allez devoir [installer un environnement](fr-fr/getting_started_build_tools.md) pour les développements AVR et/ou ARM. Une fois ceci fait, vous pourrez utiliser la commande `make` pour compiler le clavier et la disposition avec une commande de ce type :
23 23
24 make planck/rev4:default 24 make planck/rev4:default
25 25
@@ -29,4 +29,4 @@ Cette commande compilera la révision `rev4` du clavier `planck` avec la disposi
29 29
30## Comment le personnaliser 30## Comment le personnaliser
31 31
32QMK a beaucoup de [fonctionnalités](features.md) à explorer, et [une documentation](http://docs.qmk.fm) très abondante que vous pourrez parcourir. La plupart des fonctionnalités vous permettrons de modifier vos [dispositions](keymap.md) (keymaps) et de changer [les codes de caractères](keycodes.md) (keycodes). 32QMK a beaucoup de [fonctionnalités](fr-fr/features.md) à explorer, et [une documentation](http://docs.qmk.fm) très abondante que vous pourrez parcourir. La plupart des fonctionnalités vous permettrons de modifier vos [dispositions](fr-fr/keymap.md) (keymaps) et de changer [les codes de caractères](fr-fr/keycodes.md) (keycodes).
diff --git a/docs/fr-fr/_summary.md b/docs/fr-fr/_summary.md
index eef486176..38e3abe7c 100644
--- a/docs/fr-fr/_summary.md
+++ b/docs/fr-fr/_summary.md
@@ -29,97 +29,97 @@
29**En Anglais** 29**En Anglais**
30 30
31* Guides détaillés 31* Guides détaillés
32 * [Installation des outils de compilation](getting_started_build_tools.md) 32 * [Installation des outils de compilation](fr-fr/getting_started_build_tools.md)
33 * [Guide Vagrant](getting_started_vagrant.md) 33 * [Guide Vagrant](fr-fr/getting_started_vagrant.md)
34 * [Commandes de compilations](getting_started_make_guide.md) 34 * [Commandes de compilations](fr-fr/getting_started_make_guide.md)
35 * [Flasher les firmwares](fr-fr/flashing.md) 35 * [Flasher les firmwares](fr-fr/flashing.md)
36 * [Personnaliser les fonctionnalités](custom_quantum_functions.md) 36 * [Personnaliser les fonctionnalités](fr-fr/custom_quantum_functions.md)
37 * [Aperçu des fonctionnalités des dispositions](keymap.md) 37 * [Aperçu des fonctionnalités des dispositions](fr-fr/keymap.md)
38 38
39* [Hardware](hardware.md) 39* [Hardware](fr-fr/hardware.md)
40 * [Processeurs AVR](hardware_avr.md) 40 * [Processeurs AVR](fr-fr/hardware_avr.md)
41 * [Pilotes / Drivers](hardware_drivers.md) 41 * [Pilotes / Drivers](fr-fr/hardware_drivers.md)
42 42
43* Réferences 43* Réferences
44 * [Lignes de conduite des claviers](hardware_keyboard_guidelines.md) 44 * [Lignes de conduite des claviers](fr-fr/hardware_keyboard_guidelines.md)
45 * [Options de configurations](config_options.md) 45 * [Options de configurations](fr-fr/config_options.md)
46 * [Keycodes / Codes des caractères](keycodes.md) 46 * [Keycodes / Codes des caractères](fr-fr/keycodes.md)
47 * [Conventions de codage - C](coding_conventions_c.md) 47 * [Conventions de codage - C](fr-fr/coding_conventions_c.md)
48 * [Conventions de codage - Python](coding_conventions_python.md) 48 * [Conventions de codage - Python](fr-fr/coding_conventions_python.md)
49 * [Meilleurs pratiques sur la documentation](documentation_best_practices.md) 49 * [Meilleurs pratiques sur la documentation](fr-fr/documentation_best_practices.md)
50 * [Modèles de documentation](documentation_templates.md) 50 * [Modèles de documentation](fr-fr/documentation_templates.md)
51 * [Glossaire](reference_glossary.md) 51 * [Glossaire](fr-fr/reference_glossary.md)
52 * [Tests unitaires](unit_testing.md) 52 * [Tests unitaires](fr-fr/unit_testing.md)
53 * [Fonctions utiles](ref_functions.md) 53 * [Fonctions utiles](fr-fr/ref_functions.md)
54 * [Support de configuration](reference_configurator_support.md) 54 * [Support de configuration](fr-fr/reference_configurator_support.md)
55 * [Format du fichier info.json](reference_info_json.md) 55 * [Format du fichier info.json](fr-fr/reference_info_json.md)
56 * [Développer la CLI en Python](cli_development.md) 56 * [Développer la CLI en Python](fr-fr/cli_development.md)
57 57
58* [Fonctionnalités](features.md) 58* [Fonctionnalités](fr-fr/features.md)
59 * [Keycodes basiques](keycodes_basic.md) 59 * [Keycodes basiques](fr-fr/keycodes_basic.md)
60 * [Touches utilisées avec Shift (US ANSI)](keycodes_us_ansi_shifted.md) 60 * [Touches utilisées avec Shift (US ANSI)](fr-fr/keycodes_us_ansi_shifted.md)
61 * [Keycodes quantiques](quantum_keycodes.md) 61 * [Keycodes quantiques](fr-fr/quantum_keycodes.md)
62 * [Keycodes avancés](feature_advanced_keycodes.md) 62 * [Keycodes avancés](fr-fr/feature_advanced_keycodes.md)
63 * [Fonctionnalités audio](feature_audio.md) 63 * [Fonctionnalités audio](fr-fr/feature_audio.md)
64 * [Majuscule automatique](feature_auto_shift.md) 64 * [Majuscule automatique](fr-fr/feature_auto_shift.md)
65 * [Rétroéclairage](feature_backlight.md) 65 * [Rétroéclairage](fr-fr/feature_backlight.md)
66 * [Bluetooth](feature_bluetooth.md) 66 * [Bluetooth](fr-fr/feature_bluetooth.md)
67 * [Bootmagic](feature_bootmagic.md) 67 * [Bootmagic](fr-fr/feature_bootmagic.md)
68 * [Combos](feature_combo.md) 68 * [Combos](fr-fr/feature_combo.md)
69 * [Commande](feature_command.md) 69 * [Commande](fr-fr/feature_command.md)
70 * [API anti-rebond](feature_debounce_type.md) 70 * [API anti-rebond](fr-fr/feature_debounce_type.md)
71 * [DIP Switch](feature_dip_switch.md) 71 * [DIP Switch](fr-fr/feature_dip_switch.md)
72 * [Macros dynamiques](feature_dynamic_macros.md) 72 * [Macros dynamiques](fr-fr/feature_dynamic_macros.md)
73 * [Interrupteurs rotatifs](feature_encoders.md) 73 * [Interrupteurs rotatifs](fr-fr/feature_encoders.md)
74 * [Grave Escape](feature_grave_esc.md) 74 * [Grave Escape](fr-fr/feature_grave_esc.md)
75 * [Retour haptique](feature_haptic_feedback.md) 75 * [Retour haptique](fr-fr/feature_haptic_feedback.md)
76 * [Contrôleur LCD HD44780](feature_hd44780.md) 76 * [Contrôleur LCD HD44780](fr-fr/feature_hd44780.md)
77 * [Touche à verrou / Lock-key](feature_key_lock.md) 77 * [Touche à verrou / Lock-key](fr-fr/feature_key_lock.md)
78 * [Dispositions / layouts](feature_layouts.md) 78 * [Dispositions / layouts](fr-fr/feature_layouts.md)
79 * [Touche leader](feature_leader_key.md) 79 * [Touche leader](fr-fr/feature_leader_key.md)
80 * [Matrice LED](feature_led_matrix.md) 80 * [Matrice LED](fr-fr/feature_led_matrix.md)
81 * [Macros](feature_macros.md) 81 * [Macros](fr-fr/feature_macros.md)
82 * [Boutons de souris](feature_mouse_keys.md) 82 * [Boutons de souris](fr-fr/feature_mouse_keys.md)
83 * [Pilotes / Drivers OLED](feature_oled_driver.md) 83 * [Pilotes / Drivers OLED](fr-fr/feature_oled_driver.md)
84 * [Touche one-shot](feature_advanced_keycodes.md#one-shot-keys) 84 * [Touche one-shot](fr-fr/feature_advanced_keycodes.md#one-shot-keys)
85 * [Périphériques de pointage](feature_pointing_device.md) 85 * [Périphériques de pointage](fr-fr/feature_pointing_device.md)
86 * [Souris PS/2](feature_ps2_mouse.md) 86 * [Souris PS/2](fr-fr/feature_ps2_mouse.md)
87 * [Éclairage RGB](feature_rgblight.md) 87 * [Éclairage RGB](fr-fr/feature_rgblight.md)
88 * [Matrice RGB](feature_rgb_matrix.md) 88 * [Matrice RGB](fr-fr/feature_rgb_matrix.md)
89 * [Space Cadet](feature_space_cadet.md) 89 * [Space Cadet](fr-fr/feature_space_cadet.md)
90 * [Claviers scindés / splittés](feature_split_keyboard.md) 90 * [Claviers scindés / splittés](fr-fr/feature_split_keyboard.md)
91 * [Stenographie](feature_stenography.md) 91 * [Stenographie](fr-fr/feature_stenography.md)
92 * [Inversion des mains](feature_swap_hands.md) 92 * [Inversion des mains](fr-fr/feature_swap_hands.md)
93 * [Tap Dance](feature_tap_dance.md) 93 * [Tap Dance](fr-fr/feature_tap_dance.md)
94 * [Terminale](feature_terminal.md) 94 * [Terminale](fr-fr/feature_terminal.md)
95 * [Imprimante thermique](feature_thermal_printer.md) 95 * [Imprimante thermique](fr-fr/feature_thermal_printer.md)
96 * [Caractères unicodes](feature_unicode.md) 96 * [Caractères unicodes](fr-fr/feature_unicode.md)
97 * [Dossier utilisateur](feature_userspace.md) 97 * [Dossier utilisateur](fr-fr/feature_userspace.md)
98 * [Velocikey](feature_velocikey.md) 98 * [Velocikey](fr-fr/feature_velocikey.md)
99 99
100* Pour les makers et les bricoleurs 100* Pour les makers et les bricoleurs
101 * [Guide des claviers soudés à la main](hand_wire.md) 101 * [Guide des claviers soudés à la main](fr-fr/hand_wire.md)
102 * [Guide de flash de l’ISP](isp_flashing_guide.md) 102 * [Guide de flash de l’ISP](fr-fr/isp_flashing_guide.md)
103 * [Guide du débogage ARM](arm_debugging.md) 103 * [Guide du débogage ARM](fr-fr/arm_debugging.md)
104 * [Drivers i2c](i2c_driver.md) 104 * [Drivers i2c](fr-fr/i2c_driver.md)
105 * [Contrôles des GPIO](internals_gpio_control.md) 105 * [Contrôles des GPIO](fr-fr/internals_gpio_control.md)
106 * [Conversion en Proton C](proton_c_conversion.md) 106 * [Conversion en Proton C](fr-fr/proton_c_conversion.md)
107 107
108* Pour aller plus loin 108* Pour aller plus loin
109 * [Comment fonctionnent les claviers](how_keyboards_work.md) 109 * [Comment fonctionnent les claviers](fr-fr/how_keyboards_work.md)
110 * [Comprendre QMK](understanding_qmk.md) 110 * [Comprendre QMK](fr-fr/understanding_qmk.md)
111 111
112* Autres sujets 112* Autres sujets
113 * [Utiliser Eclipse avec QMK](other_eclipse.md) 113 * [Utiliser Eclipse avec QMK](fr-fr/other_eclipse.md)
114 * [Utiliser VSCode avec QMK](other_vscode.md) 114 * [Utiliser VSCode avec QMK](fr-fr/other_vscode.md)
115 * [Support](support.md) 115 * [Support](fr-fr/support.md)
116 * [Comment ajouter des traductions](translating.md) 116 * [Comment ajouter des traductions](fr-fr/translating.md)
117 117
118* À l’intérieur de QMK (En cours de documentation) 118* À l’intérieur de QMK (En cours de documentation)
119 * [Définitions](internals_defines.md) 119 * [Définitions](fr-fr/internals_defines.md)
120 * [Input Callback Reg](internals_input_callback_reg.md) 120 * [Input Callback Reg](fr-fr/internals_input_callback_reg.md)
121 * [Appareils Midi](internals_midi_device.md) 121 * [Appareils Midi](fr-fr/internals_midi_device.md)
122 * [Installation d’un appareil Midi](internals_midi_device_setup_process.md) 122 * [Installation d’un appareil Midi](fr-fr/internals_midi_device_setup_process.md)
123 * [Utilitaires Midi](internals_midi_util.md) 123 * [Utilitaires Midi](fr-fr/internals_midi_util.md)
124 * [Fonctions Midi](internals_send_functions.md) 124 * [Fonctions Midi](fr-fr/internals_send_functions.md)
125 * [Outils Sysex](internals_sysex_tools.md) 125 * [Outils Sysex](fr-fr/internals_sysex_tools.md)
diff --git a/docs/fr-fr/faq_build.md b/docs/fr-fr/faq_build.md
index 774bf6880..84d88afcd 100644
--- a/docs/fr-fr/faq_build.md
+++ b/docs/fr-fr/faq_build.md
@@ -86,10 +86,6 @@ Relancer le script d'installation de QMK (`./util/qmk_install.sh` situé dans r
86 86
87Si vous rencontrez toujours des problèmes, essayez de télécharger et lancer Zadig. Voir [Installation du driver du bootloader avec Zadig](driver_installation_zadig.md) pour plus d'informations. 87Si vous rencontrez toujours des problèmes, essayez de télécharger et lancer Zadig. Voir [Installation du driver du bootloader avec Zadig](driver_installation_zadig.md) pour plus d'informations.
88 88
89## WINAVR est obsolète
90
91Il n'est plus recommandé et peut causer des problèmes. Voir [TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
92
93## USB VID et PID 89## USB VID et PID
94 90
95Vous pouvez utiliser l'ID de votre choix en modifier `config.h`. Il y a peu de chance de conflit avec d'autres produits. 91Vous pouvez utiliser l'ID de votre choix en modifier `config.h`. Il y a peu de chance de conflit avec d'autres produits.
@@ -103,30 +99,6 @@ Vous pouvez acheter un VID:PID unique ici. Je ne pense pas que ce soit nécessai
103- http://www.obdev.at/products/vusb/license.html 99- http://www.obdev.at/products/vusb/license.html
104- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1 100- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
105 101
106## Cortex: `cstddef: No such file or directory`
107
108Ce problème existait avec le GCC 4.8 d'Ubuntu 14.04, la solution a nécessité de mettre à jour vers 4.9 avec ce PPA.
109https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
110
111https://github.com/tmk/tmk_keyboard/issues/212
112https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef
113https://developer.mbed.org/forum/mbed/topic/5205/
114
115## `clock_prescale_set` and `clock_div_1` Not Available
116
117Votre chaîne d'outils (Toolchain) est trop vieille pour supporter le MCU. Par exemple, WinAVR 20100110 ne supporte pas ATMega32u2.
118
119```
120Compiling C: ../../tmk_core/protocol/lufa/lufa.c
121avr-gcc -c -mmcu=atmega32u2 -gdwarf-2 -DF_CPU=16000000UL -DINTERRUPT_CONTROL_ENDPOINT -DBOOTLOADER_SIZE=4096 -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DVERSION=unknown -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_alps64/protocol/lufa/lufa.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_alps64_protocol_lufa_lufa.o.d ../../tmk_core/protocol/lufa/lufa.c -o obj_alps64/protocol/lufa/lufa.o
122../../tmk_core/protocol/lufa/lufa.c: In function 'setup_mcu':
123../../tmk_core/protocol/lufa/lufa.c:575: warning: implicit declaration of function 'clock_prescale_set'
124../../tmk_core/protocol/lufa/lufa.c:575: error: 'clock_div_1' undeclared (first use in this function)
125../../tmk_core/protocol/lufa/lufa.c:575: error: (Each undeclared identifier is reported only once
126../../tmk_core/protocol/lufa/lufa.c:575: error: for each function it appears in.)
127make: *** [obj_alps64/protocol/lufa/lufa.o] Error 1
128```
129
130## BOOTLOADER_SIZE pour AVR 102## BOOTLOADER_SIZE pour AVR
131 103
132Notez que la taille du bootloader pour les Teensy2.0++ est de 2048bytes. Quelques Makefiles peuvent contenir une erreur et avoir le mauvais commentaire. 104Notez que la taille du bootloader pour les Teensy2.0++ est de 2048bytes. Quelques Makefiles peuvent contenir une erreur et avoir le mauvais commentaire.
diff --git a/docs/fr-fr/faq_debug.md b/docs/fr-fr/faq_debug.md
index 7a85fd1f2..754c79921 100644
--- a/docs/fr-fr/faq_debug.md
+++ b/docs/fr-fr/faq_debug.md
@@ -104,58 +104,6 @@ En C, `1` implique un type [int] qui est [16 bits] pour les AVR, ce qui implique
104 104
105http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279 105http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
106 106
107## Bootloader Jump ne fonctionne pas
108
109Configurez correctement la taille du bootloader dans le **Makefile**. Une mauvaise taille de section du bootloader empêchera probablement le démarrage avec **Magic command** et **Boot Magic**.
110
111```
112# Size of Bootloaders in bytes:
113# Atmel DFU loader(ATmega32U4) 4096
114# Atmel DFU loader(AT90USB128) 8192
115# LUFA bootloader(ATmega32U4) 4096
116# Arduino Caterina(ATmega32U4) 4096
117# USBaspLoader(ATmega***) 2048
118# Teensy halfKay(ATmega32U4) 512
119# Teensy++ halfKay(AT90USB128) 2048
120OPT_DEFS += -DBOOTLOADER_SIZE=4096
121```
122
123La taille de la section de démarrage de AVR est définie par l'option **BOOTSZ** fuse. Vérifiez la fiche technique du MCU. Veuilez noter que les tailles et adresses sont définies en **Word** (2 octets) dans la fiche technique alors que TMK utilise des **Byte**.
124
125La section de boot AVR se trouve à la fin de la mémoire flash, comme suit.
126
127```
128byte Atmel/LUFA(ATMega32u4) byte Atmel(AT90SUB1286)
1290x0000 +---------------+ 0x00000 +---------------+
130 | | | |
131 | | | |
132 | Application | | Application |
133 | | | |
134 = = = =
135 | | 32KB-4KB | | 128KB-8KB
1360x6000 +---------------+ 0x1E000 +---------------+
137 | Bootloader | 4KB | Bootloader | 8KB
1380x7FFF +---------------+ 0x1FFFF +---------------+
139
140
141byte Teensy(ATMega32u4) byte Teensy++(AT90SUB1286)
1420x0000 +---------------+ 0x00000 +---------------+
143 | | | |
144 | | | |
145 | Application | | Application |
146 | | | |
147 = = = =
148 | | 32KB-512B | | 128KB-2KB
1490x7E00 +---------------+ 0x1FC00 +---------------+
150 | Bootloader | 512B | Bootloader | 2KB
1510x7FFF +---------------+ 0x1FFFF +---------------+
152```
153
154Référez-vous à cette discussion pour plus de référence.
155https://github.com/tmk/tmk_keyboard/issues/179
156
157Si vous utilisez un TeensyUSB, il y a un [bug connu](https://github.com/qmk/qmk_firmware/issues/164) qui fait que le bouton reset matériel empêche la touche RESET de fonctionner. Débrancher et rebrancher le clavier devrait résoudre le problème.
158
159## Les touches spéciales ne fonctionnent pas (Touche Système, Touches de contrôle du son) 107## Les touches spéciales ne fonctionnent pas (Touche Système, Touches de contrôle du son)
160 108
161Vous devez définir `EXTRAKEY_ENABLE` dans le fichier `rules.mk` pour les utiliser dans QMK. 109Vous devez définir `EXTRAKEY_ENABLE` dans le fichier `rules.mk` pour les utiliser dans QMK.
@@ -189,25 +137,6 @@ Si vous voulez garder JTAG activé, ajoutez la ligne suivante à votre fichier `
189#define NO_JTAG_DISABLE 137#define NO_JTAG_DISABLE
190``` 138```
191 139
192## Adding LED Indicators of Lock Keys
193
194Si vous souhaitez votre propre indicateur LED pour CapsLock, ScrollLock et NumLock alors lisez ce post.
195
196http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p191560
197
198## Programmer Arduino Micro/Leonardo
199
200Appuyez sur le bouton reset puis lancez la commande suivante dans les 8 secondes.
201
202```
203avrdude -patmega32u4 -cavr109 -b57600 -Uflash:w:adb_usb.hex -P/dev/ttyACM0
204```
205
206Le nom du périphérique peut varier en fonction de votre système.
207
208http://arduino.cc/en/Main/ArduinoBoardMicro
209https://geekhack.org/index.php?topic=14290.msg1563867#msg1563867
210
211## Compatibilité USB 3 140## Compatibilité USB 3
212 141
213Il semble que certaines personnes ont eu des problèmes avec les ports USB 3, essayez un port USB 2. 142Il semble que certaines personnes ont eu des problèmes avec les ports USB 3, essayez un port USB 2.
diff --git a/docs/fr-fr/faq_keymap.md b/docs/fr-fr/faq_keymap.md
index 8244d4225..2cbbe9308 100644
--- a/docs/fr-fr/faq_keymap.md
+++ b/docs/fr-fr/faq_keymap.md
@@ -72,24 +72,7 @@ Des vieux claviers mécaniques ont parfois des touches à verrouillage, mais les
72 72
73## Ajouter des caractères spéciaux autres que ASCII comme la cédille 'Ç' 73## Ajouter des caractères spéciaux autres que ASCII comme la cédille 'Ç'
74 74
75IL N'EXISTE AUCUNE METHODE UNIVERSELLE POUR LES AJOUTER QUI FONCTIONNE SUR TOUS LES SYSTEMES. Vous devez définir une **MACRO** d'une manière spécifique à votre OS ou layout. 75Voir la fonctionnalité [Unicode](feature_unicode.md).
76
77Voir ce post pour un exemple de code **MACRO**.
78
79http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p195620
80
81Sous **Windows** vous pouvez utiliser la touche `AltGr` ou **Alt code**.
82* http://en.wikipedia.org/wiki/AltGr_key
83* http://en.wikipedia.org/wiki/Alt_code
84
85Sous **Mac OS** définissez une combinaison de touche `Option`.
86* http://en.wikipedia.org/wiki/Option_key#Alternative_keyboard_input
87
88Sous **Xorg** vous pouvez utiliser une touche `compose` à la place.
89* http://en.wikipedia.org/wiki/Compose_key
90
91Et voir ceci pour une entrée **Unicode**.
92* http://en.wikipedia.org/wiki/Unicode_input
93 76
94## Touche `Fn` sur macOS 77## Touche `Fn` sur macOS
95 78
@@ -144,54 +127,6 @@ Cette fonctionnalité permet d'utiliser une touche à la fois comme touche Écha
144 127
145Voir la fonctionnalité [Grave Escape](feature_grave_esc.md). 128Voir la fonctionnalité [Grave Escape](feature_grave_esc.md).
146 129
147## Avoir les touches modificatrices qui ont double usage en flèches directionnelles.
148
149Ceci transforme les touches "modificateur droit" en touches fléchées lorsque les touches sont seulement "tapées" tout en restant des modificateurs lorsqu'elles sont maintenues.
150
151Dans TMK la fonction double rôle s'appelle **TAP**.
152
153```C
154
155#include "keymap_common.h"
156
157
158/* Arrow keys on right modifier keys with TMK dual role feature
159 *
160 * https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#213-modifier-with-tap-keydual-role
161 * https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
162 */
163const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
164 /* 0: qwerty */
165 [0] = LAYOUT( \
166 ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS,BSPC, \
167 TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
168 LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
169 LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, ESC, \
170 FN4, LGUI,LALT, SPC, APP, FN2, FN1, FN3),
171 [1] = LAYOUT( \
172 GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,TRNS, \
173 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
174 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
175 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN5, TRNS, \
176 TRNS,TRNS,TRNS, TRNS, TRNS,FN7, FN6, FN8),
177};
178
179const uint16_t PROGMEM fn_actions[] = {
180 [0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_UP),
181 [1] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_DOWN),
182 [2] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_LEFT),
183 [3] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RIGHT),
184 [4] = ACTION_LAYER_MOMENTARY(1),
185 [5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_PGUP),
186 [6] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_PGDN),
187 [7] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_HOME),
188 [8] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_END),
189};
190
191```
192
193Touches double rôle : https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
194
195## Eject sur Mac OSX 130## Eject sur Mac OSX
196 131
197Le keycode`KC_EJCT` fonctionne sous OSX. https://github.com/tmk/tmk_keyboard/issues/250 132Le keycode`KC_EJCT` fonctionne sous OSX. https://github.com/tmk/tmk_keyboard/issues/250
diff --git a/docs/getting_started_build_tools.md b/docs/getting_started_build_tools.md
index a55e903a6..2721a9a03 100644
--- a/docs/getting_started_build_tools.md
+++ b/docs/getting_started_build_tools.md
@@ -112,21 +112,6 @@ The Toolchain setup is done through the Windows Subsystem for Linux, and the pro
112* The WSL Git is **not** compatible with the Windows Git, so use the Windows Git Bash or a windows Git GUI for all Git operations 112* The WSL Git is **not** compatible with the Windows Git, so use the Windows Git Bash or a windows Git GUI for all Git operations
113* You can edit files either inside WSL or normally using Windows, but note that if you edit makefiles or shell scripts, make sure you are using an editor that saves the files with Unix line endings. Otherwise the compilation might not work. 113* You can edit files either inside WSL or normally using Windows, but note that if you edit makefiles or shell scripts, make sure you are using an editor that saves the files with Unix line endings. Otherwise the compilation might not work.
114 114
115## Windows (Vista and Later) (Deprecated)
116
117These are the old instructions for Windows Vista and later. We recommend you use [MSYS2 as outlined above](#windows-with-msys2-recommended).
118
1191. If you have ever installed WinAVR, uninstall it.
1202. Install [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Disable smatch, but **be sure to leave the option to add the tools to the PATH checked**.
1213. If you are going to flash Infinity based keyboards you will need to install dfu-util, refer to the instructions by [Input Club](https://github.com/kiibohd/controller/wiki/Loading-DFU-Firmware).
1224. Install [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). During installation, uncheck the option to install a graphical user interface. **DO NOT change the default installation folder.** The scripts depend on the default location.
1235. Clone this repository. [This link will download it as a zip file, which you'll need to extract.](https://github.com/qmk/qmk_firmware/archive/master.zip) Open the extracted folder in Windows Explorer.
1246. Open the `\util` folder.
1257. Double-click on the `1-setup-path-win` batch script to run it. You'll need to accept a User Account Control prompt. Press the spacebar to dismiss the success message in the command prompt that pops up.
1268. Right-click on the `2-setup-environment-win` batch script, select "Run as administrator", and accept the User Account Control prompt. This part may take a couple of minutes, and you'll need to approve a driver installation, but once it finishes, your environment is complete!
127
128If you have trouble and want to ask for help, it is useful to generate a *Win_Check_Output.txt* file by running `Win_Check.bat` in the `\util` folder.
129
130## Docker 115## Docker
131 116
132If this is a bit complex for you, Docker might be the turnkey solution you need. After installing [Docker CE](https://docs.docker.com/install/#supported-platforms), run the following command from the `qmk_firmware` directory to build a keyboard/keymap: 117If this is a bit complex for you, Docker might be the turnkey solution you need. After installing [Docker CE](https://docs.docker.com/install/#supported-platforms), run the following command from the `qmk_firmware` directory to build a keyboard/keymap:
diff --git a/docs/getting_started_github.md b/docs/getting_started_github.md
index aeb8738b7..629f4ece2 100644
--- a/docs/getting_started_github.md
+++ b/docs/getting_started_github.md
@@ -19,7 +19,7 @@ And be sure to select "HTTPS", and select the link and copy it:
19From here, enter `git clone ` into the command line, and then paste your link: 19From here, enter `git clone ` into the command line, and then paste your link:
20 20
21``` 21```
22user@computer:~$ git clone https://github.com/whoeveryouare/qmk_firmware.git 22user@computer:~$ git clone --recurse-submodules https://github.com/whoeveryouare/qmk_firmware.git
23Cloning into 'qmk_firmware'... 23Cloning into 'qmk_firmware'...
24remote: Counting objects: 46625, done. 24remote: Counting objects: 46625, done.
25remote: Compressing objects: 100% (2/2), done. 25remote: Compressing objects: 100% (2/2), done.
diff --git a/docs/getting_started_introduction.md b/docs/getting_started_introduction.md
index e183d77ee..6dc51b82b 100644
--- a/docs/getting_started_introduction.md
+++ b/docs/getting_started_introduction.md
@@ -4,7 +4,7 @@ This page attempts to explain the basic information you need to know to work wit
4 4
5## Basic QMK Structure 5## Basic QMK Structure
6 6
7QMK is a fork of [Jun Wako](https://github.com/tmk)'s [tmk_keyboard](https://github.com/tmk/tmk_keyboard) project. The original TMK code, with modifications, can be found in the `tmk` folder. The QMK additions to the project may be found in the `quantum` folder. Keyboard projects may be found in the `handwired` and `keyboard` folders. 7QMK is a fork of [Jun Wako](https://github.com/tmk)'s [tmk_keyboard](https://github.com/tmk/tmk_keyboard) project. The original TMK code, with modifications, can be found in the `tmk_core` folder. The QMK additions to the project may be found in the `quantum` folder. Keyboard projects may be found in the `handwired` and `keyboard` folders.
8 8
9### Userspace Structure 9### Userspace Structure
10 10
diff --git a/docs/getting_started_make_guide.md b/docs/getting_started_make_guide.md
index d2596b2e2..bf8d472d0 100644
--- a/docs/getting_started_make_guide.md
+++ b/docs/getting_started_make_guide.md
@@ -59,7 +59,7 @@ To disable debug messages (*dprint*) and reduce the .hex file size, include `#de
59 59
60To disable print messages (*print*, *xprintf*) and user print messages (*uprint*) and reduce the .hex file size, include `#define NO_PRINT` in your `config.h` file. 60To disable print messages (*print*, *xprintf*) and user print messages (*uprint*) and reduce the .hex file size, include `#define NO_PRINT` in your `config.h` file.
61 61
62To disable print messages (*print*, *xprintf*) and **KEEP** user print messages (*uprint*), include `#define USER_PRINT` in your `config.h` file. 62To disable print messages (*print*, *xprintf*) and **KEEP** user print messages (*uprint*), include `#define USER_PRINT` in your `config.h` file (do not also include `#define NO_PRINT` in this case).
63 63
64To see the text, open `hid_listen` and enjoy looking at your printed messages. 64To see the text, open `hid_listen` and enjoy looking at your printed messages.
65 65
diff --git a/docs/hardware_drivers.md b/docs/hardware_drivers.md
index 321ba2a4b..165187795 100644
--- a/docs/hardware_drivers.md
+++ b/docs/hardware_drivers.md
@@ -22,7 +22,7 @@ Support for SSD1306 based OLED displays. For more information see the [OLED Driv
22 22
23You can make use of uGFX within QMK to drive character and graphic LCDs, LED arrays, OLED, TFT, and other display technologies. This needs to be better documented, if you are trying to do this and reading the code doesn't help please [open an issue](https://github.com/qmk/qmk_firmware/issues/new) and we can help you through the process. 23You can make use of uGFX within QMK to drive character and graphic LCDs, LED arrays, OLED, TFT, and other display technologies. This needs to be better documented, if you are trying to do this and reading the code doesn't help please [open an issue](https://github.com/qmk/qmk_firmware/issues/new) and we can help you through the process.
24 24
25## WS2812 (AVR Only) 25## WS2812
26 26
27Support for WS2811/WS2812{a,b,c} LED's. For more information see the [RGB Light](feature_rgblight.md) page. 27Support for WS2811/WS2812{a,b,c} LED's. For more information see the [RGB Light](feature_rgblight.md) page.
28 28
diff --git a/docs/he-il/README.md b/docs/he-il/README.md
index db0ad43c3..8e0c470b4 100644
--- a/docs/he-il/README.md
+++ b/docs/he-il/README.md
@@ -20,7 +20,7 @@ QMK (*Quantum Mechanical Keyboard*) היא קהילת קוד פתוח (open sour
20 20
21## איך לקמפל 21## איך לקמפל
22 22
23לפני שתצליחו לקמפל, תדרשו [להתקין סביבה](getting_started_build_tools.md) עבור פיתוח AVR ו/או ARM. ברגע שהדבר בוצע, תוכלו להריץ פקודת `make` כדי לבנות מקלדת ומיפוי עם התחביר הבא: 23לפני שתצליחו לקמפל, תדרשו [להתקין סביבה](he-il/getting_started_build_tools.md) עבור פיתוח AVR ו/או ARM. ברגע שהדבר בוצע, תוכלו להריץ פקודת `make` כדי לבנות מקלדת ומיפוי עם התחביר הבא:
24 24
25 make planck/rev4:default 25 make planck/rev4:default
26 26
@@ -30,5 +30,5 @@ QMK (*Quantum Mechanical Keyboard*) היא קהילת קוד פתוח (open sour
30 30
31## איך להתאים 31## איך להתאים
32 32
33לQMK יש המון [יכולות](features.md) שאפשר לנווט בהן, וכמות נכבדת של [תיעוד ודוקומנטציה](http://docs.qmk.fm) בה אפשר לנבור. רוב הפיצ׳רים באים לידי ביטוי על ידי שינוי [מיפוי המקלדת](keymap.md) ושינוי [קודי המקשים](keycodes.md). 33לQMK יש המון [יכולות](he-il/features.md) שאפשר לנווט בהן, וכמות נכבדת של [תיעוד ודוקומנטציה](http://docs.qmk.fm) בה אפשר לנבור. רוב הפיצ׳רים באים לידי ביטוי על ידי שינוי [מיפוי המקלדת](he-il/keymap.md) ושינוי [קודי המקשים](he-il/keycodes.md).
34</div> 34</div>
diff --git a/docs/he-il/_summary.md b/docs/he-il/_summary.md
index acc0546d0..804db534a 100644
--- a/docs/he-il/_summary.md
+++ b/docs/he-il/_summary.md
@@ -1,6 +1,7 @@
1<div dir="rtl" markdown="1"> 1<div dir="rtl" markdown="1">
2
2**בשפה העברית** 3**בשפה העברית**
3* [המדריך המלא למתחילים](newbs.md) 4* [המדריך המלא למתחילים](he-il/newbs.md)
4 * [מקורות ללמידה](he-il/newbs_learn_more_resources.md) 5 * [מקורות ללמידה](he-il/newbs_learn_more_resources.md)
5* [בסיס QMK](he-il/README.md) 6* [בסיס QMK](he-il/README.md)
6 * [מבוא לQMK](he-il/getting_started_introduction.md) 7 * [מבוא לQMK](he-il/getting_started_introduction.md)
@@ -13,126 +14,126 @@
13 * [איך לתעד נכון](he-il/documentation_best_practices.md) 14 * [איך לתעד נכון](he-il/documentation_best_practices.md)
14 15
15**בשפה האנגלית** 16**בשפה האנגלית**
16* [המדריך המלא למתחילים](newbs.md) 17* [המדריך המלא למתחילים](he-il/newbs.md)
17 * [התחלה](newbs_getting_started.md) 18 * [התחלה](he-il/newbs_getting_started.md)
18 * [בנייה של הקושחה הראשונה שלך](newbs_building_firmware.md) 19 * [בנייה של הקושחה הראשונה שלך](he-il/newbs_building_firmware.md)
19 * [צריבה של הקושחה](newbs_flashing.md) 20 * [צריבה של הקושחה](he-il/newbs_flashing.md)
20 * [בדיקות ודיבאגינג](newbs_testing_debugging.md) 21 * [בדיקות ודיבאגינג](he-il/newbs_testing_debugging.md)
21 * [עבודה נכונה ב GIT](newbs_best_practices.md) 22 * [עבודה נכונה ב GIT](he-il/newbs_best_practices.md)
22 * [מקורות ללמידה](newbs_learn_more_resources.md) 23 * [מקורות ללמידה](he-il/newbs_learn_more_resources.md)
23 24
24* [בסיס QMK](README.md) 25* [בסיס QMK](he-il/README.md)
25 * [מבוא לQMK](getting_started_introduction.md) 26 * [מבוא לQMK](he-il/getting_started_introduction.md)
26 * [QMK CLI](cli.md) 27 * [QMK CLI](he-il/cli.md)
27 * [QMK CLI Config](cli_configuration.md) 28 * [QMK CLI Config](he-il/cli_configuration.md)
28 * [תרומה ל QMK](contributing.md) 29 * [תרומה ל QMK](he-il/contributing.md)
29 * [איך להשתמש בGithub](getting_started_github.md) 30 * [איך להשתמש בGithub](he-il/getting_started_github.md)
30 * [קבלת עזרה](getting_started_getting_help.md) 31 * [קבלת עזרה](he-il/getting_started_getting_help.md)
31 32
32* [שינויים משמעותיים](breaking_changes.md) 33* [שינויים משמעותיים](he-il/breaking_changes.md)
33 * [2019 Aug 30](ChangeLog/20190830.md) 34 * [2019 Aug 30](he-il/ChangeLog/20190830.md)
34 35
35* [שאלות נפוצות](faq.md) 36* [שאלות נפוצות](he-il/faq.md)
36 * [שאלות נפוצות כלליות](faq_general.md) 37 * [שאלות נפוצות כלליות](he-il/faq_general.md)
37 * [בנייה/קומפילציה של QMK](faq_build.md) 38 * [בנייה/קומפילציה של QMK](he-il/faq_build.md)
38 * [דיבאגינג ופתרון תקלות של QMK](faq_debug.md) 39 * [דיבאגינג ופתרון תקלות של QMK](he-il/faq_debug.md)
39 * [מיפוי מקשים](faq_keymap.md) 40 * [מיפוי מקשים](he-il/faq_keymap.md)
40 * [התקנת דרייברים עם Zadig](driver_installation_zadig.md) 41 * [התקנת דרייברים עם Zadig](he-il/driver_installation_zadig.md)
41 42
42* מדריכים מפורטים 43* מדריכים מפורטים
43 * [התקנת כלי Build](getting_started_build_tools.md) 44 * [התקנת כלי Build](he-il/getting_started_build_tools.md)
44 * [מדריך Vagrant](getting_started_vagrant.md) 45 * [מדריך Vagrant](he-il/getting_started_vagrant.md)
45 * [הוראות בנייה/קומפילציה](getting_started_make_guide.md) 46 * [הוראות בנייה/קומפילציה](he-il/getting_started_make_guide.md)
46 * [צריבת קושחה](flashing.md) 47 * [צריבת קושחה](he-il/flashing.md)
47 * [התאמה אישית של הפונקציונאליות](custom_quantum_functions.md) 48 * [התאמה אישית של הפונקציונאליות](he-il/custom_quantum_functions.md)
48 * [מיפוי מקשים](keymap.md) 49 * [מיפוי מקשים](he-il/keymap.md)
49 50
50* [חומרה](hardware.md) 51* [חומרה](he-il/hardware.md)
51 * [מעבדי AVR](hardware_avr.md) 52 * [מעבדי AVR](he-il/hardware_avr.md)
52 * [דרייברים](hardware_drivers.md) 53 * [דרייברים](he-il/hardware_drivers.md)
53 54
54* התייחסויות 55* התייחסויות
55 * [מדריך למקלדות](hardware_keyboard_guidelines.md) 56 * [מדריך למקלדות](he-il/hardware_keyboard_guidelines.md)
56 * [אפשרויות הגדרות](config_options.md) 57 * [אפשרויות הגדרות](he-il/config_options.md)
57 * [קודי מקשים](keycodes.md) 58 * [קודי מקשים](he-il/keycodes.md)
58 * [קונבנציות קוד - C](coding_conventions_c.md) 59 * [קונבנציות קוד - C](he-il/coding_conventions_c.md)
59 * [קונבנציות קוד - Python](coding_conventions_python.md) 60 * [קונבנציות קוד - Python](he-il/coding_conventions_python.md)
60 * [איך לתעד נכון](documentation_best_practices.md) 61 * [איך לתעד נכון](he-il/documentation_best_practices.md)
61 * [טמפלטים לדוקומנטציה](documentation_templates.md) 62 * [טמפלטים לדוקומנטציה](he-il/documentation_templates.md)
62 * [מילון](reference_glossary.md) 63 * [מילון](he-il/reference_glossary.md)
63 * [בדיקות יחידה](unit_testing.md) 64 * [בדיקות יחידה](he-il/unit_testing.md)
64 * [פונקציות שימושיות](ref_functions.md) 65 * [פונקציות שימושיות](he-il/ref_functions.md)
65 * [תמיכה בConfigurator](reference_configurator_support.md) 66 * [תמיכה בConfigurator](he-il/reference_configurator_support.md)
66 * [פורמט info.json](reference_info_json.md) 67 * [פורמט info.json](he-il/reference_info_json.md)
67 * [פיתוח בPython CLI](cli_development.md) 68 * [פיתוח בPython CLI](he-il/cli_development.md)
68 69
69* [תכונות](features.md) 70* [תכונות](he-il/features.md)
70 * [Basic Keycodes](keycodes_basic.md) 71 * [Basic Keycodes](he-il/keycodes_basic.md)
71 * [US ANSI Shifted Keys](keycodes_us_ansi_shifted.md) 72 * [US ANSI Shifted Keys](he-il/keycodes_us_ansi_shifted.md)
72 * [Quantum Keycodes](quantum_keycodes.md) 73 * [Quantum Keycodes](he-il/quantum_keycodes.md)
73 * [Advanced Keycodes](feature_advanced_keycodes.md) 74 * [Advanced Keycodes](he-il/feature_advanced_keycodes.md)
74 * [Audio](feature_audio.md) 75 * [Audio](he-il/feature_audio.md)
75 * [Auto Shift](feature_auto_shift.md) 76 * [Auto Shift](he-il/feature_auto_shift.md)
76 * [Backlight](feature_backlight.md) 77 * [Backlight](he-il/feature_backlight.md)
77 * [Bluetooth](feature_bluetooth.md) 78 * [Bluetooth](he-il/feature_bluetooth.md)
78 * [Bootmagic](feature_bootmagic.md) 79 * [Bootmagic](he-il/feature_bootmagic.md)
79 * [Combos](feature_combo.md) 80 * [Combos](he-il/feature_combo.md)
80 * [Command](feature_command.md) 81 * [Command](he-il/feature_command.md)
81 * [Debounce API](feature_debounce_type.md) 82 * [Debounce API](he-il/feature_debounce_type.md)
82 * [DIP Switch](feature_dip_switch.md) 83 * [DIP Switch](he-il/feature_dip_switch.md)
83 * [Dynamic Macros](feature_dynamic_macros.md) 84 * [Dynamic Macros](he-il/feature_dynamic_macros.md)
84 * [Encoders](feature_encoders.md) 85 * [Encoders](he-il/feature_encoders.md)
85 * [Grave Escape](feature_grave_esc.md) 86 * [Grave Escape](he-il/feature_grave_esc.md)
86 * [Haptic Feedback](feature_haptic_feedback.md) 87 * [Haptic Feedback](he-il/feature_haptic_feedback.md)
87 * [HD44780 LCD Controller](feature_hd44780.md) 88 * [HD44780 LCD Controller](he-il/feature_hd44780.md)
88 * [Key Lock](feature_key_lock.md) 89 * [Key Lock](he-il/feature_key_lock.md)
89 * [Layouts](feature_layouts.md) 90 * [Layouts](he-il/feature_layouts.md)
90 * [Leader Key](feature_leader_key.md) 91 * [Leader Key](he-il/feature_leader_key.md)
91 * [LED Matrix](feature_led_matrix.md) 92 * [LED Matrix](he-il/feature_led_matrix.md)
92 * [Macros](feature_macros.md) 93 * [Macros](he-il/feature_macros.md)
93 * [Mouse Keys](feature_mouse_keys.md) 94 * [Mouse Keys](he-il/feature_mouse_keys.md)
94 * [OLED Driver](feature_oled_driver.md) 95 * [OLED Driver](he-il/feature_oled_driver.md)
95 * [One Shot Keys](feature_advanced_keycodes.md#one-shot-keys) 96 * [One Shot Keys](he-il/feature_advanced_keycodes.md#one-shot-keys)
96 * [Pointing Device](feature_pointing_device.md) 97 * [Pointing Device](he-il/feature_pointing_device.md)
97 * [PS/2 Mouse](feature_ps2_mouse.md) 98 * [PS/2 Mouse](he-il/feature_ps2_mouse.md)
98 * [RGB Lighting](feature_rgblight.md) 99 * [RGB Lighting](he-il/feature_rgblight.md)
99 * [RGB Matrix](feature_rgb_matrix.md) 100 * [RGB Matrix](he-il/feature_rgb_matrix.md)
100 * [Space Cadet](feature_space_cadet.md) 101 * [Space Cadet](he-il/feature_space_cadet.md)
101 * [Split Keyboard](feature_split_keyboard.md) 102 * [Split Keyboard](he-il/feature_split_keyboard.md)
102 * [Stenography](feature_stenography.md) 103 * [Stenography](he-il/feature_stenography.md)
103 * [Swap Hands](feature_swap_hands.md) 104 * [Swap Hands](he-il/feature_swap_hands.md)
104 * [Tap Dance](feature_tap_dance.md) 105 * [Tap Dance](he-il/feature_tap_dance.md)
105 * [Terminal](feature_terminal.md) 106 * [Terminal](he-il/feature_terminal.md)
106 * [Thermal Printer](feature_thermal_printer.md) 107 * [Thermal Printer](he-il/feature_thermal_printer.md)
107 * [Unicode](feature_unicode.md) 108 * [Unicode](he-il/feature_unicode.md)
108 * [Userspace](feature_userspace.md) 109 * [Userspace](he-il/feature_userspace.md)
109 * [Velocikey](feature_velocikey.md) 110 * [Velocikey](he-il/feature_velocikey.md)
110 111
111* למייקרים ומודרים 112* למייקרים ומודרים
112 * [מדריך לכתיבה ידנית](hand_wire.md) 113 * [מדריך לכתיבה ידנית](he-il/hand_wire.md)
113 * [מדריך לצריבת ISP](isp_flashing_guide.md) 114 * [מדריך לצריבת ISP](he-il/isp_flashing_guide.md)
114 * [מדריך לדיבאגינג ARM](arm_debugging.md) 115 * [מדריך לדיבאגינג ARM](he-il/arm_debugging.md)
115 * [מנהל התקן I2C](i2c_driver.md) 116 * [מנהל התקן I2C](he-il/i2c_driver.md)
116 * [בקרת GPIO](internals_gpio_control.md) 117 * [בקרת GPIO](he-il/internals_gpio_control.md)
117 * [המרת Proton C](proton_c_conversion.md) 118 * [המרת Proton C](he-il/proton_c_conversion.md)
118 119
119* להבנה עמוקה יותר 120* להבנה עמוקה יותר
120 * [איך עובדות מקלדות](how_keyboards_work.md) 121 * [איך עובדות מקלדות](he-il/how_keyboards_work.md)
121 * [להבין את QMK](understanding_qmk.md) 122 * [להבין את QMK](he-il/understanding_qmk.md)
122 123
123* נושאים נוספים 124* נושאים נוספים
124 * [שימוש ב - Eclipse עם QMK](other_eclipse.md) 125 * [שימוש ב - Eclipse עם QMK](he-il/other_eclipse.md)
125 * [שימוש ב - VSCode עם QMK](other_vscode.md) 126 * [שימוש ב - VSCode עם QMK](he-il/other_vscode.md)
126 * [תמיכה](support.md) 127 * [תמיכה](he-il/support.md)
127 * [כיצד להוסיף תרגום](translating.md) 128 * [כיצד להוסיף תרגום](he-il/translating.md)
128 129
129* QMK מבפנים (בתהליך) 130* QMK מבפנים (בתהליך)
130 * [Defines](internals_defines.md) 131 * [Defines](he-il/internals_defines.md)
131 * [Input Callback Reg](internals_input_callback_reg.md) 132 * [Input Callback Reg](he-il/internals_input_callback_reg.md)
132 * [Midi Device](internals_midi_device.md) 133 * [Midi Device](he-il/internals_midi_device.md)
133 * [Midi Device Setup Process](internals_midi_device_setup_process.md) 134 * [Midi Device Setup Process](he-il/internals_midi_device_setup_process.md)
134 * [Midi Util](internals_midi_util.md) 135 * [Midi Util](he-il/internals_midi_util.md)
135 * [Send Functions](internals_send_functions.md) 136 * [Send Functions](he-il/internals_send_functions.md)
136 * [Sysex Tools](internals_sysex_tools.md) 137 * [Sysex Tools](he-il/internals_sysex_tools.md)
137 138
138</div> 139</div>
diff --git a/docs/index.html b/docs/index.html
index 0cee19ecd..8d03c6ede 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -21,7 +21,7 @@
21 <div id="app"></div> 21 <div id="app"></div>
22 <script> 22 <script>
23 window.$docsify = { 23 window.$docsify = {
24 alias : { 24 alias: {
25 '/en/(.*)': '/$1', 25 '/en/(.*)': '/$1',
26 '/en-us/(.*)': '/$1', 26 '/en-us/(.*)': '/$1',
27 '/en-gb/(.*)': '/$1', 27 '/en-gb/(.*)': '/$1',
@@ -29,23 +29,47 @@
29 }, 29 },
30 basePath: '/', 30 basePath: '/',
31 name: 'QMK Firmware', 31 name: 'QMK Firmware',
32 nameLink: '/', 32 nameLink: {
33 '/de/': '/#/de/',
34 '/es/': '/#/es/',
35 '/fr-fr/': '/#/fr-fr/',
36 '/he-il/': '/#/he-il/',
37 '/ja/': '/#/ja/',
38 '/pt-br/': '/#/pt-br/',
39 '/ru-ru/': '/#/ru-ru/',
40 '/zh-cn/': '/#/zh-cn/',
41 '/': '/#/'
42 },
33 repo: 'qmk/qmk_firmware', 43 repo: 'qmk/qmk_firmware',
34 loadSidebar: '_summary.md', 44 loadSidebar: '_summary.md',
35 loadNavbar: '_langs.md', 45 loadNavbar: '_langs.md',
36 mergeNavbar: true, 46 mergeNavbar: true,
37 auto2top: true, 47 auto2top: true,
48 fallbackLanguages: [
49 'de',
50 'es',
51 'fr-fr',
52 'he-il',
53 'ja',
54 'pt-br',
55 'ru-ru',
56 'zh-cn'
57 ],
38 formatUpdated: '{YYYY}/{MM}/{DD} {HH}:{mm}', 58 formatUpdated: '{YYYY}/{MM}/{DD} {HH}:{mm}',
39 search: { 59 search: {
40 paths: 'auto', 60 paths: 'auto',
41 placeholder: { 61 placeholder: {
42 '/es/': 'Buscar', 62 '/es/': 'Buscar',
43 '/zh-cn/': '搜索', 63 '/zh-cn/': '搜索',
64 '/ja/': '検索',
65 '/pt-br/': 'Busca',
44 '/': 'Search' 66 '/': 'Search'
45 }, 67 },
46 noData: { 68 noData: {
47 '/es/': '¡Ningún resultado!', 69 '/es/': '¡Ningún resultado!',
48 '/zh-cn/': '没有结果!', 70 '/zh-cn/': '没有结果!',
71 '/ja/': '見つかりません!',
72 '/pt-br/': 'Nenhum resultado!',
49 '/': 'No results!' 73 '/': 'No results!'
50 }, 74 },
51 depth: 6 75 depth: 6
diff --git a/docs/ja/README.md b/docs/ja/README.md
new file mode 100644
index 000000000..9b715ec0f
--- /dev/null
+++ b/docs/ja/README.md
@@ -0,0 +1,37 @@
1# Quantum Mechanical Keyboard Firmware
2
3<!---
4 original document: eae21eed7:docs/README.md
5 git diff eae21eed7 HEAD docs/README.md | cat
6-->
7
8[![現在のバージョン](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)
9[![ビルド状態](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware)
10[![Discord](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh)
11[![ドキュメントの状態](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
12[![GitHub 貢献者](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly)
13[![GitHub フォーク](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/)
14
15## QMK ファームウェアとは何か?
16
17QMK (*Quantum Mechanical Keyboard*)は QMK ファームウェア、QMK ツールボックス、qmk.fm およびそれらのドキュメントを保守するオープンソースコミュニティです。QMK ファームウェアは[tmk\_keyboard](http://github.com/tmk/tmk_keyboard) を元にしたキーボードファームウェアで、Atmel AVR コントローラ、より具体的には [OLKB 製品](http://olkb.com)、[ErgoDox EZ](http://www.ergodox-ez.com) キーボードおよび [Clueboard 製品](http://clueboard.co/) のための幾つかの便利な機能を持ちます。また、ChibiOS を使って ARM チップに移植されています。これを使ってあなたの作った手配線のキーボードあるいはカスタムキーボード PCB で作ったキーボードを動かすことができます。
18
19## 入手方法
20
21QMK のキーマップ、キーボード、機能に貢献をする予定がある場合、最も簡単なのは、[Github を介してリポジトリをフォークし](https://github.com/qmk/qmk_firmware#fork-destination-box)、リポジトリをあなたの開発環境にクローンして変更を加え、それらをプッシュし、[プルリクエスト](https://github.com/qmk/qmk_firmware/pulls)を開くことです。
22
23それ以外の場合は、`git clone https://github.com/qmk/qmk_firmware` を介して直接クローンすることができます。zip または tar ファイルをダウンロードしないでください。コンパイルするためのサブモジュールをダウンロードするために git リポジトリが必要です。
24
25## コンパイル方法
26
27コンパイルをする前に、AVR または ARM 開発のための[環境をインストール](ja/getting_started_build_tools.md)する必要があります。それが完了したら、`make` コマンドを使用して、以下の表記でキーボードとキーマップをビルドします。
28
29 make planck/rev4:default
30
31これは、`planck` の `rev4` リビジョンを `default` キーマップでビルドします。全てのキーボードにリビジョン(サブプロジェクトまたはフォルダとも呼ばれます)があるわけではありません。その場合は省略されます:
32
33 make preonic:default
34
35## カスタマイズ方法
36
37QMK には、探求すべき多くの[機能](ja/features.md)と、深堀りするための[リファレンス ドキュメント](http://docs.qmk.fm)がたくさんあります。ほとんどの機能は[キーマップ](ja/keymap.md)を変更し、[キーコード](ja/keycodes.md)を変更することで活用されます。
diff --git a/docs/ja/_summary.md b/docs/ja/_summary.md
new file mode 100644
index 000000000..22db3a7fe
--- /dev/null
+++ b/docs/ja/_summary.md
@@ -0,0 +1,121 @@
1* [完全な初心者のガイド](ja/newbs.md)
2 * [はじめに](ja/newbs_getting_started.md)
3 * [初めてのファームウェアの構築](ja/newbs_building_firmware.md)
4 * [ファームウェアのフラッシュ](ja/newbs_flashing.md)
5 * [テストとデバッグ](ja/newbs_testing_debugging.md)
6 * [Gitのベストプラクティス](ja/newbs_best_practices.md)
7 * [学習リソース](ja/newbs_learn_more_resources.md)
8
9* [QMKの基本](ja/README.md)
10 * [QMKの導入](ja/getting_started_introduction.md)
11 * [QMK CLI](ja/cli.md)
12 * [QMK CLI 設定](ja/cli_configuration.md)
13 * [QMKへの貢献](ja/contributing.md)
14 * [Githubの使い方](ja/getting_started_github.md)
15 * [ヘルプ](ja/getting_started_getting_help.md)
16
17* [破壊的な変更](ja/breaking_changes.md)
18 * [2019年8月30日](ja/ChangeLog/20190830.md)
19
20* [FAQ](ja/faq.md)
21 * [一般的なFAQ](ja/faq_general.md)
22 * [QMKのビルド/コンパイル](ja/faq_build.md)
23 * [QMKのデバッグ/トラブルシューティング](ja/faq_debug.md)
24 * [キーマップ](ja/faq_keymap.md)
25 * [Zadigを使ったドライバのインストール](ja/driver_installation_zadig.md)
26
27* 詳細なガイド
28 * [ビルドツールのインストール](ja/getting_started_build_tools.md)
29 * [Vagrantのガイド](ja/getting_started_vagrant.md)
30 * [ビルド/コンパイルの説明](ja/getting_started_make_guide.md)
31 * [ファームウェアのフラッシュ](ja/flashing.md)
32 * [機能のカスタマイズ](ja/custom_quantum_functions.md)
33 * [キーマップの概要](ja/keymap.md)
34
35* [ハードウェア](ja/hardware.md)
36 * [AVR プロセッサ](ja/hardware_avr.md)
37 * [ドライバ](ja/hardware_drivers.md)
38
39* リファレンス
40 * [キーボード ガイドライン](ja/hardware_keyboard_guidelines.md)
41 * [設定オプション](ja/config_options.md)
42 * [キーコード](ja/keycodes.md)
43 * [コーディング規約 - C](ja/coding_conventions_c.md)
44 * [コーディング規約 - Python](ja/coding_conventions_python.md)
45 * [ドキュメント ベストプラクティス](ja/documentation_best_practices.md)
46 * [ドキュメント テンプレート](ja/documentation_templates.md)
47 * [用語](ja/reference_glossary.md)
48 * [ユニットテスト](ja/unit_testing.md)
49 * [便利な関数](ja/ref_functions.md)
50 * [Configurator サポート](ja/reference_configurator_support.md)
51 * [info.json 形式](ja/reference_info_json.md)
52 * [Python CLI 開発](ja/cli_development.md)
53
54* [機能](ja/features.md)
55 * [基本的なキーコード](ja/keycodes_basic.md)
56 * [US ANSI シフトキー](ja/keycodes_us_ansi_shifted.md)
57 * [Quantum キーコード](ja/quantum_keycodes.md)
58 * [Advanced キーコード](ja/feature_advanced_keycodes.md)
59 * [オーディオ](ja/feature_audio.md)
60 * [自動シフト](ja/feature_auto_shift.md)
61 * [バックライト](ja/feature_backlight.md)
62 * [ブルートゥース](ja/feature_bluetooth.md)
63 * [ブートマジック](ja/feature_bootmagic.md)
64 * [コンボ](ja/feature_combo.md)
65 * [コマンド](ja/feature_command.md)
66 * [Debounce API](ja/feature_debounce_type.md)
67 * [DIP スイッチ](ja/feature_dip_switch.md)
68 * [動的マクロ](ja/feature_dynamic_macros.md)
69 * [エンコーダ](ja/feature_encoders.md)
70 * [グレイブ エスケープ](ja/feature_grave_esc.md)
71 * [触覚フィードバック](ja/feature_haptic_feedback.md)
72 * [HD44780 LCD コントローラ](ja/feature_hd44780.md)
73 * [キーロック](ja/feature_key_lock.md)
74 * [レイアウト](ja/feature_layouts.md)
75 * [リーダー キー](ja/feature_leader_key.md)
76 * [LED マトリクス](ja/feature_led_matrix.md)
77 * [マクロ](ja/feature_macros.md)
78 * [マウスキー](ja/feature_mouse_keys.md)
79 * [OLED ドライバ](ja/feature_oled_driver.md)
80 * [One Shot Keys](ja/feature_advanced_keycodes.md#one-shot-keys)
81 * [ポインティング デバイス](ja/feature_pointing_device.md)
82 * [PS/2 マウス](ja/feature_ps2_mouse.md)
83 * [RGB ライト](ja/feature_rgblight.md)
84 * [RGB マトリクス](ja/feature_rgb_matrix.md)
85 * [Space Cadet](ja/feature_space_cadet.md)
86 * [分割キーボード](ja/feature_split_keyboard.md)
87 * [Stenography](ja/feature_stenography.md)
88 * [Swap Hands](ja/feature_swap_hands.md)
89 * [タップ ダンス](ja/feature_tap_dance.md)
90 * [Terminal](ja/feature_terminal.md)
91 * [感熱式プリンタ](ja/feature_thermal_printer.md)
92 * [ユニコード](ja/feature_unicode.md)
93 * [Userspace](ja/feature_userspace.md)
94 * [Velocikey](ja/feature_velocikey.md)
95
96* メーカーおよびモッダーのために
97 * [Hand Wiring Guide](ja/hand_wire.md)
98 * [ISP Flashing Guide](ja/isp_flashing_guide.md)
99 * [ARM デバッグ ガイド](ja/arm_debugging.md)
100 * [I2C ドライバ](ja/i2c_driver.md)
101 * [GPIO コントロール](ja/internals_gpio_control.md)
102 * [Proton C 規約](ja/proton_c_conversion.md)
103
104* より深く知るために
105 * [キーボードがどのように動作するか](ja/how_keyboards_work.md)
106 * [QMKの理解](ja/understanding_qmk.md)
107
108* 他の話題
109 * [EclipseでQMKを使用](ja/other_eclipse.md)
110 * [VSCodeでQMKを使用](ja/other_vscode.md)
111 * [サポート](ja/support.md)
112 * [翻訳を追加する方法](ja/translating.md)
113
114* QMK の内部詳細(作成中)
115 * [定義](ja/internals_defines.md)
116 * [Input Callback Reg](ja/internals_input_callback_reg.md)
117 * [Midi ドライバ](ja/internals_midi_device.md)
118 * [Midi デバイスのセットアップ手順](ja/internals_midi_device_setup_process.md)
119 * [Midi ユーティリティ](ja/internals_midi_util.md)
120 * [Send Functions](ja/internals_send_functions.md)
121 * [Sysex Tools](ja/internals_sysex_tools.md)
diff --git a/docs/ja/arm_debugging.md b/docs/ja/arm_debugging.md
new file mode 100644
index 000000000..5b7b89a67
--- /dev/null
+++ b/docs/ja/arm_debugging.md
@@ -0,0 +1,92 @@
1# Eclipse を使った ARM デバッグ
2
3<!---
4 original document: eae21eed7:docs/arm_debugging.md
5 git diff eae21eed7 HEAD docs/arm_debugging.md | cat
6-->
7
8このページでは、SWD アダプタとオープンソース/フリーツールを使って ARM MCU をデバッグするためのセットアップ方法について説明します。このガイドでは、GNU MCU Eclipse IDE for C/C++ Developers および OpenOCD を必要な依存関係と一緒にインストールします。
9
10このガイドは上級者向けであり、あなたのマシンで、MAKE フローを使って、ARM 互換キーボードをコンパイルできることを前提にしています。
11
12## ソフトウェアのインストール
13
14ここでの主な目的は MCU Eclipse IDE を正しくマシンにインストールすることです。必要な手順は[この](https://gnu-mcu-eclipse.github.io/install/)インストールガイドから派生しています。
15
16### xPack マネージャ
17
18このツールはソフトウェアパッケージマネージャであり、必要な依存関係を取得するために使われます。
19
20XPM は Node.js を使って実行されるため、[ここ](https://nodejs.org/en/)から取得してください。インストール後に、ターミナルを開き `npm -v` と入力します。バージョン番号が返ってくるとインストールは成功です。
21
22XPM のインストール手順は[ここ](https://www.npmjs.com/package/xpm)で見つけることができ、OS 固有のものです。ターミナルに `xpm --version` と入力すると、ソフトウェアのバージョンが返ってくるはずです。
23
24### ARM ツールチェーン
25
26XPM を使うと、ARM ツールチェーンをとても簡単にインストールできます。`xpm install --global @gnu-mcu-eclipse/arm-none-eabi-gcc` とコマンドを入力します。
27
28### Windows ビルドツール
29
30Windows を使っている場合は、これをインストールする必要があります!
31
32`xpm install --global @gnu-mcu-eclipse/windows-build-tools`
33
34### プログラマ/デバッガドライバ
35
36プログラマのドライバをインストールします。このチュートリアルはほとんどどこでも入手できる ST-Link v2 を使って作成されました。
37ST-Link を持っている場合は、ドライバは[ここ](https://www.st.com/en/development-tools/stsw-link009.html)で見つけることができます。そうでない場合はツールの製造元にお問い合わせください。
38
39### OpenOCD
40
41この依存関係により、SWD は GDB からアクセスでき、デバッグに不可欠です。`xpm install --global @gnu-mcu-eclipse/openocd` を実行します。
42
43### Java
44
45Java は Eclipse で必要とされるため、[ここ](https://www.oracle.com/technetwork/java/javase/downloads/index.html)からダウンロードしてください。
46
47### GNU MCU Eclipse IDE
48
49最後に IDE をインストールする番です。[ここ](https://github.com/gnu-mcu-eclipse/org.eclipse.epp.packages/releases/)のリリースページから最新バージョンを取得します。
50
51## Eclipse の設定
52
53ダウンロードした Eclipse IDE を開きます。QMK ディレクトリをインポートするために、File -> Import -> C/C++ -> Existing code as Makefile Project を選択します。Next を選択し、Browse を使用して QMK フォルダを選択します。tool-chain リストから ARM Cross GCC を選択し、Finish を選択します。
54
55これで、左側に QMK フォルダが表示されます。右クリックして、Properties を選択します。左側で MCU を展開し、ARM Toolchain Paths を選択します。xPack を押して OK を押します。OpenOCD Path で同じことを繰り返し、Windows の場合は、Build Tool Path でも同じことを繰り返します。Apply and Close を選択します。
56
57ここで、必要な MCU パッケージをインストールします。Window -> Open Perspective -> Others -> Packs を選択して、Packs perspective に移動します。Packs タブの横にある黄色のリフレッシュ記号を選択します。これは様々な場所から MCU の定義を要求するため、時間が掛かります。一部のリンクが失敗した場合は、おそらく Ignore を選択できます。
58
59これが終了すると、ビルドやデバッグする MCU を見つけることができるはずです。この例では、STM32F3 シリーズの MCU を使います。左側で、STMicroelectronics -> STM32F3 Series を選択します。中央のウィンドウに、pack が表示されます。右クリックし、Install を選択します。それが終了したら、Window -> Open Perspective -> Others -> C/C++ を選択してデフォルトのパースペクティブに戻ることができます。
60
61Eclipse に QMK をビルドしようとするデバイスを教える必要があります。QMK フォルダを右クリック -> Properties -> C/C++ Build -> Settings を選択します。Devices タブを選択し、devices の下から MCU の適切な種類を選択します。私の例では、STM32F303CC です。
62
63この間に、build コマンドもセットアップしましょう。C/C++ Build を選択し、Behavior タブを選択します。build コマンドのところで、`all` を必要な make コマンドに置き換えます。例えば、rev6 Planck の default キーマップの場合、これは `planck/rev6:default` になります。Apply and Close を選択します。
64
65## ビルド
66
67全て正しくセットアップできていれば、ハンマーボタンを押すとファームウェアがビルドされ、.binファイルが出力されるはずです。
68
69## デバッグ
70
71### デバッガの接続
72
73ARM MCU は、クロック信号(SWCLK) とデータ信号(SWDIO) で構成される Single Wire Debug (SWD) プロトコルを使います。MCUを 完全に操作するには、この2本のワイヤとグラウンドを接続するだけで十分です。ここでは、キーボードは USB を介して電力が供給されると想定しています。手動でリセットボタンを使えるため、RESET 信号は必要ありません。より高度なセットアップのために printf と scanf をホストに非同期にパイプする SWO 信号を使用できますが、私たちのセットアップでは無視します。
74
75注意: SWCLK と SWDIO ピンがキーボードのマトリックスで使われていないことを確認してください。もし使われている場合は、一時的に他のピンに切り替えることができます。
76
77### デバッガの設定
78
79QMK フォルダを右クリックし、Debug As -> Debug Configuration を選択します。ここで、GDB OpenOCD Debugging をダブルクリックします。Debugger タブを選択し、MCU に必要な設定を入力します。これを見つけるにはいじったりググったりする必要があるかもしれません。STM32F3 用のデフォルトスクリプトは stm32f3discovery.cfg と呼ばれます。OpenOCD に伝えるには、Config options で `-f board/stm32f3discovery.cfg` と入力します。
80
81注意: 私の場合、この設定スクリプトはリセット操作を無効にするために編集が必要です。スクリプトの場所は、通常はパス `openocd/version/.content/scripts/board` の下の実際の実行可能フィールドの中で見つかります。ここで、私は `reset_config srst_only` を `reset_config none` に編集しました。
82
83Apply and Close を選択します。
84
85### デバッガの実行
86
87キーボードをリセットしてください。
88
89虫アイコンをクリックし、もし全てうまく行けば debug パースペクティブに移動します。ここでは、main 関数の最初でプログラムカウンタが停止するので、Play ボタンを押します。全てのデバッガのほとんどの機能は ARM MCU で動作しますが、正確な詳細については google があなたのお友達です!
90
91
92ハッピーデバッギング!
diff --git a/docs/ja/config_options.md b/docs/ja/config_options.md
new file mode 100644
index 000000000..d7457798c
--- /dev/null
+++ b/docs/ja/config_options.md
@@ -0,0 +1,376 @@
1# QMK の設定
2
3<!---
4 original document: eae21eed7:docs/config_options.md
5 git diff eae21eed7 HEAD docs/config_options.md | cat
6-->
7
8QMK はほぼ無制限に設定可能です。可能なところはいかなるところでも、やりすぎな程、ユーザーがコードサイズを犠牲にしてでも彼らのキーボードをカスタマイズをすることを許しています。ただし、このレベルの柔軟性により設定が困難になります。
9
10QMK には主に2種類の設定ファイルがあります- `config.h` と `rules.mk`。これらのファイルは QMK の様々なレベルに存在し、同じ種類の全てのファイルは最終的な設定を構築するために組み合わされます。最低の優先度から最高の優先度までのレベルは以下の通りです:
11
12* QMK デフォルト
13* キーボード
14* フォルダ (最大5レべルの深さ)
15* キーマップ
16
17## QMK デフォルト
18
19QMK での全ての利用可能な設定にはデフォルトがあります。その設定がキーボード、フォルダ、あるいはキーマップレべルで設定されない場合、これが使用される設定です。
20
21## キーボード
22
23このレベルにはキーボード全体に適用される設定オプションが含まれています。一部の設定は、リビジョンあるいはほとんどのキーマップで変更されません。他の設定はこのキーボードのデフォルトに過ぎず、フォルダあるいはキーマップによって上書きされる可能性があります。
24
25## フォルダ
26
27一部のキーボードには、異なるハードウェア構成のためのフォルダとサブフォルダがあります。ほとんどのキーボードは深さ1のフォルダのみですが、QMK は最大深さ5のフォルダの構造をサポートします。各フォルダは、最終的な設定に組み込まれる独自の `config.h` と `rules.mk` ファイルを持つことができます。
28
29## キーマップ
30
31このレベルには特定のキーマップのための全てのオプションが含まれています。以前の定義を上書きしたい場合は、`#undef <variable>` を使って定義を解除し、エラー無しで再定義することができます。
32
33# `config.h` ファイル
34
35これは最初に include されるものの 1 つである C ヘッダファイルで、プロジェクト全体(もし含まれる場合)にわたって持続します。多くの変数をここで設定し、他の場所からアクセスすることができます。`config.h` ファイルでは、以下のもの以外の、他の `config.h` ファイルやその他のファイルの include をしないでください:
36
37 #include "config_common.h"
38
39
40## ハードウェアオプション
41* `#define VENDOR_ID 0x1234`
42 * VID を定義します。ほとんどの DIY プロジェクトにおいて、任意のものを定義できます
43* `#define PRODUCT_ID 0x5678`
44 * PID を定義します。ほとんどの DIY プロジェクトでは、任意のものを定義できます
45* `#define DEVICE_VER 0`
46 * デバイスのバージョンを定義します (多くの場合リビジョンに使われます)
47* `#define MANUFACTURER Me`
48 * 一般的に、誰もしくはどのブランドがボードを作成したか
49* `#define PRODUCT Board`
50 * キーボードの名前
51* `#define DESCRIPTION a keyboard`
52 * キーボードの簡単な説明
53* `#define MATRIX_ROWS 5`
54 * キーボードのマトリックスの行の数
55* `#define MATRIX_COLS 15`
56 * キーボードのマトリックスの列の数
57* `#define MATRIX_ROW_PINS { D0, D5, B5, B6 }`
58 * 行のピン、上から下へ
59* `#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }`
60 * 列のピン、左から右へ
61* `#define UNUSED_PINS { D1, D2, D3, B1, B2, B3 }`
62 * 参考として、キーボードで使われていないピン
63* `#define MATRIX_HAS_GHOST`
64 * マトリックスにゴーストがあるか(ありそうにないか)定義します
65* `#define DIODE_DIRECTION COL2ROW`
66 * COL2ROW あるいは ROW2COL - マトリックスがどのように設定されているか。COL2ROW は、スイッチとロウ(行)ラインの間にダイオードが黒い印をロウ(行)ラインに向けて置いてあることを意味します。
67* `#define DIRECT_PINS { { F1, F0, B0, C7 }, { F4, F5, F6, F7 } }`
68 * ロウ(行)ラインとカラム(列)ラインにマップされているピンを左から右に。各スイッチが個別のピンとグラウンドに接続されているマトリックスを定義します。
69* `#define AUDIO_VOICES`
70 * (循環させるために)代替音声を有効にします
71* `#define C4_AUDIO`
72 * ピン C4 のオーディオを有効にします
73* `#define C5_AUDIO`
74 * ピン C5 のオーディオを有効にします
75* `#define C6_AUDIO`
76 * ピン C6 のオーディオを有効にします
77* `#define B5_AUDIO`
78 * ピン B5 のオーディオを有効にします (C[4-6]\_AUDIO の1つとともに B[5-7]\_AUDIO の1つが有効にされている場合、疑似ステレオが有効にされます)
79* `#define B6_AUDIO`
80 * ピン B6 のオーディオを有効にします (C[4-6]\_AUDIO の1つとともに B[5-7]\_AUDIO の1つが有効にされている場合、疑似ステレオが有効にされます)
81* `#define B7_AUDIO`
82 * ピン B7 のオーディオを有効にします (C[4-6]\_AUDIO の1つとともに B[5-7]\_AUDIO の1つが有効にされている場合、疑似ステレオが有効にされます)
83* `#define BACKLIGHT_PIN B7`
84 * バックライトのピン
85* `#define BACKLIGHT_LEVELS 3`
86 * バックライトのレベル数 (off を除いて最大15)
87* `#define BACKLIGHT_BREATHING`
88 * バックライトのブレスを有効にします
89* `#define BREATHING_PERIOD 6`
90 * 1つのバックライトの "ブレス" の長さの秒数
91* `#define DEBOUNCE 5`
92 * ピンの値を読み取る時の遅延 (5がデフォルト)
93* `#define LOCKING_SUPPORT_ENABLE`
94 * メカニカルロックのサポート。キーマップで KC_LCAP、 KC_LNUM そして KC_LSCR を使えるようにします
95* `#define LOCKING_RESYNC_ENABLE`
96 * キーボードの LED の状態をスイッチの状態と一致させ続けようとします
97* `#define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)`
98 * マジックコマンドの使用を可能にするキーの組み合わせ (デバッグに便利です)
99* `#define USB_MAX_POWER_CONSUMPTION 500`
100 * デバイスの USB 経由の最大電力(mA) を設定します (デフォルト: 500)
101* `#define USB_POLLING_INTERVAL_MS 10`
102 * キーボード、マウス および 共有 (NKRO/メディアキー) インタフェースのための USB ポーリングレートをミリ秒で設定します
103* `#define F_SCL 100000L`
104 * I2C を使用するキーボードのための I2C クロックレート速度を設定します。デフォルトは `400000L` ですが、`split_common` を使っているキーボードは別でデフォルトは `100000L` です。
105
106## 無効にできる機能
107
108これらのオプションを定義すると、関連する機能が無効になり、コードサイズを節約できます。
109
110* `#define NO_DEBUG`
111 * デバッグを無効にします
112* `#define NO_PRINT`
113 * hid_listen を使った出力やデバッグを無効にします
114* `#define NO_ACTION_LAYER`
115 * レイヤーを無効にします
116* `#define NO_ACTION_TAPPING`
117 * タップダンスと他のタップ機能を無効にします
118* `#define NO_ACTION_ONESHOT`
119 * ワンショットモディファイアを無効にします
120* `#define NO_ACTION_MACRO`
121 * 古い形式のマクロ処理を無効にします: MACRO() & action_get_macro
122* `#define NO_ACTION_FUNCTION`
123 * fn_actions 配列(非推奨)からの action_function() の呼び出しを無効にします
124
125## 有効にできる機能
126
127これらのオプションを定義すると、関連する機能が有効になり、コードサイズが大きくなるかもしれません。
128
129* `#define FORCE_NKRO`
130 * NKRO をデフォルトでオンにする必要があります。これにより EEPROM の設定に関係なく、キーボードの起動時に NKRO が強制的にオンになります。NKRO は引き続きオフにできますが、キーボードを再起動すると再びオンになります。
131* `#define STRICT_LAYER_RELEASE`
132 * キーリリースがどのレイヤーから来たのかを覚えるのではなく、現在のレイヤースタックを使って強制的に評価されるようにします (高度なケースに使われます)
133
134## 設定可能な挙動
135
136* `#define TAPPING_TERM 200`
137 * タップがホールドになるまでの時間。500以上に設定された場合、タップ期間中にタップされたキーもホールドになります。(訳注: PERMISSIVE_HOLDも参照)
138* `#define TAPPING_TERM_PER_KEY`
139 * キーごとの `TAPPING_TERM` 設定の処理を有効にします
140* `#define RETRO_TAPPING`
141 * 押下とリリースの間に他のキーによる中断がなければ、TAPPING_TERM の後であってもとにかくタップします
142 * 詳細は [Retro Tapping](ja/feature_advanced_keycodes.md#retro-tapping) を見てください
143* `#define TAPPING_TOGGLE 2`
144 * トグルを引き起こす前のタップ数
145* `#define PERMISSIVE_HOLD`
146 * `TAPPING_TERM` にヒットしていなくても、リリースする前に別のキーが押されると、タップとフォールドキーがホールドを引き起こします
147 * 詳細は [Permissive Hold](ja/feature_advanced_keycodes.md#permissive-hold) を見てください
148* `#define IGNORE_MOD_TAP_INTERRUPT`
149 * 両方のキーに `TAPPING_TERM` を適用することで、ホールド時に他のキーに変換するキーを使ってローリングコンボ (zx) をすることができるようにします
150 * 詳細は [Mod tap interrupt](ja/feature_advanced_keycodes.md#ignore-mod-tap-interrupt) を見てください
151* `#define TAPPING_FORCE_HOLD`
152 * タップされた直後に、デュアルロールキーを修飾子として使用できるようにします
153 * [Hold after tap](ja/feature_advanced_keycodes.md#tapping-force-hold)を見てください
154 * タップトグル機能を無効にします (`TT` あるいは One Shot Tap Toggle)
155* `#define LEADER_TIMEOUT 300`
156 * リーダーキーがタイムアウトするまでの時間
157 * タイムアウトする前にシーケンスを終了できない場合は、タイムアウトの設定を増やす必要があるかもしれません。あるいは、`LEADER_PER_KEY_TIMING` オプションを有効にすると良いでしょう。これは各キーがタップされた後でタイムアウトを再設定します。
158* `#define LEADER_PER_KEY_TIMING`
159 * 全体では無く各キーを押すたびに実行されるリーダーキーコードのタイマーを設定します
160* `#define LEADER_KEY_STRICT_KEY_PROCESSING`
161 * Mod-Tap および Layer-Tap キーコードのためのキーコードフィルタリングを無効にします。例えば、これを有効にすると、`KC_A` を使いたい場合は `MT(MOD_CTL, KC_A)` を指定する必要があります。
162* `#define ONESHOT_TIMEOUT 300`
163 * ワンショットがタイムアウトするまでの時間
164* `#define ONESHOT_TAP_TOGGLE 2`
165 * ワンショットトグルが引き起こされるまでのタップ数
166* `#define QMK_KEYS_PER_SCAN 4`
167 * 走査ごとに1つ以上のキーを送信できるようにします。デフォルトでは、走査ごとに `process_record()` 経由で1つのキーイベントのみが送信されます。これはほとんどのタイピングにほとんど影響しませんが、多くのコードを入力しているか、走査レートが最初から遅い場合、キーイベントの処理に多少の遅延が生じる可能性があります。それぞれのプレスとリリースは別のイベントです。スキャン時間が 1ms 程度のキーボードの場合、とても高速なタイピストでさえ、実際にキーボードから数 ms 以上の遅延を発生させるのに必要な 500 キーストロークを1秒間に生成することはないでしょう。しかし、3~4ms の走査時間でコードを入力している場合はどうでしょうか?おそらくこれが必要です。
168* `#define COMBO_COUNT 2`
169 * [コンボ](ja/feature_combo.md)機能で使っているコンボの数にこれを設定します。
170* `#define COMBO_TERM 200`
171 * コンボキーが検出されるまでの時間。定義されていない場合は、デフォルトは `TAPPING_TERM` です。
172* `#define TAP_CODE_DELAY 100`
173 * 適切な登録に問題がある場合(VUSB ボードで珍しくない)、`register_code` と `unregister_code` の間の遅延を設定します。値はミリ秒です。
174* `#define TAP_HOLD_CAPS_DELAY 80`
175 * MacOS で特別な処理が行われるため、`KC_CAPSLOCK` を使う時にタップホールドキー (`LT`, `MT`) に遅延を設定します。この値はミリ秒で、定義されていない場合はデフォルトは80msです。macOS については、これを200以上に設定すると良いでしょう。
176
177## RGB ライト設定 :id=rgb-light-configuration
178
179* `#define RGB_DI_PIN D7`
180 * WS2812 の DI 端子につなぐピン
181* `#define RGBLIGHT_ANIMATIONS`
182 * RGB アニメーションを実行します
183* `#define RGBLED_NUM 12`
184 * LED の数
185* `#define RGBLIGHT_SPLIT`
186 * 分割キーボードの左半分の RGB LED の出力を右半分の RGB LED の入力につなげるかわりに、それぞれの側で個別にコントローラの出力ピンが直接 RGB LED の入力に繋がっているときは、この定義が必要です。
187* `#define RGBLED_SPLIT { 6, 6 }`
188 * 分割キーボードの各半分の `RGB_DI_PIN` に直接配線されている接続されているLEDの数
189 * 最初の値は左半分の LED の数を示し、2番目の値は右半分です。
190 * RGBLED_SPLIT が定義されている場合、RGBLIGHT_SPLIT は暗黙的に定義されます。
191* `#define RGBLIGHT_HUE_STEP 12`
192 * 色相の増減時のステップ単位
193* `#define RGBLIGHT_SAT_STEP 25`
194 * 彩度の増減時のステップ単位
195* `#define RGBLIGHT_VAL_STEP 12`
196 * 値(明度)の増減時のステップ単位
197* `#define RGBW`
198 * RGBW LED のサポートを有効にします
199
200## マウスキーオプション
201
202* `#define MOUSEKEY_INTERVAL 20`
203* `#define MOUSEKEY_DELAY 0`
204* `#define MOUSEKEY_TIME_TO_MAX 60`
205* `#define MOUSEKEY_MAX_SPEED 7`
206* `#define MOUSEKEY_WHEEL_DELAY 0`
207
208## 分割キーボードオプション
209
210分割キーボード固有のオプション。あなたの rules.mk に 'SPLIT_KEYBOARD = yes' が有ることを確認してください。
211
212* `SPLIT_TRANSPORT = custom`
213 * 標準の分割通信ルーチンをカスタムのものに置き換えることができます。現在、ARM ベースの分割キーボードはこれを使わなければなりません。
214
215### 左右の設定
216
217一つ覚えておかなければならないことは、USB ポートが接続されている側が常にマスター側であるということです。USB に接続されていない側はスレーブです。
218
219分割キーボードの左右を設定するには、幾つかの異なる方法があります (優先度の順にリストされています):
220
2211. `SPLIT_HAND_PIN` を設定します: 左右を決定するためにピンを読み込みます。ピンが high の場合、それが左側です。low であれば、その半分側が右側であると決定されます。
2222. `EE_HANDS` を設定し、各半分に `eeprom-lefthand.eep`/`eeprom-righthand.eep` を書き込みます
223 * DFU ブートローダを搭載したボードでは、これらの EEPROM ファイルを書き込むために `:dfu-split-left`/`:dfu-split-right` を使うことができます
224 * Caterina ブートローダを搭載したボード (標準的な Pro Micros など)では、`:avrdude-split-left`/`:avrdude-split-right` を使ってください
225 * ARM DFU ブートローダを搭載したボード (Proton C など)では、`:dfu-util-split-left`/`:dfu-util-split-right` を使ってください
2263. `MASTER_RIGHT` を設定します: USBポートに差し込まれた側はマスター側で右側であると決定されます(デフォルトの逆)
2274. デフォルト: USB ポートに差し込まれている側がマスター側であり、左側であると見なされます。スレーブ側は右側です
228
229#### 左右を定義します
230
231* `#define SPLIT_HAND_PIN B7`
232 * high/low ピンを使って左右を決定します。low = 右手、high = 左手。`B7` を使っているピンに置き換えます。これはオプションで、`SPLIT_HAND_PIN` が未定義のままである場合、EE_HANDS メソッドまたは標準の Let's Splitが使っている MASTER_LEFT / MASTER_RIGHT 定義をまだ使うことができます。
233
234* `#define EE_HANDS` (`SPLIT_HAND_PIN` が定義されていない場合のみ動作します)
235 * `eeprom-lefthand.eep`/`eeprom-righthand.eep` がそれぞれの半分に書き込まれた後で、EEPROM 内に格納されている左右の設定の値を読み込みます。
236
237* `#define MASTER_RIGHT`
238 * マスター側が右側と定義されます。
239
240### 他のオプション
241
242* `#define USE_I2C`
243 * Serial の代わりに I2C を使う場合 (デフォルトは serial)
244
245* `#define SOFT_SERIAL_PIN D0`
246 * serial を使う場合、これを定義します。`D0` あるいは `D1`,`D2`,`D3`,`E6`。
247
248* `#define MATRIX_ROW_PINS_RIGHT { <row pins> }`
249* `#define MATRIX_COL_PINS_RIGHT { <col pins> }`
250 * 右半分に左半分と異なるピン配置を指定したい場合は、`MATRIX_ROW_PINS_RIGHT`/`MATRIX_COL_PINS_RIGHT` を定義することができます。現在のところ、`MATRIX_ROW_PINS` のサイズは `MATRIX_ROW_PINS_RIGHT` と同じでなければならず、列の定義も同様です。
251
252* `#define DIRECT_PINS_RIGHT { { F1, F0, B0, C7 }, { F4, F5, F6, F7 } }`
253 * 右半分に左半分と異なる直接ピン配置を指定したい場合は、`DIRECT_PINS_RIGHT` を定義することができます。現在のところ、`DIRECT_PINS` のサイズは `DIRECT_PINS_RIGHT` と同じでなければなりません。
254
255* `#define RGBLED_SPLIT { 6, 6 }`
256 * [RGB ライト設定](#rgb-light-configuration)を見てください。
257
258* `#define SELECT_SOFT_SERIAL_SPEED <speed>` (デフォルトの速度は1です)
259 * serial 通信を使う時のプロトコルの速度を設定します。
260 * 速度:
261 * 0: 約189kbps (実験目的のみ)
262 * 1: 約 137kbps (デフォルト)
263 * 2: 約 75kbps
264 * 3: 約 39kbps
265 * 4: 約 26kbps
266 * 5: 約 20kbps
267
268* `#define SPLIT_USB_DETECT`
269 * マスタ/スレーブを委任する時に(タイムアウト付きで) USB 接続を検出します
270 * ARM についてはデフォルトの挙動
271 * AVR Teensy については必須
272
273* `#define SPLIT_USB_TIMEOUT 2500`
274 * `SPLIT_USB_DETECT` を使う時のマスタ/スレーブを検出する場合の最大タイムアウト
275
276# `rules.mk` ファイル
277
278これは、トップレベルの `Makefile` から include される [make](https://www.gnu.org/software/make/manual/make.html) ファイルです。これは特定の機能を有効または無効にするだけでなく、コンパイルする MCU に関する情報を設定するために使われます。
279
280## ビルドオプション
281
282* `DEFAULT_FOLDER`
283 * キーボードに1つ以上のサブフォルダがある場合にデフォルトのフォルダを指定するために使われます。
284* `FIRMWARE_FORMAT`
285 * ビルドの後でルート `qmk_firmware` フォルダにコピーされる形式 (bin, hex) を定義します。
286* `SRC`
287 * コンパイル・リンクリストにファイルを追加するために使われます。
288* `LAYOUTS`
289 * このキーボードがサポートする[レイアウト](ja/feature_layouts.md)のリスト
290
291## AVR MCU オプション
292* `MCU = atmega32u4`
293* `F_CPU = 16000000`
294* `ARCH = AVR8`
295* `F_USB = $(F_CPU)`
296* `OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT`
297* `BOOTLOADER = atmel-dfu` と以下のオプション:
298 * `atmel-dfu`
299 * `lufa-dfu`
300 * `qmk-dfu`
301 * `halfkay`
302 * `caterina`
303 * `bootloadHID`
304 * `USBasp`
305
306## 機能オプション
307
308これらを使って特定の機能のビルドを有効または無効にします。有効にすればするほどファームウェアが大きくなり、MCU には大きすぎるファームウェアを構築するリスクがあります。
309
310* `BOOTMAGIC_ENABLE`
311 * 仮想 DIP スイッチ設定
312* `MOUSEKEY_ENABLE`
313 * マウスキー
314* `EXTRAKEY_ENABLE`
315 * オーディオ制御とシステム制御
316* `CONSOLE_ENABLE`
317 * デバッグ用コンソール
318* `COMMAND_ENABLE`
319 * デバッグ及び設定用のコマンド
320* `COMBO_ENABLE`
321 * キーコンボ機能
322* `NKRO_ENABLE`
323 * USB N-キーロールオーバー - これが動作しない場合は、ここを見てください: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
324* `AUDIO_ENABLE`
325 * オーディオサブシステムを有効にします。
326* `RGBLIGHT_ENABLE`
327 * キーボードアンダーライト機能を有効にします
328* `LEADER_ENABLE`
329 * リーダーキーコードを有効にします
330* `MIDI_ENABLE`
331 * MIDI 制御
332* `UNICODE_ENABLE`
333 * Unicode
334* `BLUETOOTH_ENABLE`
335 * Adafruit EZ-Key HID で Bluetooth を有効にするレガシーオプション。BLUETOOTH を見てください
336* `BLUETOOTH`
337 * 現在のオプションは、AdafruitEzKey、AdafruitBLE、RN42
338* `SPLIT_KEYBOARD`
339 * 分割キーボード (let's split や bakingpy のキーボードのようなデュアル MCU) のサポートを有効にし、quantum/split_common にある全ての必要なファイルをインクルードします
340* `CUSTOM_MATRIX`
341 * 標準マトリックス走査ルーチンを独自のものに置き換えることができます。
342* `DEBOUNCE_TYPE`
343 * 標準キーデバウンスルーチンを代替または独自のものに置き換えることができます。
344* `WAIT_FOR_USB`
345 * キーボードが起動する前に、USB 接続が確立されるのをキーボードに待機させます
346* `NO_USB_STARTUP_CHECK`
347 * キーボードの起動後の usb サスペンドチェックを無効にします。通常、キーボードはタスクが実行される前にホストがウェイク アップするのを待ちます。分割キーボードは半分はウェイクアップコールを取得できませんが、マスタにコマンドを送信する必要があるため、役に立ちます。
348* `LINK_TIME_OPTIMIZATION_ENABLE`
349 * キーボードをコンパイルする時に、Link Time Optimization (`LTO`) を有効にします。これは処理に時間が掛かりますが、コンパイルされたサイズを大幅に減らします (そして、ファームウェアが小さいため、追加の時間は分からないくらいです)。ただし、`LTO` が有効な場合、古いマクロと関数の機能が壊れるため、自動的にこれらの機能を無効にします。これは `NO_ACTION_MACRO` と `NO_ACTION_FUNCTION` を自動的に定義することで行われます。
350 * `LINK_TIME_OPTIMIZATION_ENABLE` の代わりに `LTO_ENABLE` を使うことができます。
351
352## USB エンドポイントの制限
353
354USB 経由でサービスを提供するために、QMK は USB エンドポイントを使う必要があります。
355これらは有限なリソースです: 各マイクロコントローラは特定の数しか持ちません。
356これは一緒に有効にできる機能を制限します。
357利用可能なエンドポイントを超えると、ビルドエラーをひきおこします。
358
359以下の機能は個別のエンドポイントを必要とするかもしれません:
360
361* `MOUSEKEY_ENABLE`
362* `EXTRAKEY_ENABLE`
363* `CONSOLE_ENABLE`
364* `NKRO_ENABLE`
365* `MIDI_ENABLE`
366* `RAW_ENABLE`
367* `VIRTSER_ENABLE`
368
369エンドポイントの使用率を向上させるために、HID 機能を組み合わせて1つのエンドポイントを使うようにすることができます。
370デフォルトでは、`MOUSEKEY`、`EXTRAKEY` および `NKRO` が単一のエンドポイントに結合されます。
371
372基本キーボード機能も、`KEYBOARD_SHARED_EP = yes` を設定することで同じエンドポイントに結合することができます。
373これによりもう1つのエンドポイントが解放されますが、一部の BIOS ではブートキーボードプロトコルの切り替えを実装しないため、キーボードが動作しなくなるかもしれません。
374
375マウスの結合も、ブートマウス互換性を破壊します。
376この機能が必要な場合は、`MOUSE_SHARED_EP = no` を設定することで、マウスを結合しないようにすることができます。
diff --git a/docs/ja/newbs.md b/docs/ja/newbs.md
new file mode 100644
index 000000000..54189cce4
--- /dev/null
+++ b/docs/ja/newbs.md
@@ -0,0 +1,41 @@
1# QMK 初心者ガイド
2
3<!---
4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
5 original document: ed0575fc8:docs/newbs.md
6 git diff ed0575fc8 HEAD docs/newbs.md | cat
7-->
8
9QMK は、メカニカルキーボード用の強力なオープンソースファームウェアです。
10QMK を使用して、シンプルかつ強力な方法でキーボードをカスタマイズできます。
11完全な初心者からプログラマーに至るまで、あらゆるスキルレベルの人々が QMK を使用してキーボードをカスタマイズしています。
12このガイドは、あなたのスキルにかかわらず、同じことを行う手助けをします。
13
14お使いのキーボードで QMK を実行できるかどうか不明ですか?
15もし作成したキーボードがメカニカルキーボードの場合、実行できる可能性が高いです。
16QMK は[多くの趣味のキーボード](http://qmk.fm/keyboards/)をサポートしているため、もし現在のキーボードで QMK を実行できない場合でも、ニーズに合ったキーボードを見つけるのに問題はないはずです。
17
18## 概要
19
20このガイドには7つの主要なセクションがあります。
21
22* [はじめに](ja/newbs_getting_started.md)
23* [コマンドラインを使用して初めてのファームウェアを構築する](ja/newbs_building_firmware.md)
24* [オンライン GUI を使用して初めてのファームウェアを構築する](ja/newbs_building_firmware_configurator.md)
25* [ファームウェアを書きこむ](ja/newbs_flashing.md)
26* [テストとデバッグ](ja/newbs_testing_debugging.md)
27* [QMK における Git 運用作法](ja/newbs_best_practices.md)
28* [さらに学ぶための学習リソース](ja/newbs_learn_more_resources.md)
29
30このガイドは、これまでソフトウェアをコンパイルしたことがない人を支援することに特化しています。
31その観点から選択と推奨を行います。
32これらの手順の多くには代替方法があり、これらの代替方法のほとんどをサポートしています。
33タスクを達成する方法について疑問がある場合は、[案内を求めることができます](ja/getting_started_getting_help.md)。
34
35## 追加のリソース(英語)
36
37* [Thomas Baart's QMK Basics Blog](https://thomasbaart.nl/category/mechanical-keyboards/firmware/qmk/qmk-basics/) – 新規ユーザ視点から見た QMK ファームウェアの基本的な使用方法をカバーしたユーザ作成のブログ。
38
39## 追加のリソース(日本語)
40
41_日本語のリソース情報を募集中です。_
diff --git a/docs/ja/newbs_best_practices.md b/docs/ja/newbs_best_practices.md
new file mode 100644
index 000000000..3c87d53d4
--- /dev/null
+++ b/docs/ja/newbs_best_practices.md
@@ -0,0 +1,263 @@
1<!-- # Best Practices -->
2# QMK における Git 運用作法
3
4<!---
5 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
6 original document: e75919960:docs/newbs_best_practices.md
7 git diff e75919960 HEAD docs/newbs_best_practices.md | cat
8-->
9
10<!-- ## Or, "How I Learned to Stop Worrying and Love Git." -->
11## または、如何にして私は心配することをやめて Git を愛することを学んだか。
12
13<!-- _Almost the same as #7231:25fdbf2a0:newbs_git_best_practices.md L5_ -->
14<!-- This document aims to instruct novices in the best ways to have a smooth experience in contributing to QMK. We will walk through the process of contributing to QMK, detailing some ways to make this task easier, and then later we'll break some things in order to teach you how to fix them. -->
15この文書は、QMK への貢献をスムーズに行なう最もよい方法を初心者に教えることを目的としています。
16QMK に貢献するプロセスを順を追って説明し、この作業を簡単にするいくつかの方法を詳しく説明します。
17その後、意図的に一部を壊してみせて、それらを修正する方法を教えます。
18
19<!-- This document assumes a few things: -->
20このドキュメントは以下のことを前提としています:
21
22<!-- _Same as #7231:25fdbf2a0:newbs_git_best_practices.md L9_ -->
23<!-- 1. You have a GitHub account, and have [forked the qmk_firmware repository](getting_started_github.md) to your account. -->
24<!-- 2. You've [set up your build environment](newbs_getting_started.md?id=environment-setup). -->
25<!-- #7231:da7d49246: 2. You've set up both [your build environment](newbs_getting_started.md?id=set-up-your-environment) and [QMK](newbs_getting_started.md?id=set-up-qmk). -->
26
271. あなたは GitHub アカウントがあり、アカウントに [qmk_firmware リポジトリをフォーク](ja/getting_started_github.md) している。
282. あなたは、[環境構築](ja/newbs_getting_started.md#set-up-your-environment) と [QMK の設定](ja/newbs_getting_started.md#set-up-qmk) を両方とも完了している。
29
30<!-- ## Your fork's master: Update Often, Commit Never -->
31## あなたのフォークの master ブランチ: 更新は頻繁に、コミットはしないこと
32
33<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L3_ -->
34<!-- It is highly recommended for QMK development, regardless of what is being done or where, to keep your `master` branch updated, but ***never*** commit to it. Instead, do all your changes in a development branch and issue pull requests from your branches when you're developing. -->
35QMK の開発では、何がどこで行われているかにかかわらず、`master` ブランチを最新の状態に保つことを強くお勧めします、しかし `master` ブランチには***絶対に直接コミットしないでください***。
36代わりに、あなたのすべての変更は開発ブランチで行い、あなたが開発する時にはそのブランチからプルリクエストを発行します。
37
38<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L5_ -->
39<!-- To reduce the chances of merge conflicts &mdash; instances where two or more users have edited the same part of a file concurrently &mdash; keep your `master` branch relatively up-to-date, and start any new developments by creating a new branch. -->
40マージの競合 &mdash; これは 2人以上のユーザーがファイルの同じ部分をそれぞれ異なる編集をして統合できなくなった状態 &mdash; の可能性を減らすため `master` ブランチをなるべく最新の状態に保ち、新しいブランチを作成して新しい開発を開始します。
41
42<!-- ### Updating your master branch -->
43### あなたの master ブランチを更新する
44
45<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L9_ -->
46<!-- To keep your `master` branch updated, it is recommended to add the QMK Firmware repository ("repo") as a remote repository in git. To do this, open your Git command line interface and enter: -->
47`master` ブランチを最新の状態に保つには、git のリモートリポジトリとして QMK ファームウェアのリポジトリ(以降、QMK リポジトリ)を追加することをお勧めします。
48これを行うには、Git コマンドラインインターフェイスを開き、次のように入力します。
49
50```
51git remote add upstream https://github.com/qmk/qmk_firmware.git
52```
53
54<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L15_ -->
55<!-- To verify that the repository has been added, run `git remote -v`, which should return the following: -->
56リポジトリが追加されたことを確認するには、`git remote -v` を実行します。
57次のように表示されます。(訳注: `upstream` は`上流`という意味です。)
58
59```
60$ git remote -v
61origin https://github.com/<your_username>/qmk_firmware.git (fetch)
62origin https://github.com/<your_username>/qmk_firmware.git (push)
63upstream https://github.com/qmk/qmk_firmware.git (fetch)
64upstream https://github.com/qmk/qmk_firmware.git (push)
65```
66
67<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L25_ -->
68<!-- Now that this is done, you can check for updates to the repo by running `git fetch upstream`. This retrieves the branches and tags &mdash; collectively referred to as "refs" &mdash; from the QMK repo, which now has the nickname `upstream`. We can now compare the data on our fork `origin` to that held by QMK. -->
69これが完了すると、`git fetch upstream` を実行してリポジトリの更新を確認できます。
70このコマンドは `upstream` というニックネームを持つ QMK リポジトリから、ブランチとタグ &mdash; "refs" と総称されます &mdash; を取得します。
71これで、あなたのフォーク `origin` のデータを QMK が保持するデータと比較できます。
72
73<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L27_ -->
74<!-- To update your fork's master, run the following, hitting the Enter key after each line: -->
75あなたのフォークの `master` を更新するには、次を実行します、各行の後にEnterキーを押してください:
76
77```
78git checkout master
79git fetch upstream
80git pull upstream master
81git push origin master
82```
83
84<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L36_ -->
85<!-- This switches you to your `master` branch, retrieves the refs from the QMK repo, downloads the current QMK `master` branch to your computer, and then uploads it to your fork. -->
86これにより、あなたの `master` ブランチに切り替わり、QMK リポジトリから 'refs' を取得し、現在の QMK の `master` ブランチをコンピュータにダウンロードしてから、あなたのフォークにアップロードします。
87
88<!-- ### Making Changes -->
89### 変更を行なう
90
91<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L40_ -->
92<!-- To make changes, create a new branch by entering: -->
93変更するには、以下を入力して新しいブランチを作成します:
94
95```
96git checkout -b dev_branch
97git push --set-upstream origin dev_branch
98```
99
100<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L47_ -->
101<!-- This creates a new branch named `dev_branch`, checks it out, and then saves the new branch to your fork. The `--set-upstream` argument tells git to use your fork and the `dev_branch` branch every time you use `git push` or `git pull` from this branch. It only needs to be used on the first push; after that, you can safely use `git push` or `git pull`, without the rest of the arguments. -->
102これにより、`dev_branch` という名前の新しいブランチが作成され、チェックアウトされ、新しいブランチがあなたのフォークに保存されます。
103`--set-upstream` 引数は、このブランチから `git push` または `git pull` を使用するたびに、あなたのフォークと `dev_branch` ブランチを使用するように git に指示します。
104この引数は最初のプッシュでのみ使用する必要があります。
105その後、残りの引数なしで `git push` または `git pull` を安全に使用できます。
106
107<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L49_ -->
108<!-- With `git push`, you can use `-u` in place of `--set-upstream` &mdash; `-u` is an alias for `--set-upstream`. -->
109!> `git push` では、`-set-upstream` の代わりに `-u` を使用できます、 `-u` は `--set-upstream` のエイリアスです。
110
111<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L51_ -->
112<!-- You can name your branch nearly anything you want, though it is recommended to name it something related to the changes you are going to make. -->
113ブランチにはほぼ任意の名前を付けることができますが、あなたが行なう変更を表す名前を付けることをお勧めします。
114
115<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L53_ -->
116<!-- By default `git checkout -b` will base your new branch on the branch that is checked out. You can base your new branch on an existing branch that is not checked out by adding the name of the existing branch to the command: -->
117デフォルトでは、`git checkout -b`は、今チェックアウトされているブランチに基づいて新しいブランチを作成します。
118コマンド末尾に既存のブランチの名前を追加指定することにより、チェックアウトされていない既存のブランチを基にして新しいブランチを作成できます:
119
120```
121git checkout -b dev_branch master
122```
123
124<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L59_ -->
125<!-- Now that you have a development branch, open your text editor and make whatever changes you need to make. It is recommended to make many small commits to your branch; that way, any change that causes issues can be more easily traced and undone if needed. To make your changes, edit and save any files that need to be updated, add them to Git's *staging area*, and then commit them to your branch: -->
126これで開発ブランチができたのでテキストエディタを開き必要な変更を加えます。
127ブランチに対して多くの小さなコミットを行うことをお勧めします。
128そうすることで、問題を引き起こす変更をより簡単に特定し必要に応じて元に戻すことができます。
129変更を加えるには、更新が必要なファイルを編集して保存し、Git の *ステージングエリア* に追加してから、ブランチにコミットします:
130
131```
132git add path/to/updated_file
133git commit -m "My commit message."
134```
135
136<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L66_ -->
137<!-- `git add` adds files that have been changed to Git's *staging area*, which is Git's "loading zone." This contains the changes that are going to be *committed* by `git commit`, which saves the changes to the repo. Use descriptive commit messages so you can know what was changed at a glance. -->
138`git add`は、変更されたファイルを Git の *ステージングエリア* に追加します。
139これは、Git の「ロードゾーン」です。
140これには、`git commit` によって *コミット* される変更が含まれており、リポジトリへの変更が保存されます。
141変更内容が一目でわかるように、説明的なコミットメッセージを使用します。
142
143<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L68_ -->
144<!-- !> If you've changed a lot of files, but all the files are part of the same change, you can use `git add .` to add all the changed files that are in your current directory, rather than having to add each file individually. -->
145!> 多くのファイルを変更したが、すべてのファイルが同じ変更の一部である場合、各ファイルを個別に追加するのではなく、 `git add .` を使用して、現在のディレクトリにあるすべての変更されたファイルを追加できます。
146
147<!-- ### Publishing Your Changes -->
148### 変更を公開する
149
150<!-- _Same as #7231:25fdbf2a0:newbs_git_using_your_master_branch.md L72_ -->
151<!-- The last step is to push your changes to your fork. To do this, enter `git push`. Git now publishes the current state of `dev_branch` to your fork. -->
152最後のステップは、変更をフォークにプッシュすることです。これを行うには、`git push`と入力します。
153Git は `dev_branch` の現在の状態をフォークに公開します。
154
155<!-- ## Resolving Merge Conflicts -->
156## マージの競合の解決
157
158<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L3_ -->
159<!-- Sometimes when your work in a branch takes a long time to complete, changes that have been made by others conflict with changes you have made to your branch when you open a pull request. This is called a *merge conflict*, and is what happens when multiple people edit the same parts of the same files. -->
160ブランチでの作業の完了に時間がかかる場合、他の人が行った変更が、プルリクエストを開いたときにブランチに加えた変更と競合することがあります。
161これは *マージの競合* と呼ばれ、複数の人が同じファイルの同じ部分を編集すると発生します。
162
163<!-- ### Rebasing Your Changes -->
164### 変更のリベース
165
166<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L9_ -->
167<!-- A *rebase* is Git's way of taking changes that were applied at one point, reversing them, and then applying the same changes to another point. In the case of a merge conflict, you can rebase your branch to grab the changes that were made between when you created your branch and the present time. -->
168*リベース* は、ある時点で適用された変更を取得し、それらを元に戻し、次に同じ変更を別のポイントに適用する Git の方法です。
169マージの競合が発生した場合、ブランチをリベースして、ブランチを作成してから現在までに行われた変更を取得できます。
170
171<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L11_ -->
172<!-- To start, run the following: -->
173開始するには、次を実行します:
174
175```
176git fetch upstream
177git rev-list --left-right --count HEAD...upstream/master
178```
179
180<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L18_ -->
181<!-- The `git rev-list` command entered here returns the number of commits that differ between the current branch and QMK's master branch. We run `git fetch` first to make sure we have the refs that represent the current state of the upstream repo. The output of the `git rev-list` command entered returns two numbers: -->
182ここに入力された `git rev-list` コマンドは、現在のブランチと QMK の master ブランチで異なるコミットの数を返します。
183最初に `git fetch` を実行して、upstream リポジトリの現在の状態を表す refs があることを確認します。
184入力された `git rev-list` コマンドの出力は2つの数値を返します:
185
186```
187$ git rev-list --left-right --count HEAD...upstream/master
1887 35
189```
190
191<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L25_ -->
192<!-- The first number represents the number of commits on the current branch since it was created, and the second number is the number of commits made to `upstream/master` since the current branch was created, and thus, the changes that are not recorded in the current branch. -->
193最初の数字は、現在のブランチが作成されてからのコミット数を表し、2番目の数字は、現在のブランチが作成されてから `upstream/master` に対して行われたコミットの数であり、したがって、現在のブランチに記録されていない変更です。
194
195<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L27_-->
196<!-- Now that the current states of both the current branch and the upstream repo are known, we can start a rebase operation: -->
197現在のブランチと upstream リポジトリの両方の現在の状態がわかったので、リベース操作を開始できます:
198
199```
200git rebase upstream/master
201```
202
203<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L33_ -->
204<!-- This tells Git to undo the commits on the current branch, and then reapply them against QMK's master branch. -->
205これにより、Git は現在のブランチのコミットを取り消してから、QMK の master ブランチに対してコミットを再適用します。
206
207```
208$ git rebase upstream/master
209First, rewinding head to replay your work on top of it...
210Applying: Commit #1
211Using index info to reconstruct a base tree...
212M conflicting_file_1.txt
213Falling back to patching base and 3-way merge...
214Auto-merging conflicting_file_1.txt
215CONFLICT (content): Merge conflict in conflicting_file_1.txt
216error: Failed to merge in the changes.
217hint: Use 'git am --show-current-patch' to see the failed patch
218Patch failed at 0001 Commit #1
219
220Resolve all conflicts manually, mark them as resolved with
221"git add/rm <conflicted_files>", then run "git rebase --continue".
222You can instead skip this commit: run "git rebase --skip".
223To abort and get back to the state before "git rebase", run "git rebase --abort".
224```
225
226<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L54_ -->
227<!-- This tells us that we have a merge conflict, and gives the name of the file with the conflict. Open the conflicting file in your text editor, and somewhere in the file, you'll find something like this: -->
228これにより、マージの競合があることがわかり、競合のあるファイルの名前が示されます。
229テキストエディタで競合するファイルを開くと、ファイルのどこかに次のような行があります:
230
231```
232<<<<<<< HEAD
233<p>For help with any issues, email us at support@webhost.us.</p>
234=======
235<p>Need help? Email support@webhost.us.</p>
236>>>>>>> Commit #1
237```
238
239<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L64_ -->
240<!-- The line `<<<<<<< HEAD` marks the beginning of a merge conflict, and the `>>>>>>> Commit #1` line marks the end, with the conflicting sections separated by `=======`. The part on the `HEAD` side is from the QMK master version of the file, and the part marked with the commit message is from the current branch and commit. -->
241行 `<<<<<<< HEAD` はマージ競合の始まりを示し、行 `>>>>>>> commit #1` は終了を示し、競合するセクションは `=======` で区切られます。
242`HEAD` 側の部分はファイルの QMK master バージョンからのものであり、コミットメッセージでマークされた部分は現在のブランチとコミットからのものです。
243
244<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L66_ -->
245<!-- Because Git tracks *changes to files* rather than the contents of the files directly, if Git can't find the text that was in the file previous to the commit that was made, it won't know how to edit the file. Re-editing the file will solve the conflict. Make your changes, and then save the file. -->
246Git はファイルの内容ではなく *ファイルへの変更* を直接追跡するため、Git がコミットの前にファイル内にあったテキストを見つけられない場合、ファイルの編集方法がわかりません。
247ファイルを再編集して、競合を解決します。
248変更を加えてから、ファイルを保存します。
249
250```
251<p>Need help? Email support@webhost.us.</p>
252```
253
254そしてコマンド実行:
255
256```
257git add conflicting_file_1.txt
258git rebase --continue
259```
260
261<!-- _Same as #7231:25fdbf2a0:newbs_git_resolving_merge_conflicts.md L79_ -->
262<!-- Git logs the changes to the conflicting file, and continues applying the commits from our branch until it reaches the end. -->
263Git は、競合するファイルへの変更をログに記録し、ブランチのコミットが最後に達するまで適用し続けます。
diff --git a/docs/ja/newbs_building_firmware.md b/docs/ja/newbs_building_firmware.md
new file mode 100644
index 000000000..f9a847f4d
--- /dev/null
+++ b/docs/ja/newbs_building_firmware.md
@@ -0,0 +1,99 @@
1# 初めてのファームウェアを構築する(コマンドライン版)
2
3<!---
4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
5 original document: ed0575fc8:docs/newbs_building_firmware.md
6 git diff ed0575fc8 HEAD docs/newbs_building_firmware.md | cat
7-->
8
9ビルド環境をセットアップしたので、カスタムファームウェアのビルドを開始する準備ができました。
10ガイドのこのセクションでは、ファイルマネージャ、テキストエディタ、ターミナルウィンドウの3つのプログラム間を行き来します。
11キーボードファームウェアが完成して満足するまで、この3つすべてを開いたままにします。
12
13ガイドの最初の部分を読んだ後でターミナルウィンドウを閉じて再度開いていた場合は、ターミナルが正しいディレクトリにあるように `cd qmk_firmware` を忘れないでください。
14
15## キーマップフォルダに移動する
16
17あなたのキーボードの `keymaps`フォルダに移動することから始めます。
18
19macOS または Windows を使用している場合は、キーマップフォルダを簡単に開くために使用できるコマンドがあります。
20
21### macOS:
22
23``` open keyboards/<keyboard_folder>/keymaps ```
24
25### Windows:
26
27``` start .\\keyboards\\<keyboard_folder>\\keymaps ```
28
29## `default` キーマップのコピーを作成する
30
31`keymaps` フォルダを開いたら、`default`フォルダのコピーを作成します。
32フォルダには、あなたの GitHub でのユーザー名と同じ名前を付けることを強くお勧めしますが、小文字、数字、アンダースコアのみが含まれている限り、任意の名前を使用できます。
33
34この手順を自動化するために、`new_keymap.sh`スクリプトを実行する方法もあります。
35
36`qmk_firmware/util` ディレクトリに移動して、次を入力します。
37
38```
39./new_keymap.sh <keyboard path> <username>
40```
41
42たとえば、John という名前のユーザーが 1up60hse の新しいキーマップを作成しようとするには、次のように入力します。
43
44```
45./new_keymap.sh 1upkeyboards/1up60hse john
46```
47
48## あなたの好みのテキストエディタで `keymap.c` を開く
49
50`keymap.c`を開きます。
51このファイル内には、キーボードの動作を制御する構造があります。
52`keymap.c`の上部には、キーマップを読みやすくする `define` と `enum` があります。
53さらに下には、次のような行があります。
54
55 const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
56
57この行はレイヤーのリストの開始を表わしています。
58その下には、`LAYOUT` または `KEYMAP` のいずれかを含む行があり、これらの行はレイヤーの開始を表わしています。
59その行の下には、その特定のレイヤーを構成するキーのリストがあります。
60
61!> キーマップファイルを編集するときは、カンマを追加したり削除したりしないように注意してください。そうするとファームウェアのコンパイルができなくなり、余分であったり欠落していたりするカンマがどこにあるのかを容易に把握できない場合があります。
62
63## 好みに合わせてレイアウトをカスタマイズ
64
65納得のいくまでこのステップを繰り返します。
66気になる点をひとつづつ変更して試すのもよし、全部作りなおすのもよし。
67あるレイヤー全体が必要ない場合はレイヤーを削除することもでき、必要があれば、合計 32 個までレイヤーを追加することもできます。
68ここで定義できる内容については、次のドキュメントを参照してください。
69
70* [キーコード](ja/keycodes.md)
71* [機能](ja/features.md)
72* [FAQ](ja/faq.md)
73
74?> キーマップがどのように機能するかを感じながら、各変更を小さくしてください。大きな変更は、発生する問題のデバッグを困難にします。
75
76## ファームウェアをビルドする
77
78キーマップの変更が完了したら、ファームウェアをビルドする必要があります。これを行うには、ターミナルウィンドウに戻り、ビルドコマンドを実行します:
79
80 make <my_keyboard>:<my_keymap>
81
82たとえば、キーマップの名前が "xyverz" で、rev5 planck のキーマップを作成している場合、次のコマンドを使用します:
83
84 make planck/rev5:xyverz
85
86これがコンパイルされる間、どのファイルがコンパイルされているかを知らせる多くの出力が画面に表示されます。
87次のような出力で終わるはずです。
88
89```
90Linking: .build/planck_rev5_xyverz.elf [OK]
91Creating load file for flashing: .build/planck_rev5_xyverz.hex [OK]
92Copying planck_rev5_xyverz.hex to qmk_firmware folder [OK]
93Checking file size of planck_rev5_xyverz.hex [OK]
94 * File size is fine - 18392/28672
95```
96
97## ファームウェアを書きこむ
98
99[「ファームウェアを書きこむ」](ja/newbs_flashing.md) に移動して、キーボードに新しいファームウェアを書き込む方法を学習します。
diff --git a/docs/ja/newbs_building_firmware_configurator.md b/docs/ja/newbs_building_firmware_configurator.md
new file mode 100644
index 000000000..228269b34
--- /dev/null
+++ b/docs/ja/newbs_building_firmware_configurator.md
@@ -0,0 +1,113 @@
1# QMK Configurator
2
3<!---
4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
5 original document: ed0575fc8:docs/newbs_building_firmware_configurator.md
6 git diff ed0575fc8 HEAD docs/newbs_building_firmware_configurator.md | cat
7-->
8
9[QMK Configurator](https://config.qmk.fm) は、QMKファームウェアの hex ファイルを生成するオンライングラフィカルユーザーインターフェイスです。
10
11?> **次の手順を順番に実行してください。**
12
13[Video Tutorial](https://youtu.be/tx54jkRC9ZY) を見てください。
14
15QMK Configurator は Chrome/Firefox で最適に動作します。
16
17!> **KLE や kbfirmware などの他のツールのファイルは、QMK Configurator と互換性がありません。それらをロードしたり、インポートしたりしないでください。QMK Configurator は異なるツールです。**
18
19## キーボードを選ぶ
20
21ドロップダウンボックスをクリックして、キーマップを作成するキーボードを選択します。
22
23?> **キーボードに複数のバージョンがある場合は、正しいバージョンを選択してください。**
24
25大事なことなのでもう一度言います。
26
27!> **正しいバージョンを選択してください!**
28
29キーボードが QMK を搭載していると宣伝されていてもリストにない場合は、開発者がまだ作業中か、私たちがまだマージするきっかけがなかった可能性があります。
30アクティブな [Pull Request](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+is%3Apr+label%3Akeyboard) がない場合、[qmk_firmware](https://github.com/qmk/qmk_firmware/issues)で報告して、その特定のキーボードのサポートをリクエストします。
31製作者自身の github アカウントにある QMK 搭載キーボードもあります。
32それも再確認してください。
33
34## キーボードのレイアウトを選択する
35
36作成したいと思うキーマップに最も近いレイアウトを選択します。一部のキーボードには、まだ十分なレイアウトまたは正しいレイアウトが定義されていません。これらは将来サポートされる予定です。
37
38## キーマップの名前
39
40お好みの名前をキーマップにつけます。
41
42?> コンパイル時に問題が発生した場合は、もしかすると QMK ファームウェアリポジトリに既に同じ名前が存在しているのかもしれません、名前を変更してみてください。
43
44## キーマップを作る
45
46キーコード入力は3つの方法で実行できます。
471. ドラッグ・アンド・ドロップ
482. レイアウト上の空の場所をクリックして、希望するキーコードをクリックします
493. レイアウト上の空の場所をクリックして、キーボードの物理キーを押します
50
51マウスをキーの上に置くと、そのキーコードの機能の短い説明文が出ます。より詳細な説明については以下を見てください。
52
53[Basic Keycode Reference](https://docs.qmk.fm/#/keycodes_basic)
54[Advanced Keycode Reference](https://docs.qmk.fm/#/feature_advanced_keycodes)
55
56キーマップをサポートするレイアウトが見つからない場合、例えばスペースバーが3分割されていたり、バックスペースが2分割されていたり、シフトが2分割されているような場合、それらを全て埋めてください。
57
58### 例:
59
603分割のスペースバー: 全てスペースバーで埋めます。
61
622分割のバックスペース: 両方ともバックスペースで埋めます。
63
642分割の右シフト: 両方とも右シフトで埋めます。
65
66左シフトとISOサポート用に1つずつ: 両方とも左シフトで埋めます。
67
685分割だが4キーのみ: 以前やったことがある人を推測して確認するか尋ねてください。
69
70## 後日のためにキーマップを保存する
71
72キーマップに満足するか、または後で作業したい場合は、`Export Keymap' ボタンを押します。上記で選択した名前に .json が追加されたキーマップが保存されます。
73
74後日、`Import Keymap` ボタンを押すことで、この .json ファイルをロードできます。
75
76!> **注意:** このファイルは、kbfirmware.com またはその他のツールに使用される .jsonファイルと同じ形式ではありません。これらのツールにこれを使用したり、QMK Configurator でこれらのツールの .json を使用しようとすると、キーボードが **爆発** する可能性があります。
77
78## ファームウェアファイルを生成する
79
80緑色の `Compile` ボタンを押します。
81
82コンパイルが完了すると、緑色の `Download Firmware` ボタンを押すことができます。
83
84## キーボードに書き込む(フラッシュする)
85
86[ファームウェアを書きこむ](ja/newbs_flashing.md) を参照してください。
87
88## トラブルシューティング
89
90#### 私の .json ファイルが動きません
91
92.json ファイルが QMK Configurator で作ったものの場合、おめでとうございます。バグに遭遇しました。 [qmk_configurator](https://github.com/qmk/qmk_configurator/issues) で報告してください。
93
94そうでない場合は、... 他の .json ファイルを使用しないようにという、上に書いた注意書きを見逃してませんか?
95
96#### レイアウトに余分なスペースがありますか?どうすればいいですか?
97
98もしスペースバーが3つに分かれている場合は、全てスペースバーで埋めるのが最善の方法です。バックスペースやシフトについても同じことができます。
99
100#### キーコードってなに?
101
102以下を見てください。
103
104[Basic Keycode Reference](https://docs.qmk.fm/#/keycodes_basic)
105[Advanced Keycode Reference](https://docs.qmk.fm/#/feature_advanced_keycodes)
106
107#### コンパイルできません
108
109キーマップの他のレイヤーを再確認して、ランダムなキーが存在しないことを確認してください。
110
111## 問題とバグ
112
113私たちは利用者の依頼やバグレポートを常に受け入れています。[qmk_configurator](https://github.com/qmk/qmk_configurator/issues) で報告してください。
diff --git a/docs/ja/newbs_flashing.md b/docs/ja/newbs_flashing.md
new file mode 100644
index 000000000..3407b4625
--- /dev/null
+++ b/docs/ja/newbs_flashing.md
@@ -0,0 +1,400 @@
1# ファームウェアを書きこむ
2
3<!---
4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
5 original document: ed0575fc8:docs/newbs_flashing.md
6 git diff ed0575fc8 HEAD docs/newbs_flashing.md | cat
7-->
8
9カスタムファームウェアは出来たので、キーボードに書き込みたくなるでしょう/フラッシュしたくなるでしょう。
10
11## QMK Toolbox を使ってキーボードに書き込む
12
13キーボードに書き込む最も簡単な方法は [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases) を使うことです。
14
15ただし、QMK Toolbox は、現在は Windows と macOS でしか使えません。
16Linuxを使用している場合(および、コマンドラインでファームウェアを書き込みたい場合)は、下の方で概説する[方法](ja/newbs_flashing.md#flash-your-keyboard-from-the-command-line)で行なう必要があります。
17
18### QMK Toolbox にファイルをロードする
19
20まず QMK Toolbox アプリケーションを起動します。
21Finder またはエクスプローラーでファームウェアのファイルを探します。
22ファイル名は `.hex` または `.bin` のどちらかの形式です。
23ビルド時に QMK は、キーボードに適した形式のものを `qmk_firmware` のトップフォルダにコピーしているはずです。
24
25Windows か macOS を使用しているときは現在のファームウェアフォルダをエクスプローラーか Finder で簡単に開くためのコマンドがあります。
26
27#### Windows
28
29```
30start .
31```
32
33#### macOS
34
35```
36open .
37```
38
39ファームウェアファイルは常に以下の命名形式に従っています。
40
41```
42<keyboard_name>_<keymap_name>.{bin,hex}
43```
44
45例えば、`plank/rev5` の `default` キーマップのファイル名は以下のようになります。
46
47```
48planck_rev5_default.hex
49```
50
51ファームウェアファイルを見つけたら、QMK Toolbox の "Local file" ボックスにドラッグするか、"Open" をクリックしてファームウェアファイルを指定します。
52
53### キーボードを DFU (Bootloader) モードにする
54
55ファームウェアを書き込むには、キーボードを普段とは違う特別な状態、フラッシュモードにする必要があります。
56このモードでは、キーボードはキーボードとしての機能をはたしません。
57ファームウェアの書き込み中にキーボードのケーブルを抜いたり、書き込みプロセスを中断したりしないことが非常に重要です。
58
59キーボードによって、この特別なモードに入る方法は異なります。
60キーボードが現在 QMK または TMK を実行しており、キーボードメーカーから具体的な指示が与えられていない場合は、次を順番に試してください。
61
62* 両方のシフトキーを押しながら、`Pause` キーを押す
63* 両方のシフトキーを押しながら、`B` キーを押す
64* キーボードのケーブルを抜いて、スペースバーとBを同時に押しながら、キーボードを再び接続し、1秒待ってからキーを放す
65* 基板(PCB)に付けられている物理的な `RESET` ボタンを押す
66* PCB 上の `BOOT0` か `RESET` のラベルの付いたヘッダピンを探し、PCB 接続中にそれらを互いにショートする
67
68うまくいけば、QMK Toolboxに次のようなメッセージが表示されます。
69
70```
71*** Clueboard - Clueboard 66% HotSwap disconnected -- 0xC1ED:0x2390
72*** DFU device connected
73```
74
75### キーボードへの書き込み
76
77QMK Toolbox の `Flash` ボタンをクリックします。
78次のような出力が表示されます。
79
80```
81*** Clueboard - Clueboard 66% HotSwap disconnected -- 0xC1ED:0x2390
82*** DFU device connected
83*** Attempting to flash, please don't remove device
84>>> dfu-programmer atmega32u4 erase --force
85 Erasing flash... Success
86 Checking memory from 0x0 to 0x6FFF... Empty.
87>>> dfu-programmer atmega32u4 flash /Users/skully/qmk_firmware/clueboard_66_hotswap_gen1_skully.hex
88 Checking memory from 0x0 to 0x55FF... Empty.
89 0% 100% Programming 0x5600 bytes...
90 [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
91 0% 100% Reading 0x7000 bytes...
92 [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
93 Validating... Success
94 0x5600 bytes written into 0x7000 bytes memory (76.79%).
95>>> dfu-programmer atmega32u4 reset
96
97*** DFU device disconnected
98*** Clueboard - Clueboard 66% HotSwap connected -- 0xC1ED:0x2390
99```
100
101## コマンドラインでファームウェアを書き込む :id=flash-your-keyboard-from-the-command-line
102
103これは、以前のものと比較して非常に単純になりました。
104ファームウェアをコンパイルして書き込む準備ができたら、ターミナルウィンドウを開いてビルドコマンドを実行します。
105
106 make <my_keyboard>:<my_keymap>:flash
107
108たとえば、キーマップの名前が xyverz で、rev5 planck のキーマップを作成している場合、次のコマンドを使用します。
109
110 make planck/rev5:xyverz:flash
111
112これにより、キーボードの構成が確認され、指定されたブートローダに基づいてキーボードへの書き込みが試行されます。
113これはあなたがキーボードが使用するブートローダを知る必要がないことを意味します。
114コマンドをただ実行して、コマンド自身に難しい処理を任せます。
115
116ただし、これはキーボードごとに設定されているブートローダに依存します。
117もしこの情報が設定されていない場合、または使用しているキーボードのファームウェアの書き込みにサポートしていないターゲットが設定されている場合、次のエラーが表示されます。
118
119 WARNING: This board's bootloader is not specified or is not supported by the ":flash" target at this time.
120
121この場合、あなたは明示的にブートローダを指定する方法を使わなければなりません。
122
123ブートローダは主に 5 種類のものが使われています。
124Pro Micro とそのクローンは Caterina を、Teensy は HalfKay を、OLKBの AVR ボードは QMK-DFU を、その他の ATmega32U4 ボードは DFU を、そして多くの ARM ボードは ARM DFU を使います。
125
126より詳しいブートローダの情報は、[Flashing Instructions and Bootloader Information](ja/flashing.md) にあります。
127
128使用しているブートローダがわかっているならば、ファームウェアをコンパイルするときに、実は `make` コマンドにブートローダを指定するテキストを追加して、書き込みプロセスを自動化できます。
129
130### DFU
131
132DFU ブートローダの場合、ファームウェアをコンパイルして書き込む準備ができたら、ターミナルウィンドウを開いてビルドコマンドを実行します。
133
134 make <my_keyboard>:<my_keymap>:dfu
135
136たとえば、キーマップの名前が xyverz で、rev5 planck のキーマップを作成している場合、次のコマンドを使用します。
137
138 make planck/rev5:xyverz:dfu
139
140コンパイルが終了すると、以下の出力になるはずです。
141
142```
143Linking: .build/planck_rev5_xyverz.elf [OK]
144Creating load file for flashing: .build/planck_rev5_xyverz.hex [OK]
145Copying planck_rev5_xyverz.hex to qmk_firmware folder [OK]
146Checking file size of planck_rev5_xyverz.hex
147 * File size is fine - 18574/28672
148 ```
149
150ここまでくると、ビルドスクリプトは5秒ごとに DFU ブートローダを探します。
151デバイスが見つかるか、あなたがキャンセルするまで、以下を繰り返します。
152
153 dfu-programmer: no device present.
154 Error: Bootloader not found. Trying again in 5s.
155
156これを実行したら、コントローラーをリセットする必要があります。
157そして下のような出力が表示されます。
158
159```
160*** Attempting to flash, please don't remove device
161>>> dfu-programmer atmega32u4 erase --force
162 Erasing flash... Success
163 Checking memory from 0x0 to 0x6FFF... Empty.
164>>> dfu-programmer atmega32u4 flash /Users/skully/qmk_firmware/clueboard_66_hotswap_gen1_skully.hex
165 Checking memory from 0x0 to 0x55FF... Empty.
166 0% 100% Programming 0x5600 bytes...
167 [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
168 0% 100% Reading 0x7000 bytes...
169 [>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
170 Validating... Success
171 0x5600 bytes written into 0x7000 bytes memory (76.79%).
172>>> dfu-programmer atmega32u4 reset
173```
174
175?> `dfu-programmer:no device present` など、これに関する問題がある場合は、[よくある質問](ja/faq_build.md) を参照してください。
176
177#### DFU コマンド
178
179ファームウェアを DFU デバイスに書き込むために使用できる DFU コマンドがいくつかあります。
180
181* `:dfu` - これが通常のオプションで、DFUデバイスが使用可能になるまで待機したのちファームウェアを書き込みます。5秒ごとに、DFUデバイスが存在するかチェックしています。
182* `:dfu-ee` - 通常の hex ファイルの代わりに `eep` ファイルを書き込みます。これを使用するのはまれです。
183* `:dfu-split-left` - デフォルトオプション (`:dfu`) と同様に、通常のファームウェアが書き込まれます。ただし、分割キーボードの「左側の」 EEPROMファイルも書き込まれます。_これは、Elite C ベースの分割キーボードに最適です。_
184* `:dfu-split-right` - デフォルトオプション (`:dfu`) と同様に、通常のファームウェアが書き込まれます。ただし、分割キーボードの「右側の」EEPROMファイルも書き込まれます。_これは、Elite C ベースの分割キーボードに最適です。_
185
186
187### Caterina
188
189Arduino ボードとそれらのクローンの場合(たとえば SparkFun ProMicro)、ファームウェアをコンパイルして書き込む準備ができたら、ターミナルウィンドウを開いてビルドコマンドを実行します。
190
191 make <my_keyboard>:<my_keymap>:avrdude
192
193たとえば、キーマップの名前が xyverz で、rev2 Lets Split のキーマップを作成している場合、次のコマンドを使用します。
194
195 make lets_split/rev2:xyverz:avrdude
196
197ファームウェアのコンパイルが完了すると、以下のように出力されます。
198
199```
200Linking: .build/lets_split_rev2_xyverz.elf [OK]
201Creating load file for flashing: .build/lets_split_rev2_xyverz.hex [OK]
202Checking file size of lets_split_rev2_xyverz.hex [OK]
203 * File size is fine - 27938/28672
204Detecting USB port, reset your controller now..............
205```
206
207この時点で、キーボードをリセットすると、スクリプトがブートローダを検出し、キーボードに書き込みます。出力は次のようになります。
208
209```
210Detected controller on USB port at /dev/ttyS15
211
212Connecting to programmer: .
213Found programmer: Id = "CATERIN"; type = S
214 Software Version = 1.0; No Hardware Version given.
215Programmer supports auto addr increment.
216Programmer supports buffered memory access with buffersize=128 bytes.
217
218Programmer supports the following devices:
219 Device code: 0x44
220
221avrdude.exe: AVR device initialized and ready to accept instructions
222
223Reading | ################################################## | 100% 0.00s
224
225avrdude.exe: Device signature = 0x1e9587 (probably m32u4)
226avrdude.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed
227 To disable this feature, specify the -D option.
228avrdude.exe: erasing chip
229avrdude.exe: reading input file "./.build/lets_split_rev2_xyverz.hex"
230avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex auto detected as Intel Hex
231avrdude.exe: writing flash (27938 bytes):
232
233Writing | ################################################## | 100% 2.40s
234
235avrdude.exe: 27938 bytes of flash written
236avrdude.exe: verifying flash memory against ./.build/lets_split_rev2_xyverz.hex:
237avrdude.exe: load data flash data from input file ./.build/lets_split_rev2_xyverz.hex:
238avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex auto detected as Intel Hex
239avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex contains 27938 bytes
240avrdude.exe: reading on-chip flash data:
241
242Reading | ################################################## | 100% 0.43s
243
244avrdude.exe: verifying ...
245avrdude.exe: 27938 bytes of flash verified
246
247avrdude.exe: safemode: Fuses OK (E:CB, H:D8, L:FF)
248
249avrdude.exe done. Thank you.
250```
251うまくいかない時は、以下のようにする必要があるかもしれません。
252
253 sudo make <my_keyboard>:<my_keymap>:avrdude
254
255
256#### Caterina コマンド
257
258ファームウェアを DFU デバイスに書き込むために使用できる DFU コマンドがいくつかあります。
259
260* `:avrdude` - これが通常のオプションで、Caterina デバイスが(新しい COM ポートを検出して)使用可能になるまで待機し、ファームウェアを書き込みます。
261* `:avrdude-loop` - これは `:avrdude` と同じです。ただし書き込みが終了すると再び Caterina デバイスの書き込み待ちに戻ります。これは何台ものデバイスへの書き込みに便利です。_Control+C を押して、手動でこの繰り返しを終了させる必要があります。_
262* `:avrdude-split-left` - デフォルトオプション(`:avrdude`)と同様に通常のファームウェアが書き込まれます。ただし、分割キーボードの「左側の」EEPROMファイルもフラッシュされます。 _これは、Pro Micro ベースの分割キーボードに最適です。_
263* `:avrdude-split-right` - デフォルトオプション(`:avrdude`)と同様に通常のファームウェアが書き込まれます。ただし、分割キーボードの「右側の」EEPROMファイルもフラッシュされます。 _これは、Pro Micro ベースの分割キーボードに最適です。_
264
265### HalfKay
266
267PJRC デバイス(Teensy シリーズ)の場合、ファームウェアをコンパイルして書き込む準備ができたら、ターミナルウィンドウを開いてビルドコマンドを実行します。
268
269 make <my_keyboard>:<my_keymap>:teensy
270
271たとえば、キーマップの名前が xyverz で、Ergodox または Ergodox EZ のキーマップを作成している場合、次のコマンドを使用します。
272
273 make ergodox_ez:xyverz:teensy
274
275ファームウェアのコンパイルが完了すると、以下のように出力されます。
276
277```
278Linking: .build/ergodox_ez_xyverz.elf [OK]
279Creating load file for flashing: .build/ergodox_ez_xyverz.hex [OK]
280Checking file size of ergodox_ez_xyverz.hex [OK]
281 * File size is fine - 25584/32256
282 Teensy Loader, Command Line, Version 2.1
283Read "./.build/ergodox_ez_xyverz.hex": 25584 bytes, 79.3% usage
284Waiting for Teensy device...
285 (hint: press the reset button)
286 ```
287
288この時点で、キーボードをリセットします。すると、次のような出力が表示されます。
289
290 ```
291 Found HalfKay Bootloader
292Read "./.build/ergodox_ez_xyverz.hex": 28532 bytes, 88.5% usage
293Programming............................................................................................................................................................................
294...................................................
295Booting
296```
297
298### STM32 (ARM)
299
300主な ARM ボード (Proton C, Planck Rev 6, Preonic Rev 3 を含む)の場合、ファームウェアをコンパイルして書き込む準備ができたら、ターミナルウィンドウを開いてビルドコマンドを実行します。
301
302 make <my_keyboard>:<my_keymap>:dfu-util
303
304たとえば、キーマップの名前が xyverz で、Planck Revision 6 のキーマップを作成している場合、次のコマンドを使用し、(コンパイルが終わる前に)キーボードを再起動してブートローダを起動します:
305
306 make planck/rev6:xyverz:dfu-util
307
308ファームウェアのコンパイルが完了すると、以下のように出力されます。
309
310```
311Linking: .build/planck_rev6_xyverz.elf [OK]
312Creating binary load file for flashing: .build/planck_rev6_xyverz.bin [OK]
313Creating load file for flashing: .build/planck_rev6_xyverz.hex [OK]
314
315Size after:
316 text data bss dec hex filename
317 0 41820 0 41820 a35c .build/planck_rev6_xyverz.hex
318
319Copying planck_rev6_xyverz.bin to qmk_firmware folder [OK]
320dfu-util 0.9
321
322Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
323Copyright 2010-2016 Tormod Volden and Stefan Schmidt
324This program is Free Software and has ABSOLUTELY NO WARRANTY
325Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
326
327Invalid DFU suffix signature
328A valid DFU suffix will be required in a future dfu-util release!!!
329Opening DFU capable USB device...
330ID 0483:df11
331Run-time device DFU version 011a
332Claiming USB DFU Interface...
333Setting Alternate Setting #0 ...
334Determining device status: state = dfuERROR, status = 10
335dfuERROR, clearing status
336Determining device status: state = dfuIDLE, status = 0
337dfuIDLE, continuing
338DFU mode device DFU version 011a
339Device returned transfer size 2048
340DfuSe interface name: "Internal Flash "
341Downloading to address = 0x08000000, size = 41824
342Download [=========================] 100% 41824 bytes
343Download done.
344File downloaded successfully
345Transitioning to dfuMANIFEST state
346```
347
348#### STM32 コマンド
349
350ファームウェアを STM32 デバイスに書き込むために使用できる DFU コマンドがいくつかあります。
351
352* `:dfu-util` - STM32 デバイスに書き込むためのデフォルトコマンドで、STM32 ブートローダが見つかるまで待機します。
353* `:dfu-util-split-left` - デフォルトのオプション (`:dfu-util`) と同様に、通常のファームウェアが書き込まれます。 ただし、分割キーボードの「左側の」EEPROM の設定も行われます。
354* `:dfu-util-split-right` - デフォルトのオプション (`:dfu-util`) と同様に、通常のファームウェアが書き込まれます。 ただし、分割キーボードの「右側の」EEPROM の設定も行われます。
355* `:st-link-cli` - dfu-util ではなく、ST-LINK の CLI ユーティリティを介してファームウェアを書き込めます。
356
357### BootloadHID
358
359Bootmapper Client(BMC)/bootloadHID/ATmega32A ベースのキーボードの場合、ファームウェアをコンパイルして書き込む準備ができたら、ターミナルウィンドウを開いてビルドコマンドを実行します。
360
361 make <my_keyboard>:<my_keymap>:bootloaderHID
362
363たとえば、キーマップの名前が xyverz で、jj40 のキーマップを作成している場合、次のコマンドを使用します。
364
365 make jj40:xyverz:bootloaderHID
366
367ファームウェアのコンパイルが完了すると、以下のように出力されます。
368
369```
370Linking: .build/jj40_default.elf [OK]
371Creating load file for flashing: .build/jj40_default.hex [OK]
372Copying jj40_default.hex to qmk_firmware folder [OK]
373Checking file size of jj40_default.hex [OK]
374 * The firmware size is fine - 21920/28672 (6752 bytes free)
375```
376
377ここまでくると、ビルドスクリプトは5秒ごとに DFU ブートローダを探します。
378デバイスが見つかるか、あなたがキャンセルするまで、以下を繰り返します。
379
380```
381Error opening HIDBoot device: The specified device was not found
382Trying again in 5s.
383```
384
385これを実行したら、コントローラーをリセットする必要があります。
386そして下のような出力が表示されます。
387
388```
389Page size = 128 (0x80)
390Device size = 32768 (0x8000); 30720 bytes remaining
391Uploading 22016 (0x5600) bytes starting at 0 (0x0)
3920x05580 ... 0x05600
393```
394
395## テストしましょう!
396
397おめでとうございます! カスタムファームウェアがキーボードにプログラムされました!
398
399使ってみて、すべてがあなたの望むように動作するかどうか確認してください。
400この初心者ガイドを完全なものにするために [テストとデバッグ](ja/newbs_testing_debugging.md) を書いたので、カスタム機能のトラブルシューティング方法については、こちらをご覧ください。
diff --git a/docs/ja/newbs_getting_started.md b/docs/ja/newbs_getting_started.md
new file mode 100644
index 000000000..865ed162a
--- /dev/null
+++ b/docs/ja/newbs_getting_started.md
@@ -0,0 +1,122 @@
1# イントロダクション
2
3<!---
4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
5 original document: docs/newbs_getting_started.md
6 git diff 161d469 HEAD docs/newbs_getting_started.md | cat
7-->
8
9キーボードにはプロセッサが入っており、それはコンピュータに入っているものと大して違わないものです。
10このプロセッサでは、キーボードのボタンの押し下げの検出を担当しキーボードのどのボタンが押されている/離されているかのレポートをコンピュータに送信するソフトウェアが動作しています。
11QMK は、そのソフトウェアの役割を果たし、ボタンの押下を検出しその情報をホストコンピュータに渡します。
12カスタムキーマップを作るということは、キーボード上で動くプログラムを作るということなのです。
13
14QMK は、簡単なことは簡単に、そして、難しいことを可能なことにすることで、あなたの手にたくさんのパワーをもたらします。
15パワフルなキーマップを作るためにプログラムを作成する方法を知る必要はありません。いくつかのシンプルな文法に従うだけでOKです。
16
17# はじめに
18
19キーマップをビルドする前に、いくつかのソフトウェアをインストールしてビルド環境を構築する必要があります。
20ファームウェアをコンパイルするキーボードの数に関わらず、この作業を一度だけ実行する必要があります。
21
22もし、GUI で作業をしたい場合、オンラインで作業できる [QMK Configurator](https://config.qmk.fm) を使ってください。
23使い方は [オンライン GUI を使用して初めてのファームウェアを構築する](ja/newbs_building_firmware_configurator.md) を参照してください。
24
25## ソフトウェアのダウンロード
26
27### テキストエディタ
28
29GUI を使わない場合、プレーンテキストを編集・保存できるエディタが必要です。
30Windows の場合、メモ帳が使えます。Linux の場合、gedit が使えます。
31どちらもシンプルですが機能的なテキストエディタです。
32macOS では、デフォルトのテキストエディットアプリに注意してください。_フォーマット_ メニューから _標準テキストにする_ を選択しない限り、プレーンテキストとして保存されません。
33
34[Sublime Text](https://www.sublimetext.com/) や [VS Code](https://code.visualstudio.com/) のような専用のテキストエディタをダウンロードしてインストールすることもできます。これらのプログラムはコードを編集するために特別に作成されているため、これはプラットフォームに関係なくベストな方法です。
35
36?> どのエディタを使えば良いか分からない場合、Laurence Bradford が書いたこの記事 [a great introduction](https://learntocodewith.me/programming/basics/text-editors/) を読んでください。
37
38### QMK Toolbox
39
40QMK Toolbox は、Windows と macOS で使える GUI を備えたプログラムで、カスタムキーボードのプログラミングとデバッグの両方ができます。
41このプログラムは、キーボードに簡単にファームウェアを書き込んだり、出力されるデバッグメッセージを確認する際に、かけがえのないものであることがわかるでしょう。
42
43[QMK Toolbox の最新版](https://github.com/qmk/qmk_toolbox/releases/latest)
44
45* Windows 版: `qmk_toolbox.exe` (portable) または `qmk_toolbox_install.exe` (installer)
46* macOS 版: `QMK.Toolbox.app.zip` (portable) または `QMK.Toolbox.pkg` (installer)
47
48## 環境構築 :id=set-up-your-environment
49
50私たちは、QMK を可能な限り簡単に構築できるように努力しています。
51Linux か Unix 環境を用意するだけで、QMK に残りをインストールさせることができます。
52
53?> もし、Linux か Unix のコマンドを使ったことがない場合、こちらで基本的な概念や各種コマンドを学んでください。これらの教材で QMK を使うのに必要なことを学ぶことができます。
54
55[Must Know Linux Commands](https://www.guru99.com/must-know-linux-commands.html)<br>
56[Some Basic Unix Commands](https://www.tjhsst.edu/~dhyatt/superap/unixcmd.html)
57
58### Windows
59
60MSYS2 と Git のインストールが必要です。
61
62* [MSYS2 homepage](http://www.msys2.org) の手順に従って MSYS2 をインストールします。
63* 開いている MSYS2 の全ターミナル画面を閉じて、新しい MSYS2 MinGW 64-bit のターミナル画面を開きます。
64* `pacman -S git` を実行して Git をインストールします。
65
66### macOS
67
68[Homebrew homepage](https://brew.sh) の手順に従って Homebrew をインストールしてください。
69
70Homebrew をインストールしたら、以下の _QMK の設定_ に進んでください。そのステップでは、他のパッケージをインストールするスクリプトを実行します。
71
72### Linux
73
74Git のインストールが必要です。既にインストールされている可能性は高いですが、そうでない場合、次のコマンドでインストールできます。
75
76* Debian / Ubuntu / Devuan: `apt-get install git`
77* Fedora / Red Hat / CentOS: `yum install git`
78* Arch: `pacman -S git`
79
80?> 全てのプラットフォームにおいて、Docker を使うことも可能です。[詳細はこちらをクリックしてください](ja/getting_started_build_tools.md#docker)。
81
82## QMK の設定 :id=set-up-qmk
83
84Linux/Unix 環境が準備できたら QMK のダウンロードの準備は完了です。Git を使用して QMK のリポジトリを「クローン」することで QMK をダウンロードします。ターミナルか MSYS2 MinGW ウィンドウを開いて、このガイドの残りの部分では開いたままにします。そのウィンドウ内で、次の2つのコマンドを実行します。
85
86```shell
87git clone --recurse-submodules https://github.com/qmk/qmk_firmware.git
88cd qmk_firmware
89```
90
91?> 既に [GitHub の使いかた](ja/getting_started_github.md)を知っているなら、clone ではなく fork を勧めます。この一文の意味が分からない場合、このメッセージは無視してかまいません。
92
93QMK には、必要な残りの設定を手助けするスクリプトが含まれています。
94セットアップ作業を完了させるため、次のコマンドを実行します。
95
96 util/qmk_install.sh
97
98## ビルド環境の確認
99
100これで QMK のビルド環境が用意できましたので、キーボードのファームウェアをビルドできます。
101キーボードのデフォルトキーマップをビルドすることから始めます。次の形式のコマンドでビルドできるはずです。
102
103 make <keyboard>:default
104
105例)Clueboard 66% のファームウェアをビルドする
106
107 make clueboard/66/rev3:default
108
109大量の出力の最後に次のように出力されると完了です。
110
111```
112Linking: .build/clueboard_66_rev3_default.elf [OK]
113Creating load file for flashing: .build/clueboard_66_rev3_default.hex [OK]
114Copying clueboard_66_rev3_default.hex to qmk_firmware folder [OK]
115Checking file size of clueboard_66_rev3_default.hex [OK]
116 * The firmware size is fine - 26356/28672 (2316 bytes free)
117```
118
119# キーマップの作成
120
121これであなた専用のキーマップを作成する準備ができました!
122次は [Building Your First Firmware](ja/newbs_building_firmware.md) で専用のキーマップを作成します。
diff --git a/docs/ja/newbs_learn_more_resources.md b/docs/ja/newbs_learn_more_resources.md
new file mode 100644
index 000000000..14feb61b3
--- /dev/null
+++ b/docs/ja/newbs_learn_more_resources.md
@@ -0,0 +1,32 @@
1# 学習リソース
2
3<!---
4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
5 original document: ed0575fc8:docs/newbs_learn_more_resources.md
6 git diff ed0575fc8 HEAD docs/newbs_learn_more_resources.md | cat
7-->
8
9これらのリソースは、QMKコミュニティの新しいメンバーに、初心者向けドキュメントで提供されている情報に対する理解を深めることを目的としています。
10
11## Git に関するリース:
12
13### 英語
14
15* [Great General Tutorial](https://www.codecademy.com/learn/learn-git)
16* [Git Game To Learn From Examples](https://learngitbranching.js.org/)
17* [Git Resources to Learn More About Github](ja/getting_started_github.md)
18* [Git Resources Aimed Specifically toward QMK](ja/contributing.md)
19
20### 日本語
21
22_日本語のリソース情報を募集中です。_
23
24## コマンドラインに関するリソース:
25
26### 英語
27
28* [Good General Tutorial on Command Line](https://www.codecademy.com/learn/learn-the-command-line)
29
30### 日本語
31
32_日本語のリソース情報を募集中です。_
diff --git a/docs/ja/newbs_testing_debugging.md b/docs/ja/newbs_testing_debugging.md
new file mode 100644
index 000000000..9cf5c6520
--- /dev/null
+++ b/docs/ja/newbs_testing_debugging.md
@@ -0,0 +1,107 @@
1# テストとデバッグ
2
3<!---
4 grep --no-filename "^[ ]*git diff" docs/ja/*.md | sh
5 original document: ed0575fc8:docs/newbs_testing_debugging.md
6 git diff ed0575fc8 HEAD docs/newbs_testing_debugging.md | cat
7-->
8
9カスタムファームウェアをキーボードへ書き込んだら、テストする準備が整います。運が良ければ全て問題なく動作しているはずですが、もしそうでなければこのドキュメントがどこが悪いのか調べるのに役立ちます。
10
11## テスト
12
13通常、キーボードをテストするのは非常に簡単です。全てのキーをひとつずつ押して、期待されるキーが送信されていることを確認します。キーを押したことを見逃さないためのプログラムもあります。
14
15メモ: これらのプログラムはQMKによって提供・承認されたものではありません。
16
17* [QMK Configurator](https://config.qmk.fm/#/test/) (Web Based)
18* [Switch Hitter](https://web.archive.org/web/20190413233743/https://elitekeyboards.com/switchhitter.php) (Windows Only)
19* [Keyboard Viewer](https://www.imore.com/how-use-keyboard-viewer-your-mac) (Mac Only)
20* [Keyboard Tester](http://www.keyboardtester.com) (Web Based)
21* [Keyboard Checker](http://keyboardchecker.com) (Web Based)
22
23## デバッグ
24
25`rules.mk`へ`CONSOLE_ENABLE = yes`の設定をするとキーボードはデバッグ情報を出力します。デフォルトの出力は非常に限られたものですが、デバッグモードをオンにすることでデバッグ情報の量を増やすことが出来ます。キーマップの`DEBUG`キーコードを使用するか、デバッグモードを有効にする [Command](ja/feature_command.md) 機能を使用するか、以下のコードをキーマップに追加します。
26
27```c
28void keyboard_post_init_user(void) {
29 // Customise these values to desired behaviour
30 debug_enable=true;
31 debug_matrix=true;
32 //debug_keyboard=true;
33 //debug_mouse=true;
34}
35```
36
37### QMK Toolboxを使ったデバッグ
38
39互換性のある環境では、[QMK Toolbox](https://github.com/qmk/qmk_toolbox)を使うことでキーボードからのデバッグメッセージを表示できます。
40
41### hid_listenを使ったデバッグ
42
43ターミナルベースの方法がお好みですか?PJRCが提供する[hid_listen](https://www.pjrc.com/teensy/hid_listen.html)もデバッグメッセージの表示に使用できます。ビルド済みの実行ファイルはWindows, Linux, MacOS用が用意されています。
44
45<!-- FIXME: Describe the debugging messages here. -->
46
47## 独自のデバッグメッセージを送信する
48
49[custom code](ja/custom_quantum_functions.md)内からデバッグメッセージを出力すると便利な場合があります。それはとても簡単です。ファイルの先頭に`print.h`のインクルードを追加します:
50
51 #include <print.h>
52
53そのあとは、いくつかの異なったprint関数を使用することが出来ます。
54
55* `print("string")`: シンプルな文字列を出力します
56* `uprintf("%s string", var)`: フォーマットされた文字列を出力します
57* `dprint("string")` デバッグモードが有効な場合のみ、シンプルな文字列を出力します
58* `dprintf("%s string", var)`: デバッグモードが有効な場合のみ、フォーマットされた文字列を出力します
59
60## デバッグの例
61
62以下は現実世界での実際のデバッグ手法の例を集めたものです。追加情報は[Debugging/Troubleshooting QMK](ja/faq_debug.md)を参照してください。
63
64### マトリックス上のどの場所でキー押下が起こったか?
65
66移植する、PCBの問題を診断する場合、キー入力が正しくスキャンされているかどうかを確認することが役立つ場合があります。この手法でのロギングを有効化するには、`keymap.c`へ以下のコードを追加します。
67
68```c
69bool process_record_user(uint16_t keycode, keyrecord_t *record) {
70 // コンソールが有効化されている場合、マトリックス上の位置とキー押下状態を出力します
71#ifdef CONSOLE_ENABLE
72 uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
73#endif
74 return true;
75}
76```
77
78出力の例
79```text
80Waiting for device:.......
81Listening:
82KL: kc: 169, col: 0, row: 0, pressed: 1
83KL: kc: 169, col: 0, row: 0, pressed: 0
84KL: kc: 174, col: 1, row: 0, pressed: 1
85KL: kc: 174, col: 1, row: 0, pressed: 0
86KL: kc: 172, col: 2, row: 0, pressed: 1
87KL: kc: 172, col: 2, row: 0, pressed: 0
88```
89
90### キースキャンにかかる時間の測定
91
92パフォーマンスの問題をテストする場合、スイッチマトリックスをスキャンする頻度を知ることが役立ちます。この手法でのロギングを有効化するには`config.h`へ以下のコードを追加します。
93
94
95```c
96#define DEBUG_MATRIX_SCAN_RATE
97```
98
99出力例
100```text
101 > matrix scan frequency: 315
102 > matrix scan frequency: 313
103 > matrix scan frequency: 316
104 > matrix scan frequency: 316
105 > matrix scan frequency: 316
106 > matrix scan frequency: 316
107```
diff --git a/docs/keycodes.md b/docs/keycodes.md
index 7dcff03fd..ae0bfb7af 100644
--- a/docs/keycodes.md
+++ b/docs/keycodes.md
@@ -257,37 +257,37 @@ This is a reference only. Each group of keys links to the page documenting their
257 257
258## [Bootmagic](feature_bootmagic.md) 258## [Bootmagic](feature_bootmagic.md)
259 259
260|Key |Aliases |Description | 260|Key |Aliases |Description |
261|----------------------------------|---------|-------------------------------------------| 261|----------------------------------|---------|--------------------------------------------------------------------------|
262|`MAGIC_SWAP_CONTROL_CAPSLOCK` | |Swap Caps Lock and Left Control | 262|`MAGIC_SWAP_CONTROL_CAPSLOCK` |`CL_SWAP`|Swap Caps Lock and Left Control |
263|`MAGIC_CAPSLOCK_TO_CONTROL` | |Treat Caps Lock as Control | 263|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` |`CL_NORM`|Unswap Caps Lock and Left Control |
264|`MAGIC_SWAP_LCTL_LGUI` | |Swap Left Control and GUI | 264|`MAGIC_CAPSLOCK_TO_CONTROL` |`CL_CTRL`|Treat Caps Lock as Control |
265|`MAGIC_SWAP_RCTL_RGUI` | |Swap Right Control and GUI | 265|`MAGIC_UNCAPSLOCK_TO_CONTROL` |`CL_CAPS`|Stop treating Caps Lock as Control |
266|`MAGIC_SWAP_LALT_LGUI` | |Swap Left Alt and GUI | 266|`MAGIC_SWAP_LCTL_LGUI` |`LCG_SWP`|Swap Left Control and GUI |
267|`MAGIC_SWAP_RALT_RGUI` | |Swap Right Alt and GUI | 267|`MAGIC_UNSWAP_LCTL_LGUI` |`LCG_NRM`|Unswap Left Control and GUI |
268|`MAGIC_NO_GUI` | |Disable the GUI key | 268|`MAGIC_SWAP_RCTL_RGUI` |`RCG_SWP`|Swap Right Control and GUI |
269|`MAGIC_SWAP_GRAVE_ESC` | |Swap <code>&#96;</code> and Escape | 269|`MAGIC_UNSWAP_RCTL_RGUI` |`RCG_NRM`|Unswap Right Control and GUI |
270|`MAGIC_SWAP_BACKSLASH_BACKSPACE` | |Swap `\` and Backspace | 270|`MAGIC_SWAP_CTL_GUI` |`CG_SWAP`|Swap Control and GUI on both sides |
271|`MAGIC_HOST_NKRO` | |Force NKRO on | 271|`MAGIC_UNSWAP_CTL_GUI` |`CG_NORM`|Unswap Control and GUI on both sides |
272|`MAGIC_SWAP_ALT_GUI` |`AG_SWAP`|Swap Alt and GUI on both sides | 272|`MAGIC_TOGGLE_CTL_GUI` |`CG_TOGG`|Toggle Control and GUI swap on both sides |
273|`MAGIC_SWAP_CTL_GUI` |`CG_SWAP`|Swap Ctrl and GUI on both sides (for macOS)| 273|`MAGIC_SWAP_LALT_LGUI` |`LAG_SWP`|Swap Left Alt and GUI |
274|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` | |Unswap Caps Lock and Left Control | 274|`MAGIC_UNSWAP_LALT_LGUI` |`LAG_NRM`|Unswap Left Alt and GUI |
275|`MAGIC_UNCAPSLOCK_TO_CONTROL` | |Stop treating Caps Lock as Control | 275|`MAGIC_SWAP_RALT_RGUI` |`RAG_SWP`|Swap Right Alt and GUI |
276|`MAGIC_UNSWAP_LCTL_LGUI` | |Unswap Left Control and GUI | 276|`MAGIC_UNSWAP_RALT_RGUI` |`RAG_NRM`|Unswap Right Alt and GUI |
277|`MAGIC_UNSWAP_RCTL_RGUI` | |Unswap Right Control and GUI | 277|`MAGIC_SWAP_ALT_GUI` |`AG_SWAP`|Swap Alt and GUI on both sides |
278|`MAGIC_UNSWAP_LALT_LGUI` | |Unswap Left Alt and GUI | 278|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Alt and GUI on both sides |
279|`MAGIC_UNSWAP_RALT_RGUI` | |Unswap Right Alt and GUI | 279|`MAGIC_TOGGLE_ALT_GUI` |`AG_TOGG`|Toggle Alt and GUI swap on both sides |
280|`MAGIC_UNNO_GUI` | |Enable the GUI key | 280|`MAGIC_NO_GUI` |`GUI_OFF`|Disable the GUI keys |
281|`MAGIC_UNSWAP_GRAVE_ESC` | |Unswap <code>&#96;</code> and Escape | 281|`MAGIC_UNNO_GUI` |`GUI_ON` |Enable the GUI keys |
282|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`| |Unswap `\` and Backspace | 282|`MAGIC_SWAP_GRAVE_ESC` |`GE_SWAP`|Swap <code>&#96;</code> and Escape |
283|`MAGIC_UNHOST_NKRO` | |Force NKRO off | 283|`MAGIC_UNSWAP_GRAVE_ESC` |`GE_NORM`|Unswap <code>&#96;</code> and Escape |
284|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Alt and GUI on both sides | 284|`MAGIC_SWAP_BACKSLASH_BACKSPACE` |`BS_SWAP`|Swap `\` and Backspace |
285|`MAGIC_UNSWAP_CTL_GUI` |`CG_NORM`|Unswap Ctrl and GUI on both sides | 285|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`|`BS_NORM`|Unswap `\` and Backspace |
286|`MAGIC_TOGGLE_ALT_GUI` |`AG_TOGG`|Toggle Alt and GUI swap on both sides | 286|`MAGIC_HOST_NKRO` |`NK_ON` |Enable N-key rollover |
287|`MAGIC_TOGGLE_CTL_GUI` |`CG_TOGG`|Toggle Ctrl and GUI swap on both sides | 287|`MAGIC_UNHOST_NKRO` |`NK_OFF` |Disable N-key rollover |
288|`MAGIC_TOGGLE_NKRO` | |Turn NKRO on or off | 288|`MAGIC_TOGGLE_NKRO` |`NK_TOGG`|Toggle N-key rollover |
289|`MAGIC_EE_HANDS_LEFT` | |Set "Left Hand" for EE_HANDS handedness | 289|`MAGIC_EE_HANDS_LEFT` |`EH_LEFT`|Set the master half of a split keyboard as the left hand (for `EE_HANDS`) |
290|`MAGIC_EE_HANDS_RIGHT` | |Set "Right Hand" for EE_HANDS handedness | 290|`MAGIC_EE_HANDS_RIGHT` |`EH_RGHT`|Set the master half of a split keyboard as the right hand (for `EE_HANDS`)|
291 291
292## [Bluetooth](feature_bluetooth.md) 292## [Bluetooth](feature_bluetooth.md)
293 293
@@ -297,6 +297,16 @@ This is a reference only. Each group of keys links to the page documenting their
297|`OUT_USB` |USB only | 297|`OUT_USB` |USB only |
298|`OUT_BT` |Bluetooth only | 298|`OUT_BT` |Bluetooth only |
299 299
300## [Dynamic Macros](feature_dynamic_macros.md)
301
302|Key |Alias |Description |
303|-----------------|---------|--------------------------------------------------|
304|`DYN_REC_START1` |`DM_REC1`|Start recording Macro 1 |
305|`DYN_REC_START2` |`DM_REC2`|Start recording Macro 2 |
306|`DYN_MACRO_PLAY1`|`DM_PLY1`|Replay Macro 1 |
307|`DYN_MACRO_PLAY2`|`DM_PLY2`|Replay Macro 2 |
308|`DYN_REC_STOP` |`DM_RSTP`|Finish the macro that is currently being recorded.|
309
300## [Layer Switching](feature_advanced_keycodes.md#switching-and-toggling-layers) 310## [Layer Switching](feature_advanced_keycodes.md#switching-and-toggling-layers)
301 311
302|Key |Description | 312|Key |Description |
@@ -379,12 +389,12 @@ This is a reference only. Each group of keys links to the page documenting their
379|`RGB_TOG` | |Toggle RGB lighting on or off | 389|`RGB_TOG` | |Toggle RGB lighting on or off |
380|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held | 390|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held |
381|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held| 391|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held|
382|`RGB_HUI` | |Increase hue | 392|`RGB_HUI` | |Increase hue, decrease hue when Shift is held |
383|`RGB_HUD` | |Decrease hue | 393|`RGB_HUD` | |Decrease hue, increase hue when Shift is held |
384|`RGB_SAI` | |Increase saturation | 394|`RGB_SAI` | |Increase saturation, decrease saturation when Shift is held |
385|`RGB_SAD` | |Decrease saturation | 395|`RGB_SAD` | |Decrease saturation, increase saturation when Shift is held |
386|`RGB_VAI` | |Increase value (brightness) | 396|`RGB_VAI` | |Increase value (brightness), decrease value when Shift is held |
387|`RGB_VAD` | |Decrease value (brightness) | 397|`RGB_VAD` | |Decrease value (brightness), increase value when Shift is held |
388|`RGB_MODE_PLAIN` |`RGB_M_P `|Static (no animation) mode | 398|`RGB_MODE_PLAIN` |`RGB_M_P `|Static (no animation) mode |
389|`RGB_MODE_BREATHE` |`RGB_M_B` |Breathing animation mode | 399|`RGB_MODE_BREATHE` |`RGB_M_B` |Breathing animation mode |
390|`RGB_MODE_RAINBOW` |`RGB_M_R` |Rainbow animation mode | 400|`RGB_MODE_RAINBOW` |`RGB_M_R` |Rainbow animation mode |
@@ -397,19 +407,19 @@ This is a reference only. Each group of keys links to the page documenting their
397 407
398## [RGB Matrix Lighting](feature_rgb_matrix.md) 408## [RGB Matrix Lighting](feature_rgb_matrix.md)
399 409
400|Key |Aliases |Description | 410|Key |Aliases |Description |
401|-------------------|----------|--------------------------------------------------------------------| 411|-------------------|----------|--------------------------------------------------------------------------------------|
402|`RGB_TOG` | |Toggle RGB lighting on or off | 412|`RGB_TOG` | |Toggle RGB lighting on or off |
403|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held | 413|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held |
404|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held| 414|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held |
405|`RGB_HUI` | |Increase hue | 415|`RGB_HUI` | |Increase hue, decrease hue when Shift is held |
406|`RGB_HUD` | |Decrease hue | 416|`RGB_HUD` | |Decrease hue, increase hue when Shift is held |
407|`RGB_SAI` | |Increase saturation | 417|`RGB_SAI` | |Increase saturation, decrease saturation when Shift is held |
408|`RGB_SAD` | |Decrease saturation | 418|`RGB_SAD` | |Decrease saturation, increase saturation when Shift is held |
409|`RGB_VAI` | |Increase value (brightness) | 419|`RGB_VAI` | |Increase value (brightness), decrease value when Shift is held |
410|`RGB_VAD` | |Decrease value (brightness) | 420|`RGB_VAD` | |Decrease value (brightness), increase value when Shift is held |
411|`RGB_SPI` | |Increase effect speed (does no support eeprom yet) | 421|`RGB_SPI` | |Increase effect speed (does not support eeprom yet), decrease speed when Shift is held|
412|`RGB_SPD` | |Decrease effect speed (does no support eeprom yet) | 422|`RGB_SPD` | |Decrease effect speed (does not support eeprom yet), increase speed when Shift is held|
413 423
414## [Thermal Printer](feature_thermal_printer.md) 424## [Thermal Printer](feature_thermal_printer.md)
415 425
diff --git a/docs/newbs.md b/docs/newbs.md
index 904a52945..775bba2ca 100644
--- a/docs/newbs.md
+++ b/docs/newbs.md
@@ -13,7 +13,7 @@ There are 7 main sections to this guide:
13* [Building Your First Firmware using the online GUI](newbs_building_firmware_configurator.md) 13* [Building Your First Firmware using the online GUI](newbs_building_firmware_configurator.md)
14* [Flashing Firmware](newbs_flashing.md) 14* [Flashing Firmware](newbs_flashing.md)
15* [Testing and Debugging](newbs_testing_debugging.md) 15* [Testing and Debugging](newbs_testing_debugging.md)
16* [Git Best Practices](newbs_best_practices.md) 16* [Best Git Practices](newbs_git_best_practices.md)
17* [Learn More with these Resources](newbs_learn_more_resources.md) 17* [Learn More with these Resources](newbs_learn_more_resources.md)
18 18
19This guide is focused on helping someone who has never compiled software before. It makes choices and recommendations based on that viewpoint. There are alternative methods for many of these procedures, and we support most of those alternatives. If you have any doubt about how to accomplish a task you can [ask us for guidance](getting_started_getting_help.md). 19This guide is focused on helping someone who has never compiled software before. It makes choices and recommendations based on that viewpoint. There are alternative methods for many of these procedures, and we support most of those alternatives. If you have any doubt about how to accomplish a task you can [ask us for guidance](getting_started_getting_help.md).
diff --git a/docs/newbs_best_practices.md b/docs/newbs_best_practices.md
deleted file mode 100644
index 61bcc0c6a..000000000
--- a/docs/newbs_best_practices.md
+++ /dev/null
@@ -1,163 +0,0 @@
1# Best Practices
2
3## Or, "How I Learned to Stop Worrying and Love Git."
4
5This document aims to instruct novices in the best ways to have a smooth experience in contributing to QMK. We will walk through the process of contributing to QMK, detailing some ways to make this task easier, and then later we'll break some things in order to teach you how to fix them.
6
7This document assumes a few things:
8
91. You have a GitHub account, and have [forked the qmk_firmware repository](getting_started_github.md) to your account.
102. You've [set up your build environment](newbs_getting_started.md?id=environment-setup).
11
12
13## Your fork's master: Update Often, Commit Never
14
15It is highly recommended for QMK development, regardless of what is being done or where, to keep your `master` branch updated, but ***never*** commit to it. Instead, do all your changes in a development branch and issue pull requests from your branches when you're developing.
16
17To reduce the chances of merge conflicts &mdash; instances where two or more users have edited the same part of a file concurrently &mdash; keep your `master` branch relatively up-to-date, and start any new developments by creating a new branch.
18
19### Updating your master branch
20
21To keep your `master` branch updated, it is recommended to add the QMK Firmware repository ("repo") as a remote repository in git. To do this, open your Git command line interface and enter:
22
23```
24git remote add upstream https://github.com/qmk/qmk_firmware.git
25```
26
27To verify that the repository has been added, run `git remote -v`, which should return the following:
28
29```
30$ git remote -v
31origin https://github.com/<your_username>/qmk_firmware.git (fetch)
32origin https://github.com/<your_username>/qmk_firmware.git (push)
33upstream https://github.com/qmk/qmk_firmware.git (fetch)
34upstream https://github.com/qmk/qmk_firmware.git (push)
35```
36
37Now that this is done, you can check for updates to the repo by running `git fetch upstream`. This retrieves the branches and tags &mdash; collectively referred to as "refs" &mdash; from the QMK repo, which now has the nickname `upstream`. We can now compare the data on our fork `origin` to that held by QMK.
38
39To update your fork's master, run the following, hitting the Enter key after each line:
40
41```
42git checkout master
43git fetch upstream
44git pull upstream master
45git push origin master
46```
47
48This switches you to your `master` branch, retrieves the refs from the QMK repo, downloads the current QMK `master` branch to your computer, and then uploads it to your fork.
49
50### Making Changes
51
52To make changes, create a new branch by entering:
53
54```
55git checkout -b dev_branch
56git push --set-upstream origin dev_branch
57```
58
59This creates a new branch named `dev_branch`, checks it out, and then saves the new branch to your fork. The `--set-upstream` argument tells git to use your fork and the `dev_branch` branch every time you use `git push` or `git pull` from this branch. It only needs to be used on the first push; after that, you can safely use `git push` or `git pull`, without the rest of the arguments.
60
61!> With `git push`, you can use `-u` in place of `--set-upstream` &mdash; `-u` is an alias for `--set-upstream`.
62
63You can name your branch nearly anything you want, though it is recommended to name it something related to the changes you are going to make.
64
65By default `git checkout -b` will base your new branch on the branch that is checked out. You can base your new branch on an existing branch that is not checked out by adding the name of the existing branch to the command:
66
67```
68git checkout -b dev_branch master
69```
70
71Now that you have a development branch, open your text editor and make whatever changes you need to make. It is recommended to make many small commits to your branch; that way, any change that causes issues can be more easily traced and undone if needed. To make your changes, edit and save any files that need to be updated, add them to Git's *staging area*, and then commit them to your branch:
72
73```
74git add path/to/updated_file
75git commit -m "My commit message."
76```
77
78`git add` adds files that have been changed to Git's *staging area*, which is Git's "loading zone." This contains the changes that are going to be *committed* by `git commit`, which saves the changes to the repo. Use descriptive commit messages so you can know what was changed at a glance.
79
80!> If you've changed a lot of files, but all the files are part of the same change, you can use `git add .` to add all the changed files that are in your current directory, rather than having to add each file individually.
81
82### Publishing Your Changes
83
84The last step is to push your changes to your fork. To do this, enter `git push`. Git now publishes the current state of `dev_branch` to your fork.
85
86
87## Resolving Merge Conflicts
88
89Sometimes when your work in a branch takes a long time to complete, changes that have been made by others conflict with changes you have made to your branch when you open a pull request. This is called a *merge conflict*, and is what happens when multiple people edit the same parts of the same files.
90
91### Rebasing Your Changes
92
93A *rebase* is Git's way of taking changes that were applied at one point, reversing them, and then applying the same changes to another point. In the case of a merge conflict, you can rebase your branch to grab the changes that were made between when you created your branch and the present time.
94
95To start, run the following:
96
97```
98git fetch upstream
99git rev-list --left-right --count HEAD...upstream/master
100```
101
102The `git rev-list` command entered here returns the number of commits that differ between the current branch and QMK's master branch. We run `git fetch` first to make sure we have the refs that represent the current state of the upstream repo. The output of the `git rev-list` command entered returns two numbers:
103
104```
105$ git rev-list --left-right --count HEAD...upstream/master
1067 35
107```
108
109The first number represents the number of commits on the current branch since it was created, and the second number is the number of commits made to `upstream/master` since the current branch was created, and thus, the changes that are not recorded in the current branch.
110
111Now that the current states of both the current branch and the upstream repo are known, we can start a rebase operation:
112
113```
114git rebase upstream/master
115```
116
117This tells Git to undo the commits on the current branch, and then reapply them against QMK's master branch.
118
119```
120$ git rebase upstream/master
121First, rewinding head to replay your work on top of it...
122Applying: Commit #1
123Using index info to reconstruct a base tree...
124M conflicting_file_1.txt
125Falling back to patching base and 3-way merge...
126Auto-merging conflicting_file_1.txt
127CONFLICT (content): Merge conflict in conflicting_file_1.txt
128error: Failed to merge in the changes.
129hint: Use 'git am --show-current-patch' to see the failed patch
130Patch failed at 0001 Commit #1
131
132Resolve all conflicts manually, mark them as resolved with
133"git add/rm <conflicted_files>", then run "git rebase --continue".
134You can instead skip this commit: run "git rebase --skip".
135To abort and get back to the state before "git rebase", run "git rebase --abort".
136```
137
138This tells us that we have a merge conflict, and gives the name of the file with the conflict. Open the conflicting file in your text editor, and somewhere in the file, you'll find something like this:
139
140```
141<<<<<<< HEAD
142<p>For help with any issues, email us at support@webhost.us.</p>
143=======
144<p>Need help? Email support@webhost.us.</p>
145>>>>>>> Commit #1
146```
147
148The line `<<<<<<< HEAD` marks the beginning of a merge conflict, and the `>>>>>>> Commit #1` line marks the end, with the conflicting sections separated by `=======`. The part on the `HEAD` side is from the QMK master version of the file, and the part marked with the commit message is from the current branch and commit.
149
150Because Git tracks *changes to files* rather than the contents of the files directly, if Git can't find the text that was in the file previous to the commit that was made, it won't know how to edit the file. Re-editing the file will solve the conflict. Make your changes, and then save the file.
151
152```
153<p>Need help? Email support@webhost.us.</p>
154```
155
156Now run:
157
158```
159git add conflicting_file_1.txt
160git rebase --continue
161```
162
163Git logs the changes to the conflicting file, and continues applying the commits from our branch until it reaches the end.
diff --git a/docs/newbs_git_best_practices.md b/docs/newbs_git_best_practices.md
new file mode 100644
index 000000000..c0cb3a294
--- /dev/null
+++ b/docs/newbs_git_best_practices.md
@@ -0,0 +1,16 @@
1# Best Git Practices for Working with QMK
2
3## Or, "How I Learned to Stop Worrying and Love Git."
4
5This section aims to instruct novices in the best ways to have a smooth experience in contributing to QMK. We will walk through the process of contributing to QMK, detailing some ways to make this task easier, and then later we'll break some things in order to teach you how to fix them.
6
7This section assumes a few things:
8
91. You have a GitHub account, and have [forked the qmk_firmware repository](getting_started_github.md) to your account.
102. You've set up both [your build environment](newbs_getting_started.md#set-up-your-environment) and [QMK](newbs_getting_started.md#set-up-qmk).
11
12---
13
14- Part 1: [Your Fork's Master: Update Often, Commit Never](newbs_git_using_your_master_branch.md)
15- Part 2: [Resolving Merge Conflicts](newbs_git_resolving_merge_conflicts.md)
16- Part 3: [Resynchronizing an Out-of-Sync Git Branch](newbs_git_resynchronize_a_branch.md)
diff --git a/docs/newbs_git_resolving_merge_conflicts.md b/docs/newbs_git_resolving_merge_conflicts.md
new file mode 100644
index 000000000..467c13abb
--- /dev/null
+++ b/docs/newbs_git_resolving_merge_conflicts.md
@@ -0,0 +1,79 @@
1# Resolving Merge Conflicts
2
3Sometimes when your work in a branch takes a long time to complete, changes that have been made by others conflict with changes you have made to your branch when you open a pull request. This is called a *merge conflict*, and is what happens when multiple people edit the same parts of the same files.
4
5?> This document builds upon the concepts detailed in [Your Fork's Master: Update Often, Commit Never](newbs_git_using_your_master_branch.md). If you are not familiar with that document, please read it first, then return here.
6
7## Rebasing Your Changes
8
9A *rebase* is Git's way of taking changes that were applied at one point in the commit history, reversing them, and then applying the same changes at another point. In the case of a merge conflict, you can rebase your branch to grab the changes that were made between when you created your branch and the present time.
10
11To start, run the following:
12
13```
14git fetch upstream
15git rev-list --left-right --count HEAD...upstream/master
16```
17
18The `git rev-list` command entered here returns the number of commits that differ between the current branch and QMK's master branch. We run `git fetch` first to make sure we have the refs that represent the current state of the upstream repo. The output of the `git rev-list` command entered returns two numbers:
19
20```
21$ git rev-list --left-right --count HEAD...upstream/master
227 35
23```
24
25The first number represents the number of commits on the current branch since it was created, and the second number is the number of commits made to `upstream/master` since the current branch was created, and thus, the changes that are not recorded in the current branch.
26
27Now that the current states of both the current branch and the upstream repo are known, we can start a rebase operation:
28
29```
30git rebase upstream/master
31```
32
33This tells Git to undo the commits on the current branch, and then reapply them against QMK's master branch.
34
35```
36$ git rebase upstream/master
37First, rewinding head to replay your work on top of it...
38Applying: Commit #1
39Using index info to reconstruct a base tree...
40M conflicting_file_1.txt
41Falling back to patching base and 3-way merge...
42Auto-merging conflicting_file_1.txt
43CONFLICT (content): Merge conflict in conflicting_file_1.txt
44error: Failed to merge in the changes.
45hint: Use 'git am --show-current-patch' to see the failed patch
46Patch failed at 0001 Commit #1
47
48Resolve all conflicts manually, mark them as resolved with
49"git add/rm <conflicted_files>", then run "git rebase --continue".
50You can instead skip this commit: run "git rebase --skip".
51To abort and get back to the state before "git rebase", run "git rebase --abort".
52```
53
54This tells us that we have a merge conflict, and gives the name of the file with the conflict. Open the conflicting file in your text editor, and somewhere in the file, you'll find something like this:
55
56```
57<<<<<<< HEAD
58<p>For help with any issues, email us at support@webhost.us.</p>
59=======
60<p>Need help? Email support@webhost.us.</p>
61>>>>>>> Commit #1
62```
63
64The line `<<<<<<< HEAD` marks the beginning of a merge conflict, and the `>>>>>>> Commit #1` line marks the end, with the conflicting sections separated by `=======`. The part on the `HEAD` side is from the QMK master version of the file, and the part marked with the commit message is from the current branch and commit.
65
66Because Git tracks *changes to files* rather than the contents of the files directly, if Git can't find the text that was in the file previous to the commit that was made, it won't know how to edit the file. Re-editing the file will solve the conflict. Make your changes, and then save the file.
67
68```
69<p>Need help? Email support@webhost.us.</p>
70```
71
72Now run:
73
74```
75git add conflicting_file_1.txt
76git rebase --continue
77```
78
79Git logs the changes to the conflicting file, and continues applying the commits from our branch until it reaches the end.
diff --git a/docs/newbs_git_resynchronize_a_branch.md b/docs/newbs_git_resynchronize_a_branch.md
new file mode 100644
index 000000000..2e6b26e09
--- /dev/null
+++ b/docs/newbs_git_resynchronize_a_branch.md
@@ -0,0 +1,71 @@
1# Resynchronizing an Out-of-Sync Git Branch
2
3Suppose you have committed to your `master` branch, and now need to update your QMK repository. You could `git pull` QMK's `master` branch into your own, but GitHub will tell you that your commit is a number of commits ahead of `qmk:master`, which can create issues if you want to make a pull request to QMK.
4
5?> This document builds upon the concepts detailed in [Your Fork's Master: Update Often, Commit Never](newbs_git_using_your_master_branch.md). If you are not familiar with that document, please read it first, then return here.
6
7## Backing Up the Changes on Your Own Master Branch (Optional)
8
9No one wants to lose work if it can be helped. If you want to save the changes you've already made to your `master` branch, the simplest way to do so is to simply create a duplicate of your "dirty" `master` branch:
10
11```sh
12git branch old_master master
13```
14
15Now you have a branch named `old_master` that is a duplicate of your `master` branch.
16
17## Resynchronizing Your Branch
18
19Now it's time to resynchronize your `master` branch. For this step, you'll want to have QMK's repository configured as a remote in Git. To check your configured remotes, run `git remote -v`, which should return something similar to:
20
21```sh
22QMKuser ~/qmk_firmware (master)
23$ git remote -v
24origin https://github.com/<your_username>/qmk_firmware.git (fetch)
25origin https://github.com/<your_username>/qmk_firmware.git (push)
26upstream https://github.com/qmk/qmk_firmware.git (fetch)
27upstream https://github.com/qmk/qmk_firmware.git (push)
28```
29
30If you only see one fork referenced:
31
32```sh
33QMKuser ~/qmk_firmware (master)
34$ git remote -v
35origin https://github.com/qmk/qmk_firmware.git (fetch)
36origin https://github.com/qmk/qmk_firmware.git (push)
37```
38
39add a new remote with:
40
41```sh
42git remote add upstream https://github.com/qmk/qmk_firmware.git
43```
44
45Then, redirect the `origin` remote to your own fork with:
46
47```sh
48git remote set-url origin https://github.com/<your_username>/qmk_firmware.git
49```
50
51Now that you have both remotes configured, you need to update the references for the upstream repository, which is QMK's, by running:
52
53```sh
54git fetch upstream
55```
56
57At this point, resynchronize your branch to QMK's by running:
58
59```sh
60git reset --hard upstream/master
61```
62
63These steps will update the repository on your computer, but your GitHub fork will still be out of sync. To resynchronize your fork on GitHub, you need to push to your fork, instructing Git to override any remote changes that are not reflected in your local repository. To do this, run:
64
65```sh
66git push --force-with-lease
67```
68
69!> **DO NOT** run `git push --force-with-lease` on a fork to which other users post commits. This will erase their commits.
70
71Now your GitHub fork, your local files, and QMK's repository are all the same. From here you can make further needed changes ([use a branch!](newbs_git_using_your_master_branch.md#making-changes)) and post them as normal.
diff --git a/docs/newbs_git_using_your_master_branch.md b/docs/newbs_git_using_your_master_branch.md
new file mode 100644
index 000000000..2032b83b2
--- /dev/null
+++ b/docs/newbs_git_using_your_master_branch.md
@@ -0,0 +1,74 @@
1# Your Fork's Master: Update Often, Commit Never
2
3It is highly recommended for QMK development, regardless of what is being done or where, to keep your `master` branch updated, but ***never*** commit to it. Instead, do all your changes in a development branch and issue pull requests from your branches when you're developing.
4
5To reduce the chances of merge conflicts &mdash; instances where two or more users have edited the same part of a file concurrently &mdash; keep your `master` branch relatively up-to-date, and start any new developments by creating a new branch.
6
7## Updating your master branch
8
9To keep your `master` branch updated, it is recommended to add the QMK Firmware repository ("repo") as a remote repository in git. To do this, open your Git command line interface and enter:
10
11```
12git remote add upstream https://github.com/qmk/qmk_firmware.git
13```
14
15?> The name `upstream` is arbitrary, but a common convention; you can give the QMK remote any name that suits you. Git's `remote` command uses the syntax `git remote add <name> <url>`, `<name>` being shorthand for the remote repo. This name can be used with many Git commands, including but not limited to `fetch`, `pull` and `push`, to specify the remote repo on which to act.
16
17To verify that the repository has been added, run `git remote -v`, which should return the following:
18
19```
20$ git remote -v
21origin https://github.com/<your_username>/qmk_firmware.git (fetch)
22origin https://github.com/<your_username>/qmk_firmware.git (push)
23upstream https://github.com/qmk/qmk_firmware.git (fetch)
24upstream https://github.com/qmk/qmk_firmware.git (push)
25```
26
27Now that this is done, you can check for updates to the repo by running `git fetch upstream`. This retrieves the branches and tags &mdash; collectively referred to as "refs" &mdash; from the QMK repo, which now has the nickname `upstream`. We can now compare the data on our fork `origin` to that held by QMK.
28
29To update your fork's master, run the following, hitting the Enter key after each line:
30
31```
32git checkout master
33git fetch upstream
34git pull upstream master
35git push origin master
36```
37
38This switches you to your `master` branch, retrieves the refs from the QMK repo, downloads the current QMK `master` branch to your computer, and then uploads it to your fork.
39
40## Making Changes
41
42To make changes, create a new branch by entering:
43
44```
45git checkout -b dev_branch
46git push --set-upstream origin dev_branch
47```
48
49This creates a new branch named `dev_branch`, checks it out, and then saves the new branch to your fork. The `--set-upstream` argument tells git to use your fork and the `dev_branch` branch every time you use `git push` or `git pull` from this branch. It only needs to be used on the first push; after that, you can safely use `git push` or `git pull`, without the rest of the arguments.
50
51?> With `git push`, you can use `-u` in place of `--set-upstream` &mdash; `-u` is an alias for `--set-upstream`.
52
53You can name your branch nearly anything you want, though it is recommended to name it something related to the changes you are going to make.
54
55By default `git checkout -b` will base your new branch on the branch that is currently checked out. You can base your new branch on an existing branch that is not checked out by adding the name of the existing branch to the command:
56
57```
58git checkout -b dev_branch master
59```
60
61Now that you have a development branch, open your text editor and make whatever changes you need to make. It is recommended to make many small commits to your branch; that way, any change that causes issues can be more easily traced and undone if needed. To make your changes, edit and save any files that need to be updated, add them to Git's *staging area*, and then commit them to your branch:
62
63```
64git add path/to/updated_file
65git commit -m "My commit message."
66```
67
68`git add` adds files that have been changed to Git's *staging area*, which is Git's "loading zone." This contains the changes that are going to be *committed* by `git commit`, which saves the changes to the repo. Use descriptive commit messages so you can know what was changed at a glance.
69
70?> If you've changed multiple files, you can use `git add -- path/to/file1 path/to/file2 ...` to add all your desired files.
71
72## Publishing Your Changes
73
74The last step is to push your changes to your fork. To do this, enter `git push`. Git will then publish the current state of `dev_branch` to your fork.
diff --git a/docs/proton_c_conversion.md b/docs/proton_c_conversion.md
index 8014a35e0..dc0a3f484 100644
--- a/docs/proton_c_conversion.md
+++ b/docs/proton_c_conversion.md
@@ -29,3 +29,5 @@ These are defaults based on what has been implemented for ARM boards.
29| [Audio](feature_audio.md) | Enabled | 29| [Audio](feature_audio.md) | Enabled |
30| [RGB Lighting](feature_rgblight.md) | Disabled | 30| [RGB Lighting](feature_rgblight.md) | Disabled |
31| [Backlight](feature_backlight.md) | Forces [task driven PWM](feature_backlight.md#software-pwm-driver) until ARM can provide automatic configuration | 31| [Backlight](feature_backlight.md) | Forces [task driven PWM](feature_backlight.md#software-pwm-driver) until ARM can provide automatic configuration |
32| USB Host (e.g. USB-USB converter) | Not supported (USB host code is AVR specific and is not currently supported on ARM) |
33| [Split keyboards](feature_split_keyboard.md) | Not supported yet |
diff --git a/docs/pt-br/README.md b/docs/pt-br/README.md
new file mode 100644
index 000000000..7cff6ce62
--- /dev/null
+++ b/docs/pt-br/README.md
@@ -0,0 +1,31 @@
1# Quantum Mechanical Keyboard Firmware
2
3[![Current Version](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)
4[![Build Status](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware)
5[![Discord](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh)
6[![Docs Status](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
7[![GitHub contributors](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly)
8[![GitHub forks](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/)
9
10## O que é o firmware QMK?
11QMK (*Quantum Mechanical Keyboard*) é uma comunidade de código aberto que mantém o QMK Firmware, o QMK Toolbox, qmk.fm e suas documentações. O QMK Firmware é um software embarcado ("firmware") de teclado baseado no [tmk\_keyboard](http://github.com/tmk/tmk_keyboard) com alguns recursos úteis para os controladores Atmel AVR e, mais especificamente, na [linha de produtos OLKB](http://olkb.com), o teclado [ErgoDox EZ](http://www.ergodox-ez.com) e a [linha de produtos Clueboard](http://clueboard.co/). Também foi portado para chips ARM usando o ChibiOS. Você pode usá-lo no seu próprio teclado com fio ou personalizado.
12
13## Como obter e usar o QMK
14
15Se você planeja contribuir com um _keymap_ ("mapa de teclas"), teclado ou recursos para o QMK, o jeito mais fácil é [percorrer o repositório através do Github](https://github.com/qmk/qmk_firmware#fork-destination-box) e clonar seu repositório localmente para fazer suas alterações, dê um _push_ nelas e abra uma [_Pull request_](https://github.com/qmk/qmk_firmware/pulls) no seu fork.
16
17Caso contrário, você pode cloná-lo diretamente com `git clone https://github.com/qmk/qmk_firmware`. Não faça o download dos arquivos zip ou tar; é necessário um repositório git para baixar os submódulos para compilar.
18
19## Como compilar
20
21Antes de compilar, você precisará [instalar um ambiente específico](getting_started_build_tools.md) para o desenvolvimento em plataforma AVR e/ou ARM; vez que isto for feito, você usará o comando `make` para criar um teclado e um mapa de teclas com a seguinte notação:
22
23 make planck/rev4:default
24
25Isso compilaria a revisão `rev4` do teclado ` planck` com o mapa de teclas `default`. Nem todos os teclados têm revisões (também chamadas de _subprojects_ ou _folders_); nesse caso, a revisão pode ser omitida:
26
27 make preonic:default
28
29## Como personalizar
30
31O QMK tem muitos [recursos](features.md) para explorar e uma boa quantidade de [documentação de referência](http://docs.qmk.fm) para explorar. A maioria dos recursos é aproveitada modificando seu [keymap](keymap.md) e alterando os [keycodes](keycodes.md).
diff --git a/docs/pt-br/_summary.md b/docs/pt-br/_summary.md
new file mode 100644
index 000000000..27efd73ab
--- /dev/null
+++ b/docs/pt-br/_summary.md
@@ -0,0 +1,121 @@
1* [Complete Newbs Guide](pt-br/newbs.md)
2 * [Getting Started](pt-br/newbs_getting_started.md)
3 * [Building Your First Firmware](pt-br/newbs_building_firmware.md)
4 * [Flashing Firmware](pt-br/newbs_flashing.md)
5 * [Testing and Debugging](pt-br/newbs_testing_debugging.md)
6 * [Git Best Practices](pt-br/newbs_best_practices.md)
7 * [Learning Resources](pt-br/newbs_learn_more_resources.md)
8
9* [QMK Basics](pt-br/README.md)
10 * [QMK Introduction](pt-br/getting_started_introduction.md)
11 * [QMK CLI](pt-br/cli.md)
12 * [QMK CLI Config](pt-br/cli_configuration.md)
13 * [Contributing to QMK](pt-br/contributing.md)
14 * [How to Use Github](pt-br/getting_started_github.md)
15 * [Getting Help](pt-br/getting_started_getting_help.md)
16
17* [Breaking Changes](pt-br/breaking_changes.md)
18 * [2019 Aug 30](pt-br/ChangeLog/20190830.md)
19
20* [FAQ](faq.md)
21 * [General FAQ](pt-br/faq_general.md)
22 * [Build/Compile QMK](pt-br/faq_build.md)
23 * [Debugging/Troubleshooting QMK](pt-br/faq_debug.md)
24 * [Keymap](pt-br/faq_keymap.md)
25 * [Driver Installation with Zadig](pt-br/driver_installation_zadig.md)
26
27* Detailed Guides
28 * [Install Build Tools](pt-br/getting_started_build_tools.md)
29 * [Vagrant Guide](pt-br/getting_started_vagrant.md)
30 * [Build/Compile Instructions](pt-br/getting_started_make_guide.md)
31 * [Flashing Firmware](pt-br/flashing.md)
32 * [Customizing Functionality](pt-br/custom_quantum_functions.md)
33 * [Keymap Overview](pt-br/keymap.md)
34
35* [Hardware](hardware.md)
36 * [AVR Processors](pt-br/hardware_avr.md)
37 * [Drivers](pt-br/hardware_drivers.md)
38
39* Reference
40 * [Keyboard Guidelines](pt-br/hardware_keyboard_guidelines.md)
41 * [Config Options](pt-br/config_options.md)
42 * [Keycodes](pt-br/keycodes.md)
43 * [Coding Conventions - C](pt-br/coding_conventions_c.md)
44 * [Coding Conventions - Python](pt-br/coding_conventions_python.md)
45 * [Documentation Best Practices](pt-br/documentation_best_practices.md)
46 * [Documentation Templates](pt-br/documentation_templates.md)
47 * [Glossary](pt-br/reference_glossary.md)
48 * [Unit Testing](pt-br/unit_testing.md)
49 * [Useful Functions](pt-br/ref_functions.md)
50 * [Configurator Support](pt-br/reference_configurator_support.md)
51 * [info.json Format](pt-br/reference_info_json.md)
52 * [Python CLI Development](pt-br/cli_development.md)
53
54* [Features](pt-br/features.md)
55 * [Basic Keycodes](pt-br/keycodes_basic.md)
56 * [US ANSI Shifted Keys](pt-br/keycodes_us_ansi_shifted.md)
57 * [Quantum Keycodes](pt-br/quantum_keycodes.md)
58 * [Advanced Keycodes](pt-br/feature_advanced_keycodes.md)
59 * [Audio](pt-br/feature_audio.md)
60 * [Auto Shift](pt-br/feature_auto_shift.md)
61 * [Backlight](pt-br/feature_backlight.md)
62 * [Bluetooth](pt-br/feature_bluetooth.md)
63 * [Bootmagic](pt-br/feature_bootmagic.md)
64 * [Combos](pt-br/feature_combo.md)
65 * [Command](pt-br/feature_command.md)
66 * [Debounce API](pt-br/feature_debounce_type.md)
67 * [DIP Switch](pt-br/feature_dip_switch.md)
68 * [Dynamic Macros](pt-br/feature_dynamic_macros.md)
69 * [Encoders](pt-br/feature_encoders.md)
70 * [Grave Escape](pt-br/feature_grave_esc.md)
71 * [Haptic Feedback](pt-br/feature_haptic_feedback.md)
72 * [HD44780 LCD Controller](pt-br/feature_hd44780.md)
73 * [Key Lock](pt-br/feature_key_lock.md)
74 * [Layouts](pt-br/feature_layouts.md)
75 * [Leader Key](pt-br/feature_leader_key.md)
76 * [LED Matrix](pt-br/feature_led_matrix.md)
77 * [Macros](pt-br/feature_macros.md)
78 * [Mouse Keys](pt-br/feature_mouse_keys.md)
79 * [OLED Driver](pt-br/feature_oled_driver.md)
80 * [One Shot Keys](pt-br/feature_advanced_keycodes.md#one-shot-keys)
81 * [Pointing Device](pt-br/feature_pointing_device.md)
82 * [PS/2 Mouse](pt-br/feature_ps2_mouse.md)
83 * [RGB Lighting](pt-br/feature_rgblight.md)
84 * [RGB Matrix](pt-br/feature_rgb_matrix.md)
85 * [Space Cadet](pt-br/feature_space_cadet.md)
86 * [Split Keyboard](pt-br/feature_split_keyboard.md)
87 * [Stenography](pt-br/feature_stenography.md)
88 * [Swap Hands](pt-br/feature_swap_hands.md)
89 * [Tap Dance](pt-br/feature_tap_dance.md)
90 * [Terminal](pt-br/feature_terminal.md)
91 * [Thermal Printer](pt-br/feature_thermal_printer.md)
92 * [Unicode](pt-br/feature_unicode.md)
93 * [Userspace](pt-br/feature_userspace.md)
94 * [Velocikey](pt-br/feature_velocikey.md)
95
96* For Makers and Modders
97 * [Hand Wiring Guide](pt-br/hand_wire.md)
98 * [ISP Flashing Guide](pt-br/isp_flashing_guide.md)
99 * [ARM Debugging Guide](pt-br/arm_debugging.md)
100 * [I2C Driver](pt-br/i2c_driver.md)
101 * [GPIO Controls](pt-br/internals_gpio_control.md)
102 * [Proton C Conversion](pt-br/proton_c_conversion.md)
103
104* For a Deeper Understanding
105 * [How Keyboards Work](pt-br/how_keyboards_work.md)
106 * [Understanding QMK](pt-br/understanding_qmk.md)
107
108* Other Topics
109 * [Using Eclipse with QMK](pt-br/other_eclipse.md)
110 * [Using VSCode with QMK](pt-br/other_vscode.md)
111 * [Support](pt-br/support.md)
112 * [How to add translations](pt-br/translating.md)
113
114* QMK Internals (In Progress)
115 * [Defines](pt-br/internals_defines.md)
116 * [Input Callback Reg](pt-br/internals_input_callback_reg.md)
117 * [Midi Device](pt-br/internals_midi_device.md)
118 * [Midi Device Setup Process](pt-br/internals_midi_device_setup_process.md)
119 * [Midi Util](pt-br/internals_midi_util.md)
120 * [Send Functions](pt-br/internals_send_functions.md)
121 * [Sysex Tools](pt-br/internals_sysex_tools.md)
diff --git a/docs/ru-ru/_summary.md b/docs/ru-ru/_summary.md
new file mode 100644
index 000000000..3269ac86d
--- /dev/null
+++ b/docs/ru-ru/_summary.md
@@ -0,0 +1,123 @@
1* [Complete Newbs Guide](ru-ru/newbs.md)
2 * [Getting Started](ru-ru/newbs_getting_started.md)
3 * [Building Your First Firmware](ru-ru/newbs_building_firmware.md)
4 * [Flashing Firmware](ru-ru/newbs_flashing.md)
5 * [Testing and Debugging](ru-ru/newbs_testing_debugging.md)
6 * [Git Best Practices](ru-ru/newbs_best_practices.md)
7 * [Learning Resources](ru-ru/newbs_learn_more_resources.md)
8
9* [QMK Basics](ru-ru/README.md)
10 * [QMK Introduction](ru-ru/getting_started_introduction.md)
11 * [QMK CLI](ru-ru/cli.md)
12 * [QMK CLI Config](ru-ru/cli_configuration.md)
13 * [Contributing to QMK](ru-ru/contributing.md)
14 * [How to Use Github](ru-ru/getting_started_github.md)
15 * [Getting Help](ru-ru/getting_started_getting_help.md)
16
17* [Breaking Changes](ru-ru/breaking_changes.md)
18 * [2019 Aug 30](ru-ru/ChangeLog/20190830.md)
19
20* [FAQ](ru-ru/faq.md)
21 * [General FAQ](ru-ru/faq_general.md)
22 * [Build/Compile QMK](ru-ru/faq_build.md)
23 * [Debugging/Troubleshooting QMK](ru-ru/faq_debug.md)
24 * [Keymap](ru-ru/faq_keymap.md)
25 * [Driver Installation with Zadig](ru-ru/driver_installation_zadig.md)
26
27* Detailed Guides
28 * [Install Build Tools](ru-ru/getting_started_build_tools.md)
29 * [Vagrant Guide](ru-ru/getting_started_vagrant.md)
30 * [Build/Compile Instructions](ru-ru/getting_started_make_guide.md)
31 * [Flashing Firmware](ru-ru/flashing.md)
32 * [Customizing Functionality](ru-ru/custom_quantum_functions.md)
33 * [Keymap Overview](ru-ru/keymap.md)
34
35* [Hardware](ru-ru/hardware.md)
36 * [Compatible Microcontrollers](ru-ru/compatible_microcontrollers.md)
37 * [AVR Processors](ru-ru/hardware_avr.md)
38 * [Drivers](ru-ru/hardware_drivers.md)
39
40* Reference
41 * [Keyboard Guidelines](ru-ru/hardware_keyboard_guidelines.md)
42 * [Config Options](ru-ru/config_options.md)
43 * [Keycodes](ru-ru/keycodes.md)
44 * [Coding Conventions - C](ru-ru/coding_conventions_c.md)
45 * [Coding Conventions - Python](ru-ru/coding_conventions_python.md)
46 * [Documentation Best Practices](ru-ru/documentation_best_practices.md)
47 * [Documentation Templates](ru-ru/documentation_templates.md)
48 * [Glossary](ru-ru/reference_glossary.md)
49 * [Unit Testing](ru-ru/unit_testing.md)
50 * [Useful Functions](ru-ru/ref_functions.md)
51 * [Configurator Support](ru-ru/reference_configurator_support.md)
52 * [info.json Format](ru-ru/reference_info_json.md)
53 * [Python CLI Development](ru-ru/cli_development.md)
54
55* [Features](ru-ru/features.md)
56 * [Basic Keycodes](ru-ru/keycodes_basic.md)
57 * [US ANSI Shifted Keys](ru-ru/keycodes_us_ansi_shifted.md)
58 * [Quantum Keycodes](ru-ru/quantum_keycodes.md)
59 * [Advanced Keycodes](ru-ru/feature_advanced_keycodes.md)
60 * [Audio](ru-ru/feature_audio.md)
61 * [Auto Shift](ru-ru/feature_auto_shift.md)
62 * [Backlight](ru-ru/feature_backlight.md)
63 * [Bluetooth](ru-ru/feature_bluetooth.md)
64 * [Bootmagic](ru-ru/feature_bootmagic.md)
65 * [Combos](ru-ru/feature_combo.md)
66 * [Command](ru-ru/feature_command.md)
67 * [Debounce API](ru-ru/feature_debounce_type.md)
68 * [DIP Switch](ru-ru/feature_dip_switch.md)
69 * [Dynamic Macros](ru-ru/feature_dynamic_macros.md)
70 * [Encoders](ru-ru/feature_encoders.md)
71 * [Grave Escape](ru-ru/feature_grave_esc.md)
72 * [Haptic Feedback](ru-ru/feature_haptic_feedback.md)
73 * [HD44780 LCD Controller](ru-ru/feature_hd44780.md)
74 * [Key Lock](ru-ru/feature_key_lock.md)
75 * [Layouts](ru-ru/feature_layouts.md)
76 * [Leader Key](ru-ru/feature_leader_key.md)
77 * [LED Matrix](ru-ru/feature_led_matrix.md)
78 * [Macros](ru-ru/feature_macros.md)
79 * [Mouse Keys](ru-ru/feature_mouse_keys.md)
80 * [OLED Driver](ru-ru/feature_oled_driver.md)
81 * [One Shot Keys](ru-ru/feature_advanced_keycodes.md#one-shot-keys)
82 * [Pointing Device](ru-ru/feature_pointing_device.md)
83 * [PS/2 Mouse](ru-ru/feature_ps2_mouse.md)
84 * [RGB Lighting](ru-ru/feature_rgblight.md)
85 * [RGB Matrix](ru-ru/feature_rgb_matrix.md)
86 * [Space Cadet](ru-ru/feature_space_cadet.md)
87 * [Split Keyboard](ru-ru/feature_split_keyboard.md)
88 * [Stenography](ru-ru/feature_stenography.md)
89 * [Swap Hands](ru-ru/feature_swap_hands.md)
90 * [Tap Dance](ru-ru/feature_tap_dance.md)
91 * [Terminal](ru-ru/feature_terminal.md)
92 * [Thermal Printer](ru-ru/feature_thermal_printer.md)
93 * [Unicode](ru-ru/feature_unicode.md)
94 * [Userspace](ru-ru/feature_userspace.md)
95 * [Velocikey](ru-ru/feature_velocikey.md)
96
97* For Makers and Modders
98 * [Hand Wiring Guide](ru-ru/hand_wire.md)
99 * [ISP Flashing Guide](ru-ru/isp_flashing_guide.md)
100 * [ARM Debugging Guide](ru-ru/arm_debugging.md)
101 * [I2C Driver](ru-ru/i2c_driver.md)
102 * [WS2812 Driver](ru-ru/ws2812_driver.md)
103 * [GPIO Controls](ru-ru/internals_gpio_control.md)
104 * [Proton C Conversion](ru-ru/proton_c_conversion.md)
105
106* For a Deeper Understanding
107 * [How Keyboards Work](ru-ru/how_keyboards_work.md)
108 * [Understanding QMK](ru-ru/understanding_qmk.md)
109
110* Other Topics
111 * [Using Eclipse with QMK](ru-ru/other_eclipse.md)
112 * [Using VSCode with QMK](ru-ru/other_vscode.md)
113 * [Support](ru-ru/support.md)
114 * [Translating the QMK Docs](ru-ru/translating.md)
115
116* QMK Internals (In Progress)
117 * [Defines](ru-ru/internals_defines.md)
118 * [Input Callback Reg](ru-ru/internals_input_callback_reg.md)
119 * [Midi Device](ru-ru/internals_midi_device.md)
120 * [Midi Device Setup Process](ru-ru/internals_midi_device_setup_process.md)
121 * [Midi Util](ru-ru/internals_midi_util.md)
122 * [Send Functions](ru-ru/internals_send_functions.md)
123 * [Sysex Tools](ru-ru/internals_sysex_tools.md)
diff --git a/docs/ru-ru/becoming_a_qmk_collaborator.md b/docs/ru-ru/becoming_a_qmk_collaborator.md
new file mode 100644
index 000000000..653f01ac8
--- /dev/null
+++ b/docs/ru-ru/becoming_a_qmk_collaborator.md
@@ -0,0 +1,9 @@
1# Стать соавтором QMK
2
3Соавтор QMK - это производитель или разработчик клавиатуры, который заинтересован в том, чтобы помочь QMK вырасти. Для этого он полностью поддерживает свои клавиатуры, поощряет пользователей и клиентов создавать новый функционал, идеи и раскладки клавиатур. Мы всегда стремимся добавлять больше клавиатур и соавторов, но нам важно, чтобы они соответствовали следующим требованиям:
4
5* **Иметь печатную плату на продажу.** К сожалению, у собранных вручную клавиатур слишком много вариаций и сложностей.
6* **Поддерживать вашу клавиатуру в QMK.** Это может потребовать просто начальной настройки, чтобы ваша клавиатура заработала. Но поддержка также может заключаться в адаптации изменений ядра QMK, которые способны сломать или сделать избыточным любой пользовательский код.
7* **Одобрять и производить слияние пулреквестов для вашей клавиатуры.** Мы призываем пользователей делиться своими раскладками клавиатур, чтобы другие могли их видеть и опираться на них при создании своих собственных.
8
9Если вы чувствуете, что удовлетворяете этим требованиям, напишите нам письмо по адресу hello@qmk.fm с кратким описанием и ссылками на вашу клавиатуру!
diff --git a/docs/ru-ru/getting_started_build_tools.md b/docs/ru-ru/getting_started_build_tools.md
index f59068533..facdf3563 100644
--- a/docs/ru-ru/getting_started_build_tools.md
+++ b/docs/ru-ru/getting_started_build_tools.md
@@ -119,21 +119,6 @@ git
119* WSL Git **не** совместим с Windows Git, поэтому используйте Windows Git Bash или Windows Git GUI для всех операций с Git. 119* WSL Git **не** совместим с Windows Git, поэтому используйте Windows Git Bash или Windows Git GUI для всех операций с Git.
120* Вы можете изменять файлы как внутри WSL, так и просто через Windows. Но обратите внимание, что если вы изменяете makefiles или сценарии командной строки, вы должны убедиться, что используете текстовый редактор, который сохраняет файлы с переводом строки в стиле Unix (Unix line endings). В противном случае компиляция может не работать. 120* Вы можете изменять файлы как внутри WSL, так и просто через Windows. Но обратите внимание, что если вы изменяете makefiles или сценарии командной строки, вы должны убедиться, что используете текстовый редактор, который сохраняет файлы с переводом строки в стиле Unix (Unix line endings). В противном случае компиляция может не работать.
121 121
122## Windows (Vista и новее) (устарело)
123
124Это устаревшие инструкции для Windows Vista и более новых версий. Мы рекомендуем использовать [MSYS2, как сказано выше](#windows-с-msys2-рекомендуется).
125
1261. Если вы когда-то устанавливали WinAVR, удалите его.
1272. Установите [MHV AVR Tools](https://infernoembedded.com/sites/default/files/project/MHV_AVR_Tools_20131101.exe). Отключите smatch, но **оставьте галочку напротив опции добавления инструмента в PATH**.
1283. Если вы собираетесь прошивать клавиатуры на базе Infinity, вам нужно установить dfu-util. Обратитесь к инструкциям от [Input Club](https://github.com/kiibohd/controller/wiki/Loading-DFU-Firmware).
1294. Установите [MinGW](https://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download). Во время установки отключите опцию установки графического пользовательского интерфейса. **НЕ ИЗМЕНЯЙТЕ директорию для установки по умолчанию.** Скрипты зависят от расположения по умолчанию.
1305. Выполните клонирование данного репозитория. [Эта ссылка скачает его в виде zip-файла, который вам нужно будет разархивировать.](https://github.com/qmk/qmk_firmware/archive/master.zip) Откройте извлеченную папку в проводнике Windows.
1316. Перейдите в папку `\util`.
1327. Запустите двойным щелчком пакетный файл сценария `1-setup-path-win`. Вам нужно будет согласиться с уведомлением контроля учетных записей пользователей (User Account Control, UAC). Нажмите пробел, чтобы закрыть появившееся сообщение об успешном выполнении операции в командной строке.
1338. Кликните правой кнопкой по пакетному файлу сценария `2-setup-environment-win`, выберите "Запуск от имени администратора" и согласитесь с уведомлением UAC. Это может занять пару минут, и вам потребуется подтвердить установку драйвера. Как только сценарий завершит свою работу, ваше окружение будет готово!
134
135Если у вас возникли проблемы и вам нужна помощь, будет полезно сгенерировать файл *Win_Check_Output.txt*, запустив `Win_Check.bat` в папке `\util`.
136
137## Docker 122## Docker
138 123
139Если это немного сложновато для вас, Docker может стать готовым решением, которое вы ищите. После установки [Docker CE](https://docs.docker.com/install/#supported-platforms) выполните следующую команду из директории `qmk_firmware`, чтобы собрать клавиатуру/раскладку: 124Если это немного сложновато для вас, Docker может стать готовым решением, которое вы ищите. После установки [Docker CE](https://docs.docker.com/install/#supported-platforms) выполните следующую команду из директории `qmk_firmware`, чтобы собрать клавиатуру/раскладку:
diff --git a/docs/ru-ru/getting_started_getting_help.md b/docs/ru-ru/getting_started_getting_help.md
new file mode 100644
index 000000000..75be44310
--- /dev/null
+++ b/docs/ru-ru/getting_started_getting_help.md
@@ -0,0 +1,15 @@
1# Получение помощи
2
3Существует много ресурсов для получения помощи по работе с QMK.
4
5## Чат в реальном времени
6
7Вы можете найти разработчиков и пользователей QMK на нашем главном [сервере Discord](https://discord.gg/Uq7gcHh). На сервере есть специальные каналы для разговоров о прошивке, Toolbox, оборудовании и конфигураторе.
8
9## OLKB Сабреддит
10
11Официальный форум QMK [/r/olkb](https://reddit.com/r/olkb) на [reddit.com](https://reddit.com).
12
13## GitHub ишью
14
15Вы можете открыть [ишью на GitHub](https://github.com/qmk/qmk_firmware/issues). Это особенно удобно, когда ваша проблема потребует длительного обсуждения или отладки.
diff --git a/docs/ru-ru/getting_started_github.md b/docs/ru-ru/getting_started_github.md
new file mode 100644
index 000000000..8a0fd07a2
--- /dev/null
+++ b/docs/ru-ru/getting_started_github.md
@@ -0,0 +1,58 @@
1# Как использовать GitHub с QMK
2
3GitHub может показаться несколько сложным для тех, кто никогда с ним не работал. В данном руководстве будет разобран каждый шаг создания форка, клонирования и отправки пулреквеста в QMK.
4
5?> В этом руководстве предполагается, что вы в какой-то степени знакомы с работой в командной строке, и в вашей системе установлен git.
6
7Откройте [страницу QMK на GitHub] (https://github.com/qmk/qmk_firmware), и в правом верхнем углу вы увидите кнопку с надписью "Fork":
8
9![Fork on Github](http://i.imgur.com/8Toomz4.jpg)
10
11Если вы состоите в какой-либо организации, вам нужно выбрать учетную запись, к которой будет привязан форк. В большинстве случаев это будет личной аккаунт. Как только ваш форк будет завершен (иногда это занимает немного времени), нажмите кнопку "Clone or Download":
12![Download from Github](http://i.imgur.com/N1NYcSz.jpg)
13
14И обязательно выберите "HTTPS", затем выделите ссылку и скопируйте ее:
15
16![HTTPS link](http://i.imgur.com/eGO0ohO.jpg)
17
18Теперь введите `git clone` в командную строку, а затем вставьте ссылку:
19
20```
21user@computer:~$ git clone https://github.com/whoeveryouare/qmk_firmware.git
22Cloning into 'qmk_firmware'...
23remote: Counting objects: 46625, done.
24remote: Compressing objects: 100% (2/2), done.
25remote: Total 46625 (delta 0), reused 0 (delta 0), pack-reused 46623
26Receiving objects: 100% (46625/46625), 84.47 MiB | 3.14 MiB/s, done.
27Resolving deltas: 100% (29362/29362), done.
28Checking out files: 100% (2799/2799), done.
29```
30
31Теперь у вас есть форк QMK на вашем локальном компьютере, и вы можете добавить свою раскладку, скомпилировать ее и прошить ей свою клавиатуру. Как только вы будете довольны своими изменениями, есть возможность добавить, зафиксировать их и сделать коммит в свой форк следующим образом:
32
33```
34user@computer:~$ git add .
35user@computer:~$ git commit -m "adding my keymap"
36[master cccb1608] adding my keymap
37 1 file changed, 1 insertion(+)
38 create mode 100644 keyboards/planck/keymaps/mine/keymap.c
39user@computer:~$ git push
40Counting objects: 1, done.
41Delta compression using up to 4 threads.
42Compressing objects: 100% (1/1), done.
43Writing objects: 100% (1/1), 1.64 KiB | 0 bytes/s, done.
44Total 1 (delta 1), reused 0 (delta 0)
45remote: Resolving deltas: 100% (1/1), completed with 1 local objects.
46To https://github.com/whoeveryouare/qmk_firmware.git
47 + 20043e64...7da94ac5 master -> master
48```
49
50Ваши изменения теперь существуют в вашем форке на GitHub - если вернуться туда (`https://github.com/<whoeveryouare>/qmk_firmware`), вы сможете создать "New Pull Request" нажатием на кнопку:
51
52![New Pull Request](http://i.imgur.com/DxMHpJ8.jpg)
53
54Здесь вы сможете увидеть, какие именно изменения были внесены, - если все выглядит хорошо, вы можете завершить его, нажав "Create Pull Request":
55
56![Create Pull Request](http://i.imgur.com/Ojydlaj.jpg)
57
58После отправки мы можем расспросить вас о ваших изменениях, попросить внести корректировки и в конечном итоге принять их! Спасибо за ваш вклад в QMK :)
diff --git a/docs/ru-ru/getting_started_introduction.md b/docs/ru-ru/getting_started_introduction.md
new file mode 100644
index 000000000..142fe4254
--- /dev/null
+++ b/docs/ru-ru/getting_started_introduction.md
@@ -0,0 +1,58 @@
1# Введение
2
3Эта страница пытается объяснить основную информацию, которую вы должны знать, чтобы работать с проектом QMK. Предполагается, что вы знакомы с навигацией в оболочке Unix, но не предполагается, что вы знакомы с C или с компиляцией с использованием make.
4
5## Базовая структура QMK
6
7QMK - это форк [Джуна Вако (Jun Wako)](https://github.com/tmk) проекта [tmk_keyboard](https://github.com/tmk/tmk_keyboard). Оригинальный код TMK с изменениями можно найти в папке `tmk`. Дополнения QMK к проекту можно найти в папке `quantum`. Проекты клавиатур можно найти в папках `handwired` и `keyboard`.
8
9### Структура пространства пользователя
10
11Внутри папки `users` находится каталог для каждого пользователя. Это место для пользователей, куда они могут поместить код, чтобы использовать его с разными клавиатурами. Для получения дополнительной информации обратитесь к документации по [функциям пользовательского пространства](ru-ru/feature_userspace.md).
12
13### Структура проекта клавиатуры
14
15Внутри папки `keyboards` есть подпапки `handwired` и есть подкаталоги поставщиков и производителей, для примера, `clueboard` - это каталог для каждого проекта клавиатуры, например, `qmk_firmware/keyboards/clueboard/2x1800`. В нем вы найдете следующую структуру:
16* `keymaps/`: Различные раскладки клавиш, которые можно собрать.
17* `rules.mk`: Файл, который устанавливает параметры по умолчанию для команды "make". Не редактируйте этот файл напрямую, вместо этого используйте `rules.mk`, относящийся к конкретной раскладке.
18* `config.h`: Файл, который устанавливает параметры времени компиляции по умолчанию. Не редактируйте этот файл напрямую, вместо этого используйте `config.h`, относящийся к конкретной раскладке.
19* `info.json`: Файл настройки раскладки для QMK Configurator. Посмотрите [Поддержку конфигуратора](ru-ru/reference_configurator_support.md) для дополнительной информации.
20* `readme.md`: Краткий обзор клавиатуры.
21* `<keyboardName>.h`: В этом файле определяется раскладка клавиатуры по матрице переключателей клавиатуры.
22* `<keyboardName>.c`: В этом файле вы можете найти пользовательский код для клавиатуры.
23
24Для получения дополнительной информации о структуре проекта обратитесь к [Руководству QMK по клавиатуре](ru-ru/hardware_keyboard_guidelines.md).
25
26### Структура раскладки клавиатуры
27
28В каждой папке раскладки клавиатуры могут быть найдены следующие файлы. Обязательным является только файл `keymap.c`, и если остальные файлы не найдены, то будут выбраны параметры по умолчанию.
29
30* `config.h`: настройки вашей раскладки клавиатуры.
31* `keymap.c`: весь код вашей раскладки клавиатуры (обязателен).
32* `rules.mk`: активированные функции QMK.
33* `readme.md`: описание вашей раскладки клавиш, как ее могут использовать другие, и объяснения функций. Пожалуйста, загрузите изображения на сервис, такой как imgur.
34
35# Файл `config.h`
36
37Существует 3 возможных местоположения `config.h`:
38
39* клавиатура (`/keyboards/<keyboard>/config.h`)
40* пространство пользователя (`/users/<user>/config.h`)
41* раскладка клавиш (`/keyboards/<keyboard>/keymaps/<keymap>/config.h`)
42
43Система сборки автоматически загружает файлы конфигурации в указанном выше порядке. Если вы хотите переопределить любую настройку, заданную предыдущим `config.h`, вам сначала нужно будет включить некоторый шаблонный код для настроек, которые вы хотите изменить.
44
45```
46#pragma once
47```
48
49Затем, чтобы переопределить настройку из предыдущего файла `config.h`, вы должны сделать `#undef` и `#define` для неё снова.
50
51Код и настройка шаблона вместе выглядят так:
52```
53#pragma once
54
55// Переопределения производятся здесь!
56#undef MY_SETTING
57#define MY_SETTING 4
58```
diff --git a/docs/translating.md b/docs/translating.md
index 6eb268763..436581759 100644
--- a/docs/translating.md
+++ b/docs/translating.md
@@ -1,29 +1,55 @@
1# How to translate the QMK docs into different languages 1# Translating the QMK Docs
2 2
3All files in the root folder (`docs/`) should be in English - all other languages should be in subfolders with the ISO 639-1 language codes, followed by `-` and the country code where relevant. [A list of common ones can be found here](https://www.andiamo.co.uk/resources/iso-language-codes/). If this folder doesn't exist, you may create it. Each of the translated files should have the same name as the English version, so things can fall back successfully. 3All files in the root folder (`docs/`) should be in English - all other languages should be in subfolders with the ISO 639-1 language codes, followed by `-` and the country code where relevant. [A list of common ones can be found here](https://www.andiamo.co.uk/resources/iso-language-codes/). If this folder doesn't exist, you may create it. Each of the translated files should have the same name as the English version, so things can fall back successfully.
4 4
5A `_summary.md` file should exist in this folder with a list of links to each file, with a translated name, and link preceded by the language folder: 5A `_summary.md` file should exist in this folder with a list of links to each file, with a translated name, and link preceded by the language folder:
6 6
7 * [QMK简介](zh-cn/getting_started_introduction.md) 7```markdown
8 * [QMK简介](zh-cn/getting_started_introduction.md)
9```
10
11All links to other docs pages must also be prefixed with the language folder. If the link is to a specific part of the page (ie. a certain heading), you must use the English ID for the heading, like so:
12
13```markdown
14[建立你的环境](zh-cn/newbs-getting-started.md#set-up-your-environment)
15
16## 建立你的环境 :id=set-up-your-environment
17```
8 18
9Once you've finished translating a new language, you'll also need to modify the following files: 19Once you've finished translating a new language, you'll also need to modify the following files:
10 20
11* [`docs/_langs.md`](https://github.com/qmk/qmk_firmware/blob/master/docs/_langs.md) 21* [`docs/_langs.md`](https://github.com/qmk/qmk_firmware/blob/master/docs/_langs.md)
12 Each line should contain a country flag in the format `:us:` followed by the name represented in its own language: 22 Each line should contain a country flag as a [GitHub emoji shortcode](https://github.com/ikatyang/emoji-cheat-sheet/blob/master/README.md#country-flag) followed by the name represented in its own language:
13 23
14 - [:cn: 中文](/zh-cn/) 24 ```markdown
25 - [:cn: 中文](/zh-cn/)
26 ```
15 27
16* [`docs/index.html`](https://github.com/qmk/qmk_firmware/blob/master/docs/index.html) 28* [`docs/index.html`](https://github.com/qmk/qmk_firmware/blob/master/docs/index.html)
17 Both `placeholder` and `noData` objects should have a dictionary entry for the language folder in a string: 29 Both `placeholder` and `noData` objects should have a dictionary entry for the language folder in a string:
18 30
19 '/zh-cn/': '没有结果!', 31 ```js
32 '/zh-cn/': '没有结果!',
33 ```
34
35 The `nameLink` object, for setting the "QMK Firmware" heading link in the sidebar, must also be added to:
36
37 ```js
38 '/zh-cn/': '/#/zh-cn/',
39 ```
20 40
21## Previewing the translations 41 And make sure to add the language folder in the `fallbackLanguages` list, so it will properly fall back to English instead of 404ing:
22 42
23Before opening a pull request, you can preview your additions if you have Python 3 installed by running this command in the `docs/` folder: 43 ```js
44 fallbackLanguages: [
45 // ...
46 'zh-cn',
47 // ...
48 ],
49 ```
24 50
25 python -m http.server 9000 51## Previewing the Translations
26 52
27and navigating to http://localhost:9000/ - you should be able to select your new language from the "Translations" menu at the top-right. 53See [Previewing the Documentation](contributing.md#previewing-the-documentation) for how to set up a local instance of the docs - you should be able to select your new language from the "Translations" menu at the top-right.
28 54
29Once you're happy with your work, feel free to open a pull request! 55Once you're happy with your work, feel free to open a pull request!
diff --git a/docs/ws2812_driver.md b/docs/ws2812_driver.md
index 6fa5d324c..67481c458 100644
--- a/docs/ws2812_driver.md
+++ b/docs/ws2812_driver.md
@@ -1,13 +1,22 @@
1# WS2812 Driver 1# WS2812 Driver
2This driver powers the [RGB Lighting](feature_rgblight.md) and [RGB Matrix](feature_rgb_matrix.md) features. 2This driver powers the [RGB Lighting](feature_rgblight.md) and [RGB Matrix](feature_rgb_matrix.md) features.
3 3
4Currently QMK supports the following addressable LEDs on AVR microcontrollers (however, the white LED in RGBW variants is not supported): 4Currently QMK supports the following addressable LEDs (however, the white LED in RGBW variants is not supported):
5 5
6 WS2811, WS2812, WS2812B, WS2812C, etc. 6 WS2811, WS2812, WS2812B, WS2812C, etc.
7 SK6812, SK6812MINI, SK6805 7 SK6812, SK6812MINI, SK6805
8 8
9These LEDs are called "addressable" because instead of using a wire per color, each LED contains a small microchip that understands a special protocol sent over a single wire. The chip passes on the remaining data to the next LED, allowing them to be chained together. In this way, you can easily control the color of the individual LEDs. 9These LEDs are called "addressable" because instead of using a wire per color, each LED contains a small microchip that understands a special protocol sent over a single wire. The chip passes on the remaining data to the next LED, allowing them to be chained together. In this way, you can easily control the color of the individual LEDs.
10 10
11## Supported Driver Types
12
13| | AVR | ARM |
14|----------|--------------------|--------------------|
15| bit bang | :heavy_check_mark: | :heavy_check_mark: |
16| I2C | :heavy_check_mark: | |
17| SPI | | Soon™ |
18| PWM | | Soon™ |
19
11## Driver configuration 20## Driver configuration
12 21
13### Bitbang 22### Bitbang
@@ -17,7 +26,7 @@ Default driver, the absence of configuration assumes this driver. To configure i
17WS2812_DRIVER = bitbang 26WS2812_DRIVER = bitbang
18``` 27```
19 28
20!> ARM does not yet support WS2182. Progress is being made, but we are not quite there, yet. 29!> This driver is not hardware accelerated and may not be performant on heavily loaded systems.
21 30
22### I2C 31### I2C
23Targeting boards where WS2812 support is offloaded to a 2nd MCU. Currently the driver is limited to AVR given the known consumers are ps2avrGB/BMC. To configure it, add this to your rules.mk: 32Targeting boards where WS2812 support is offloaded to a 2nd MCU. Currently the driver is limited to AVR given the known consumers are ps2avrGB/BMC. To configure it, add this to your rules.mk:
diff --git a/docs/zh-cn/README.md b/docs/zh-cn/README.md
index 9eb4ea777..bb7e0130f 100644
--- a/docs/zh-cn/README.md
+++ b/docs/zh-cn/README.md
@@ -19,7 +19,7 @@ QMK (*Quantum Mechanical Keyboard*) 是一个社区维护的开源软件,包
19 19
20## 如何编译 20## 如何编译
21 21
22在你能编译之前, 你需要[部署环境](getting_started_build_tools.md) 用于 AVR or/and ARM 开发。完成后, 你可以使用 `make` 命令来编译一个键盘和布局使用以下命令: 22在你能编译之前, 你需要[部署环境](zh-cn/getting_started_build_tools.md) 用于 AVR or/and ARM 开发。完成后, 你可以使用 `make` 命令来编译一个键盘和布局使用以下命令:
23 23
24 make planck/rev4:default 24 make planck/rev4:default
25 25
@@ -29,4 +29,4 @@ QMK (*Quantum Mechanical Keyboard*) 是一个社区维护的开源软件,包
29 29
30## 如何定制 30## 如何定制
31 31
32QMK 有许多 [特性](features.md)来探索,也有很多 [参考文档](http://docs.qmk.fm) 供您发掘。你可以通过修改 [布局](keymap.md)和[键码](keycodes.md)来利用许多特性。 32QMK 有许多 [特性](zh-cn/features.md)来探索,也有很多 [参考文档](http://docs.qmk.fm) 供您发掘。你可以通过修改 [布局](zh-cn/keymap.md)和[键码](zh-cn/keycodes.md)来利用许多特性。
diff --git a/docs/zh-cn/faq_build.md b/docs/zh-cn/faq_build.md
index 8fb449db3..0d9047bc5 100644
--- a/docs/zh-cn/faq_build.md
+++ b/docs/zh-cn/faq_build.md
@@ -56,11 +56,6 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"
56?> 事实上没有一个驱动的最佳选择,有些选项就是和某些系统相辅相成。但libUSB和WinUSB似乎也算是这里的最佳选择了。 56?> 事实上没有一个驱动的最佳选择,有些选项就是和某些系统相辅相成。但libUSB和WinUSB似乎也算是这里的最佳选择了。
57如果bootloader在设备列表中没有显示,你可能要使能 "List all devices"选项在选项菜单中`Options`,然后找到有问题的bootloader设备。(译者注:在win10中可能为 查看-显示隐藏的设备) 57如果bootloader在设备列表中没有显示,你可能要使能 "List all devices"选项在选项菜单中`Options`,然后找到有问题的bootloader设备。(译者注:在win10中可能为 查看-显示隐藏的设备)
58 58
59
60## WINAVR已淘汰
61不再推荐使用WINAVR,使用可能会导致问题
62详情请见[TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
63
64## USB VID 和 PID 59## USB VID 和 PID
65你可以在编辑`config.h`时使用任何你想用的ID值。实际上,使用任何可能未使用的ID都没有问题,除了有极低的与其他产品发生冲突的可能性。 60你可以在编辑`config.h`时使用任何你想用的ID值。实际上,使用任何可能未使用的ID都没有问题,除了有极低的与其他产品发生冲突的可能性。
66 61
@@ -73,29 +68,6 @@ https://github.com/tmk/tmk_keyboard/issues/150
73- http://www.obdev.at/products/vusb/license.html 68- http://www.obdev.at/products/vusb/license.html
74- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1 69- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
75 70
76## Cortex: `cstddef: No such file or directory`
77在Ubuntu 14.04上的GCC 4.8 会出现这种问题需要用这个PPA升级到4.9。
78https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
79
80https://github.com/tmk/tmk_keyboard/issues/212
81https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef
82https://developer.mbed.org/forum/mbed/topic/5205/
83
84## `clock_prescale_set` and `clock_div_1` Not Available
85你的工具链太旧了不支持MCU。比如WinAVR 20100110就不支持ATMega32u2.
86
87```
88Compiling C: ../../tmk_core/protocol/lufa/lufa.c
89avr-gcc -c -mmcu=atmega32u2 -gdwarf-2 -DF_CPU=16000000UL -DINTERRUPT_CONTROL_ENDPOINT -DBOOTLOADER_SIZE=4096 -DF_USB=16000000UL -DARCH=ARCH_AVR8 -DUSB_DEVICE_ONLY -DUSE_FLASH_DESCRIPTORS -DUSE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENABLED | USB_OPT_AUTO_PLL)" -DFIXED_CONTROL_ENDPOINT_SIZE=8 -DFIXED_NUM_CONFIGURATIONS=1 -DPROTOCOL_LUFA -DEXTRAKEY_ENABLE -DCONSOLE_ENABLE -DCOMMAND_ENABLE -DVERSION=unknown -Os -funsigned-char -funsigned-bitfields -ffunction-sections -fdata-sections -fno-inline-small-functions -fpack-struct -fshort-enums -fno-strict-aliasing -Wall -Wstrict-prototypes -Wa,-adhlns=obj_alps64/protocol/lufa/lufa.lst -I. -I../../tmk_core -I../../tmk_core/protocol/lufa -I../../tmk_core/protocol/lufa/LUFA-git -I../../tmk_core/common -std=gnu99 -include config.h -MMD -MP -MF .dep/obj_alps64_protocol_lufa_lufa.o.d ../../tmk_core/protocol/lufa/lufa.c -o obj_alps64/protocol/lufa/lufa.o
90../../tmk_core/protocol/lufa/lufa.c: In function 'setup_mcu':
91../../tmk_core/protocol/lufa/lufa.c:575: warning: implicit declaration of function 'clock_prescale_set'
92../../tmk_core/protocol/lufa/lufa.c:575: error: 'clock_div_1' undeclared (first use in this function)
93../../tmk_core/protocol/lufa/lufa.c:575: error: (Each undeclared identifier is reported only once
94../../tmk_core/protocol/lufa/lufa.c:575: error: for each function it appears in.)
95make: *** [obj_alps64/protocol/lufa/lufa.o] Error 1
96```
97
98
99## AVR的BOOTLOADER_SIZE 71## AVR的BOOTLOADER_SIZE
100注意Teensy2.0++ bootloader的大小是2048字节。有些Makefile注释错了。 72注意Teensy2.0++ bootloader的大小是2048字节。有些Makefile注释错了。
101 73
diff --git a/docs/zh-cn/faq_debug.md b/docs/zh-cn/faq_debug.md
index a3cc7c510..7eff7f265 100644
--- a/docs/zh-cn/faq_debug.md
+++ b/docs/zh-cn/faq_debug.md
@@ -101,56 +101,6 @@ https://github.com/tmk/tmk_keyboard#boot-magic-configuration---virtual-dip-switc
101 101
102http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279 102http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
103 103
104
105## Bootloader跳转不好用
106在**Makefile**中正确配置**Makefile**大小。如果分区大小不正确,引导加载程序可能无法从**Magic command**和**Boot Magic**加载。
107```
108# bootloader字节数:
109# Atmel DFU loader(ATmega32U4) 4096
110# Atmel DFU loader(AT90USB128) 8192
111# LUFA bootloader(ATmega32U4) 4096
112# Arduino Caterina(ATmega32U4) 4096
113# USBaspLoader(ATmega***) 2048
114# Teensy halfKay(ATmega32U4) 512
115# Teensy++ halfKay(AT90USB128) 2048
116OPT_DEFS += -DBOOTLOADER_SIZE=4096
117```
118AVR引导大小是通过**BOOTSZ**熔丝位来设置的。查阅你单片机的datasheet。
119记住,datasheet用的是**Word**(2字节)表示大小和地址,TMK用的是**Byte**。
120
121AVR引导部分位于闪存的末尾,如下所示(Application是应用区,Bootloader是引导区)。
122```
123byte Atmel/LUFA(ATMega32u4) byte Atmel(AT90SUB1286)
1240x0000 +---------------+ 0x00000 +---------------+
125 | | | |
126 | | | |
127 | Application | | Application |
128 | | | |
129 = = = =
130 | | 32KB-4KB | | 128KB-8KB
1310x6000 +---------------+ 0x1E000 +---------------+
132 | Bootloader | 4KB | Bootloader | 8KB
1330x7FFF +---------------+ 0x1FFFF +---------------+
134
135
136byte Teensy(ATMega32u4) byte Teensy++(AT90SUB1286)
1370x0000 +---------------+ 0x00000 +---------------+
138 | | | |
139 | | | |
140 | Application | | Application |
141 | | | |
142 = = = =
143 | | 32KB-512B | | 128KB-2KB
1440x7E00 +---------------+ 0x1FC00 +---------------+
145 | Bootloader | 512B | Bootloader | 2KB
1460x7FFF +---------------+ 0x1FFFF +---------------+
147```
148
149详情请见下方issue。
150https://github.com/tmk/tmk_keyboard/issues/179
151
152如果你使用TeensyUSB, 有一个[已知bug](https://github.com/qmk/qmk_firmware/issues/164)硬件重置按钮阻止软件定义重置键工作。重新插拔键盘就好了。
153
154## 特殊额外键不起作用(系统,音频控制键) 104## 特殊额外键不起作用(系统,音频控制键)
155你要在`rules.mk`定义`EXTRAKEY_ENABLE`在QMK中使用它们。 105你要在`rules.mk`定义`EXTRAKEY_ENABLE`在QMK中使用它们。
156 106
@@ -173,24 +123,6 @@ EXTRAKEY_ENABLE = yes # 音频控制和系统控制
173 123
174Arduino Leonardo和micro使用**ATMega32U4**,该芯片TMK可用,但Arduino的bootloader会导致问题。 124Arduino Leonardo和micro使用**ATMega32U4**,该芯片TMK可用,但Arduino的bootloader会导致问题。
175 125
176## 为锁定键添加指示灯
177你要自制CapsLock, ScrollLock 和 NumLock指示灯?见下文。
178
179http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p191560
180
181## 为Arduino Micro/Leonardo编程
182按下重置键然后在8秒内运行下方这样的命令。
183
184```
185avrdude -patmega32u4 -cavr109 -b57600 -Uflash:w:adb_usb.hex -P/dev/ttyACM0
186```
187
188设备名称因系统而异。
189
190http://arduino.cc/en/Main/ArduinoBoardMicro
191https://geekhack.org/index.php?topic=14290.msg1563867#msg1563867
192
193
194## USB 3 兼容性 126## USB 3 兼容性
195据传说有些人用USB3接口会有问题,用USB2的试试。 127据传说有些人用USB3接口会有问题,用USB2的试试。
196 128
diff --git a/docs/zh-cn/faq_keymap.md b/docs/zh-cn/faq_keymap.md
index ee8e3c06b..7fb434b4c 100644
--- a/docs/zh-cn/faq_keymap.md
+++ b/docs/zh-cn/faq_keymap.md
@@ -66,24 +66,8 @@ https://github.com/tmk/tmk_keyboard/issues/67
66远古机械键盘偶尔会有自锁机械开关,现在几乎没有了。***大多数情况下你不需要使用该功能,且要使用`KC_CAPS`, `KC_NLCK`和`KC_SLCK`这三个键码。*** 66远古机械键盘偶尔会有自锁机械开关,现在几乎没有了。***大多数情况下你不需要使用该功能,且要使用`KC_CAPS`, `KC_NLCK`和`KC_SLCK`这三个键码。***
67 67
68## 输入ASCII之外的特殊字符比如Cédille 'Ç' 68## 输入ASCII之外的特殊字符比如Cédille 'Ç'
69没有在所有系统中输入这个的通用方法。你要定义针对你的特定操作系统或布局的**宏**。
70 69
71比如看这个**宏**代码的文章。 70请见[Unicode](feature_unicode.md)功能。
72
73http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p195620
74<!--翻译问题:下方维基百科链接应全部替换为中文链接,暂未找到全部-->
75在**Windows**上,可以用`AltGr`键或**Alt码**。
76* http://en.wikipedia.org/wiki/AltGr_key
77* https://zh.wikipedia.org/wiki/Alt%E7%A0%81
78
79在**Mac OS**定义`Option`键组合。
80* https://zh.wikipedia.org/wiki/Option%E9%94%AE#%E6%9B%BF%E4%BB%A3%E9%94%AE%E7%9B%98%E8%BE%93%E5%85%A5
81
82在**Xorg**可以改用`compose`键。
83* http://en.wikipedia.org/wiki/Compose_key
84
85下方链接查看**Unicode**输入。
86* http://en.wikipedia.org/wiki/Unicode_input
87 71
88## macOS上的`Fn` 72## macOS上的`Fn`
89 73
@@ -136,51 +120,6 @@ https://github.com/tekezo/Karabiner/issues/403
136 120
137请见[Grave Escape](feature_grave_esc.md)功能。 121请见[Grave Escape](feature_grave_esc.md)功能。
138 122
139## 右侧双角色修改键(诸如Shift、Alt等有修改其他键作用的键)变箭头键
140右侧修改键单击时会变为箭头键,长按就还是修改键。在TMK中双角色键称之为**TAP**.
141```
142
143#include "keymap_common.h"
144
145
146/* 用TMK双角色键功能实现右侧修改键改箭头键
147 *
148 * https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#213-modifier-with-tap-keydual-role
149 * https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
150 */
151const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
152 /* 0: qwerty */
153 [0] = LAYOUT( \
154 ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS,BSPC, \
155 TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
156 LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
157 LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, ESC, \
158 FN4, LGUI,LALT, SPC, APP, FN2, FN1, FN3),
159 [1] = LAYOUT( \
160 GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,TRNS, \
161 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
162 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
163 TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN5, TRNS, \
164 TRNS,TRNS,TRNS, TRNS, TRNS,FN7, FN6, FN8),
165};
166
167const uint16_t PROGMEM fn_actions[] = {
168 [0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_UP),
169 [1] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_DOWN),
170 [2] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_LEFT),
171 [3] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RIGHT),
172 [4] = ACTION_LAYER_MOMENTARY(1),
173 [5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_PGUP),
174 [6] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_PGDN),
175 [7] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_HOME),
176 [8] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_END),
177};
178
179```
180
181双角色键说明: https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
182
183
184## Mac OSX的弹出键 123## Mac OSX的弹出键
185`KC_EJCT` 键码在OSX可以使用 https://github.com/tmk/tmk_keyboard/issues/250 124`KC_EJCT` 键码在OSX可以使用 https://github.com/tmk/tmk_keyboard/issues/250
186似乎Windows10会忽略该键码,Linux/Xorg可以识别该键码但默认不映射。 125似乎Windows10会忽略该键码,Linux/Xorg可以识别该键码但默认不映射。