Compare commits

..
Author SHA1 Message Date
Jack Humbert 9e64d5f6c2 add encoder matrix functionality 2019-10-30 13:39:18 -04:00
1441 changed files with 16882 additions and 49673 deletions

No files matched your search

+1 -7
View File
@@ -1,11 +1,5 @@
---
name: Blank issue
about: If you're 100% sure that you don't need one of the other issue templates, use
this one instead.
title: ''
labels: help wanted, question
assignees: ''
about: If you're 100% sure that you don't need one of the other issue templates, use this one instead.
---
+1 -6
View File
@@ -1,12 +1,7 @@
---
name: Bug report
about: Create a report to help us improve QMK Firmware.
title: "[Bug] "
labels: bug, help wanted
assignees: ''
about: Create a report to help us improve the QMK Firmware
---
<!-- Provide a general summary of the bug in the title above. -->
<!--- This template is entirely optional and can be removed, but is here to help both you and us. -->
-8
View File
@@ -1,8 +0,0 @@
blank_issues_enabled: false
contact_links:
- name: QMK Discord
url: https://discord.gg/Uq7gcHh
about: Ask questions, discuss issues and features. Chill.
- name: OLKB Subreddit
url: https://www.reddit.com/r/olkb
about: All things OLKB and QMK.
+1 -6
View File
@@ -1,12 +1,7 @@
---
name: Feature request
about: Suggest a new feature or changes to existing features.
title: "[Feature Request] "
labels: enhancement, help wanted
assignees: ''
about: Suggest a new feature or changes to existing features
---
<!--- Provide a general summary of the changes you want in the title above. -->
<!--- This template is entirely optional and can be removed, but is here to help both you and us. -->
+1 -6
View File
@@ -1,12 +1,7 @@
---
name: Other issues
about: Anything else that doesn't fall into the above categories.
title: ''
labels: help wanted, question
assignees: ''
about: Anything else that doesn't fall into the above categories.
---
<!--- Provide a general summary of the changes you want in the title above. -->
<!--- Anything on lines wrapped in comments like these will not show up in the final text. -->
-58
View File
@@ -1,58 +0,0 @@
# Configuration for probot-stale - https://github.com/probot/stale
# General configuration
# Pull request specific configuration
pulls:
staleLabel: awaiting changes
# Number of days of inactivity before an Issue or Pull Request becomes stale
daysUntilStale: 45
# Number of days of inactivity before a stale Issue or Pull Request is closed.
# Set to false to disable. If disabled, issues still need to be closed manually, but will remain marked as stale.
daysUntilClose: 30
# Comment to post when marking as stale. Set to `false` to disable
markComment: >
Thank you for your contribution!
This pull request has been automatically marked as stale because it has not had
activity in the last 45 days. It will be closed in 30 days if no further activity occurs.
Please feel free to give a status update now, or re-open when it's ready.
For maintainers: Please label with `awaiting review`, `breaking_change`, `in progress`, or `on hold` to prevent
the issue from being re-flagged.
# Comment to post when closing a stale Issue or Pull Request.
closeComment: >
Thank you for your contribution!
This pull request has been automatically closed because it has not had activity in the last 30 days.
Please feel free to give a status update now, ping for review, or re-open when it's ready.
# Limit the number of actions per hour, from 1-30. Default is 30
limitPerRun: 30
exemptLabels:
- awaiting review
- breaking_change
- in progress
- on hold
# Issue specific configuration
issues:
staleLabel: stale
limitPerRun: 10
daysUntilStale: 90
daysUntilClose: 30
markComment: >
This issue has been automatically marked as stale because it has not had activity in the
last 90 days. It will be closed in the next 30 days unless it is tagged properly or other activity
occurs.
For maintainers: Please label with `bug`, `in progress`, `on hold`, `discussion` or `to do` to prevent
the issue from being re-flagged.
closeComment: >
This issue has been automatically closed because it has not had activity in the last 30 days.
If this issue is still valid, re-open the issue and let us know.
exemptLabels:
- bug
- in progress
- on hold
- discussion
- to do
-1
View File
@@ -16,7 +16,6 @@ install:
- npm install -g moxygen
script:
- git rev-parse --short HEAD
- git diff --name-only HEAD $TRAVIS_BRANCH
- bash util/travis_test.sh
- bash util/travis_build.sh
- bash util/travis_docs.sh
+4 -9
View File
@@ -272,14 +272,12 @@ define PARSE_RULE
# If the rule starts with all, then continue the parsing from
# PARSE_ALL_KEYBOARDS
ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,all),true)
KEYBOARD_RULE=all
$$(eval $$(call PARSE_ALL_KEYBOARDS))
else ifeq ($$(call COMPARE_AND_REMOVE_FROM_RULE,test),true)
$$(eval $$(call PARSE_TEST))
# If the rule starts with the name of a known keyboard, then continue
# the parsing from PARSE_KEYBOARD
else ifeq ($$(call TRY_TO_MATCH_RULE_FROM_LIST,$$(KEYBOARDS)),true)
KEYBOARD_RULE=$$(MATCHED_ITEM)
$$(eval $$(call PARSE_KEYBOARD,$$(MATCHED_ITEM)))
# Otherwise use the KEYBOARD variable, which is determined either by
# the current directory you run make from, or passed in as an argument
@@ -382,9 +380,6 @@ define PARSE_KEYBOARD
# Otherwise try to match the keymap from the current folder, or arguments to the make command
else ifneq ($$(KEYMAP),)
$$(eval $$(call PARSE_KEYMAP,$$(KEYMAP)))
# Otherwise if we are running make all:<user> just skip
else ifeq ($$(KEYBOARD_RULE),all)
# $$(info Skipping: No user keymap for $$(CURRENT_KB))
# Otherwise, make all keymaps, again this is consistent with how it works without
# any arguments
else
@@ -563,10 +558,10 @@ endef
if ! python3 --version 1> /dev/null 2>&1; then printf "$(MSG_PYTHON_MISSING)"; fi
# Check if the submodules are dirty, and display a warning if they are
ifndef SKIP_GIT
if [ ! -e lib/chibios ]; then git submodule sync lib/chibios && git submodule update --depth 50 --init lib/chibios; fi
if [ ! -e lib/chibios-contrib ]; then git submodule sync lib/chibios-contrib && git submodule update --depth 50 --init lib/chibios-contrib; fi
if [ ! -e lib/ugfx ]; then git submodule sync lib/ugfx && git submodule update --depth 50 --init lib/ugfx; fi
if [ ! -e lib/lufa ]; then git submodule sync lib/lufa && git submodule update --depth 50 --init lib/lufa; fi
if [ ! -e lib/chibios ]; then git submodule sync lib/chibios && git submodule update --depth 1 --init lib/chibios; fi
if [ ! -e lib/chibios-contrib ]; then git submodule sync lib/chibios-contrib && git submodule update --depth 1 --init lib/chibios-contrib; fi
if [ ! -e lib/ugfx ]; then git submodule sync lib/ugfx && git submodule update --depth 1 --init lib/ugfx; fi
if [ ! -e lib/lufa ]; then git submodule sync lib/lufa && git submodule update --depth 1 --init lib/lufa; fi
git submodule status --recursive 2>/dev/null | \
while IFS= read -r x; do \
case "$$x" in \
+3 -3
View File
@@ -26,7 +26,7 @@ with open(os.path.join(qmk_dir, 'requirements.txt'), 'r') as fd:
module = line.split('=')[0] if '=' in line else line
if not find_spec(module):
print('Could not find module %s!' % module)
print('Could not find module %s!', module)
print('Please run `pip3 install -r requirements.txt` to install the python dependencies.')
exit(255)
@@ -41,7 +41,7 @@ else:
os.environ['QMK_VERSION'] = 'nogit-' + strftime('%Y-%m-%d-%H:%M:%S') + '-dirty'
# Setup the CLI
import milc # noqa
import milc
milc.EMOJI_LOGLEVELS['INFO'] = '{fg_blue}ฮจ{style_reset_all}'
@@ -61,7 +61,7 @@ def main():
os.chdir(qmk_dir)
# Import the subcommands
import qmk.cli # noqa
import qmk.cli
# Execute
return_code = milc.cli()
+3 -2
View File
@@ -22,5 +22,6 @@ else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.json)","")
endif
# Generate the keymap.c
$(KEYBOARD_OUTPUT)/src/keymap.c:
bin/qmk json-keymap --quiet --output $(KEYMAP_C) $(KEYMAP_JSON)
ifneq ("$(KEYMAP_JSON)","")
_ = $(shell test -e $(KEYMAP_C) || bin/qmk json-keymap $(KEYMAP_JSON) -o $(KEYMAP_C))
endif
+10 -17
View File
@@ -234,7 +234,7 @@ ifeq ($(strip $(BACKLIGHT_CUSTOM_DRIVER)), yes)
BACKLIGHT_ENABLE = custom
endif
VALID_BACKLIGHT_TYPES := yes software custom
VALID_BACKLIGHT_TYPES := yes custom
BACKLIGHT_ENABLE ?= no
ifneq ($(strip $(BACKLIGHT_ENABLE)), no)
@@ -246,22 +246,19 @@ ifneq ($(strip $(BACKLIGHT_ENABLE)), no)
CIE1931_CURVE = yes
endif
COMMON_VPATH += $(QUANTUM_DIR)/backlight
SRC += $(QUANTUM_DIR)/backlight/backlight.c
OPT_DEFS += -DBACKLIGHT_ENABLE
ifeq ($(strip $(BACKLIGHT_ENABLE)), software)
SRC += $(QUANTUM_DIR)/backlight/backlight_soft.c
else
ifeq ($(strip $(BACKLIGHT_ENABLE)), custom)
OPT_DEFS += -DBACKLIGHT_CUSTOM_DRIVER
endif
ifeq ($(strip $(BACKLIGHT_ENABLE)), custom)
OPT_DEFS += -DBACKLIGHT_CUSTOM_DRIVER
endif
ifeq ($(PLATFORM),AVR)
SRC += $(QUANTUM_DIR)/backlight/backlight_avr.c
else
SRC += $(QUANTUM_DIR)/backlight/backlight_arm.c
endif
ifeq ($(PLATFORM),AVR)
SRC += $(QUANTUM_DIR)/backlight/backlight_avr.c
else
SRC += $(QUANTUM_DIR)/backlight/backlight_arm.c
endif
endif
@@ -407,12 +404,8 @@ ifeq ($(strip $(SPACE_CADET_ENABLE)), yes)
OPT_DEFS += -DSPACE_CADET_ENABLE
endif
ifeq ($(strip $(DIP_SWITCH_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/dip_switch.c
OPT_DEFS += -DDIP_SWITCH_ENABLE
endif
ifeq ($(strip $(DYNAMIC_MACRO_ENABLE)), yes)
SRC += $(QUANTUM_DIR)/process_keycode/process_dynamic_macro.c
OPT_DEFS += -DDYNAMIC_MACRO_ENABLE
endif
+1 -1
View File
@@ -15,7 +15,7 @@ QMK (*Quantum Mechanical Keyboard*) is an open source community that maintains Q
If 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.
Otherwise, 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.
Otherwise, 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`).
## How to Compile
-3
View File
@@ -1,8 +1,5 @@
- Translations
- [:uk: English](/)
- [:cn: ไธญๆ–‡](/zh-cn/)
- [:es: Espaรฑol](/es/)
- [:fr: Franรงais](/fr-fr/)
- [:he: ืขื‘ืจื™ืช](/he-il/)
- [:ru: ะ ัƒััะบะธะน](/ru-ru/)
- [:jp: ๆ—ฅๆœฌ่ชž](/ja/)
+1 -2
View File
@@ -33,7 +33,6 @@
* [Keymap Overview](keymap.md)
* [Hardware](hardware.md)
* [Compatible Microcontrollers](compatible_microcontrollers.md)
* [AVR Processors](hardware_avr.md)
* [Drivers](hardware_drivers.md)
@@ -111,7 +110,7 @@
* [Using Eclipse with QMK](other_eclipse.md)
* [Using VSCode with QMK](other_vscode.md)
* [Support](support.md)
* [Translating the QMK Docs](translating.md)
* [How to add translations](translating.md)
* QMK Internals (In Progress)
* [Defines](internals_defines.md)
-46
View File
@@ -95,30 +95,6 @@ qmk compile <configuratorExport.json>
qmk compile -kb <keyboard_name> -km <keymap_name>
```
## `qmk flash`
This command is similar to `qmk compile`, but can also target a bootloader. The bootloader is optional, and is set to `:flash` by default.
To specify a different bootloader, use `-bl <bootloader>`. Visit <https://docs.qmk.fm/#/flashing>
for more details of the available bootloaders.
**Usage for Configurator Exports**:
```
qmk flash <configuratorExport.json> -bl <bootloader>
```
**Usage for Keymaps**:
```
qmk flash -kb <keyboard_name> -km <keymap_name> -bl <bootloader>
```
**Listing the Bootloaders**
```
qmk flash -b
```
## `qmk config`
This command lets you configure the behavior of QMK. For the full `qmk config` documentation see [CLI Configuration](cli_configuration.md).
@@ -159,28 +135,6 @@ Creates a keymap.c from a QMK Configurator export.
qmk json-keymap [-o OUTPUT] filename
```
## `qmk kle2json`
This command allows you to convert from raw KLE data to QMK Configurator JSON. It accepts either an absolute file path, or a file name in the current directory. By default it will not overwrite `info.json` if it is already present. Use the `-f` or `--force` flag to overwrite.
**Usage**:
```
qmk kle2json [-f] <filename>
```
**Examples**:
```
$ qmk kle2json kle.txt
โ˜’ File info.json already exists, use -f or --force to overwrite.
```
```
$ qmk kle2json -f kle.txt -f
ฮจ Wrote out to info.json
```
## `qmk list-keyboards`
This command lists all the keyboards currently defined in `qmk_firmware`
-32
View File
@@ -173,35 +173,3 @@ You will only be able to access these arguments using `cli.args`. For example:
```
cli.log.info('Reading from %s and writing to %s', cli.args.filename, cli.args.output)
```
# Testing, and Linting, and Formatting (oh my!)
We use nose2, flake8, and yapf to test, lint, and format code. You can use the `pytest` and `pyformat` subcommands to run these tests:
### Testing and Linting
qmk pytest
### Formatting
qmk pyformat
## Formatting Details
We use [yapf](https://github.com/google/yapf) to automatically format code. Our configuration is in the `[yapf]` section of `setup.cfg`.
?> Tip- Many editors can use yapf as a plugin to automatically format code as you type.
## Testing Details
Our 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.
If 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:
# TODO(unassigned/<yourGithubUsername>): Write <unit|integration> tests
We 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.
## Linting Details
We 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.
+3 -3
View File
@@ -77,9 +77,9 @@ Always use a .py filename extension. Never use dashes.
## Names to Avoid
* single character names except for counters or iterators. You may use `e` as an exception identifier in try/except statements.
* dashes (`-`) in any package/module name
* `__double_leading_and_trailing_underscore__` names (reserved by Python)
* single character names except for counters or iterators. You may use "e" as an exception identifier in try/except statements.
* dashes (-) in any package/module name
* __double_leading_and_trailing_underscore__ names (reserved by Python)
# Docstrings
+18 -29
View File
@@ -1,36 +1,25 @@
# Compatible Microcontrollers
# Atmel AVR
QMK 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.
QMK should run on any Atmel AVR processor with enough Flash. It has been tested on the following:
## Atmel AVR
* ATmega32U4 ([PJRC Teensy 2.0](http://www.pjrc.com/teensy/))
* AT90USB1286 ([PJRC Teensy++ 2.0](http://www.pjrc.com/teensy/))
* AT90USB1287 ([Atmel USBKEY](http://www.atmel.com/tools/AT90USBKEY.aspx))
* ATmega168P with using [V-USB](http://www.obdev.at/products/vusb/index.html)
* ATmega328P with using [V-USB](http://www.obdev.at/products/vusb/index.html)
* ATmega32U2
* AT90USB1286, 646, 647 should work
* AT90USB162 testing...
The following use [LUFA](https://www.fourwalledcubicle.com/LUFA.php) as the USB stack:
NOTE: To enable full features of firmware you'll need 32KB flash size.
* [ATmega16U2](https://www.microchip.com/wwwproducts/en/ATmega16U2) / [ATmega32U2](https://www.microchip.com/wwwproducts/en/ATmega32U2)
* [ATmega16U4](https://www.microchip.com/wwwproducts/en/ATmega16U4) / [ATmega32U4](https://www.microchip.com/wwwproducts/en/ATmega32U4)
* [AT90USB64](https://www.microchip.com/wwwproducts/en/AT90USB646) / [AT90USB128](https://www.microchip.com/wwwproducts/en/AT90USB1286)
Please add any tested microcontrollers to this list.
Certain MCUs which do not have native USB will use [V-USB](https://www.obdev.at/products/vusb/index.html) instead:
# ARM
* [ATmega32A](https://www.microchip.com/wwwproducts/en/ATmega32A)
* [ATmega328P](https://www.microchip.com/wwwproducts/en/ATmega328P)
You can also use any ARM processor that [ChibiOS](http://www.chibios.org) supports. The following processors have been tested:
## ARM
You can also use any ARM chip with USB that [ChibiOS](http://www.chibios.org) supports. Most have plenty of flash. Known to work are:
### STMicroelectronics (STM32)
* [STM32F0x2](https://www.st.com/en/microcontrollers-microprocessors/stm32f0x2.html)
* [STM32F103](https://www.st.com/en/microcontrollers-microprocessors/stm32f103.html)
* [STM32F303](https://www.st.com/en/microcontrollers-microprocessors/stm32f303.html)
### NXP (Kinetis)
* [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)
* [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)
* [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)
## Atmel ATSAM
There 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).
* [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)
* [Kinetis MK20DX128](http://www.nxp.com/assets/documents/data/en/data-sheets/K20P64M50SF0.pdf)
* [Kinetis MK20DX128](http://www.nxp.com/assets/documents/data/en/data-sheets/K20P64M50SF0.pdf)
* [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)
+3 -4
View File
@@ -196,8 +196,8 @@ If you define these options you will enable the associated feature, which may in
* units to step when in/decreasing saturation
* `#define RGBLIGHT_VAL_STEP 12`
* units to step when in/decreasing value (brightness)
* `#define RGBW`
* Enables RGBW LED support
* `#define RGBW_BB_TWI`
* bit-bangs TWI to EZ RGBW LEDs (only required for Ergodox EZ)
## Mouse Key Options
@@ -348,8 +348,7 @@ Use these to enable or disable building certain features. The more you have enab
* `NO_USB_STARTUP_CHECK`
* Disables usb suspend check after keyboard startup. Usually the keyboard waits for the host to wake it up before any tasks are performed. This is useful for split keyboards as one half will not get a wakeup call but must send commands to the master.
* `LINK_TIME_OPTIMIZATION_ENABLE`
* 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`
* Alternatively, you can use `LTO_ENABLE` instead of `LINK_TIME_OPTIMIZATION_ENABLE`.
= 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`
## USB Endpoint Limitations
-12
View File
@@ -101,18 +101,6 @@ enum my_keycodes {
};
```
### Previewing the Documentation
Before 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:
./bin/qmk docs
or if you only have Python 3 installed:
python3 -m http.server 8936
and navigating to `http://localhost:8936/`.
## Keymaps
Most 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.
+53 -78
View File
@@ -90,93 +90,68 @@ keyrecord_t record {
# LED Control
QMK provides methods to read 5 of the LEDs defined in the HID spec:
QMK provides methods to read the 5 LEDs defined as part of the HID spec:
* Num Lock
* Caps Lock
* Scroll Lock
* Compose
* Kana
* `USB_LED_NUM_LOCK`
* `USB_LED_CAPS_LOCK`
* `USB_LED_SCROLL_LOCK`
* `USB_LED_COMPOSE`
* `USB_LED_KANA`
There are two ways to get the lock LED state:
These five constants correspond to the positional bits of the host LED state.
There are two ways to get the host LED state:
* by implementing `bool led_update_kb(led_t led_state)` or `_user(led_t led_state)`; or
* by calling `led_t host_keyboard_led_state()`
* by implementing `led_set_user()`
* by calling `host_keyboard_leds()`
!> `host_keyboard_led_state()` may already reflect a new value before `led_update_user()` is called.
## `led_set_user()`
Two more deprecated functions exist that provide the LED state as a `uint8_t`:
This function will be called when the state of one of those 5 LEDs changes. It receives the LED state as a parameter.
Use the `IS_LED_ON(usb_led, led_name)` and `IS_LED_OFF(usb_led, led_name)` macros to check the LED status.
* `uint8_t led_set_kb(uint8_t usb_led)` and `_user(uint8_t usb_led)`
* `uint8_t host_keyboard_leds()`
!> `host_keyboard_leds()` may already reflect a new value before `led_set_user()` is called.
## `led_update_user()`
This function will be called when the state of one of those 5 LEDs changes. It receives the LED state as a struct parameter.
By convention, return `true` from `led_update_user()` to get the `led_update_kb()` hook to run its code, and
return `false` when you would prefer not to run the code in `led_update_kb()`.
Some examples include:
- overriding the LEDs to use them for something else like layer indication
- return `false` because you do not want the `_kb()` function to run, as it would override your layer behavior.
- play a sound when an LED turns on or off.
- return `true` because you want the `_kb` function to run, and this is in addition to the default LED behavior.
?> 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.
### Example `led_update_kb()` Implementation
### Example `led_set_user()` Implementation
```c
bool led_update_kb(led_t led_state) {
bool res = led_update_user(led_state);
if(res) {
// writePin sets the pin high for 1 and low for 0.
// In this example the pins are inverted, setting
// it low/0 turns it on, and high/1 turns the LED off.
// This behavior depends on whether the LED is between the pin
// and VCC or the pin and GND.
writePin(B0, !led_state.num_lock);
writePin(B1, !led_state.caps_lock);
writePin(B2, !led_state.scroll_lock);
writePin(B3, !led_state.compose);
writePin(B4, !led_state.kana);
void led_set_user(uint8_t usb_led) {
if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
writePinLow(B0);
} else {
writePinHigh(B0);
}
if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) {
writePinLow(B1);
} else {
writePinHigh(B1);
}
if (IS_LED_ON(usb_led, USB_LED_SCROLL_LOCK)) {
writePinLow(B2);
} else {
writePinHigh(B2);
}
if (IS_LED_ON(usb_led, USB_LED_COMPOSE)) {
writePinLow(B3);
} else {
writePinHigh(B3);
}
if (IS_LED_ON(usb_led, USB_LED_KANA)) {
writePinLow(B4);
} else {
writePinHigh(B4);
}
return res;
}
```
### Example `led_update_user()` Implementation
### `led_set_*` Function Documentation
This 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.
* Keyboard/Revision: `void led_set_kb(uint8_t usb_led)`
* Keymap: `void led_set_user(uint8_t usb_led)`
```c
#ifdef AUDIO_ENABLE
float caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND);
float caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND);
#endif
## `host_keyboard_leds()`
bool led_update_user(led_t led_state) {
#ifdef AUDIO_ENABLE
static uint8_t caps_state = 0;
if (caps_state != led_state.caps_lock) {
led_state.caps_lock ? PLAY_SONG(caps_on) : PLAY_SONG(caps_off);
caps_state = led_state.caps_lock;
}
#endif
return true;
}
```
### `led_update_*` Function Documentation
* Keyboard/Revision: `bool led_update_kb(led_t led_state)`
* Keymap: `bool led_update_user(led_t led_state)`
## `host_keyboard_led_state()`
Call 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).
Call 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).
For 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.
## Setting Physical LED State
@@ -394,7 +369,7 @@ void keyboard_post_init_user(void) {
// Set default layer, if enabled
if (user_config.rgb_layer_change) {
rgblight_enable_noeeprom();
rgblight_sethsv_noeeprom_cyan();
rgblight_sethsv_noeeprom_cyan();
rgblight_mode_noeeprom(1);
}
}
@@ -442,18 +417,18 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
}
return true; // Let QMK send the enter press/release events
case RGB_LYR: // This allows me to use underglow as layer indication, or as normal
if (record->event.pressed) {
if (record->event.pressed) {
user_config.rgb_layer_change ^= 1; // Toggles the status
eeconfig_update_user(user_config.raw); // Writes the new status to EEPROM
if (user_config.rgb_layer_change) { // if layer state indication is enabled,
if (user_config.rgb_layer_change) { // if layer state indication is enabled,
layer_state_set(layer_state); // then immediately update the layer color
}
}
return false; break;
case RGB_MODE_FORWARD ... RGB_MODE_GRADIENT: // For any of the RGB codes (see quantum_keycodes.h, L400 for reference)
if (record->event.pressed) { //This disables layer indication, as it's assumed that if you're changing this ... you want that disabled
if (user_config.rgb_layer_change) { // only if this is enabled
user_config.rgb_layer_change = false; // disable it, and
if (user_config.rgb_layer_change) { // only if this is enabled
user_config.rgb_layer_change = false; // disable it, and
eeconfig_update_user(user_config.raw); // write the setings to EEPROM
}
}
@@ -466,7 +441,7 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
And 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.
```c
void eeconfig_init_user(void) { // EEPROM is getting reset!
void eeconfig_init_user(void) { // EEPROM is getting reset!
user_config.raw = 0;
user_config.rgb_layer_change = true; // We want this enabled by default
eeconfig_update_user(user_config.raw); // Write default value to EEPROM now
@@ -491,7 +466,7 @@ The `val` is the value of the data that you want to write to EEPROM. And the `e
By 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`.
To enable this functionality, you need to add `#define TAPPING_TERM_PER_KEY` to your `config.h`, first.
To enable this functionality, you need to add `#define TAPPING_TERM_PER_KEY` to your `config.h`, first.
## Example `get_tapping_term` Implementation
-33
View File
@@ -1,33 +0,0 @@
# Quantum Mechanical Keyboard Firmware
[![Aktuelle Version](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)
[![Build Status](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware)
[![Discord](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh)
[![Docs Status](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
[![GitHub contributors](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly)
[![GitHub forks](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/)
## Was ist QMK Firmware?
QMK (*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.
## Bezugsquelle fรผr QMK
Wenn 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.
Ansonsten 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`).
## Anleitung fรผrs Kompilieren
Bevor 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:
make planck/rev4:default
Dies 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:
make preonic:default
## Mรถglichkeiten der Anpassung
QMK 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.
-121
View File
@@ -1,121 +0,0 @@
* [Anleitung fรผr Anfรคnger](de/newbs.md)
* [Erste Schritte](de/newbs_getting_started.md)
* [Die erste Firmware](de/newbs_building_firmware.md)
* [Firmware flashen](de/newbs_flashing.md)
* [Testen und Debuggen](de/newbs_testing_debugging.md)
* [Git Tips und Tricks](de/newbs_best_practices.md)
* [Hilfreiche Ressourcen](de/newbs_learn_more_resources.md)
* [QMK Basics](de/README.md)
* [QMK Einfรผhrung](de/getting_started_introduction.md)
* [QMK CLI](de/cli.md)
* [QMK CLI Konfiguration](de/cli_configuration.md)
* [Zu QMK beitragen](de/contributing.md)
* [Anleitung fรผr Github](de/getting_started_github.md)
* [Nach Hilfe fragen](de/getting_started_getting_help.md)
* [Breaking Changes](de/breaking_changes.md)
* [2019 Aug 30](de/ChangeLog/20190830.md)
* [FAQ](de/faq.md)
* [Hรคufige Fragen](de/faq_general.md)
* [Build/Kompilieren](de/faq_build.md)
* [Debugging/Troubleshooting](de/faq_debug.md)
* [Keymap](de/faq_keymap.md)
* [Treiber Installation mit Zadig](de/driver_installation_zadig.md)
* Detailierte Guides
* [Build Tools installieren](de/getting_started_build_tools.md)
* [Vagrant Guide](de/getting_started_vagrant.md)
* [Build/Compile Anleitung](de/getting_started_make_guide.md)
* [Firmware flashen](de/flashing.md)
* [Funktionalitรคt anpassen](de/custom_quantum_functions.md)
* [Keymap รœberblick](de/keymap.md)
* [Hardware](de/hardware.md)
* [AVR Prozessoren](de/hardware_avr.md)
* [Treiber](de/hardware_drivers.md)
* Referenz
* [Tastatur Richtlinien](de/hardware_keyboard_guidelines.md)
* [Konfigurations Optionen](de/config_options.md)
* [Keycodes](de/keycodes.md)
* [Coding Konventionen - C](de/coding_conventions_c.md)
* [Coding Konventionen - Python](de/coding_conventions_python.md)
* [Dokumentations Best Practices](de/documentation_best_practices.md)
* [Dokumentations Templates](de/documentation_templates.md)
* [Glossar](de/reference_glossary.md)
* [Unit Testing](de/unit_testing.md)
* [Nรผtzliche Funktionen](de/ref_functions.md)
* [Configurator Support](de/reference_configurator_support.md)
* [info.json Format](de/reference_info_json.md)
* [Python CLI Development](de/cli_development.md)
* [Features](de/features.md)
* [Basic Keycodes](de/keycodes_basic.md)
* [US ANSI Shifted Keys](de/keycodes_us_ansi_shifted.md)
* [Quantum Keycodes](de/quantum_keycodes.md)
* [Advanced Keycodes](de/feature_advanced_keycodes.md)
* [Audio](de/feature_audio.md)
* [Auto Shift](de/feature_auto_shift.md)
* [Backlight](de/feature_backlight.md)
* [Bluetooth](de/feature_bluetooth.md)
* [Bootmagic](de/feature_bootmagic.md)
* [Combos](de/feature_combo.md)
* [Command](de/feature_command.md)
* [Debounce API](de/feature_debounce_type.md)
* [DIP Switch](de/feature_dip_switch.md)
* [Dynamic Macros](de/feature_dynamic_macros.md)
* [Encoders](de/feature_encoders.md)
* [Grave Escape](de/feature_grave_esc.md)
* [Haptic Feedback](de/feature_haptic_feedback.md)
* [HD44780 LCD Controller](de/feature_hd44780.md)
* [Key Lock](de/feature_key_lock.md)
* [Layouts](de/feature_layouts.md)
* [Leader Key](de/feature_leader_key.md)
* [LED Matrix](de/feature_led_matrix.md)
* [Macros](de/feature_macros.md)
* [Mouse Keys](de/feature_mouse_keys.md)
* [OLED Driver](de/feature_oled_driver.md)
* [One Shot Keys](de/feature_advanced_keycodes.md#one-shot-keys)
* [Pointing Device](de/feature_pointing_device.md)
* [PS/2 Mouse](de/feature_ps2_mouse.md)
* [RGB Lighting](de/feature_rgblight.md)
* [RGB Matrix](de/feature_rgb_matrix.md)
* [Space Cadet](de/feature_space_cadet.md)
* [Split Keyboard](de/feature_split_keyboard.md)
* [Stenography](de/feature_stenography.md)
* [Swap Hands](de/feature_swap_hands.md)
* [Tap Dance](de/feature_tap_dance.md)
* [Terminal](de/feature_terminal.md)
* [Thermal Printer](de/feature_thermal_printer.md)
* [Unicode](de/feature_unicode.md)
* [Userspace](de/feature_userspace.md)
* [Velocikey](de/feature_velocikey.md)
* Fรผr Maker und Modder
* [Hand Wiring Guide](de/hand_wire.md)
* [ISP Flashing Guide](de/isp_flashing_guide.md)
* [ARM Debugging Guide](de/arm_debugging.md)
* [I2C Driver](de/i2c_driver.md)
* [GPIO Controls](de/internals_gpio_control.md)
* [Proton C Conversion](de/proton_c_conversion.md)
* Fรผr ein tieferes Verstรคndnis
* [Wie Tastaturen funktionieren](de/how_keyboards_work.md)
* [QMK verstehen](de/understanding_qmk.md)
* Andere Themen
* [Eclipse mit QMK](de/other_eclipse.md)
* [VSCode mit QMK](de/other_vscode.md)
* [Support](de/support.md)
* [รœbersetzungen](de/translating.md)
* QMK Internals (In Progress)
* [Defines](de/internals_defines.md)
* [Input Callback Reg](de/internals_input_callback_reg.md)
* [Midi Device](de/internals_midi_device.md)
* [Midi Device Setup Process](de/internals_midi_device_setup_process.md)
* [Midi Util](de/internals_midi_util.md)
* [Send Functions](de/internals_send_functions.md)
* [Sysex Tools](de/internals_sysex_tools.md)
-47
View File
@@ -1,47 +0,0 @@
# Bootloader Treiber Installation mit Zadig
QMK 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.
Hierzu 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.
Wir 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.
## Installation
Versetze 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.
Eingie 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.
Um ein Gerรคt mit USBaspLoader in den Bootloader-Modus zu versetzen, halte `BOOT` gedrรผckt wรคhrend Du den `RESET`-Knopf drรผckst.
Alternativ, halte `BOOT` gedrรผckt wรคhrend Du das USB-Kabel einsteckst.
Zadig sollte das Bootloader-Gerรคt automatisch erkennen. Manchmal musst Du zusรคtzlich noch **Options โ†’ List All Devices** auswรคhlen.
- Tastaturen mit Atmel AVR MCUs sollten als `ATm32U4DFU` (oder รคhnlich) angezeigt werden, mit der Vendor ID `03EB`.
- USBasp werden als `USBasp` angezeigt, mit VID/PID `16C0:05DC`.
- Tastaturen AVR controller und dem QMK-DFU Bootloader haben den namen `<Tastatur Name> Bootloader` und die VID `03EB`.
- Die meisten ARM Tastaturen werden als `STM32 BOOTLOADER` angezeigt, mit VID/PID `0483:DF11`.
!> 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**!
Wenn 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.
![Zadig mit Bootloader-Treiber korrekt installiert](https://i.imgur.com/b8VgXzx.png)
Entferne 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.
## Wiederherstellung einer Installation fรผr ein falsches Gerรคt
Wenn 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 .
![Eine funktionierende Tastatur aus Zadigs Sicht](https://i.imgur.com/Hx0E5kC.png)
ร–ffne den Gerรคte-Manager und suche nach einem Gerรคt das wie deine Tastatur aussieht.
![Die Tastatur mit dem falschen Treiber installiert, im Gerรคte-Manager](https://i.imgur.com/L3wvX8f.png)
Rechtsklick und **Gerรคt deinstallieren** anklicken. Bitte gehe sicher dass in diesem Schritt auch **Treibersoftware fรผr dieses Gerรคt lรถschen** markiert ist.
![Der "Gerรคt deinstallieren"-Dialog, mit "Treibersoftware fรผr dieses Gerรคt entfernen" markiert](https://i.imgur.com/aEs2RuA.png)
Klick **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.
-22
View File
@@ -1,22 +0,0 @@
# Anleitung fรผr absolute Beginner
QMK 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.
Bist 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.
## รœbersicht
Diese Anleitung ist in 7 Abschnitte unterteilt:
* [Die ersten Schritte](newbs_getting_started.md)
* [Die erste Firmware auf der Kommandozeile erzeugen](newbs_building_firmware.md)
* [Die erste Firmware mit der Online GUI erzeugen](newbs_building_firmware_configurator.md)
* [Firmware flashen](newbs_flashing.md)
* [Testen und Debuggen](newbs_testing_debugging.md)
* [Git Leitfaden](newbs_best_practices.md)
* [Weitere hilfreiche Ressourcen fรผr Anfรคnger](newbs_learn_more_resources.md)
Diese 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).
## Weitere Ressourcen
* [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).
-78
View File
@@ -1,78 +0,0 @@
# Eine eigene Firmware erstellen
Nachdem 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.
Solltest Du die Befehlszeile zwischenzeitlich geschlossen haben, vergiss nicht wieder in das richtige Verzeichnis zu navigieren, benutze dazu den Befehl `cd qmk_firmware`.
## Navigiere in deinen Keymap Ordner
Beginne damit, in das `keymaps` Verzeichnis fรผr deine Tastatur zu navigieren.
Wenn Du macOS oder Windows benutzt, kannst Du einfach in das keymaps Verzeichnis wechseln.
?> macOS:<br>
open keyboards/<keyboard_folder>/keymaps
?> Windows:<br>
start .\\keyboards\\<keyboard_folder>\\keymaps
## Eine Kopie der `default` Tastaturbelegung erstellen
Wenn 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.
Um den Prozess zu automatisieren kannst Du dazu auch das Skript `new_keymap.sh` verwenden.
Navigiere dazu in das `qmk_firmware/util` Verzeichnis und gib folgenden Befehl ein:
```
./new_keymap.sh <keyboard path> <username>
```
Um zum Beispiel den Benutzernamen John fรผr die Tastaturbelegung eines 1up60hse zu verwenden, wรผrdest Du Folgendes eingeben:
```
./new_keymap.sh 1upkeyboards/1up60hse john
```
## ร–ffne `keymap.c` in deinem bevorzugtem Text Editor
ร–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:
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
Diese 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.
!> 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.
## Personalisiere die Tastaturbelegung nach deinen Wรผnschen
Wie 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:
* [Keycodes](de/keycodes.md)
* [Features](de/features.md)
* [FAQ](de/faq.md)
?> 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.
## Deine Firmware erzeugen
Wenn Du damit fertig bist, deine Tastaturbelegung anzupassen, musst Du noch die Firmware erzeugen. ร–ffne dazu wieder die Befehlszeile und fรผhre folgenden Befehl aus:
make <my_keyboard>:<my_keymap>
Wenn deine Tastaturbelegung z.B. "xyverz" heiรŸt und Du die Belegung fรผr ein rev5 planck erzeugen mรถchtest, lautet der Befehl:
make planck/rev5:xyverz
Wรคhrend des Kompiliervorgangs wird viel Text auf dem Bildschirm ausgegeben. Es sollte am Ende mit etwas enden das ungefรคhr so aussieht:
```
Linking: .build/planck_rev5_xyverz.elf [OK]
Creating load file for flashing: .build/planck_rev5_xyverz.hex [OK]
Copying planck_rev5_xyverz.hex to qmk_firmware folder [OK]
Checking file size of planck_rev5_xyverz.hex [OK]
* File size is fine - 18392/28672
```
## Deine Firmware flashen
Bitte fahre mit [Firmware flashen](de/newbs_flashing.md) fort, um zu erfahren, wie Du deine neue Firmware auf deine Tastatur flashen kannst.
-369
View File
@@ -1,369 +0,0 @@
# Deine Tastatur flashen
Nachdem deine Firmware nun fertig ist musst Du Sie noch auf deine Tastatur flashen.
## Flash-Vorgang mit QMK Toolbox
Der einfachste Weg deine Tastatur zu flashen ist mit Hilfe der [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases)
Leider 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.
### Lade die Datei in QMK Toolbox
Beginne 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.
?> Wenn Du Windows oder macOS benutzt kannst Du mit folgenden Befehlen ganz einfach das aktuelle Firmware-Verzeichnis im Explorer oder Finder รถffnen.
#### Windows:
``` start . ```
#### macOS:
``` open . ```
Die Firmware-Dateien folgen dabei immer folgendem Schema:
<meine_Tastatur>_<meine_Tastaturbelegung>.{bin,hex}
Zum Beispiel wรผrde ein `planck/rev5` mit der `default` Tastaturbelegung folgenden Dateinamen haben:
planck_rev5_default.hex
Wenn 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.
### Die Tastatur in den DFU (Bootloader) Modus versetzen
Um 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.
Verschiedene 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:
* Halte beide Shift-Tasten und drรผcke `Pause`
* Halte beide Shift-Tasten und drรผcke `B`
* 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.
* Drรผcke den physischen `RESET`-Knopf auf der Unterseite des PCBs
* Suche auf dem PCB den Pin mit dem Label `RESET`, verbinde diesen mit deinem GND-Pin
* 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!!
Wenn Du damit erfolgreich warst solltest Du in der QMK Toolbox eine Nachricht sehen die ungefรคhr so aussieht:
```
*** Clueboard - Clueboard 66% HotSwap disconnected -- 0xC1ED:0x2390
*** DFU device connected
```
### Tastatur flashen
Klicke auf den `Flash`-Knopf in der QMK Toolbox. Die Ausgabe wird ungefรคhr so aussehen:
```
*** Clueboard - Clueboard 66% HotSwap disconnected -- 0xC1ED:0x2390
*** DFU device connected
*** Attempting to flash, please don't remove device
>>> dfu-programmer atmega32u4 erase --force
Erasing flash... Success
Checking memory from 0x0 to 0x6FFF... Empty.
>>> dfu-programmer atmega32u4 flash qmk_firmware/clueboard_66_hotswap_skully.hex
Checking memory from 0x0 to 0x55FF... Empty.
0% 100% Programming 0x5600 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
0% 100% Reading 0x7000 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
Validating... Success
0x5600 bytes written into 0x7000 bytes memory (76.79%).
>>> dfu-programmer atmega32u4 reset
*** DFU device disconnected
*** Clueboard - Clueboard 66% HotSwap connected -- 0xC1ED:0x2390
```
## Tastatur mit der Befehlszeile flashen
Zunรคchst solltest Du versuchen herauszufinden welchen Bootlader deine Tastatur benutzt. Diese vier Bootloader sind am Weitesten verbreitet:
| MCU | Bootloader |
| --- | --- |
| Pro-Micro und Klone | CATERINA |
| Teensy | Halfkay |
| OLKB Boards | QMK-DFU |
| sonstige atmega32u4 | DFU |
Auf der Seite [Flash Anleitung und Bootloader Informationen](de/flashing.md) kannst Du mehr รผber das Thema erfahren.
Wenn 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.
```rules.mk
...
BOOTLOADER = caterina
...
```
### DFU
Wenn 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:
make <meine_Tastatur>:<meine_Tastaturbelegung>:dfu
Wenn deine Tastaturbelegung z.B den Namen "xzverz" trรคgt und Du ein rev5 planck flashen mรถchtest sรคhe der Befehl wie folgt aus:
make planck/rev5:xyverz:dfu
Nachdem der Vorgang abgeschlossen ist sollte die Ausgabe ungefรคhr so aussehen:
```
Linking: .build/planck_rev5_xyverz.elf [OK]
Creating load file for flashing: .build/planck_rev5_xyverz.hex [OK]
Copying planck_rev5_xyverz.hex to qmk_firmware folder [OK]
Checking file size of planck_rev5_xyverz.hex
* File size is fine - 18574/28672
```
Wenn 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.
dfu-programmer: no device present.
Error: Bootloader not found. Trying again in 5s.
Wenn 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:
```
*** Attempting to flash, please don't remove device
>>> dfu-programmer atmega32u4 erase --force
Erasing flash... Success
Checking memory from 0x0 to 0x6FFF... Empty.
>>> dfu-programmer atmega32u4 flash qmk_firmware/clueboard_66_hotswap_skully.hex
Checking memory from 0x0 to 0x55FF... Empty.
0% 100% Programming 0x5600 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
0% 100% Reading 0x7000 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
Validating... Success
0x5600 bytes written into 0x7000 bytes memory (76.79%).
>>> dfu-programmer atmega32u4 reset
```
?> 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).
#### DFU Befehle
Es gibt verschiedene DFU Befehle um die Firmware auf ein DFU Gerรคt zu flashen:
* `: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.
* `:dfu-ee` - Der Flash-Vorgang benutzt eine `.eep` Datei anstatt einer `.hex` Datei. Dies ist eher unรผblich.
* `: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._
* `: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._
### Caterina
Fรผ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:
make <meine_Tastatur>:<meine_Tastaturbelegung>:avrdude
Wenn 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:
make lets_split/rev2:xyverz:avrdude
Nachdem die Kompilation abgeschlossen ist sollte die Ausgabe ungefรคhr so aussehen:
```
Linking: .build/lets_split_rev2_xyverz.elf [OK]
Creating load file for flashing: .build/lets_split_rev2_xyverz.hex [OK]
Checking file size of lets_split_rev2_xyverz.hex [OK]
* File size is fine - 27938/28672
Detecting USB port, reset your controller now..............
```
Nun 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:
```
Detected controller on USB port at /dev/ttyS15
Connecting to programmer: .
Found programmer: Id = "CATERIN"; type = S
Software Version = 1.0; No Hardware Version given.
Programmer supports auto addr increment.
Programmer supports buffered memory access with buffersize=128 bytes.
Programmer supports the following devices:
Device code: 0x44
avrdude.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude.exe: Device signature = 0x1e9587 (probably m32u4)
avrdude.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude.exe: erasing chip
avrdude.exe: reading input file "./.build/lets_split_rev2_xyverz.hex"
avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex auto detected as Intel Hex
avrdude.exe: writing flash (27938 bytes):
Writing | ################################################## | 100% 2.40s
avrdude.exe: 27938 bytes of flash written
avrdude.exe: verifying flash memory against ./.build/lets_split_rev2_xyverz.hex:
avrdude.exe: load data flash data from input file ./.build/lets_split_rev2_xyverz.hex:
avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex auto detected as Intel Hex
avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex contains 27938 bytes
avrdude.exe: reading on-chip flash data:
Reading | ################################################## | 100% 0.43s
avrdude.exe: verifying ...
avrdude.exe: 27938 bytes of flash verified
avrdude.exe: safemode: Fuses OK (E:CB, H:D8, L:FF)
avrdude.exe done. Thank you.
```
Sollten dabei Probleme auftreten (z.B. "Zugriff verweigert" / "Permission denied") muss der Make-Befehl mit privilegierten Berechtigungen ausgefรผhrt werden:
sudo make <meine_Tastatur>:<meine_Tastaturbelegung>:avrdude
Zusรคtzlich ist es mรถglich mehrere Tastaturen in einem Vorgang zu flashen:
make <keyboard>:<keymap>:avrdude-loop
Du kannst den Loop mit STRG + C unterbrechen sobald der Vorgang abgeschlossen ist. Die korrekte Tastenkombination kann abweichen und hรคngt vom Betriebssystem ab.
### HalfKay
Fรผ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:
make <meine_Tastatur>:<meine_Tastaturbelegung>:teensy
Wenn 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:
make ergodox_ez:xyverz:teensy
Nachdem die Kompilation abgeschlossen ist sollte die Ausgabe ungefรคhr so aussehen:
```
Linking: .build/ergodox_ez_xyverz.elf [OK]
Creating load file for flashing: .build/ergodox_ez_xyverz.hex [OK]
Checking file size of ergodox_ez_xyverz.hex [OK]
* File size is fine - 25584/32256
Teensy Loader, Command Line, Version 2.1
Read "./.build/ergodox_ez_xyverz.hex": 25584 bytes, 79.3% usage
Waiting for Teensy device...
(hint: press the reset button)
```
An 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:
```
Found HalfKay Bootloader
Read "./.build/ergodox_ez_xyverz.hex": 28532 bytes, 88.5% usage
Programming.............................................................
...................................................
Booting
```
### BootloadHID
Fรผ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:
make <meine_Tastatur>:<meine_Tastaturbelegung>:bootloaderHID
Wenn deine Tastaturbelegung zum Beispiel den Namen "xyverz" hat und Du eine Tastaturbelegung fรผr ein jj40 erzeugen mรถchtest, lautet der Befehl dafรผr:
make jj40:xyverz:bootloaderHID
Nachdem die Kompilation abgeschlossen ist sollte die Ausgabe ungefรคhr so aussehen:
```
Linking: .build/jj40_default.elf [OK]
Creating load file for flashing: .build/jj40_default.hex [OK]
Copying jj40_default.hex to qmk_firmware folder [OK]
Checking file size of jj40_default.hex [OK]
* The firmware size is fine - 21920/28672 (6752 bytes free)
```
Wenn 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.
```
Error opening HIDBoot device: The specified device was not found
Trying again in 5s.
```
An 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:
```
Page size = 128 (0x80)
Device size = 32768 (0x8000); 30720 bytes remaining
Uploading 22016 (0x5600) bytes starting at 0 (0x0)
0x05580 ... 0x05600
```
### STM32 (ARM)
Fรผ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:
make <meine_Tastatur>:<meine_Tastaturbelegung>:dfu-util
Wenn 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):
make planck/rev6:xyverz:dfu-util
Nachdem der Kompiliervorgang abgeschlossen ist sollte die Ausgabe ungefรคhr so aussehen:
Fรผ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:
make <meine_Tastatur>:<meine_Tastaturbelegung>:bootloaderHID
Wenn deine Tastaturbelegung zum Beispiel den Namen "xyverz" hat und Du eine Tastaturbelegung fรผr ein jj40 erzeugen mรถchtest, lautet der Befehl dafรผr:
```
Linking: .build/planck_rev6_xyverz.elf [OK]
Creating binary load file for flashing: .build/planck_rev6_xyverz.bin [OK]
Creating load file for flashing: .build/planck_rev6_xyverz.hex [OK]
Size after:
text data bss dec hex filename
0 41820 0 41820 a35c .build/planck_rev6_xyverz.hex
Copying planck_rev6_xyverz.bin to qmk_firmware folder [OK]
dfu-util 0.9
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
Invalid DFU suffix signature
A valid DFU suffix will be required in a future dfu-util release!!!
Opening DFU capable USB device...
ID 0483:df11
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuERROR, status = 10
dfuERROR, clearing status
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 2048
DfuSe interface name: "Internal Flash "
Downloading to address = 0x08000000, size = 41824
Download [=========================] 100% 41824 bytes
Download done.
File downloaded successfully
Transitioning to dfuMANIFEST state
```
#### STM32 Befehle
Fรผr Tastaturen mit STM32 Controller sind die DFU Befehle wie folgt:
* `:dfu-util` - The default command for flashing to STM32 devices.
* `:dfu-util` - Der Standard-Befehl fรผr STM32 Gerรคte.
* `: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.
* z.B.: `make <meine_Tastatur>:<meine_Tastaturbelegung>:dfu-util TIME_DELAY=5`
* `:dfu-util-split-left` - Gleiche Funktionsweise wie `dfu-util`, jedoch wird zusรคtzlich das EEPROM Setting "linke Seite" fรผr geteilte Tastaturen gesetzt.
* `:dfu-util-split-right` - Gleiche Funktionsweise wie `dfu-util`, jedoch wird zusรคtzlich das EEPROM Setting "rechte Seite" fรผr geteilte Tastaturen gesetzt.
## Probier's aus!
Herzlichen Glรผckwunsch! Deine individuell angepasst Firmware wurde auf deine Tastatur รผbertragen!
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.
-101
View File
@@ -1,101 +0,0 @@
# Einleitung
Genau wie in einem Computer befindet sich auch in einer Tastatur ein Prozessor.
Dieser Prozessor fรผhrt Software aus, die registriert wenn Tasten gedrรผckt bzw. wieder losgelassen werden und leitet die entsprechenden Signale an den Computer weiter.
QMK รผ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.
QMK 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.
# Los geht's!
Bevor 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.
Wenn 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)
## Software herunterladen
### Text Editor
Du 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.
Ansonsten 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/).
?> 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).
### QMK Toolbox
QMK 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.
[Hier kannst Du die aktuelle Version herunterladen.](https://github.com/qmk/qmk_toolbox/releases/latest)
* Fรผr Windows: `qmk_toolbox.exe` (portable) oder `qmk_toolbox_install.exe` (installer)
* Fรผr macOS: `QMK.Toolbox.app.zip` (portable) oder `QMK.Toolbox.pkg` (installer)
## Die Entwicklungsumgebung aufsetzen
Wir 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.
?> 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>
[Erforderliche Linux Grundlagen](https://www.guru99.com/must-know-linux-commands.html)<br>
[Noch ein paar Linux Befehle](https://www.tjhsst.edu/~dhyatt/superap/unixcmd.html)
### Windows
Du wirst MSYS2 (o.ร„.) und Git benรถtigen.
* Befolge die Installationsanleitung auf der [MSYS2 Homepage](http://www.msys2.org)
* SchlieรŸe alle offenen MSYS2 Fenster und รถffne ein neues MSYS2 MinGW 64-bit Terminal
* Installiere Git mit dem Kommando: `pacman -S git`
### macOS
Du wirst Homebrew benรถtigen. Folge dafรผr den Anweisungen auf der [Homebrew homepage](https://brew.sh).
Nachdem Homebrew erfolgreich installiert ist, kannst Du mit _QMK aufsetzen_ fortfahren.
### Linux
Du 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:
* Debian / Ubuntu / Devuan: `apt-get install git`
* Fedora / Red Hat / CentOS: `yum install git`
* Arch Linux: `pacman -S git`
?> Docker ist ebenfalls eine Option fรผr alle Plattformen. [Hier](de/getting_started_build_tools.md#docker) kannst Du dazu weitere Informationen finden.
## QMK aufsetzen
Wenn 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:
```shell
git clone --recurse-submodules https://github.com/qmk/qmk_firmware.git
cd qmk_firmware
```
?> 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.
QMK liefert ein Script mit, das helfen soll, Dir alles Weitere abzunehmen. Du kannst es mit dem folgenden Befehl aufrufen:
util/qmk_install.sh
## Die Build-Umgebung testen
Nun 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:
make <keyboard>:default
Der Befehl um z.B. die Firmware fรผr ein _Clueboard 66%_ zu erzeugen lautet:
make clueboard/66/rev3:default
Wenn es fertig ist, sollte der Output ungefรคhr so รคhnlich wie das Folgende aussehen:
```
Linking: .build/clueboard_66_rev3_default.elf [OK]
Creating load file for flashing: .build/clueboard_66_rev3_default.hex [OK]
Copying clueboard_66_rev3_default.hex to qmk_firmware folder [OK]
Checking file size of clueboard_66_rev3_default.hex [OK]
* The firmware size is fine - 26356/28672 (2316 bytes free)
```
# Eine eigene Tastaturbelegung erstellen
Du 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).
-14
View File
@@ -1,14 +0,0 @@
# Lernmaterial
Diese weiterfรผhrenden Ressourcen sind darauf ausgerichtet, Neulingen der QMK Commmunity mehr Informationen und ein besseres Verstรคndnis zu einzelnen Themen zu bieten.
Git Ressourcen:
* [Gutes allgemeines Tutorial](https://www.codecademy.com/learn/learn-git) (auf Englisch)
* [Git spielerisch anhand von Beispielen lernen](https://learngitbranching.js.org/) (auf Englisch)
* [Mehr รผber den allgemeinen Umgang mit Github](getting_started_github.md)
* [Mehr รผber Git im Bezug zu QMK](contributing.md)
Mehr รผber die Arbeit mit der Befehlszeile:
* [Gutes allgemeines Tutorial รผber die Arbeit mit der Befehlszeile](https://www.codecademy.com/learn/learn-the-command-line) (auf Englisch)
-100
View File
@@ -1,100 +0,0 @@
# Testen und Debuggen
Nachdem 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.
## Testen
Die 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.
Anmerkung: Diese Programme werden weder von QMK bereitgestellt oder gutgeheiรŸen.
* [Switch Hitter](https://elitekeyboards.com/switchhitter.php) (Nur fรผr Windows)
* [Keyboard Viewer](https://www.imore.com/how-use-keyboard-viewer-your-mac) (Nur fรผr Mac)
* [Keyboard Tester](http://www.keyboardtester.com) (Web basiert)
* [Keyboard Checker](http://keyboardchecker.com) (Web basiert)
## Debuggen
Deine 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.
```c
void keyboard_post_init_user(void) {
// Customise these values to desired behaviour
debug_enable=true;
debug_matrix=true;
//debug_keyboard=true;
//debug_mouse=true;
}
```
### Debuggen mit der QMK Toolbox
Fรผr kompatible Plattformen kann die [QMK Toolbox](https://github.com/qmk/qmk_toolbox) benutzt werden um Debug-Nachrichten deiner Tastatur anzuzeigen.
### Debuggen mit hid_listen
Bevorzugst 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.
<!-- FIXME: Describe the debugging messages here. -->
## Eigene Debug-Nachrichten senden
Manchmal 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:
#include <print.h>
Danach stehen dir verschiedene Druck-Funktionen zur Verfรผgung:
* `print("string")`: Druckt einen simplen String
* `uprintf("%s string", var)`: Druckt einen formatierten String
* `dprint("string")` Druckt einen simplen String, aber nur wenn der Debug-Mode aktiviert ist
* `dprintf("%s string", var)`: Druckt einen formatierten String, aber nur wenn der Debug-Mode aktiviert ist
## Debug Beispiele
Anbei 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.
### Which matrix position is this keypress?
### Welche Matrix Position hat dieser Tastenanschlag
Beim 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.
```c
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// Wenn 'console' aktiviert ist wird die Matrix-Position und der Status jedes Tastenanschlags ausgegeben
#ifdef CONSOLE_ENABLE
uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
#endif
return true;
}
```
Beispiel Ausgabe:
```text
Waiting for device:.......
Listening:
KL: kc: 169, col: 0, row: 0, pressed: 1
KL: kc: 169, col: 0, row: 0, pressed: 0
KL: kc: 174, col: 1, row: 0, pressed: 1
KL: kc: 174, col: 1, row: 0, pressed: 0
KL: kc: 172, col: 2, row: 0, pressed: 1
KL: kc: 172, col: 2, row: 0, pressed: 0
```
### Wieviel Zeit wurde benรถtigt um einen Tastenanschlag zu detektieren?
Wenn 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.
```c
#define DEBUG_MATRIX_SCAN_RATE
```
Beispiel Ausgabe
```text
> matrix scan frequency: 315
> matrix scan frequency: 313
> matrix scan frequency: 316
> matrix scan frequency: 316
> matrix scan frequency: 316
> matrix scan frequency: 316
```
+5 -3
View File
@@ -28,9 +28,9 @@ the Ctrl, Alt, or GUI modifiers are held down.
A compact 40% (12x4) ortholinear keyboard kit made and sold by OLKB and Massdrop. [More info on qmk.fm](http://qmk.fm/planck/)
* Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)
* Hardware Supported: Planck PCB rev1, rev2, rev3, rev4, Teensy 2.0
* Hardware Availability: [OLKB.com](https://olkb.com), [Massdrop](https://www.massdrop.com/buy/planck-mechanical-keyboard?mode=guest_open)
Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)
Hardware Supported: Planck PCB rev1, rev2, rev3, rev4, Teensy 2.0
Hardware Availability: [OLKB.com](https://olkb.com), [Massdrop](https://www.massdrop.com/buy/planck-mechanical-keyboard?mode=guest_open)
Make example for this keyboard (after setting up your build environment):
@@ -38,3 +38,5 @@ Make example for this keyboard (after setting up your build environment):
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
```
There needs to be two spaces at the end of the `Keyboard Maintainer` and `Hardware Supported` lines for it to render correctly with Markdown.
-32
View File
@@ -1,32 +0,0 @@
# Firmware Quantum Mechanical Keyboard
[![Versiรณn actual](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)
[![Estado de Build](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware)
[![Discord](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh)
[![Estado de la documentaciรณn](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
[![Contribuyentes en GitHub](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly)
[![Forks en GitHub](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/)
## ยฟQuรฉ es el firmware QMK?
QMK (*Quantum Mechanical Keyboard*) es una comunidad open source que mantiene el firmware QMK, QMK Toolbox, qmk.fm, y estos documentos. El firmware QMK es un firmware para teclados basado en [tmk\_keyboard](http://github.com/tmk/tmk_keyboard) con algunas caracterรญsticas รบtiles para controladores Atmel AVR, y mรกs especรญficamente, la [lรญnea de productos OLKB](http://olkb.com), el teclado [ErgoDox EZ](http://www.ergodox-ez.com), y la [lรญnea de productos Clueboard](http://clueboard.co/). Tambiรฉn ha sido portado a chips ARM chips usando ChibiOS. Lo puedes utilizar para manejar tu propio teclado ya sea cableado a mano o basado en una PCB personalizada.
## Cรณmo conseguirlo
Si estรกs pensando en contribuir con un keymap, teclado, or caracterรญstica a QMK, la manera mรกs sencilla es hacer un [fork del repositorio en Github](https://github.com/qmk/qmk_firmware#fork-destination-box), y clonar tu repositorio localmente para hacer los cambios, subirlos, y abir un [Pull Request](https://github.com/qmk/qmk_firmware/pulls) desde tu fork.
De cualquier manera, tambiรฉn puedes descargarlo directamente en formatos ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), o clonarlo via git (`git@github.com:qmk/qmk_firmware.git`), o https (`https://github.com/qmk/qmk_firmware.git`).
## Cรณmo compilar
Antes 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:
make planck/rev4:default
Este ejemplo compilarรญa la revisiรณn `rev4` del teclado `planck` con el keymap `default`. No todos los teclados tienen revisiones (tambiรฉn llamados subproyectos o carpetas), en ese caso, se puede omitir:
make preonic:default
## Cรณmo personalizar
QMK 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).
-121
View File
@@ -1,121 +0,0 @@
* [Guรญa completa para novatos](es/newbs.md)
* [Empezando](es/newbs_getting_started.md)
* [Construyendo tu primer firmare](es/newbs_building_firmware.md)
* [Flasheando el firmware](es/newbs_flashing.md)
* [Testeando y depurando ](es/newbs_testing_debugging.md)
* [Mejores prรกticas](es/newbs_best_practices.md)
* [Recursos de aprendizaje](es/newbs_learn_more_resources.md)
* [QMK Basics](es/README.md)
* [Introducciรณn a QMK](es/getting_started_introduction.md)
* [QMK CLI](es/cli.md)
* [Configuraciรณn de QMK CLI](es/cli_configuration.md)
* [Contribuyendo a QMK](es/contributing.md)
* [Cรณmo usar Github](es/getting_started_github.md)
* [Obtener ayuda](es/getting_started_getting_help.md)
* [Cambios incompatibles](es/breaking_changes.md)
* [30 Ago 2019](es/ChangeLog/20190830.md)
* [Preguntas frecuentes](es/faq.md)
* [General](es/faq_general.md)
* [Construir/Compilar QMK](es/faq_build.md)
* [Depurando/Encontrando problemas en QMK](es/faq_debug.md)
* [Keymap](es/faq_keymap.md)
* [Instalaciรณn de drivers con Zadig](es/driver_installation_zadig.md)
* Guรญas detalladas
* [Instalar herramientas construcciรณn](es/getting_started_build_tools.md)
* [Guรญa Vagrant](es/getting_started_vagrant.md)
* [Instrucciones de Construcciรณn/Compilado](es/getting_started_make_guide.md)
* [Flasheando Firmware](es/flashing.md)
* [Personalizando funcionalidad](es/custom_quantum_functions.md)
* [Visiรณn general del Keymap](es/keymap.md)
* [Hardware](es/hardware.md)
* [Procesadores AVR](es/hardware_avr.md)
* [Drivers](es/hardware_drivers.md)
* Referencia
* [Pautas de teclados](es/hardware_keyboard_guidelines.md)
* [Opciones de configuraciรณn](es/config_options.md)
* [Keycodes](es/keycodes.md)
* [Convenciones de cรณdigo - C](es/coding_conventions_c.md)
* [Convenciones de cรณdigo - Python](es/coding_conventions_python.md)
* [Mejores prรกcticas de documentaciรณn](es/documentation_best_practices.md)
* [Plantillas de documentaciรณn](es/documentation_templates.md)
* [Glosario](es/reference_glossary.md)
* [Tests unitarios](es/unit_testing.md)
* [Funciones รบtiles](es/ref_functions.md)
* [Sporte configurador](es/reference_configurator_support.md)
* [Formato info.json](es/reference_info_json.md)
* [Desarrollo Python CLI](es/cli_development.md)
* [Caracterรญsticas](es/features.md)
* [Keycodes Bรกsicos](es/keycodes_basic.md)
* [Teclas US ANSI Shifted](es/keycodes_us_ansi_shifted.md)
* [Keycodes Quantum](es/quantum_keycodes.md)
* [Keycodes Avanzados](es/feature_advanced_keycodes.md)
* [Audio](es/feature_audio.md)
* [Auto Shift](es/feature_auto_shift.md)
* [Retroiluminaciรณn](es/feature_backlight.md)
* [Bluetooth](es/feature_bluetooth.md)
* [Bootmagic](es/feature_bootmagic.md)
* [Combos](es/feature_combo.md)
* [Comando](es/feature_command.md)
* [API Debounce](es/feature_debounce_type.md)
* [Switch DIP](es/feature_dip_switch.md)
* [Macros Dinรกmicas](es/feature_dynamic_macros.md)
* [Encoders](es/feature_encoders.md)
* [Grave Escape](es/feature_grave_esc.md)
* [Feedback Hรกptico](es/feature_haptic_feedback.md)
* [Controlador LCD HD44780](es/feature_hd44780.md)
* [Key Lock](es/feature_key_lock.md)
* [Layouts](es/feature_layouts.md)
* [Tecla Leader](es/feature_leader_key.md)
* [Matriz LED](es/feature_led_matrix.md)
* [Macros](es/feature_macros.md)
* [Teclas del ratรณn](es/feature_mouse_keys.md)
* [Driver OLED](es/feature_oled_driver.md)
* [Teclas One Shot](es/feature_advanced_keycodes.md#one-shot-keys)
* [Dispositivo de apuntado](es/feature_pointing_device.md)
* [Ratรณn PS/2](es/feature_ps2_mouse.md)
* [Iluminaciรณn RGB](es/feature_rgblight.md)
* [Matriz RGB](es/feature_rgb_matrix.md)
* [Cadete espacial](es/feature_space_cadet.md)
* [Teclado dividido](es/feature_split_keyboard.md)
* [Stenografรญa](es/feature_stenography.md)
* [Swap Hands](es/feature_swap_hands.md)
* [Tap Dance](es/feature_tap_dance.md)
* [Terminal](es/feature_terminal.md)
* [Impresora Tรฉrmica](es/feature_thermal_printer.md)
* [Unicode](es/feature_unicode.md)
* [Userspace](es/feature_userspace.md)
* [Velocikey](es/feature_velocikey.md)
* Para Makers y Modders
* [Guรญa de cableado a mano](es/hand_wire.md)
* [Guรญa de flasheado de ISP](es/isp_flashing_guide.md)
* [Guรญa de depuraciรณn de ARM](es/arm_debugging.md)
* [Driver I2C](es/i2c_driver.md)
* [Controles GPIO](es/internals_gpio_control.md)
* [Conversiรณn Proton C](es/proton_c_conversion.md)
* Para entender en profundidad
* [Cรณmo funcionan los teclados](es/how_keyboards_work.md)
* [Entendiendo QMK](es/understanding_qmk.md)
* Otros temas
* [Usando Eclipse con QMK](es/other_eclipse.md)
* [Usando VSCode con QMK](es/other_vscode.md)
* [Soporte](es/support.md)
* [Cรณmo aรฑadir traducciones](es/translating.md)
* QMK Internals (En progreso)
* [Defines](es/internals_defines.md)
* [Input Callback Reg](es/internals_input_callback_reg.md)
* [Dispositivo Midi](es/internals_midi_device.md)
* [Proceso de configuraciรณn de un dispositivo Midi](es/internals_midi_device_setup_process.md)
* [Utilidad Midi](es/internals_midi_util.md)
* [Funciones Send](es/internals_send_functions.md)
* [Herramientas Sysex](es/internals_sysex_tools.md)
-9
View File
@@ -1,9 +0,0 @@
# Llegar a ser un colaborador QMK
Un colaborador QMK es un maker o diseรฑador de teclados que tiene interรฉs en ayudar a QMK a crecer y mantener sus teclado(s), y alentar a los usuarios y clientes a presentar herramientas, ideas, y keymaps. Siempre procuramos agregar mรกs teclados y colaboradores, pero pedimos que cumplan los siguientes requisitos:
* **Tener un PCB disponible a la venta.** Desafortunadamente, hay demasiada variaciรณn y complicaciones con teclados cableados a mano.
* **Realizar el mantenimiento de tu teclado en QMK.** Este podrรญa requirir un setup inicial para hacer que tu teclado funcione, pero tambiรฉn podrรญa incluir adaptarse a cambios hecho al base de QMK que podrรญan descomponer o rendir cรณdigo superfluo.
* **Aprobar e incorporar pull requests de keymaps para tu teclado.** Nos gusta alentar a los usuarios a contribuir sus keymaps para que otros los vean y los puedan usar para crear sus propios.
Si sientes que cumples los requisitos, ยกmรกndanos un email a hello@qmk.fm con una introducciรณn y algunos enlaces para tu teclado!
-8
View File
@@ -1,8 +0,0 @@
# Hardware
QMK es compatible con una variedad de hardware. Si tu procesador puede ser dirigido por [LUFA](http://www.fourwalledcubicle.com/LUFA.php) o [ChibiOS](http://www.chibios.com), probablemente puedes hacer que QMK se ejecute en รฉl. Esta secciรณn explora cรณmo hacer que QMK se ejecute y se comunique con hardware de todo tipo.
* [Pautas de teclados](hardware_keyboard_guidelines.md)
* [Procesadores AVR](hardware_avr.md)
* Procesadores ARM (TBD)
* [Drivers](hardware_drivers.md)
-181
View File
@@ -1,181 +0,0 @@
# Teclados con Procesadores AVR
Esta pรกgina describe el soporte para procesadores AVR en QMK. Los procesadores AVR incluyen el atmega32u4, atmega32u2, at90usb1286, y otros procesadores de la Corporaciรณn Atmel. Los procesadores AVR son MCUs de 8-bit que son diseรฑados para ser fรกciles de trabajar. Los procesadores AVR mรกs comunes en los teclados tienen USB y un montรณn de GPIO para permitir grandes matrices de teclado. Son los MCUs mรกs populares para el uso en los teclados hoy en dรญa.
Si aรบn no lo has hecho, debes leer las [Pautas de teclados](hardware_keyboard_guidelines.md) para tener una idea de cรณmo los teclados encajan en QMK.
## Aรฑadir tu Teclado AVR a QMK
QMK tiene varias caracterรญsticas para simplificar el trabajo con teclados AVR. Para la mayorรญa de los teclados no tienes que escribir ni una sola lรญnea de cรณdigo. Para empezar, ejecuta el archivo `util/new_keyboard.sh`:
```
$ ./util/new_keyboard.sh
Generating a new QMK keyboard directory
Keyboard Name: mycoolkb
Keyboard Type [avr]:
Your Name [John Smith]:
Copying base template files... done
Copying avr template files... done
Renaming keyboard files... done
Replacing %KEYBOARD% with mycoolkb... done
Replacing %YOUR_NAME% with John Smith... done
Created a new keyboard called mycoolkb.
To start working on things, cd into keyboards/mycoolkb,
or open the directory in your favourite text editor.
```
Esto crearรก todos los archivos necesarios para tu nuevo teclado, y rellenarรก la configuraciรณn con valores predeterminados. Ahora sรณlo tienes que personalizarlo para tu teclado.
## `readme.md`
Aquรญ es donde describirรกs tu teclado. Por favor sigue la [Plantilla del readme de teclados](documentation_templates.md#keyboard-readmemd-template) al escribir tu `readme.md`. Te animamos a colocar una imagen en la parte superior de tu `readme.md`. Por favor, utiliza un servicio externo como [Imgur](http://imgur.com) para alojar las imรกgenes.
## `<keyboard>.c`
Aquรญ es donde pondrรกs toda la lรณgica personalizada para tu teclado. Muchos teclados no necesitan nada aquรญ. Puedes aprender mรกs sobre cรณmo escribir lรณgica personalizada en [Funciones Quantum Personalizadas](custom_quantum_functions.md).
## `<keyboard>.h`
Este es el archivo en el que defines tu(s) [Macro(s) de Layout](feature_layouts.md). Por lo menos deberรญas tener un `#define LAYOUT` para tu teclado que se ve algo asรญ:
```c
#define LAYOUT( \
k00, k01, k02, \
k10, k11 \
) { \
{ k00, k01, k02 }, \
{ k10, KC_NO, k11 }, \
}
```
La primera mitad de la macro pre-procesador `LAYOUT` define la disposiciรณn fรญsica de las llaves. La segunda mitad de la macro define la matriz a la que estรกn conectados los interruptores. Esto te permite tener una disposiciรณn fรญsica de las llaves que difiere de la matriz de cableado.
Cada una de las variables `k__` tiene que ser รบnica, y normalmente sigue el formato `k<row><col>`.
La matriz fรญsica (la segunda mitad) debe tener un nรบmero de filas igualando `MATRIX_ROWS`, y cada fila debe tener exactamente `MATRIX_COLS` elementos. Si no tienes tantas teclas fรญsicas puedes usar `KC_NO` para rellenar los espacios en blanco.
## `config.h`
El archivo `config.h` es donde configuras el hardware y el conjunto de caracterรญsticas para tu teclado. Hay un montรณn de opciones que se pueden colocar en ese archivo, demasiadas para listar allรญ. Para obtener una visiรณn de conjunto completa de las opciones disponibles consulta la pรกgina de [Opciones de Configuraciรณn](config_options.md).
### Configuraciรณn de hardware
En la parte superior de `config.h` encontrarรกs ajustes relacionados con USB. Estos controlan la apariencia de tu teclado en el Sistema Operativo. Si no tienes una buena razรณn para cambiar debes dejar el `VENDOR_ID` como `0xFEED`. Para el `PRODUCT_ID` debes seleccionar un nรบmero que todavรญa no estรฉ en uso.
Cambia las lรญneas de `MANUFACTURER`, `PRODUCT`, y `DESCRIPTION` para reflejar con precisiรณn tu teclado.
```c
#define VENDOR_ID 0xFEED
#define PRODUCT_ID 0x6060
#define DEVICE_VER 0x0001
#define MANUFACTURER Tรบ
#define PRODUCT mi_teclado_fantastico
#define DESCRIPTION Un teclado personalizado
```
?> Windows y macOS mostrarรกn el `MANUFACTURER` y `PRODUCT` en la lista de dispositivos USB. `lsusb` en Linux toma estos de la lista mantenida por el [Repositorio de ID USB](http://www.linux-usb.org/usb-ids.html) por defecto. `lsusb -v` mostrarรก los valores reportados por el dispositivo, y tambiรฉn estรกn presentes en los registros del nรบcleo despuรฉs de conectarlo.
### Configuraciรณn de la matriz del teclado
La siguiente secciรณn del archivo `config.h` trata de la matriz de tu teclado. Lo primero que debes establecer es el tamaรฑo de la matriz. Esto es generalmente, pero no siempre, el mismo nรบmero de filas y columnas como la disposiciรณn fรญsica de las teclas.
```c
#define MATRIX_ROWS 2
#define MATRIX_COLS 3
```
Una vez que hayas definido el tamaรฑo de tu matriz, necesitas definir quรฉ pines en tu MCU estรกn conectados a filas y columnas. Para hacerlo simplemente especifica los nombres de esos pines:
```c
#define MATRIX_ROW_PINS { D0, D5 }
#define MATRIX_COL_PINS { F1, F0, B0 }
#define UNUSED_PINS
```
El nรบmero de entradas debe ser el mismo que el nรบmero que asignaste a `MATRIX_ROWS`, y del mismo modo para `MATRIX_COL_PINS` y `MATRIX_COLS`. No tienes que especificar `UNUSED_PINS`, pero puedes si deseas documentar quรฉ pines estรกn abiertos.
Finalmente, puedes especificar la direcciรณn en la que apuntan tus diodos. Esto puede ser `COL2ROW` o `ROW2COL`.
```c
#define DIODE_DIRECTION COL2ROW
```
#### Matriz de patas directas
Para configurar un teclado en el que cada interruptor estรก conectado a un pin y tierra separados en lugar de compartir los pines de fila y columna, usa `DIRECT_PINS`. La asignaciรณn define los pines de cada interruptor en filas y columnas, de izquierda a derecha. Debe ajustarse a los tamaรฑos dentro de `MATRIX_ROWS` y `MATRIX_COLS`. Usa `NO_PIN` para rellenar espacios en blanco. Sobreescribe el comportamiento de `DIODE_DIRECTION`, `MATRIX_ROW_PINS` y `MATRIX_COL_PINS`.
```c
// #define MATRIX_ROW_PINS { D0, D5 }
// #define MATRIX_COL_PINS { F1, F0, B0 }
#define DIRECT_PINS { \
{ F1, E6, B0, B2, B3 }, \
{ F5, F0, B1, B7, D2 }, \
{ F6, F7, C7, D5, D3 }, \
{ B5, C6, B6, NO_PIN, NO_PIN } \
}
#define UNUSED_PINS
/* COL2ROW, ROW2COL */
//#define DIODE_DIRECTION
```
### Configuraciรณn de retroiluminaciรณn
QMK soporta retroiluminaciรณn en la mayorรญa de los pines GPIO. Algunos de ellos pueden ser manejados por el MCU en hardware. Para mรกs detalles, consulta la [Documentaciรณn de Retroiluminaciรณn](feature_backlight.md).
```c
#define BACKLIGHT_PIN B7
#define BACKLIGHT_LEVELS 3
#define BACKLIGHT_BREATHING
#define BREATHING_PERIOD 6
```
### Otras opciones de configuraciรณn
Hay un montรณn de caracterรญsticas que se pueden configurar o ajustar en `config.h`. Debes consultar la pรกgina de [Opciones de Configuraciรณn](config_options.md) para mรกs detalles.
## `rules.mk`
Usa el archivo `rules.mk` para decirle a QMK quรฉ archivos construir y quรฉ caracterรญsticas habilitar. Si estรกs construyendo sobre un atmega32u4 deberรญas poder dejar mayormente los valores predeterminados. Si estรกs usando otro MCU es posible que tengas que ajustar algunos parรกmetros.
### Opciones MCU
Estas opciones le indican al sistema de compilaciรณn para quรฉ CPU construir. Ten mucho cuidado si cambias cualquiera de estos ajustes. Puedes inutilizar tu teclado.
```make
MCU = atmega32u4
F_CPU = 16000000
ARCH = AVR8
F_USB = $(F_CPU)
OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT
```
### Gestores de arranque
El gestor de arranque es una secciรณn especial de tu MCU que te permite actualizar el cรณdigo almacenado en el MCU. Piensa en ello como una particiรณn de rescate para tu teclado.
#### Ejemplo de gestor de arranque
```make
BOOTLOADER = halfkay
```
#### Ejemplo de cargador DFU Atmel
```make
BOOTLOADER = atmel-dfu
```
#### Ejemplo de gestor de arranque Pro Micro
```make
BOOTLOADER = caterina
```
### Opciones de construcciรณn
Hay un serie de caracterรญsticas que se pueden activar o desactivar en `rules.mk`. Consulta la pรกgina de [Opciones de Configuraciรณn](config_options.md#feature-options) para obtener una lista detallada y una descripciรณn.
-36
View File
@@ -1,36 +0,0 @@
# Controladores de hardware QMK
QMK se utiliza en un montรณn de hardware diferente. Mientras que el soporte para los MCUs y las configuraciones de matriz mรกs comunes estรก integrado, hay una serie de controladores que se pueden aรฑadir para soportar hardware adicional al teclado. Los ejemplos incluyen ratones y otros dispositivos de apuntamiento, extensores de i/o para teclados divididos, modรบlos Bluetooth, y pantallas LCD, OLED y TFT.
<!-- FIXME: Esto debe hablar de cรณmo se integran los controladores en QMK y cรณmo puedes aรฑadir su propio controlador.
# Descripciรณn del sistema de controladores
-->
# Controladores disponibles
## ProMicro (Solo AVR)
Soporte para direccionar pines en el ProMicro por su nombre Arduino en lugar de su nombre AVR. Esto necesita ser mejor documentado. Si estรกs tratando de hacer esto y leer el cรณdigo no ayuda por favor [abre una issue](https://github.com/qmk/qmk_firmware/issues/new) y podemos ayudarte por el proceso.
## Controlador OLED SSD1306
Soporte para pantallas OLED basadas en SSD1306. Para obtener mรกs informaciรณn consulta la pรกgina de [Caracterรญstica de Controlador OLED](feature_oled_driver.md).
## uGFX
Puedes hacer uso de uGFX dentro de QMK para manejar LCDs de caracteres y grรกficos, matrices de LED, OLED, TFT, y otras tecnologรญas de visualizaciรณn. Esto necesita ser mejor documentado. Si estรกs tratando de hacer esto y leer el cรณdigo no ayuda por favor [abre una issue](https://github.com/qmk/qmk_firmware/issues/new) y podemos ayudarte por el proceso.
## WS2812 (Solo AVR)
Soporte para LEDs WS2811/WS2812{a,b,c}. Para obtener mรกs informaciรณn consulta la pรกgina de [Luz RGB](feature_rgblight.md).
## IS31FL3731
Soporte para hasta 2 controladores. Cada controlador implementa 2 matrices charlieplex para direccionar LEDs individualmente usando I2C. Esto permite hasta 144 LEDs del mismo color o 32 LEDs RGB. Para obtener mรกs informaciรณn sobre cรณmo configurar el controlador, consulta la pรกgina de [Matriz RGB](feature_rgb_matrix.md).
## IS31FL3733
Soporte para hasta un solo controlador con espacio para expansiรณn. Cada controlador puede controlar 192 LEDs individuales o 64 LEDs RGB. Para obtener mรกs informaciรณn sobre cรณmo configurar el controlador, consulta la pรกgina de [Matriz RGB](feature_rgb_matrix.md).
-149
View File
@@ -1,149 +0,0 @@
# Pautas del teclado QMK
Desde sus inicios, QMK ha crecido a pasos agigantados gracias a personas como tรบ que contribuyes a la creaciรณn y mantenimiento de nuestros teclados comunitarios. A medida que hemos crecido hemos descubierto algunos patrones que funcionan bien, y pedimos que te ajustes a ellos para que sea mรกs fรกcil para que otras personas se beneficien de tu duro trabajo.
## Nombrar tu Teclado/Proyecto
Todos los nombres de teclado estรกn en minรบsculas, consistiendo sรณlo de letras, nรบmeros y guiones bajos (`_`). Los nombres no pueden comenzar con un guiรณn bajo. La barra de desplazamiento (`/`) se utiliza como un carรกcter de separaciรณn de subcarpetas.
Los nombres `test`, `keyboard`, y `all` estรกn reservados para las รณrdenes de make y no pueden ser usados como un nombre de teclado o subcarpeta.
Ejemplos Vรกlidos:
* `412_64`
* `chimera_ortho`
* `clueboard/66/rev3`
* `planck`
* `v60_type_r`
## Subcarpetas
QMK utiliza subcarpetas tanto para organizaciรณn como para compartir cรณdigo entre las revisiones del mismo teclado. Puedes anidar carpetas hasta 4 niveles de profundidad:
qmk_firmware/keyboards/top_folder/sub_1/sub_2/sub_3/sub_4
Si una subcarpeta tiene un archivo `rules.mk` serรก considerado un teclado compilable. Estarรก disponible en el configurador de QMK y se probarรก con `make all`. Si estรกs utilizando una carpeta para organizar varios teclados del mismo fabricante no debes tener un archivo `rules.mk`.
Ejemplo:
Clueboard utiliza subcarpetas para ambos propรณsitos: organizaciรณn y revisiones de teclado.
* [`qmk_firmware`](https://github.com/qmk/qmk_firmware/tree/master)
* [`keyboards`](https://github.com/qmk/qmk_firmware/tree/master/keyboards)
* [`clueboard`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard) &larr; This is the organization folder, there's no `rules.mk` file
* [`60`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/60) &larr; This is a compilable keyboard, it has a `rules.mk` file
* [`66`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66) &larr; This is also compilable- it uses `DEFAULT_FOLDER` to specify `rev3` as the default revision
* [`rev1`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66/rev1) &larr; compilable: `make clueboard/66/rev1`
* [`rev2`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66/rev2) &larr; compilable: `make clueboard/66/rev2`
* [`rev3`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66/rev3) &larr; compilable: `make clueboard/66/rev3` or `make clueboard/66`
## Estructura de carpetas de teclado
Su teclado debe estar ubicado en `qmk_firm cuidada/keyboards/` y el nombre de la carpeta debe ser el nombre de su teclado como se describe en la secciรณn anterior. Dentro de esta carpeta debe haber varios archivos:
* `readme.md`
* `info.json`
* `config.h`
* `rules.mk`
* `<keyboard_name>.c`
* `<keyboard_name>.h`
### `readme.md`
Todos los proyectos necesitan tener un archivo `readme.md` que explica lo que es el teclado, quiรฉn lo hizo y dรณnde estรก disponible. Si es aplicable, tambiรฉn debe contener enlaces a mรกs informaciรณn, como el sitio web del fabricante. Por favor, sigue la [plantilla publicada](documentation_templates.md#keyboard-readmemd-template).
### `info.json`
Este archivo es utilizado por la [API de QMK](https://github.com/qmk/qmk_api). Contiene la informaciรณn que [configurador de QMK](https://config.qmk.fm/) necesita mostrar en una representaciรณn de su teclado. Tambiรฉn puede establecer metadatos aquรญ. Para mรกs informaciรณn, consulta la [pรกgina de referencia](reference_info_json.md).
### `config.h`
Todos los proyectos necesitan tener un archivo `config.h` que establece cosas como el tamaรฑo de la matriz, nombre del producto, USB VID/PID, descripciรณn y otros ajustes. En general, usa este archivo para establecer la informaciรณn esencial y los valores predeterminados para tu teclado que siempre funcionarรกn.
### `rules.mk`
La presencia de este archivo indica que la carpeta es un destino de teclado y se puede utilizar en las รณrdenes `make`. Aquรญ es donde estableces el entorno de compilaciรณn para tu teclado y configuras el conjunto predeterminado de caracterรญsticas.
### `<keyboard_name.c>`
Aquรญ es donde escribirรกs cรณdigo personalizado para tu teclado. Tรญpicamente escribirรกs cรณdigo para inicializar e interactuar con el hardware de tu teclado. Si tu teclado se compone de sรณlo una matriz de teclas sin LEDs, altavoces u otro hardware auxiliar este archivo puede estar en blanco.
Las funciones siguientes se definen tรญpicamente en este archivo:
* `void matrix_init_kb(void)`
* `void matrix_scan_kb(void)`
* `bool process_record_kb(uint16_t keycode, keyrecord_t *record)`
* `void led_set_kb(uint8_t usb_led)`
### `<keyboard_name.h>`
Este archivo se utiliza para definir la matriz para tu teclado. Debes definir al menos un macro de C que traduce una serie en una matriz que representa la matriz de interruptor fรญsico para tu teclado. Si es posible construir tu teclado con mรบltiples diseรฑos debes definir macros adicionales.
Si solo tienes un diseรฑo debes llamar a esta macro `LAYOUT`.
Al definir diseรฑos mรบltiples debes tener un diseรฑo base, llamado `LAYOUT_all`, que soporte todas las posibles posiciones de switch en tu matriz, incluso si ese diseรฑo es imposible de construir fรญsicamente. Esta es la macro que deberรญas usar en tu keymap `predeterminado`. Debes tener keymaps adicionales llamados `default_ tรฉrmino layout>` que usen tus otras macros de diseรฑo. Esto harรก que sea mรกs fรกcil para las personas utilizar los diseรฑos que defines.
Los nombres de las macros de diseรฑo son completamente minรบsculas, excepto por la palabra `LAYOUT` en el frente.
Por ejemplo, si tienes un PCB de 60% que soporta ANSI e ISO podrรญa definir los siguientes diseรฑos y keymaps:
| Nombre de diseรฑo | Nombre de keymap | Descripciรณn |
|-------------|-------------|-------------|
| LAYOUT_all | default | Un diseรฑo que soporta tanto ISO como ANSI |
| LAYOUT_ansi | default_ansi | Un diseรฑo ANSI |
| LAYOUT_iso | default_iso | Un diseรฑo ISO |
## Archivos de Imagen/Hardware
En un esfuerzo por mantener el tamaรฑo de repo abajo ya no estamos aceptando archivos binarios de cualquier formato, con pocas excepciones. Alojarlos en otro lugar (por ejemplo <https://imgur.com>) y enlazarlos en el `readme.md` es preferible.
Para archivos de hardware (tales como placas, casos, pcb) puedes contribuir a [qmk.fm repo](https://github.com/qmk/qmk.fm) y estarรกn disponibles en [qmk.fm](http://qmk.fm). Archivos descargables se almacenan en `/<teclado>/` (nombre sigue el mismo formato que el anterior), se sirven en `http://qmk.fm/<teclado>/`, y se generan pรกginas de `/_pages/<teclado>/` que se sirven en la misma ubicaciรณn (Los archivos .md se generan en archivos .html mediante Jekyll). Echa un vistazo a la carpeta `lets_split` para ver un ejemplo.
## Predeterminados de teclado
Dada la cantidad de funcionalidad que expone QMK, es muy fรกcil confundir a los nuevos usuarios. Al armar el firmware predeterminado para tu teclado, te recomendamos limitar tus funciones y opciones habilitadas al conjunto mรญnimo necesario para soportar tu hardware. A continuaciรณn se formulan recomendaciones sobre caracterรญsticas especรญficas.
### Bootmagic y Command
[Bootmagic](feature_bootmagic.md) and [Command](feature_command.md) son dos caracterรญsticas relacionadas que permiten a un usuario controlar su teclado de manera no obvia. Te recomendamos que piense largo y tendido acerca de si vas a habilitar cualquiera de las caracterรญsticas, y cรณmo vas a exponer esta funcionalidad. Tengas en cuenta que los usuarios que quieren esta funcionalidad puede habilitarla en sus keymaps personales sin afectar a todos los usuarios novatos que pueden estar usando tu teclado como su primera tarjeta programable.
De lejos el problema mรกs comรบn con el que se encuentran los nuevos usuarios es la activaciรณn accidental de Bootmagic mientras estรกn conectando su teclado. Estรกn sosteniendo el teclado por la parte inferior, presionando sin saberlo en alt y barra espaciadora, y luego se dan cuenta de que estas teclas han sido intercambiadas en ellos. Recomendamos dejar esta caracterรญstica deshabilitada de forma predeterminada, pero si la activas consideres establecer la opciรณn `BOOTMAGIC_KEY_SALT` a una tecla que es difรญcil de presionar al conectar el teclado.
Si tu teclado no tiene 2 teclas de cambio debes proporcionar un predeterminado de trabajo para `IS_COMMAND`, incluso cuando haya definido `COMMAND_ENABLE = no`. Esto darรก a sus usuarios un valor predeterminado para ajustarse a si lo hacen enable Command.
## Programaciรณn de teclado personalizado
Como se documenta en [Funcionalidad de Adaptaciรณn](custom_quantum_functions.md) puedes definir funciones personalizadas para tu teclado. Por favor, tengas en cuenta que sus usuarios pueden querer personalizar ese comportamiento asรญ, y hacer que sea posible para que puedan hacer eso. Si estรก proporcionando una funciรณn personalizada, por ejemplo `process_record_kb()`, asegรบrese de que su funciรณn tambiรฉn llame a la versiรณn` `_user()` de la llamada. Tambiรฉn debes tener en cuenta el valor de retorno de la versiรณn `_user()`, y ejecutar sรณlo tu cรณdigo personalizado si el usuario devuelve `true`.
## Proyectos Sin Producciรณn/Conectados A Mano
Estamos encantados de aceptar cualquier proyecto que utilice QMK, incluidos los prototipos y los cableados de mano, pero tenemos una carpeta `/keyboards/handwired/` separada para ellos, por lo que la carpeta `/keyboards/` principal no se llena. Si un proyecto prototipo se convierte en un proyecto de producciรณn en algรบn momento en el futuro, ยกestaremos encantados de moverlo a la carpeta `/keyboards/` principal!
## Advertencias como errores
Al desarrollar su teclado, tengas en cuenta que todas las advertencias serรกn tratadas como errores - estas pequeรฑas advertencias pueden acumularse y causar errores mรกs grandes en el camino (y pierdan es generalmente una mala prรกctica).
## Derechos de autor
Si estรกs adaptando la configuraciรณn de tu teclado de otro proyecto, pero no utilizando el mismo cรณdigo, asegรบrese de actualizar la cabecera de derechos de autor en la parte superior de los archivos para mostrar tu nombre, en este formato:
Copyright 2017 Tu nombre <tu@email.com>
Si estรกs modificando el cรณdigo de otra persona y sรณlo ha hecho cambios triviales debes dejar su nombre en la declaraciรณn de derechos de autor. Si has hecho un trabajo significativo en el archivo debe agregar tu nombre a la de ellos, asรญ:
Copyright 2017 Su nombre <original_author@ejemplo.com> Tu nombre <tu@ejemplo.com>
El aรฑo debe ser el primer aรฑo en que se crea el archivo. Si el trabajo se hizo a ese archivo en aรฑos posteriores puedes reflejar que mediante la adiciรณn del segundo aรฑo a la primera, como asรญ:
Copyright 2015-2017 Tu nombre <tu@ejemplo.com>
## Licencia
El nรบcleo de QMC estรก licenciado bajo la [GNU General Public License](https://www.gnu.org/licenses/licenses.en.html). Si estรกs enviando binarios para los procesadores AVR puedes elegir cualquiera [GPLv2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.html) o [GPLv3](https://www.gnu.org/licenses/gpl.html). Si estรกs enviando binarios para ARM procesadores debes elegir [GPL Versiรณn 3](https://www.gnu.org/licenses/gpl.html) para cumplir con los [ChibiOS](http://www.chibios.org) licencia GPLv3.
Si tu teclado hace uso de la [uGFX](https://gfx.io) caracterรญsticas dentro de QMK debes cumplir con la [Licencia de uGFX](https://ugfx.io/license.html), que requiere una licencia comercial separada antes de vender un dispositivo que contiene uGFX.
## Detalles tรฉcnicos
Si estรกs buscando mรกs informaciรณn sobre cรณmo hacer que su teclado funcione con QMK, [echa un vistazo a la secciรณn hardware](hardware.md)!
-23
View File
@@ -1,23 +0,0 @@
# La guรญa completa de QMK para novatos
QMK es un poderoso firmware Open Source para tu teclado mecรกnico. Puedes utilizar QMK para personalizar tu teclado en maneras a la vez simples y potentes. Gente de todos los niveles de habilidad, desde completos novatos hasta expertos programadores, han utilizado con รฉxito QMK para personalizar sus teclados. Esta guรญa te ayudarรก a hacer lo mismo, sin importar tu nivel de habilidad.
ยฟNo estรกs seguro de si tu teclado puede ejecutar QMK? Si es un teclado mecรกnico construido por ti mismo probablemente puedas. Damos soporte a [gran nรบmero de placas de hobbistas](http://qmk.fm/keyboards/), e incluso si tu teclado actual no pudiera ejecutar QMK no deberรญas tener problemas encontrando uno que cumpliera tus necesidades.
## Visiรณn general
Hay 7 secciones principales en esta guรญa:
* [Empezando](newbs_getting_started.md)
* [Construyendo tu primer firmware](newbs_building_firmware.md)
* [Construyendo tu primer firmware usando la GUI](newbs_building_firmware_configurator.md)
* [Flasheando el firmware](newbs_flashing.md)
* [Testeando y depurando](newbs_testing_debugging.md)
* [Mejores prรกticas](newbs_best_practices.md)
* [Recursos de aprendizaje](newbs_learn_more_resources.md)
Esta guรญa estรก enfocada en ayudar a alguien que nunca ha compilado software con anterioridad. Toma decisiones y hace recomendaciones teniendo en cuenta este punto de vista. Hay mรฉtodos alternativos para muchos de estos procedimientos, y soportamos la mayorรญa de esas alternativas. Si tienes alguna duda sobre cรณmo llevar a cabo una tarea nos puedes [preguntar para que te guiemos](getting_started_getting_help.md).
## Recursos adicionales
* [Blog de Bรกsicos de Thomas Baart's QMK](https://thomasbaart.nl/category/mechanical-keyboards/firmware/qmk/qmk-basics/) โ€“ Un blog creado por un usuario que cubre lo bรกsico sobre cรณmo usar el firmware QMK Firmware, visto desde la perspectiva de un usuario nuevo.
-159
View File
@@ -1,159 +0,0 @@
# Mejores prรกcticas
## O, "Cรณmo aprendรญ a dejar de preocuparme y amarle a Git."
Este documento procura instruir a los novatos en las mejores prรกcticas para tener una experiencia mรกs fรกcil en contribuir a QMK. Te guiaremos por el proceso de contribuir a QMK, explicando algunas maneras de hacerlo mรกs fรกcilmente, y luego romperemos algunas cosas para enseรฑarte cรณmo arreglarlas.
En este documento suponemos un par de cosas:
1. Tienes una cuenta de Github, y has hecho un [fork del repo qmk_firmware](getting_started_github.md) en tu cuenta.
2. Has [configurado tu entorno de desarrollo](newbs_getting_started.md?id=environment-setup).
## La rama master de tu fork: Actualizar a menudo, nunca commit
Se recomienda que para desarrollo con QMK, lo que sea que estรฉs haciendo, mantener tu rama `master` actualizada, pero **nunca** commit en ella. Mejor, haz todos tus cambios en una rama de desarrollo y manda pull requests de tus ramas mientras programas.
Para evitar los conflictos de merge &mdash; cuando dos o mรกs usuarios han editado la misma parte de un archivo al mismo tiempo &mdash; mantรฉn tu rama `master` actualizada, y empieza desarrollo nuevo creando una nueva rama.
### Actualizando tu rama master
Para mantener tu rama `master` actualizada, se recomienda agregar el repository ("repo") de Firmware QMK como un repo remoto en git. Para hacer esto, abre tu interfaz de lรญnea de mandatos y ingresa:
```
git remote add upstream https://github.com/qmk/qmk_firmware.git
```
Para verificar que el repo ha sido agregado, ejecuta `git remote -v`, y lo siguiente debe aparecer:
```
$ git remote -v
origin https://github.com/<your_username>/qmk_firmware.git (fetch)
origin https://github.com/<your_username>/qmk_firmware.git (push)
upstream https://github.com/qmk/qmk_firmware.git (fetch)
upstream https://github.com/qmk/qmk_firmware.git (push)
```
Ya que has hecho esto, puedes buscar actualizaciones del repo ejecutando `git fetch upstream`. Esto busca las ramas y etiquetas &mdash; juntos conocidos como "refs" &mdash; del repo QMK, que ahora tiene el apodo `upstream`. Ahora podemos comparar los archivos en nuestro fork `origin` con los de QMK.
Para actualizar la rama master de tu fork, ejecuta lo siguiente, pulsando Intro despuรฉs de cada lรญnea:
```
git checkout master
git fetch upstream
git pull upstream master
git push origin master
```
Esto te coloca en tu rama master, busca los refs del repo de QMK, descarga la rama `master` actual a tu computadora, y despuรฉs lo sube a tu fork.
### Hacer cambios
Para hacer cambios, crea una nueva rama ejecutando:
```
git checkout -b dev_branch
git push --set-upstream origin dev_branch
```
Esto crea una nueva rama llamada `dev_branch`, te coloca en ella, y despuรฉs guarda la nueva rama a tu fork. El parรกmetro `--set-upstream` le dice a git que use tu fork y la rama `dev_branch` cada vez que uses `git push` o `git pull` en esta rama. Solo necesitas usarlo la primera que que subes cambios; ya despuรฉs, puedes usar `git push` o `git pull`, sin usar los demรกs parรกmetros.
!> Con `git push`, puedes usar `-u` en vez de `--set-upstream` &mdash; `-u` es un alias de `--set-upstream`.
Puedes nombrar tu rama casi cualquier cosa, pero se recomienda ponerle algo con relaciรณn a los cambios que vas a hacer.
Por defecto `git checkout -b` se basarรก tu nueva rama en la rama en la cual estรกs actualmente. Puedes basar tu rama en otra rama existente agregando el nombre de la rama al comando:
```
git checkout -b dev_branch master
```
Ahora que tienes una rama development, abre tu editor de texto y haz los cambios que quieres. Se recomienda hacer varios commits pequeรฑos a tu rama; de este modo cualquier cambio que causa problemas puede ser rastreado y deshecho si fuera necesario. Para hacer tus cambios, edita y guarda los archivos que necesitas actualizar, agrรฉgalos al *staging area* de Git, y luego haz un commit a tu rama:
```
git add path/to/updated_file
git commit -m "My commit message."
```
`git add` agrega los archivos que han sido cambiados al *staging area* de Git, lo cual es la "zona de preparaciรณn"de Git. Este contiene los cambios que vas a *commit* usando `git commit`, que guarda los cambios en el repo. Usa un mensaje de commit descriptivo para que puedas saber que ha cambiado fรกcilmente.
!> Si has cambiado muchos archivos, pero todos los archivos son parte del mismo cambio, puedes usar `git add .` para agregar todos los archivos cambiados que estรกn en tu directiro actual, en vez de agregar cada archivo manualmente.
### Publicar tus cambios
El รบtimo paso es subir tus cambios a tu fork. Para hacerlo, ejecuta `git push`. Ahora Git publicarรก el estado actual de `dev_branch` a tu fork.
## Resolver los conflictos del merge
A veces cuando el trabajo en una rama tarda mucho tiempo en completarse, los cambios que han sido hechos por otros chocan con los cambios que has hecho en tu rama cuando abres un pull request. Esto se llama un *merge conflict*, y es algo que ocurre cuando varias personas editan las mismas partes de los mismos archivos.
### Rebase tus cambios
Un *rebase* es la manera de Git de tomar los cambios que se aplicaron en un punto, deshacerlos, y aplicar estos mismos cambios en otro punto. En el caso de un conflicto de merge, puedes hacer un rebase de tu rama para recoger los cambios que has hecho.
Para empezar, ejecuta lo siguiente:
```
git fetch upstream
git rev-list --left-right --count HEAD...upstream/master
```
El comando `git rev-list` ejecutado aquรญ muestra el nรบmero de commits que difieren entre la rama actual y la rama master de QMK. Ejecutamos `git fetch` primero para asegurarnos de que tenemos los refs que representan es estado actual del repo upstream. El output del comando `git rev-list` muestra dos nรบmeros:
```
$ git rev-list --left-right --count HEAD...upstream/master
7 35
```
El primer nรบmero representa el nรบmero de commits en la rama actual desde que fue creada, y el segundo nรบmero es el nรบmero de commits hecho a `upstream/master` desde que la rama actual fue creada, o sea los cambios que no estรกn registrados en la rama actual.
Ahora que sabemos el estado actual de la rama actual y el del repo upstream, podemos empezar una operaciรณn rebase:
```
git rebase upstream/master
```
Esto le dice a Git que deshaga los commits en la rama actual, y despuรฉs los re-aplica en la rama master de QMK.
```
$ git rebase upstream/master
First, rewinding head to replay your work on top of it...
Applying: Commit #1
Using index info to reconstruct a base tree...
M conflicting_file_1.txt
Falling back to patching base and 3-way merge...
Auto-merging conflicting_file_1.txt
CONFLICT (content): Merge conflict in conflicting_file_1.txt
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch' to see the failed patch
Patch failed at 0001 Commit #1
Resolve all conflicts manually, mark them as resolved with
"git add/rm <conflicted_files>", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort".
```
Esto nos dice que tenemos un conflicto de merge, y nos dice el nombre del archivo con el conflict. Abre el archivo en tu editor de texto, y en alguna parte del archivo verรกs algo asรญ:
```
<<<<<<< HEAD
<p>For help with any issues, email us at support@webhost.us.</p>
=======
<p>Need help? Email support@webhost.us.</p>
>>>>>>> Commit #1
```
La lรญnea `<<<<<<< HEAD` marca el principio de un conflicto de merge, y la lรญnea `>>>>>>> Commit #1` marca el final, con las secciones de conflicto separadas por `=======`. La parte del lado `HEAD` is de la versiรณn de QMK master del archivo, y la parte marcada con el mensaje de commit es de la rama actual.
Ya que Git rastrea *cambios de archivos* en vez del contenido de los archivos directamente, si Git no puede encontrar el texto que estaba en el archivo antes del รบltimo commit, no sabrรก cรณmo editar el archivo. El editar el archivo de nuevo resolverรก este conflicto. Haz tus cambios, y guarda el archivo.
```
<p>Need help? Email support@webhost.us.</p>
```
Ahora ejecuta:
```
git add conflicting_file_1.txt
git rebase --continue
```
Git registra los cambios al archivo con conflictos, y sigue aplicando los commits de nuestra rama hasta llegar al final.
-81
View File
@@ -1,81 +0,0 @@
# Construyendo tu primer firmware
Ahora que has configurado tu entorno de construcciรณn estas listo para empezar a construir firmwares personalizados. Para esta secciรณn de la guรญa alternaremos entre 3 programas - tu gestor de ficheros, tu editor de texto , y tu ventana de terminal. Manten los 3 abiertos hasta que hayas acabado y estรฉs contento con el firmware de tu teclado.
Si has cerrado y reabierto la ventana de tu terminal despuรฉs de seguir el primero paso de esta guรญa, no olvides hacer `cd qmk_firmware` para que tu terminal estรฉ en el directorio correcto.
## Navega a tu carpeta de keymaps
Comienza navegando a la carpeta `keymaps` correspondiente a tu teclado.
?> Si estรกs en macOS o Windows hay comandos que puedes utilizar fรกcilmente para abrir la carpeta keymaps.
?> macOS:
abre keyboards/<keyboard_folder>/keymaps
?> Windows:
inicia .\\keyboards\\<keyboard_folder>\\keymaps
## Crea una copia del keymap `default`
Una vez que tengas la carpeta `keymaps` abierta querrรกs crear una copia de la carpeta `default`. Recomendamos encarecidamente que nombres la carpeta igual que tu nombre de usuario de GitHub, pero puedes utilizar el nombre que quieras siempre que contenga sรณlo letras en minรบscula, nรบmeros y el caracter de guiรณn bajo.
Para automatizar el proceso, tambiรฉn tienes la opciรณn de ejecutar el script `new_keymap.sh`.
Navega a la carpeta `qmk_firmware/util` e introduce lo siguiente:
```
./new_keymap.sh <keyboard path> <username>
```
Por ejemplo, para un usuario llamado John, intentando hacer un keymap nuevo para el 1up60hse, tendrรญa que teclear
```
./new_keymap.sh 1upkeyboards/1up60hse john
```
## Abre `keymap.c` con tu editor de texto favorito
Abre tu `keymap.c`. Dentro de este fichero encontrarรกs la estructura que controla cรณmo se comporta tu teclado. En lo alto de `keymap.c` puede haber distintos defines y enums que hacen el keymap mรกs fรกcil de leer. Continuando por abajo encontrarรกs una lรญnea con este aspecto:
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
Esta lรญnea indica el comienzo del listado de Capas. Debajo encontrarรกs lรญneas que contienen o bien `LAYOUT` o `KEYMAP`, y estas lรญneas indican el comienzo de una capa. Debajo de esa lรญnea estรก la lista de teclas que pertenecen a esa capa concreta.
!> Cuando estรฉs editando tu fichero de keymap ten cuidado con no aรฑadir ni eliminar ninguna coma. Si lo haces el firmware dejarรก de compilar y puede no ser fรกcil averiguar dรณnde estรก la coma faltante o sobrante.
## Personaliza el Layout a tu gusto
Cรณmo completar esta paso depende enteramente de ti. Haz ese pequeรฑo cambio que querรญas o rehaz completamente todo. Puedes eliminar capas si no las necesitas todas, o aรฑadir nuevas hasta un total de 32. Comprueba la siguiente documentaciรณn para descubrir quรฉ es lo que puedes definir aquรญ:
* [Keycodes](keycodes.md)
* [Caracterรญsticas](features.md)
* [Preguntas frecuentes](faq.md)
?> Mientras estรกs descubriendo cรณmo funcionan los keymaps, haz pequeรฑos cambios. Cambios mayores pueden hacer difรญcil la depuraciรณn de problemas que puedan aparecer.
## Construye tu firmware
Cuando los cambios a tu keymap estรกn completos necesitarรกs construir el firmware. Para hacerlo vuelve a la ventana de tu terminal y ejecuta el siguiente comando:
make <my_keyboard>:<my_keymap>
Por ejemplo, si tu keymap se llama "xyverz" y estรกs construyendo un keymap para un planck rev5, utilizarรกs el siguiente comando:
make planck/rev5:xyverz
Mientras compila, recibirรกs un montรณn de informaciรณn de salida en la pantalla informรกndote de quรฉ ficheros estรกn siendo compilados. Deberรญa acabar con una informaciรณn similar a esta:
```
Linking: .build/planck_rev5_xyverz.elf [OK]
Creating load file for flashing: .build/planck_rev5_xyverz.hex [OK]
Copying planck_rev5_xyverz.hex to qmk_firmware folder [OK]
Checking file size of planck_rev5_xyverz.hex [OK]
* File size is fine - 18392/28672
```
## Flashea tu firmware
Continua con [Flasheando el firmware](newbs_flashing.md) para aprender cรณmo escribir tu firmware nuevo en tu teclado.
@@ -1,105 +0,0 @@
# Configurador QMK
El [Configurador QMK](https://config.qmk.fm) es un entorno grรกfico online que genera ficheros hexadecimales de Firmware QMK.
?> **Por favor sigue estos pasos en orden.**
Ve el [Video tutorial](https://youtu.be/tx54jkRC9ZY)
El Configurador QMK functiona mejor con Chrome/Firefox.
!> **Ficheros de otras herramientas como KLE, o kbfirmware no serรกn compatibles con el Configurador QMK. No las cargues, no las importes. El configurador Configurador QMK es una herramienta DIFERENTE. **
## Seleccionando tu teclado
Haz click en el desplegable y selecciona el teclado para el que quieres crear el keymap.
?> Si tu teclado tiene varias versiones, asegรบrate de que seleccionas la correcta.**
Lo dirรฉ otra vez porque es importante
!> **ASEGรšRATE DE QUE SELECCIONAS LA VERSIร“N CORRECTA!**
Si se ha anunciado que tu teclado funciona con QMK pero no estรก en la lista, es probable que un desarrollador no se haya encargado de รฉl aรบn o que todavรญa no hemos tenido la oportunidad de incluirlo. Abre un issue en [qmk_firmware](https://github.com/qmk/qmk_firmware/issues) solicitando soportar ese teclado un particular, si no hay un [Pull Request](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+is%3Apr+label%3Akeyboard) activo para ello. Hay tambiรฉn teclados que funcionan con QMK que estรกn en las cuentas de github de sus manufacturantes. Acuรฉrdate de comprobar esto tambiรฉn.
## Eligiendo el layout de tu teclado
Elige el layout que mejor represente el keymap que quieres crear. Algunos teclados no tienen suficientes layouts o layouts correctos definidos aรบn. Serรกn soportados en el futuro.
## Nombre del keymap
Llama a este keymap como quieras.
?> Si estรกs teniendo problemas para compilar, puede merecer la pena probar un cambio de nombre, ya que puede que ya exista en el repositorio de QMK Firmware.
## Creando Tu keymap
La adiciรณn de keycodes se puede hacer de 3 maneras.
1. Arrastrando y soltando
2. Clickando en un hueco vacรญo en el layout y haciendo click en el keycode que deseas
3. Clickando en un hueco vacรญo en el layout, presionando la tecla fรญsica en tu teclado.
Mueve el puntero de tu ratรณn sobre una tecla y un pequeรฑo extracto te dirรก que es lo que hace la tecla. Para una descripciรณn mรกs detallada por favor, mira
[Referencia bรกsica de keycodes](https://docs.qmk.fm/#/keycodes_basic)
[Referencia avanzada de keycodes](https://docs.qmk.fm/#/feature_advanced_keycodes)
En el caso de que no puedas encontrar un layout que suporte tu keymap, por ejemplo, tres huecos para la barra espaciadora, dos huecos para el retroceso o dos huecos para shift etc etc, rellรจnalos TODOS.
### Ejemplo:
3 huecos para barra espaciadora: Rellena TODOS con barra espaciadora
2 huecos para retroceso: Rellena AMBOS con retroceso
2 huecos para el shift derecho: Rellena AMBOS con shift derecho
1 hueco para el shift izquierdo y 1 hueco para soporte iso: Rellena ambos con el shift izquierdo
5 huecos , pero sรณlo 4 teclas: Intuye y comprueba o pregunta a alguien que lo haya hecho anteriormente.
## Guardando tu keymap para ediciones futuras
Cuando estรฉs satisfecho con un teclado o quieres trabajar en el despuรฉs, pulsa el botรณn `Exportar Keymap`. Guardรกra tu keymap con el nombre que elijas seguido de .json.
Entonces podrรกs cargar este fichero .json en el futuro pulsando el botรณn `Importar Keymap`.
!> **PRECAUCIร“N:** No es el mismo tipo de fichero .json usado en kbfirmware.com ni ninguna otra herramienta. Si intentas utilizar un fichero .json de alguna de estas herramientas con el Configurador QMK, existe la posibilidad de que tu teclado **explote**.
## Generando tu fichero de firmware
Pulsa el botรณn verde `Compilar`.
Cuando la compilaciรณn haya acabado, podrรกs presionar el botรณn verde `Descargar Firmware`.
## Flasheando tu teclado
Por favor, dirรญgete a la secciรณn de [Flashear firmware](newbs_flashing.md)
## Problemas comunes
#### Mi fichero .json no funciona
Si el fichero .json fue generado con el Configurador QMK, enhorabuena, has dado con un bug. Abre una issue en [qmk_configurator](https://github.com/qmk/qmk_configurator/issues)
Si no....cรณmo no viste el mensaje en negrita que puse arriba diciendo que no hay que utilizar otros ficheros .json?
#### Hay espacios extra en mi layout ยฟQuรฉ hago?
Si te refieres a tener tres espacios para la barra espaciadora, la mejor decisiรณn es rellenar los tres con la barra espaciadora. Tambiรฉn se puede hacer lo mismo con las teclas retroceso y las de shift
#### Para quรฉ sirve el keycode.......
Por favor, mira
[Referencia bรกsica de keycodes](https://docs.qmk.fm/#/keycodes_basic)
[Referencia avanzada de keycodes](https://docs.qmk.fm/#/feature_advanced_keycodes)
#### No compila
Por favor, revisa las otras capas de tu keymap para asegurarte de que no hay teclas aleatorias presentes.
## Problemas y bugs
Siempre aceptamos peticiones de clientes y reportes de bug. Por favor, indรญcalos en [qmk_configurator](https://github.com/qmk/qmk_configurator/issues)
-351
View File
@@ -1,351 +0,0 @@
# Flasheando tu teclado
Ahora que has construido tu fichero de firmware personalizado querrรกs flashear tu teclado.
## Flasheando tu teclado con QMK Toolbox
La manera mรกs simple de flashear tu teclado serรญa con [QMK Toolbox](https://github.com/qmk/qmk_toolbox/releases).
De todos modos, QMK Toolbox actualmente sรณlo estรก disponible para Windows y macOS. Si estรกs usando Linux (o sรณlo quisieras flashear el firmware desde la lรญnea de comandos), tendrรกs que utilizar el [mรฉtodo indicado abajo](newbs_flashing.md#flash-your-keyboard-from-the-command-line).
### Cargar el fichero en QMK Toolbox
Empieza abriendo la aplicaciรณn QMK Toolbox. Tendrรกs que buscar el fichero de firmware usando Finder o Explorer. El firmware de teclado puede estar en uno de estos dos formatos- `.hex` o `.bin`. QMK intenta copiar el apropiado para tu teclado en el fichero raรญz `qmk_firmware`.
?> Si tu estรกs on Windows o macOS hay comandos que puedes usar para abrir fรกcilmente la carpeta del firmware actual en Explorer o Finder.
?> Windows:
start .
?> macOS:
open .
El fichero de firmware sempre sigue el siguiente formato de nombre:
<nombre_teclado>_<nombre_keymap>.{bin,hex}
Por ejemplo, un `plank/rev5` con un keymap `default` tendrรก este nombre de fichero:
planck_rev5_default.hex
Una vez que hayas localizado el fichero de tu firmware arrรกstralo a la caja "Fichero local" en QMK Toolbox, o haz click en "Abrir" y navega allรญ donde tengas almacenado tu fichero de firmware.
### Pon tu teclado en modo DFU (Bootloader)
Para poder flashear tu firmware personalizado tienes que poner tu teclado en un modo especial que permite flasheado. Cuando estรก en este modo no podrรกs teclear o utilizarlo para ninguna otra cosa. Es muy importante que no desconectes tu teclado, de lo contrario interrumpirรกs el proceso de flasheo mientras el firmware se estรก escribiendo.
Diferentes teclados tienen diferentes maneras de entrar en este modo especial. Si tu PCB actualmente ejecuta QMK o TMK y no has recibido instrucciones especรญficas, intenta los siguientes pasos en orden:
* Manten pulsadas ambas teclas shift y pulsa `Pause`
* Manten pulsadas ambas teclas shift y pulsa `B`
* Desconecta tu teclado, mantรฉn pulsada la barra espaciadora y `B` al mismo tiempo, conecta tu teclado y espera un segundo antes de dejar de pulsar las teclas
* Pulsa el botรณn fรญsico `RESET` situado en el fondo de la PCB
* Localiza los pines en la PCB etiquetados on `BOOT0` o `RESET`, puentea estos dos juntos cuando enchufes la PCB
Si has tenido รฉxito verรกs un mensaje similar a este en QMK Toolbox:
```
*** Clueboard - Clueboard 66% HotSwap disconnected -- 0xC1ED:0x2390
*** DFU device connected
```
### Flashea tu teclado
Haz click en el botรณn `Flash` de QMK Toolbox. Verรกs una informaciรณn de salida similar a esta:
```
*** Clueboard - Clueboard 66% HotSwap disconnected -- 0xC1ED:0x2390
*** DFU device connected
*** Attempting to flash, please don't remove device
>>> dfu-programmer atmega32u4 erase --force
Erasing flash... Success
Checking memory from 0x0 to 0x6FFF... Empty.
>>> dfu-programmer atmega32u4 flash /Users/skully/qmk_firmware/clueboard_66_hotswap_gen1_skully.hex
Checking memory from 0x0 to 0x55FF... Empty.
0% 100% Programming 0x5600 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
0% 100% Reading 0x7000 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
Validating... Success
0x5600 bytes written into 0x7000 bytes memory (76.79%).
>>> dfu-programmer atmega32u4 reset
*** DFU device disconnected
*** Clueboard - Clueboard 66% HotSwap connected -- 0xC1ED:0x2390
```
## Flashea tu teclado desde la lรญnea de comandos
Lo primero que tienes que saber es quรฉ bootloader utiliza tu teclado. Hay cuatro bootloaders pincipales que se usan habitualmente . Pro-Micro y sus clones usan CATERINA, Teensy's usa Halfkay, las placas OLKB usan QMK-DFU, y otros chips atmega32u4 usan DFU.
Puedes encontrar mรกs informaciรณn sobre bootloaders en la pรกgina [Instrucciones de flasheado e informaciรณn de Bootloader](flashing.md).
Si sabes quรฉ bootloader estรกs usando, en el momento de compilar el firmware, podrรกs aรฑadir algรบn texto extra al comando `make` para automatizar el proceso de flasheado.
### DFU
Para eo bootloader DFU, cuando estรฉs listo para compilar y flashear tu firmware, abre tu ventana de terminal y ejecuta el siguiente comando de construcciรณn:
make <my_keyboard>:<my_keymap>:dfu
Por ejemplo, si tu keymap se llama "xyverz" y estรกs construyendo un keymap para un planck rev5, utilizarรกs este comando:
make planck/rev5:xyverz:dfu
Una vez que finalice de compilar, deberรก aparecer lo siguiente:
```
Linking: .build/planck_rev5_xyverz.elf [OK]
Creating load file for flashing: .build/planck_rev5_xyverz.hex [OK]
Copying planck_rev5_xyverz.hex to qmk_firmware folder [OK]
Checking file size of planck_rev5_xyverz.hex
* File size is fine - 18574/28672
```
Despuรฉs de llegar a este punto, el script de construcciรณn buscarรก el bootloader DFU cada 5 segundos. Repetirรก lo siguiente hasta que se encuentre el dispositivo o lo canceles:
dfu-programmer: no device present.
Error: Bootloader not found. Trying again in 5s.
Una vez haya hecho esto, tendrรกs que reiniciar el controlador. Deberรญa mostrar una informaciรณn de salida similar a esta:
```
*** Attempting to flash, please don't remove device
>>> dfu-programmer atmega32u4 erase --force
Erasing flash... Success
Checking memory from 0x0 to 0x6FFF... Empty.
>>> dfu-programmer atmega32u4 flash /Users/skully/qmk_firmware/clueboard_66_hotswap_gen1_skully.hex
Checking memory from 0x0 to 0x55FF... Empty.
0% 100% Programming 0x5600 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
0% 100% Reading 0x7000 bytes...
[>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>] Success
Validating... Success
0x5600 bytes written into 0x7000 bytes memory (76.79%).
>>> dfu-programmer atmega32u4 reset
```
?> Si tienes problemas con esto- del estilo de `dfu-programmer: no device present` - por favor consulta las [Preguntas frecuentes de construcciรณn](faq_build.md).
#### Comandos DFU
Hay un nรบmero de comandos DFU que puedes usar para flashear firmware a un dispositivo DFU:
* `:dfu` - Esta es la opciรณn normal y espera hasta que un dispositivo DFU estรฉ disponible, entonces flashea el firmware. Esperarรก reintentando cada 5 segundos, para ver si un dispositivo DFU ha aparecido.
* `:dfu-ee` - Esta flashea un fichero `eep` en vez del hex normal. Esto no es lo comรบn.
* `:dfu-split-left` - Esta flashea el firmware normal, igual que la opciรณn por defecto (`:dfu`). Sin embargo, tambiรฉn flashea el fichero EEPROM "Lado Izquierdo" para teclados divididos. _Esto es ideal para los ficheros divididos basados en Elite C._
* `:dfu-split-right` - Esto flashea el firmware normal, igual que la opciรณn por defecto (`:dfu`). Sin embargo, tambiรฉn flashea el fichero EEPROM "Lado Derecho" para teclados divididos. _Esto es ideal para los ficheros divididos basados en Elite C._
### Caterina
Para placas Arduino y sus clones (como la SparkFun ProMicro), cuando estรฉs listo para compilar y flashear tu firmware, abre tu ventana de terminal y ejecuta el siguiente comando de construcciรณn:
make <my_keyboard>:<my_keymap>:avrdude
Por ejemplo, si tu keymap se llama "xyverz" y estรกs construyendo un keymap para un Lets Split rev2, usarรกs este comando:
make lets_split/rev2:xyverz:avrdude
Una vez que finalice de compilar, deberรก aparecer lo siguiente:
```
Linking: .build/lets_split_rev2_xyverz.elf [OK]
Creating load file for flashing: .build/lets_split_rev2_xyverz.hex [OK]
Checking file size of lets_split_rev2_xyverz.hex [OK]
* File size is fine - 27938/28672
Detecting USB port, reset your controller now..............
```
En este punto, reinicia la placa y entonces el script detectarรก el bootloader y procederรก a flashear la placa. La informaciรณn de salida deber ser algo similar a esto:
```
Detected controller on USB port at /dev/ttyS15
Connecting to programmer: .
Found programmer: Id = "CATERIN"; type = S
Software Version = 1.0; No Hardware Version given.
Programmer supports auto addr increment.
Programmer supports buffered memory access with buffersize=128 bytes.
Programmer supports the following devices:
Device code: 0x44
avrdude.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude.exe: Device signature = 0x1e9587 (probably m32u4)
avrdude.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude.exe: erasing chip
avrdude.exe: reading input file "./.build/lets_split_rev2_xyverz.hex"
avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex auto detected as Intel Hex
avrdude.exe: writing flash (27938 bytes):
Writing | ################################################## | 100% 2.40s
avrdude.exe: 27938 bytes of flash written
avrdude.exe: verifying flash memory against ./.build/lets_split_rev2_xyverz.hex:
avrdude.exe: load data flash data from input file ./.build/lets_split_rev2_xyverz.hex:
avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex auto detected as Intel Hex
avrdude.exe: input file ./.build/lets_split_rev2_xyverz.hex contains 27938 bytes
avrdude.exe: reading on-chip flash data:
Reading | ################################################## | 100% 0.43s
avrdude.exe: verifying ...
avrdude.exe: 27938 bytes of flash verified
avrdude.exe: safemode: Fuses OK (E:CB, H:D8, L:FF)
avrdude.exe done. Thank you.
```
Si tienes problemas con esto, puede ser necesario que hagas esto:
sudo make <my_keyboard>:<my_keymap>:avrdude
Adicionalmente, si quisieras flashear mรบltiples placas, usa el siguiente comando:
make <keyboard>:<keymap>:avrdude-loop
Cuando hayas acabado de flashear placas, necesitarรกs pulsar Ctrl + C o cualquier combinaciรณn que estรฉ definida en tu sistema operativo para finalizar el bucle.
### HalfKay
Para dispositivos PJRC (Teensy's), cuando estรฉs listo para compilar y flashear tu firmware, abre tu ventana de terminal y ejecuta el siguiente comando de construcciรณn:
make <my_keyboard>:<my_keymap>:teensy
Por ejemplo, si tu keymap se llama "xyverz" y estรกs construyendo un keymap para un Ergodox o un Ergodox EZ, usarรกs este comando:
make ergodox_ez:xyverz:teensy
Una vez que el firmware acabe de compilar, deberรก mostrar una informaciรณn de salida como esta:
```
Linking: .build/ergodox_ez_xyverz.elf [OK]
Creating load file for flashing: .build/ergodox_ez_xyverz.hex [OK]
Checking file size of ergodox_ez_xyverz.hex [OK]
* File size is fine - 25584/32256
Teensy Loader, Command Line, Version 2.1
Read "./.build/ergodox_ez_xyverz.hex": 25584 bytes, 79.3% usage
Waiting for Teensy device...
(hint: press the reset button)
```
En este punto, reinicia tu placa. Una vez que lo hayas hecho, deberรกs ver una informaciรณn de salida como esta:
```
Found HalfKay Bootloader
Read "./.build/ergodox_ez_xyverz.hex": 28532 bytes, 88.5% usage
Programming............................................................................................................................................................................
...................................................
Booting
```
### BootloadHID
Para placas basadas en Bootmapper Client(BMC)/bootloadHID/ATmega32A, cuando estรฉs listo para compilar y flashear tu firmware, abre tu ventana de terminal y ejecuta el comando de construcciรณn:
make <my_keyboard>:<my_keymap>:bootloaderHID
Por ejemplo, si tu keymap se llama "xyverz" y estรกs construyendo un keymap para un jj40, usarรกs estรฉ comando:
make jj40:xyverz:bootloaderHID
Una vez que el firmware acaba de compilar, mostrarรก una informaciรณn de salida como esta:
```
Linking: .build/jj40_default.elf [OK]
Creating load file for flashing: .build/jj40_default.hex [OK]
Copying jj40_default.hex to qmk_firmware folder [OK]
Checking file size of jj40_default.hex [OK]
* The firmware size is fine - 21920/28672 (6752 bytes free)
```
Despuรฉs de llegar a este punto, el script de construcciรณn buscarรก el bootloader DFU cada 5 segundos. Repetirรก lo siguiente hasta que se encuentre el dispositivo o hasta que lo canceles.
```
Error opening HIDBoot device: The specified device was not found
Trying again in 5s.
```
Una vez que lo haga, querrรกs reinicar el controlador. Deberรญa entonces mostrar una informaciรณn de salida similar a esta:
```
Page size = 128 (0x80)
Device size = 32768 (0x8000); 30720 bytes remaining
Uploading 22016 (0x5600) bytes starting at 0 (0x0)
0x05580 ... 0x05600
```
### STM32 (ARM)
Para la mayorรญa de placas ARM (incluyendo la Proton C, Planck Rev 6, y Preonic Rev 3), cuando estรฉs listo para compilar y flashear tu firmware, abre tu ventana de terminal y ejecuta el siguiente comando de construcciรณn:
make <my_keyboard>:<my_keymap>:dfu-util
Por ejemplo, si tu keymap se llama "xyverz" y estรกs construyendo un keymap para un teclado Planck Revision 6, utilizarรกs este comando y a continuaciรณn reiniciarรกs el teclado con el bootloader (antes de que acabe de compilar):
make planck/rev6:xyverz:dfu-util
Una vez que el firmware acaba de compilar, mostrarรก una informaciรณn de salida similar a esta:
```
Linking: .build/planck_rev6_xyverz.elf [OK]
Creating binary load file for flashing: .build/planck_rev6_xyverz.bin [OK]
Creating load file for flashing: .build/planck_rev6_xyverz.hex [OK]
Size after:
text data bss dec hex filename
0 41820 0 41820 a35c .build/planck_rev6_xyverz.hex
Copying planck_rev6_xyverz.bin to qmk_firmware folder [OK]
dfu-util 0.9
Copyright 2005-2009 Weston Schmidt, Harald Welte and OpenMoko Inc.
Copyright 2010-2016 Tormod Volden and Stefan Schmidt
This program is Free Software and has ABSOLUTELY NO WARRANTY
Please report bugs to http://sourceforge.net/p/dfu-util/tickets/
Invalid DFU suffix signature
A valid DFU suffix will be required in a future dfu-util release!!!
Opening DFU capable USB device...
ID 0483:df11
Run-time device DFU version 011a
Claiming USB DFU Interface...
Setting Alternate Setting #0 ...
Determining device status: state = dfuERROR, status = 10
dfuERROR, clearing status
Determining device status: state = dfuIDLE, status = 0
dfuIDLE, continuing
DFU mode device DFU version 011a
Device returned transfer size 2048
DfuSe interface name: "Internal Flash "
Downloading to address = 0x08000000, size = 41824
Download [=========================] 100% 41824 bytes
Download done.
File downloaded successfully
Transitioning to dfuMANIFEST state
```
#### STM32 Commands
Hay un nรบmero de comandos DFU que puedes usar para flashear firmware a un dispositivo DFU:
* `:dfu-util` - El comando por defecto para flashing en dispositivos STM32.
* `:dfu-util-wait` - Esto funciona como el comando por defecto, pero te da (configurable) 10 segundos de tiempo antes de que intente flashear el firmware. Puedes usar `TIME_DELAY=20` desde la lรญena de comandos para cambiar este tiempo de retardo.
* Eg: `make <keyboard>:<keymap>:dfu-util TIME_DELAY=5`
* `:dfu-util-split-left` - Flashea el firmware normal, igual que la opciรณn por defecto (`:dfu-util`). Sin embargo, tambiรฉn flashea el fichero EEPROM "Lado Izquierdo" para teclados divididos.
* `:dfu-util-split-right` - Flashea el firmware normal, igual que la opciรณn por defecto (`:dfu-util`). Sin embargo, tambiรฉn flashea el fichero EEPROM "Lado Derecho" para teclados divididos.
## ยกPruรฉbalo!
ยกFelicidades! ยกTu firmware personalizado ha sido programado en tu teclado!
Pruรฉbalo y asegรบrate de que todo funciona de la manera que tu quieres. Hemos escrito [Testeando y depurando](newbs_testing_debugging.md) para redondear esta guรญa de novatos, asรญ que pรกsate por allรญ para aprender cรณmo resolver problemas con tu funcionalidad personalizada.
-103
View File
@@ -1,103 +0,0 @@
# Introducciรณn
El teclado de tu computador tiene un procesador dentro de รฉl, no muy distinto del que estรก dentro de tu ordenador. Este procesador ejecuta software que es responsable de detectar la pulsaciรณn de las teclas y enviar informes sobre el estado del teclado cuando las teclas son pulsadas y liberadas. QMK ocupa el rol de ese software. Cuando construyes un keymap personalizado , estas creando el equivalente de un programa ejecutable en tu teclado.
QMK intenta poner un montรณn de poder en tus manos haciendo que las cosas fรกciles sean fรกciles, y las cosas difรญciles posibles. No tienes que saber cรณmo programar para crear keymaps potentes โ€” sรณlo tienes que seguir un conjunto simple de reglas sintรกcticas.
# Comenzando
Antes de que puedas construir keymaps, necesitarรกs instalar algun software y configurar tu entorno de construcciรณn. Esto sรณlo hay que hacerlo una vez sin importar en cuรกntos teclados planeas configurar el software.
Si prefieres hacerlo mediante un interfaz grรกfico , por favor, considera utilizar el [Configurador QMK](https://config.qmk.fm). En ese caso dirรญgete a [Construyendo tu primer firmware usando la GUI](newbs_building_firmware_configurator.md).
## Descarga el software
### Editor de texto
Necesitarรกs un programa con el que puedas editar y guardar archivos de **texto plano**, en windows puedes utilizar Notepad y en tu Linux puedes utilizar gedit. Estos dos programas son editores simples y funcionales. En macOS ten cuidado con la aplicaciรณn de ediciรณn de texto por defecto TextEdit: no guardarรก texto plano a menos de que se le seleccione explรญcitamente _Make Plain Text_ desde el menรบ _Format_.
Tambiรฉn puedes descargar e instalar un editor de texto dedicado como [Sublime Text](https://www.sublimetext.com/) o [VS Code](https://code.visualstudio.com/). Esta es probablemente la mejor manera independientemente de la plataforma, ya que estos programas fueron creados especรญficamente para editar cรณdigo.
?> ยฟNo estรกs seguro de quรฉ editor de texto utilizar? Laurence Bradford escribiรณ una [estupenda introducciรณn](https://learntocodewith.me/programming/basics/text-editors/) al tema.
### QMK Toolbox
QMK Toolbox is an optional graphical program for Windows and macOS that allows you to both program and debug your custom keyboard. You will likely find it invaluable for easily flashing your keyboard and viewing debug messages that it prints.
[Download the latest release here.](https://github.com/qmk/qmk_toolbox/releases/latest)
* For Windows: `qmk_toolbox.exe` (portable) or `qmk_toolbox_install.exe` (installer)
* For macOS: `QMK.Toolbox.app.zip` (portable) or `QMK.Toolbox.pkg` (installer)
## Configura tu entorno
Hemos intentado hacer QMK lo mรกs fรกcil de configurar posible. Sรณlo tienes que preparar tu entorno Linux o Unix, y luego dejar que QMK
instale el resto.
?> Si no has trabajado con la lรญnea de comandos de Linux/Unix con anterioridad, hay algunos conceptos y comandos bรกsicos que deberรญas aprender. Estos recursos te enseรฑarรกn lo suficiente para poder trabajar con QMK:<br>
[Comandos de Linux que deberรญa saber](https://www.guru99.com/must-know-linux-commands.html)<br>
[Algunos comandos bรกsicos de Unix](https://www.tjhsst.edu/~dhyatt/superap/unixcmd.html)
### Windows
Necesitarรกs instalar MSYS2 y Git.
* Sigue las instrucciones de instalaciรณn en la [pรกgina de MSYS2](http://www.msys2.org).
* Cierra las terminales abiertas de MSYS2 y abre una nueva termial de MSYS2 MinGW 64-bit.
* Instala Git ejecutando este comando: `pacman -S git`.
### macOS
Necesitarรกs instalar Homebrew. Sigue las instrucciones que encontrarรกs en la [pรกgina de Homebrew](https://brew.sh).
Despueล› de que se haya inastalado Homebrew, continรบa con _Set Up QMK_. En ese paso ejecutarรก un script que instalarรก el resto de paquetes.
### Linux
Necesitarรกs instalar Git. Es bastante probable que ya lo tengas, pero si no, uno de los siguientes comandos deberรญa instalarlo:
* Debian / Ubuntu / Devuan: `apt-get install git`
* Fedora / Red Hat / CentOS: `yum install git`
* Arch: `pacman -S git`
?> Docker es tambiรฉn una opciรณn en todas las plataformas. [Haz click aquรญ si quieres detalles.](getting_started_build_tools.md#docker)
## Configura QMK
Una vez que hayas configurado tu entorno Linux/Unix, estarรกs listo para descargar QMK. Haremos esto utilizando Git para "clonar" el respositorio de QMK. Abre una ventana de Terminal o MSYS2 MinGW y mantenla abierta mientras sigues esta guรญa. Dentro de esa ventana ejecuta estos dos comandos:
```shell
git clone --recurse-submodules https://github.com/qmk/qmk_firmware.git
cd qmk_firmware
```
?> Si ya sabes [cรณmo usar GitHub](getting_started_github.md), te recomendamos en vez de eso, crees y clones tu propio fork. Si no sabes lo que significa, puedes ignorar este mensaje sin problemas.
QMK viene con un script para ayudarte a configurar el resto de cosas que necesitarรกs. Deberรญas ejecutarlo introduciendo este comando:
util/qmk_install.sh
## Prueba tu entorno de construcciรณn
Ahora que tu entorno de construcciรณn de QMK estรก configurado, puedes construcir un firmware para tu teclado. Comienza intentado construir el keymap por defecto del teclado. Deberรญas ser capaz de hacerlo con un comando con este formato:
make <keyboard>:default
Por ejemplo, para construir el firmware para un Clueboard 66% deberรญas usar:
make clueboard/66/rev3:default
Cuando estรฉ hecho, deberรญas tener un montรณn de informaciรณn de salida similar a esta:
```
Linking: .build/clueboard_66_rev3_default.elf [OK]
Creating load file for flashing: .build/clueboard_66_rev3_default.hex [OK]
Copying clueboard_66_rev3_default.hex to qmk_firmware folder [OK]
Checking file size of clueboard_66_rev3_default.hex [OK]
* The firmware size is fine - 26356/28672 (2316 bytes free)
```
# Creando tu keymap
Ya estรกs listo para crear tu propio keymap personal! Para hacerlo continua con [Construyendo tu primer firmware](newbs_building_firmware.md).
-15
View File
@@ -1,15 +0,0 @@
# Recursos de aprendizaje
Estos recursos procuran dar miembros nuevos en la communidad QMK un mayor entendimiento de la informaciรณn proporcionada en la documentaciรณn para novatos.
Recursos de Git:
* [Excelente tutorial general](https://www.codecademy.com/learn/learn-git)
* [Juego de Git para aprender usando ejemplos](https://learngitbranching.js.org/)
* [Recursos de Git para aprender mรกs sobre Github](getting_started_github.md)
* [Recursos de Git dirigidos especรญficamente a QMK](contributing.md)
Recursos para lรญnea de mandatos:
* [Excelente tutorial general sobre la lรญnea de mandatos](https://www.codecademy.com/learn/learn-the-command-line)
-99
View File
@@ -1,99 +0,0 @@
# Testeando y depurando
Una vez que hayas flasheado tu teclado con un firmware personalizado estarรกs listo para probarlo. Con un poco de suerte todo funcionarรก a la primera, pero si no es asรญ, este documento te ayudarรก a averiguar quรฉ estรก mal.
## Probando
Probar tu teclado es generalmente bastante sencillo. Persiona cada una de las teclas y asegรบrate de que envรญa la tecla correcta. Existen incluso programas que te ayudarรกn a asegurarte de que no te dejas ninguna tecla sin comprobar.
Nota: Estos programas no los provรฉe ni estรกn relacionados con QMK.
* [Switch Hitter](https://elitekeyboards.com/switchhitter.php) (Sรณlo Windows)
* [Keyboard Viewer](https://www.imore.com/how-use-keyboard-viewer-your-mac) (Sรณlo Mac)
* [Keyboard Tester](http://www.keyboardtester.com) (Aplicaciรณn web)
* [Keyboard Checker](http://keyboardchecker.com) (Aplicaciรณn web)
## Depurando
Tu teclado mostrarรก informaciรณn de depuraciรณn si tienes `CONSOLE_ENABLE = yes` en tu `rules.mk`. Por defecto la informaciรณn de salida es muy limitada, pero puedes encender el modo de depuraciรณn para incrementar la informaciรณn de salida. Utiliza el keycode `DEBUG` de tu keymap, usa la caracterรญstica [Comando](feature_command.md) para activar el modo depuraciรณn, o aรฑade el siguiente cรณdigo a tu keymap.
```c
void keyboard_post_init_user(void) {
// Customise these values to desired behaviour
debug_enable=true;
debug_matrix=true;
//debug_keyboard=true;
//debug_mouse=true;
}
```
### Depurando con QMK Toolbox
Para plataformas compatibles, [QMK Toolbox](https://github.com/qmk/qmk_toolbox) se puede usar para mostrar mensajes de depuraciรณn de tu teclado.
### Depurando con hid_listen
ยฟPrefieres una soluciรณn basada en una terminal? [hid_listen](https://www.pjrc.com/teensy/hid_listen.html), provista por PJRC, se puede usar tambiรฉn para mostrar mensajes de depuraciรณn. Hay binarios preconstruรญdos para Windows,Linux,y MacOS.
<!-- FIXME: Describe the debugging messages here. -->
## Enviando tus propios mensajes de depuraciรณn
A veces, es รบtil imprimir mensajes de depuraciรณn desde tu [cรณdigo personalizado](custom_quantum_functions.md). Hacerlo es bastante simple. Comienza incluyendo `print.h` al principio de tu fichero:
#include <print.h>
Despuรฉs de eso puedes utilzar algunas funciones print diferentes:
* `print("string")`: Imprime un string simple
* `uprintf("%s string", var)`: Imprime un string formateado
* `dprint("string")` Imprime un string simple, pero sรณlo cuando el modo de depuraciรณn estรก activo
* `dprintf("%s string", var)`: Imprime un string formateado, pero sรณlo cuando el modo de depuraciรณn estรก activo
## Ejemplos de depuraciรณn
Debajo hay una colecciรณn de ejemplos de depuraciรณn del mundo real. Para informaciรณn adicional, Dirรญgete a [Depurando/Encontrando problemas en QMK](faq_debug.md).
### ยฟQue posiciรณn en la matriz tiene esta pulsaciรณn de tecla?
Cuando estรฉs portando, o intentando diagnosticar problemas en la pcb, puede ser รบtil saber si la pulsaciรณn de una tecla es escaneada correctamente. Para hablitar la informaciรณn de registro en este escenario, aรฑade el siguiente cรณdigo al `keymap.c` de tus keymaps
```c
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
// If console is enabled, it will print the matrix position and status of each key pressed
#ifdef CONSOLE_ENABLE
uprintf("KL: kc: %u, col: %u, row: %u, pressed: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed);
#endif
return true;
}
```
Ejemplo de salida
```text
Waiting for device:.......
Listening:
KL: kc: 169, col: 0, row: 0, pressed: 1
KL: kc: 169, col: 0, row: 0, pressed: 0
KL: kc: 174, col: 1, row: 0, pressed: 1
KL: kc: 174, col: 1, row: 0, pressed: 0
KL: kc: 172, col: 2, row: 0, pressed: 1
KL: kc: 172, col: 2, row: 0, pressed: 0
```
### ยฟCuanto tiempo tardรณ en escanear la pulsaciรณn de una tecla?
Cuando estรฉs probando problemas en el rendimiento, puede ser รบtil saber la frecuenta a la cual la matrรญz de pulsadores se estรก escaneando. Para hablitar la informaciรณn de registro en este escenario, aรฑade el siguiente cรณdigo al `config.h` de tus keymaps
```c
#define DEBUG_MATRIX_SCAN_RATE
```
Ejemplo de salida
```text
> matrix scan frequency: 315
> matrix scan frequency: 313
> matrix scan frequency: 316
> matrix scan frequency: 316
> matrix scan frequency: 316
> matrix scan frequency: 316
```
+1 -7
View File
@@ -47,7 +47,7 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"
```
**/etc/udev/rules.d/55-caterina.rules:**
**/etc/udev/rules.d/55-catalina.rules:**
```
# ModemManager should ignore the following devices
ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"
@@ -69,12 +69,6 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", MODE:="066
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666"
```
**/etc/udev/rules.d/57-bootloadhid.rules:**
```
# bootloadHID
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05df", MODE:="0666"
```
### Serial device is not detected in bootloader mode on Linux
Make sure your kernel has appropriate support for your device. If your device uses USB ACM, such as
Pro Micro (Atmega32u4), make sure to include `CONFIG_USB_ACM=y`. Other devices may require `USB_SERIAL` and any of its sub options.
+1 -1
View File
@@ -27,7 +27,7 @@ You may need privilege to access the device on OS like Linux.
Check:
- *hid_listen* finds your device. See above.
- Enable debug with pressing **Magic**+d. See [Magic Commands](https://github.com/tmk/tmk_keyboard#magic-commands).
- set `debug_enable=true`. See [Testing and Debugging](newbs_testing_debugging.md#debugging)
- set `debug_enable=true` usually in `matrix_init()` in **matrix.c**.
- try using 'print' function instead of debug print. See **common/print.h**.
- disconnect other devices with console function. See [Issue #97](https://github.com/tmk/tmk_keyboard/issues/97).
+1 -1
View File
@@ -15,7 +15,7 @@ This will allow you to use `FN_CAPS` and `ALT_TAB` in your keymap, keeping it mo
## Caveats
Currently, `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.
Currently, `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.
Additionally, 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.
+10 -10
View File
@@ -51,15 +51,12 @@ By default, Auto Shift is disabled for any key press that is accompanied by one
modifiers. Thus, Ctrl+A that you hold for a really long time is not the same
as Ctrl+Shift+A.
You can re-enable Auto Shift for modifiers by adding a define to your `config.h`
You can re-enable Auto Shift for modifiers by adding another rule to your `rules.mk`
```c
#define AUTO_SHIFT_MODIFIERS
```
AUTO_SHIFT_MODIFIERS = yes
In which case, Ctrl+A held past the `AUTO_SHIFT_TIMEOUT` will be sent as Ctrl+Shift+A
## Configuring Auto Shift
If desired, there is some configuration that can be done to change the
@@ -68,12 +65,15 @@ behavior of Auto Shift. This is done by setting various variables the
A sample is
```c
#pragma once
#ifndef CONFIG_USER_H
#define CONFIG_USER_H
#define AUTO_SHIFT_TIMEOUT 150
#define NO_AUTO_SHIFT_SPECIAL
```
#include "../../config.h"
#define AUTO_SHIFT_TIMEOUT 150
#define NO_AUTO_SHIFT_SPECIAL
#endif
### AUTO_SHIFT_TIMEOUT (Value in ms)
+44 -87
View File
@@ -6,16 +6,14 @@ QMK is able to control the brightness of these LEDs by switching them on and off
The MCU can only supply so much current to its GPIO pins. Instead of powering the backlight directly from the MCU, the backlight pin is connected to a transistor or MOSFET that switches the power to the LEDs.
## Driver configuration
## Usage
Most keyboards have backlighting enabled by default if they support it, but if it is not working for you, check that your `rules.mk` includes the following:
```makefile
BACKLIGHT_ENABLE = software # Valid driver values are 'yes,software,no'
```make
BACKLIGHT_ENABLE = yes
```
See below for help on individual drivers.
## Keycodes
Once enabled the following keycodes below can be used to change the backlight level.
@@ -29,54 +27,8 @@ Once enabled the following keycodes below can be used to change the backlight le
|`BL_DEC` |Decrease the backlight level |
|`BL_BRTG`|Toggle backlight breathing |
## Backlight Functions
|Function |Description |
|----------|-----------------------------------------------------------|
|`backlight_toggle()` |Turn the backlight on or off |
|`backlight_enable()` |Turn the backlight on |
|`backlight_disable()` |Turn the backlight off |
|`backlight_step()` |Cycle through backlight levels |
|`backlight_increase()` |Increase the backlight level |
|`backlight_decrease()` |Decrease the backlight level |
|`backlight_level(x)` |Sets the backlight level to specified level |
|`get_backlight_level()` |Return the current backlight level |
|`is_backlight_enabled()`|Return whether the backlight is currently on |
### Backlight Breathing Functions
|Function |Description |
|----------|---------------------------------------------------|
|`breathing_toggle()` |Turn the backlight breathing on or off |
|`breathing_enable()` |Turns on backlight breathing |
|`breathing_disable()` |Turns off backlight breathing |
## Common Driver Configuration
To change the behavior of the backlighting, `#define` these in your `config.h`:
|Define |Default |Description |
|---------------------|-------------|--------------------------------------------------------------------------------------|
|`BACKLIGHT_LEVELS` |`3` |The number of brightness levels (maximum 31 excluding off) |
|`BACKLIGHT_CAPS_LOCK`|*Not defined*|Enable Caps Lock indicator using backlight (for keyboards without dedicated LED) |
|`BACKLIGHT_BREATHING`|*Not defined*|Enable backlight breathing, if supported |
|`BREATHING_PERIOD` |`6` |The length of one backlight "breath" in seconds |
|`BACKLIGHT_ON_STATE` |`0` |The state of the backlight pin when the backlight is "on" - `1` for high, `0` for low |
### Backlight On State
Most backlight circuits are driven by an N-channel MOSFET or NPN transistor. This means that to turn the transistor *on* and light the LEDs, you must drive the backlight pin, connected to the gate or base, *high*.
Sometimes, however, a P-channel MOSFET, or a PNP transistor is used. In this case, when the transistor is on, the pin is driven *low* instead.
This functionality is configured at the keyboard level with the `BACKLIGHT_ON_STATE` define.
## AVR driver
On AVR boards, the default driver currently sniffs the configuration to pick the best scenario. To enable it, add this to your rules.mk:
```makefile
BACKLIGHT_ENABLE = yes
```
### Caveats
Hardware PWM is supported according to the following table:
@@ -111,10 +63,22 @@ When both timers are in use for Audio, the backlight PWM will not use a hardware
To change the behavior of the backlighting, `#define` these in your `config.h`:
|Define |Default |Description |
|---------------------|-------------|--------------------------------------------------------------------------------------------------------------|
|`BACKLIGHT_PIN` |`B7` |The pin that controls the LEDs. Unless you are designing your own keyboard, you shouldn't need to change this |
|`BACKLIGHT_PINS` |*Not defined*|experimental: see below for more information |
|Define |Default |Description |
|---------------------|-------------|-------------------------------------------------------------------------------------------------------------|
|`BACKLIGHT_PIN` |`B7` |The pin that controls the LEDs. Unless you are designing your own keyboard, you shouldn't need to change this|
|`BACKLIGHT_PINS` |*Not defined*|experimental: see below for more information |
|`BACKLIGHT_LEVELS` |`3` |The number of brightness levels (maximum 31 excluding off) |
|`BACKLIGHT_CAPS_LOCK`|*Not defined*|Enable Caps Lock indicator using backlight (for keyboards without dedicated LED) |
|`BACKLIGHT_BREATHING`|*Not defined*|Enable backlight breathing, if supported |
|`BREATHING_PERIOD` |`6` |The length of one backlight "breath" in seconds |
|`BACKLIGHT_ON_STATE` |`0` |The state of the backlight pin when the backlight is "on" - `1` for high, `0` for low |
### Backlight On State
Most backlight circuits are driven by an N-channel MOSFET or NPN transistor. This means that to turn the transistor *on* and light the LEDs, you must drive the backlight pin, connected to the gate or base, *high*.
Sometimes, however, a P-channel MOSFET, or a PNP transistor is used. In this case, when the transistor is on, the pin is driven *low* instead.
This functionality is configured at the keyboard level with the `BACKLIGHT_ON_STATE` define.
### Multiple backlight pins
@@ -139,7 +103,7 @@ In this way `OCRxx` essentially controls the duty cycle of the LEDs, and thus th
The breathing effect is achieved by registering an interrupt handler for `TIMER1_OVF_vect` that is called whenever the counter resets, roughly 244 times per second.
In this handler, the value of an incrementing counter is mapped onto a precomputed brightness curve. To turn off breathing, the interrupt handler is simply disabled, and the brightness reset to the level stored in EEPROM.
### Timer Assisted PWM Implementation
### Software PWM Implementation
When `BACKLIGHT_PIN` is not set to a hardware backlight pin, QMK will use a hardware timer configured to trigger software interrupts. This time will count up to `ICRx` (by default `0xFFFF`) before resetting to 0.
When resetting to 0, the CPU will fire an OVF (overflow) interrupt that will turn the LEDs on, starting the duty cycle.
@@ -150,14 +114,9 @@ The breathing effect is the same as in the hardware PWM implementation.
## ARM Driver
While still in its early stages, ARM backlight support aims to eventually have feature parity with AVR. To enable it, add this to your rules.mk:
```makefile
BACKLIGHT_ENABLE = yes
```
### Caveats
Currently only hardware PWM is supported, not timer assisted, and does not provide automatic configuration.
Currently only hardware PWM is supported, and does not provide automatic configuration.
?> STMF072 support is being investigated.
@@ -171,32 +130,30 @@ To change the behavior of the backlighting, `#define` these in your `config.h`:
|`BACKLIGHT_PWM_DRIVER` |`PWMD4` |The PWM driver to use, see ST datasheets for pin to PWM timer mapping. Unless you are designing your own keyboard, you shouldn't need to change this|
|`BACKLIGHT_PWM_CHANNEL` |`3` |The PWM channel to use, see ST datasheets for pin to PWM channel mapping. Unless you are designing your own keyboard, you shouldn't need to change this|
|`BACKLIGHT_PAL_MODE` |`2` |The pin alternative function to use, see ST datasheets for pin AF mapping. Unless you are designing your own keyboard, you shouldn't need to change this|
|`BACKLIGHT_LEVELS` |`3` |The number of brightness levels (maximum 31 excluding off) |
|`BACKLIGHT_CAPS_LOCK` |*Not defined*|Enable Caps Lock indicator using backlight (for keyboards without dedicated LED) |
|`BACKLIGHT_BREATHING` |*Not defined*|Enable backlight breathing, if supported |
|`BREATHING_PERIOD` |`6` |The length of one backlight "breath" in seconds |
## Software PWM Driver
## Backlight Functions
Emulation of PWM while running other keyboard tasks, it offers maximum hardware compatibility without extra platform configuration. The tradeoff is the backlight might jitter when the keyboard is busy. To enable, add this to your rules.mk:
```makefile
BACKLIGHT_ENABLE = software
```
|Function |Description |
|----------|-----------------------------------------------------------|
|`backlight_toggle()` |Turn the backlight on or off |
|`backlight_enable()` |Turn the backlight on |
|`backlight_disable()` |Turn the backlight off |
|`backlight_step()` |Cycle through backlight levels |
|`backlight_increase()` |Increase the backlight level |
|`backlight_decrease()` |Decrease the backlight level |
|`backlight_level(x)` |Sets the backlight level, from 0 to |
| |`BACKLIGHT_LEVELS` |
|`get_backlight_level()` |Return the current backlight level |
|`is_backlight_enabled()`|Return whether the backlight is currently on |
### Software PWM Configuration
### Backlight Breathing Functions
To change the behavior of the backlighting, `#define` these in your `config.h`:
|Define |Default |Description |
|-----------------|-------------|-------------------------------------------------------------------------------------------------------------|
|`BACKLIGHT_PIN` |`B7` |The pin that controls the LEDs. Unless you are designing your own keyboard, you shouldn't need to change this|
|`BACKLIGHT_PINS` |*Not defined*|experimental: see below for more information |
### Multiple backlight pins
Most keyboards have only one backlight pin which control all backlight LEDs (especially if the backlight is connected to an hardware PWM pin).
In software PWM, it is possible to define multiple backlight pins. All those pins will be turned on and off at the same time during the PWM duty cycle.
This feature allows to set for instance the Caps Lock LED (or any other controllable LED) brightness at the same level as the other LEDs of the backlight. This is useful if you have mapped LCTRL in place of Caps Lock and you need the Caps Lock LED to be part of the backlight instead of being activated when Caps Lock is on.
To activate multiple backlight pins, you need to add something like this to your user `config.h`:
```c
#undef BACKLIGHT_PIN
#define BACKLIGHT_PINS { F5, B2 }
```
|Function |Description |
|----------|----------------------------------------------------------|
|`breathing_toggle()` |Turn the backlight breathing on or off |
|`breathing_enable()` |Turns on backlight breathing |
|`breathing_disable()` |Turns off backlight breathing |
+5 -5
View File
@@ -17,14 +17,14 @@ endif
| DEBOUNCE_TYPE | Description | What else is needed |
| ------------- | --------------------------------------------------- | ----------------------------- |
| Not defined | Use the default algorithm, currently sym_g | Nothing |
| custom | Use your own debounce code | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions |
| custom | Use your own debounce.c | ```SRC += debounce.c``` add your own debounce.c and implement necessary functions |
| anything_else | Use another algorithm from quantum/debounce/* | Nothing |
**Regarding split keyboards**:
The debounce code is compatible with split keyboards.
# Use your own debouncing code
* Set ```DEBOUNCE_TYPE = custom```.
* Set ```DEBOUNCE_TYPE = custom ```.
* Add ```SRC += debounce.c```
* Add your own ```debounce.c```. Look at current implementations in ```quantum/debounce``` for examples.
* Debouncing occurs after every raw matrix scan.
@@ -33,10 +33,10 @@ The debounce code is compatible with split keyboards.
# Changing between included debouncing methods
You can either use your own code, by including your own debounce.c, or switch to another included one.
Included debounce methods are:
* 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.
* 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.
For 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
appropriate 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.
* eager_pk - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE``` milliseconds of no further input for that key
* 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.
* eager_pk - debouncing per key. On any state change, response is immediate, followed by ```DEBOUNCE_DELAY``` milliseconds of no further input for that key
* 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.
+36 -39
View File
@@ -4,45 +4,51 @@ QMK supports temporary macros created on the fly. We call these Dynamic Macros.
You 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.
To enable them, first include `DYNAMIC_MACRO_ENABLE = yes` in your `rules.mk`. Then, add the following keys to your keymap:
To enable them, first add a new element to the end of your `keycodes` enum โ€” `DYNAMIC_MACRO_RANGE`:
|Key |Alias |Description |
|------------------|----------|---------------------------------------------------|
|`DYN_REC_START1` |`DM_REC1` |Start recording Macro 1 |
|`DYN_REC_START2` |`DM_REC2` |Start recording Macro 2 |
|`DYN_MACRO_PLAY1` |`DM_PLY1` |Replay Macro 1 |
|`DYN_MACRO_PLAY2` |`DM_PLY2` |Replay Macro 2 |
|`DYN_REC_STOP` |`DM_RSTP` |Finish the macro that is currently being recorded. |
```c
enum keycodes {
QWERTY = SAFE_RANGE,
COLEMAK,
DVORAK,
PLOVER,
LOWER,
RAISE,
BACKLIT,
EXT_PLV,
DYNAMIC_MACRO_RANGE,
};
```
That should be everything necessary.
Your `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.
To start recording the macro, press either `DYN_REC_START1` or `DYN_REC_START2`.
Below it, include the `dynamic_macro.h` header:
To finish the recording, press the `DYN_REC_STOP` layer button.
```c
#include "dynamic_macro.h"`
```
To replay the macro, press either `DYN_MACRO_PLAY1` or `DYN_MACRO_PLAY2`.
Add the following keys to your keymap:
It 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.
* `DYN_REC_START1` โ€” start recording the macro 1,
* `DYN_REC_START2` โ€” start recording the macro 2,
* `DYN_MACRO_PLAY1` โ€” replay the macro 1,
* `DYN_MACRO_PLAY2` โ€” replay the macro 2,
* `DYN_REC_STOP` โ€” finish the macro that is currently being recorded.
?> 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.
Add the following code to the very beginning of your `process_record_user()` function:
## Customization
```c
if (!process_record_dynamic_macro(keycode, record)) {
return false;
}
```
There are a number of options added that should allow some additional degree of customization
That 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`.
|Define |Default |Description |
|----------------------------|----------------|-----------------------------------------------------------------------------------------------------------------|
|`DYNAMIC_MACRO_SIZE` |128 |Sets the amount of memory that Dynamic Macros can use. This is a limited resource, dependent on the controller. |
|`DYNAMIC_MACRO_USER_CALL` |*Not defined* |Defining this falls back to using the user `keymap.c` file to trigger the macro behavior. |
|`DYNAMIC_MACRO_NO_NESTING` |*Not Defined* |Defining this disables the ability to call a macro from another macro (nested macros). |
Note 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.
If 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).
### DYNAMIC_MACRO_USER_CALL
For 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:
For 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:
```c
uint16_t macro_kc = (keycode == MO(_DYN) ? DYN_REC_STOP : keycode);
@@ -52,15 +58,6 @@ For users of the earlier versions of dynamic macros: It is still possible to fin
}
```
### User Hooks
If 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).
There 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.
Note, that direction indicates which macro it is, with `1` being Macro 1, `-1` being Macro 2, and 0 being no macro.
* `dynamic_macro_record_start_user(void)` - Triggered when you start recording a macro.
* `dynamic_macro_play_user(int8_t direction)` - Triggered when you play back a macro.
* `dynamic_macro_record_key_user(int8_t direction, keyrecord_t *record)` - Triggered on each keypress while recording a macro.
* `dynamic_macro_record_end_user(int8_t direction)` - Triggered when the macro recording is stopped.
Additionally, you can call `dynamic_macro_led_blink()` to flash the backlights if that feature is enabled.
For the details about the internals of the dynamic macros, please read the comments in the `dynamic_macro.h` header.
+8
View File
@@ -58,3 +58,11 @@ or `keymap.c`:
## Hardware
The A an B lines of the encoders should be wired directly to the MCU, and the C/common lines should be wired to ground.
## Encoder matrix
You can also wire the C/common line through a diode (arrow towards the row) to each of the rows (or reading pin) in your matrix, and use as many encoders as you have rows (multiplied by the number of A/B lines you have hooked up). To do this, you can add this line to your `config.h` with all of the pins you use:
```c
#define ENCODERS_PAD_C { encoder1c, encoder2c }
```
+6 -10
View File
@@ -22,7 +22,7 @@ Not all keycodes below will work depending on which haptic mechanism you have ch
| Name | Description |
|-----------|-------------------------------------------------------|
|`HPT_ON` | Turn haptic feedback on |
|`HPT_OFF` | Turn haptic feedback off |
|`HPT_OFF` | Turn haptic feedback on |
|`HPT_TOG` | Toggle haptic feedback on/off |
|`HPT_RST` | Reset haptic feedback config to default |
|`HPT_FBK` | Toggle feedback to occur on keypress, release or both |
@@ -41,15 +41,11 @@ First you will need a build a circuit to drive the solenoid through a mosfet as
[Wiring diagram provided by Adafruit](https://playground.arduino.cc/uploads/Learning/solenoid_driver.pdf)
Select a pin that has PWM for the signal pin
| Settings | Default | Description |
|--------------------------|---------------|-------------------------------------------------------|
|`SOLENOID_PIN` | *Not defined* |Configures the pin that the Solenoid is connected to. |
|`SOLENOID_DEFAULT_DWELL` | `12` ms |Configures the default dwell time for the solenoid. |
|`SOLENOID_MIN_DWELL` | `4` ms |Sets the lower limit for the dwell. |
|`SOLENOID_MAX_DWELL` | `100` ms |Sets the upper limit for the dwell. |
?> Dwell time is how long the "plunger" stays activated. The dwell time changes how the solenoid sounds.
```
#define SOLENOID_PIN *pin*
```
Beware 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.
@@ -155,4 +151,4 @@ This will set what sequence HPT_RST will set as the active mode. If not defined,
### DRV2605L Continuous Haptic Mode
This mode sets continuous haptic feedback with the option to increase or decrease strength.
This mode sets continuous haptic feedback with the option to increase or decrease strength.
+4 -4
View File
@@ -22,10 +22,10 @@ void matrix_scan_user(void) {
SEND_STRING("QMK is awesome.");
}
SEQ_TWO_KEYS(KC_D, KC_D) {
SEND_STRING(SS_LCTL("a") SS_LCTL("c"));
SEND_STRING(SS_LCTRL("a")SS_LCTRL("c"));
}
SEQ_THREE_KEYS(KC_D, KC_D, KC_S) {
SEND_STRING("https://start.duckduckgo.com\n");
SEND_STRING("https://start.duckduckgo.com"SS_TAP(X_ENTER));
}
SEQ_TWO_KEYS(KC_A, KC_S) {
register_code(KC_LGUI);
@@ -115,11 +115,11 @@ void matrix_scan_user(void) {
SEQ_ONE_KEY(KC_E) {
// Anything you can do in a macro.
SEND_STRING(SS_LCTL(SS_LSFT("t")));
SEND_STRING(SS_LCTRL(SS_LSFT("t")));
did_leader_succeed = true;
} else
SEQ_TWO_KEYS(KC_E, KC_D) {
SEND_STRING(SS_LGUI("r") "cmd\n" SS_LCTL("c"));
SEND_STRING(SS_LGUI("r")"cmd"SS_TAP(KC_ENTER)SS_LCTRL("c"));
did_leader_succeed = true;
}
leader_end();
+8 -11
View File
@@ -67,14 +67,14 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
case QMKURL:
if (record->event.pressed) {
// when keycode QMKURL is pressed
SEND_STRING("https://qmk.fm/\n");
SEND_STRING("https://qmk.fm/" SS_TAP(X_ENTER));
} else {
// when keycode QMKURL is released
}
break;
case MY_OTHER_MACRO:
if (record->event.pressed) {
SEND_STRING(SS_LCTL("ac")); // selects all and copies
SEND_STRING(SS_LCTRL("ac")); // selects all and copies
}
break;
}
@@ -109,21 +109,18 @@ Which would send "VE" followed by a `KC_HOME` tap, and "LO" (spelling "LOVE" if
There's also a couple of mod shortcuts you can use:
* `SS_LCTL(string)`
* `SS_LSFT(string)`
* `SS_LCTRL(string)`
* `SS_LGUI(string)`
* `SS_LALT(string)`
* `SS_LGUI(string)`, `SS_LCMD(string)` or `SS_LWIN(string)`
* `SS_RCTL(string)`
* `SS_RSFT(string)`
* `SS_RALT(string)` or `SS_ALGR(string)`
* `SS_RGUI(string)`, `SS_RCMD(string)` or `SS_RWIN(string)`
* `SS_LSFT(string)`
* `SS_RALT(string)`
These press the respective modifier, send the supplied string and then release the modifier.
They can be used like this:
SEND_STRING(SS_LCTL("a"));
SEND_STRING(SS_LCTRL("a"));
Which 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.
Which would send LCTRL+a (LCTRL down, a, LCTRL up) - notice that they take strings (eg `"k"`), and not the `X_K` keycodes.
### Alternative Keymaps
-6
View File
@@ -229,12 +229,6 @@ void oled_write_P(const char *data, bool invert);
// Remapped to call 'void oled_write_ln(const char *data, bool invert);' on ARM
void oled_write_ln_P(const char *data, bool invert);
// Writes a string to the buffer at current cursor position
void oled_write_raw(const char *data, uint16_t size);
// Writes a PROGMEM string to the buffer at current cursor position
void oled_write_raw_P(const char *data, uint16_t size);
// Can be used to manually turn on the screen if it is off
// Returns true if the screen was on or turns on
bool oled_on(void);
+1 -1
View File
@@ -107,7 +107,7 @@ Where `X_Y` is the location of the LED in the matrix defined by [the datasheet](
---
### WS2812
### WS2812 (AVR only)
There is basic support for addressable RGB matrix lighting with a WS2811/WS2812{a,b,c} addressable LED strand. To enable it, add this to your `rules.mk`:
+3 -3
View File
@@ -6,7 +6,7 @@ QMK has the ability to control RGB LEDs attached to your keyboard. This is commo
Some keyboards come with RGB LEDs preinstalled. Others must have them installed after the fact. See the [Hardware Modification](#hardware-modification) section for information on adding RGB lighting to your keyboard.
Currently QMK supports the following addressable LEDs (however, the white LED in RGBW variants is not supported):
Currently QMK supports the following addressable LEDs on AVR microcontrollers (however, the white LED in RGBW variants is not supported):
* WS2811, WS2812, WS2812B, WS2812C, etc.
* SK6812, SK6812MINI, SK6805
@@ -363,8 +363,8 @@ Using the `rgblight_set_clipping_range()` function, you can prepare more buffers
You can set the Clipping Range by executing the following code.
```c
// some source
rgblight_set_clipping_range(3, 4);
// some soruce
rgblight_set_clipping_range(3, 4);
```
<img src="https://user-images.githubusercontent.com/2170248/55743785-2bd82a00-5a6e-11e9-9d4b-1b4ffaf4932b.JPG" alt="clip direct" width="70%"/>
-2
View File
@@ -333,8 +333,6 @@ And then simply use `TD(X_CTL)` anywhere in your keymap.
If 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.
> 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`).
### Example 5: Using tap dance for advanced mod-tap and layer-tap keys
Tap 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`.
+5 -5
View File
@@ -208,15 +208,15 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
clear_mods(); clear_oneshot_mods();
SEND_STRING("make " QMK_KEYBOARD ":" QMK_KEYMAP);
#ifndef FLASH_BOOTLOADER
if ((temp_mod | temp_osm) & MOD_MASK_SHIFT)
if ( (temp_mod | temp_osm) & MOD_MASK_SHIFT )
#endif
{
{ //
SEND_STRING(":flash");
}
if ((temp_mod | temp_osm) & MOD_MASK_CTRL) {
SEND_STRING(" -j8 --output-sync");
if ( (temp_mod | temp_osm) & MOD_MASK_CTRL) {
SEND_STRING(" -j8 --output-sync");
}
tap_code(KC_ENT);
SEND_STRING(SS_TAP(X_ENTER));
set_mods(temp_mod);
}
break;
+1 -1
View File
@@ -13,7 +13,7 @@ General flashing sequence:
## bootloadHID Flashing Target
?> Using the QMK installation script, detailed [here](newbs_getting_started.md), the required bootloadHID tools should be automatically installed.
Using the QMK installation script, detailed [here](newbs_getting_started.md), the required bootloadHID tools should be automatically installed.
To flash via the command line, use the target `:bootloadHID` by executing the following command:
File renamed without changes.
@@ -19,7 +19,7 @@ Sinon, vous pouvez aussi le tรฉlรฉcharger directement en ([zip](https://github.c
## Comment le compiler
Avant 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 :
Avant 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 :
make planck/rev4:default
@@ -29,4 +29,4 @@ Cette commande compilera la rรฉvision `rev4` du clavier `planck` avec la disposi
## Comment le personnaliser
QMK 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).
QMK 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).
+125
View File
@@ -0,0 +1,125 @@
**En Franรงais**
* [Guide pour dรฉbutant complet](fr-FR/newbs.md)
* [Pour dรฉbuter](fr-FR/newbs_getting_started.md)
* [Compiler son premier firmware](fr-FR/newbs_building_firmware.md)
* [Flasher le Firmware](fr-FR/newbs_flashing.md)
* [Test et Dรฉbuggage](fr-FR/newbs_testing_debugging.md)
* [Bonnes pratiques Git](fr-FR/newbs_best_practices.md)
* [Ressources d'apprentissage](fr-FR/newbs_learn_more_resources.md)
* [Les bases de QMK](fr-FR/README.md)
* [Indroduction ร  QMK](fr-FR/getting_started_introduction.md)
* [QMK CLI](fr-FR/cli.md)
* [Configuration de la CLI QMK](fr-FR/cli_configuration.md)
* [Contribuer ร  QMK](fr-FR/contributing.md)
* [Comment utiliser GitHub](fr-FR/getting_started_github.md)
* [Trouver de l'aide](fr-FR/getting_started_getting_help.md)
* [Breaking changes](fr-FR/breaking_changes.md)
* [30 aoรปt 2019](fr-FR/ChangeLog/20190830.md)
**En Anglais**
* [FAQ](faq.md)
* [FAQ Gรฉnรฉrale](faq_general.md)
* [Compiler QMK](faq_build.md)
* [Dรฉbugguer / Dรฉpanner QMK](faq_debug.md)
* [Keymap / Disposition](faq_keymap.md)
* [Installer les drivers avec Zadig](driver_installation_zadig.md)
* Guides dรฉtaillรฉs
* [Installation des outils de compilation](getting_started_build_tools.md)
* [Guide Vagrant](getting_started_vagrant.md)
* [Commandes de compilations](getting_started_make_guide.md)
* [Flasher les firmwares](fr-fr/flashing.md)
* [Personnaliser les fonctionnalitรฉs](custom_quantum_functions.md)
* [Aperรงu des fonctionnalitรฉs des dispositions](keymap.md)
* [Hardware](hardware.md)
* [Processeurs AVR](hardware_avr.md)
* [Pilotes / Drivers](hardware_drivers.md)
* Rรฉferences
* [Lignes de conduite des claviers](hardware_keyboard_guidelines.md)
* [Options de configurations](config_options.md)
* [Keycodes / Codes des caractรจres](keycodes.md)
* [Conventions de codage - C](coding_conventions_c.md)
* [Conventions de codage - Python](coding_conventions_python.md)
* [Meilleurs pratiques sur la documentation](documentation_best_practices.md)
* [Modรจles de documentation](documentation_templates.md)
* [Glossaire](reference_glossary.md)
* [Tests unitaires](unit_testing.md)
* [Fonctions utiles](ref_functions.md)
* [Support de configuration](reference_configurator_support.md)
* [Format du fichier info.json](reference_info_json.md)
* [Dรฉvelopper la CLI en Python](cli_development.md)
* [Fonctionnalitรฉs](features.md)
* [Keycodes basiques](keycodes_basic.md)
* [Touches utilisรฉes avec Shift (US ANSI)](keycodes_us_ansi_shifted.md)
* [Keycodes quantiques](quantum_keycodes.md)
* [Keycodes avancรฉs](feature_advanced_keycodes.md)
* [Fonctionnalitรฉs audio](feature_audio.md)
* [Majuscule automatique](feature_auto_shift.md)
* [Rรฉtroรฉclairage](feature_backlight.md)
* [Bluetooth](feature_bluetooth.md)
* [Bootmagic](feature_bootmagic.md)
* [Combos](feature_combo.md)
* [Commande](feature_command.md)
* [API anti-rebond](feature_debounce_type.md)
* [DIP Switch](feature_dip_switch.md)
* [Macros dynamiques](feature_dynamic_macros.md)
* [Interrupteurs rotatifs](feature_encoders.md)
* [Grave Escape](feature_grave_esc.md)
* [Retour haptique](feature_haptic_feedback.md)
* [Contrรดleur LCD HD44780](feature_hd44780.md)
* [Touche ร  verrou / Lock-key](feature_key_lock.md)
* [Dispositions / layouts](feature_layouts.md)
* [Touche leader](feature_leader_key.md)
* [Matrice LED](feature_led_matrix.md)
* [Macros](feature_macros.md)
* [Boutons de souris](feature_mouse_keys.md)
* [Pilotes / Drivers OLED](feature_oled_driver.md)
* [Touche one-shot](feature_advanced_keycodes.md#one-shot-keys)
* [Pรฉriphรฉriques de pointage](feature_pointing_device.md)
* [Souris PS/2](feature_ps2_mouse.md)
* [ร‰clairage RGB](feature_rgblight.md)
* [Matrice RGB](feature_rgb_matrix.md)
* [Space Cadet](feature_space_cadet.md)
* [Claviers scindรฉs / splittรฉs](feature_split_keyboard.md)
* [Stenographie](feature_stenography.md)
* [Inversion des mains](feature_swap_hands.md)
* [Tap Dance](feature_tap_dance.md)
* [Terminale](feature_terminal.md)
* [Imprimante thermique](feature_thermal_printer.md)
* [Caractรจres unicodes](feature_unicode.md)
* [Dossier utilisateur](feature_userspace.md)
* [Velocikey](feature_velocikey.md)
* Pour les makers et les bricoleurs
* [Guide des claviers soudรฉs ร  la main](hand_wire.md)
* [Guide de flash de lโ€™ISP](isp_flashing_guide.md)
* [Guide du dรฉbogage ARM](arm_debugging.md)
* [Drivers i2c](i2c_driver.md)
* [Contrรดles des GPIO](internals_gpio_control.md)
* [Conversion en Proton C](proton_c_conversion.md)
* Pour aller plus loin
* [Comment fonctionnent les claviers](how_keyboards_work.md)
* [Comprendre QMK](understanding_qmk.md)
* Autres sujets
* [Utiliser Eclipse avec QMK](other_eclipse.md)
* [Utiliser VSCode avec QMK](other_vscode.md)
* [Support](support.md)
* [Comment ajouter des traductions](translating.md)
* ร€ lโ€™intรฉrieur de QMK (En cours de documentation)
* [Dรฉfinitions](internals_defines.md)
* [Input Callback Reg](internals_input_callback_reg.md)
* [Appareils Midi](internals_midi_device.md)
* [Installation dโ€™un appareil Midi](internals_midi_device_setup_process.md)
* [Utilitaires Midi](internals_midi_util.md)
* [Fonctions Midi](internals_send_functions.md)
* [Outils Sysex](internals_sysex_tools.md)
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
-125
View File
@@ -1,125 +0,0 @@
**En Franรงais**
* [Guide pour dรฉbutant complet](fr-fr/newbs.md)
* [Pour dรฉbuter](fr-fr/newbs_getting_started.md)
* [Compiler son premier firmware](fr-fr/newbs_building_firmware.md)
* [Flasher le Firmware](fr-fr/newbs_flashing.md)
* [Test et Dรฉbuggage](fr-fr/newbs_testing_debugging.md)
* [Bonnes pratiques Git](fr-fr/newbs_best_practices.md)
* [Ressources d'apprentissage](fr-fr/newbs_learn_more_resources.md)
* [Les bases de QMK](fr-fr/README.md)
* [Indroduction ร  QMK](fr-fr/getting_started_introduction.md)
* [QMK CLI](fr-fr/cli.md)
* [Configuration de la CLI QMK](fr-fr/cli_configuration.md)
* [Contribuer ร  QMK](fr-fr/contributing.md)
* [Comment utiliser GitHub](fr-fr/getting_started_github.md)
* [Trouver de l'aide](fr-fr/getting_started_getting_help.md)
* [Breaking changes](fr-fr/breaking_changes.md)
* [30 aoรปt 2019](fr-fr/ChangeLog/20190830.md)
* [FAQ](fr-fr/faq.md)
* [FAQ Gรฉnรฉrale](fr-fr/faq_general.md)
* [Compiler QMK](fr-fr/faq_build.md)
* [Dรฉbugguer / Dรฉpanner QMK](fr-fr/faq_debug.md)
* [Keymap / Disposition](fr-fr/faq_keymap.md)
* [Installer les drivers avec Zadig](fr-fr/driver_installation_zadig.md)
**En Anglais**
* Guides dรฉtaillรฉs
* [Installation des outils de compilation](fr-fr/getting_started_build_tools.md)
* [Guide Vagrant](fr-fr/getting_started_vagrant.md)
* [Commandes de compilations](fr-fr/getting_started_make_guide.md)
* [Flasher les firmwares](fr-fr/flashing.md)
* [Personnaliser les fonctionnalitรฉs](fr-fr/custom_quantum_functions.md)
* [Aperรงu des fonctionnalitรฉs des dispositions](fr-fr/keymap.md)
* [Hardware](fr-fr/hardware.md)
* [Processeurs AVR](fr-fr/hardware_avr.md)
* [Pilotes / Drivers](fr-fr/hardware_drivers.md)
* Rรฉferences
* [Lignes de conduite des claviers](fr-fr/hardware_keyboard_guidelines.md)
* [Options de configurations](fr-fr/config_options.md)
* [Keycodes / Codes des caractรจres](fr-fr/keycodes.md)
* [Conventions de codage - C](fr-fr/coding_conventions_c.md)
* [Conventions de codage - Python](fr-fr/coding_conventions_python.md)
* [Meilleurs pratiques sur la documentation](fr-fr/documentation_best_practices.md)
* [Modรจles de documentation](fr-fr/documentation_templates.md)
* [Glossaire](fr-fr/reference_glossary.md)
* [Tests unitaires](fr-fr/unit_testing.md)
* [Fonctions utiles](fr-fr/ref_functions.md)
* [Support de configuration](fr-fr/reference_configurator_support.md)
* [Format du fichier info.json](fr-fr/reference_info_json.md)
* [Dรฉvelopper la CLI en Python](fr-fr/cli_development.md)
* [Fonctionnalitรฉs](fr-fr/features.md)
* [Keycodes basiques](fr-fr/keycodes_basic.md)
* [Touches utilisรฉes avec Shift (US ANSI)](fr-fr/keycodes_us_ansi_shifted.md)
* [Keycodes quantiques](fr-fr/quantum_keycodes.md)
* [Keycodes avancรฉs](fr-fr/feature_advanced_keycodes.md)
* [Fonctionnalitรฉs audio](fr-fr/feature_audio.md)
* [Majuscule automatique](fr-fr/feature_auto_shift.md)
* [Rรฉtroรฉclairage](fr-fr/feature_backlight.md)
* [Bluetooth](fr-fr/feature_bluetooth.md)
* [Bootmagic](fr-fr/feature_bootmagic.md)
* [Combos](fr-fr/feature_combo.md)
* [Commande](fr-fr/feature_command.md)
* [API anti-rebond](fr-fr/feature_debounce_type.md)
* [DIP Switch](fr-fr/feature_dip_switch.md)
* [Macros dynamiques](fr-fr/feature_dynamic_macros.md)
* [Interrupteurs rotatifs](fr-fr/feature_encoders.md)
* [Grave Escape](fr-fr/feature_grave_esc.md)
* [Retour haptique](fr-fr/feature_haptic_feedback.md)
* [Contrรดleur LCD HD44780](fr-fr/feature_hd44780.md)
* [Touche ร  verrou / Lock-key](fr-fr/feature_key_lock.md)
* [Dispositions / layouts](fr-fr/feature_layouts.md)
* [Touche leader](fr-fr/feature_leader_key.md)
* [Matrice LED](fr-fr/feature_led_matrix.md)
* [Macros](fr-fr/feature_macros.md)
* [Boutons de souris](fr-fr/feature_mouse_keys.md)
* [Pilotes / Drivers OLED](fr-fr/feature_oled_driver.md)
* [Touche one-shot](fr-fr/feature_advanced_keycodes.md#one-shot-keys)
* [Pรฉriphรฉriques de pointage](fr-fr/feature_pointing_device.md)
* [Souris PS/2](fr-fr/feature_ps2_mouse.md)
* [ร‰clairage RGB](fr-fr/feature_rgblight.md)
* [Matrice RGB](fr-fr/feature_rgb_matrix.md)
* [Space Cadet](fr-fr/feature_space_cadet.md)
* [Claviers scindรฉs / splittรฉs](fr-fr/feature_split_keyboard.md)
* [Stenographie](fr-fr/feature_stenography.md)
* [Inversion des mains](fr-fr/feature_swap_hands.md)
* [Tap Dance](fr-fr/feature_tap_dance.md)
* [Terminale](fr-fr/feature_terminal.md)
* [Imprimante thermique](fr-fr/feature_thermal_printer.md)
* [Caractรจres unicodes](fr-fr/feature_unicode.md)
* [Dossier utilisateur](fr-fr/feature_userspace.md)
* [Velocikey](fr-fr/feature_velocikey.md)
* Pour les makers et les bricoleurs
* [Guide des claviers soudรฉs ร  la main](fr-fr/hand_wire.md)
* [Guide de flash de lโ€™ISP](fr-fr/isp_flashing_guide.md)
* [Guide du dรฉbogage ARM](fr-fr/arm_debugging.md)
* [Drivers i2c](fr-fr/i2c_driver.md)
* [Contrรดles des GPIO](fr-fr/internals_gpio_control.md)
* [Conversion en Proton C](fr-fr/proton_c_conversion.md)
* Pour aller plus loin
* [Comment fonctionnent les claviers](fr-fr/how_keyboards_work.md)
* [Comprendre QMK](fr-fr/understanding_qmk.md)
* Autres sujets
* [Utiliser Eclipse avec QMK](fr-fr/other_eclipse.md)
* [Utiliser VSCode avec QMK](fr-fr/other_vscode.md)
* [Support](fr-fr/support.md)
* [Comment ajouter des traductions](fr-fr/translating.md)
* ร€ lโ€™intรฉrieur de QMK (En cours de documentation)
* [Dรฉfinitions](fr-fr/internals_defines.md)
* [Input Callback Reg](fr-fr/internals_input_callback_reg.md)
* [Appareils Midi](fr-fr/internals_midi_device.md)
* [Installation dโ€™un appareil Midi](fr-fr/internals_midi_device_setup_process.md)
* [Utilitaires Midi](fr-fr/internals_midi_util.md)
* [Fonctions Midi](fr-fr/internals_send_functions.md)
* [Outils Sysex](fr-fr/internals_sysex_tools.md)
-46
View File
@@ -1,46 +0,0 @@
# Installation du driver du bootloader avec Zadig
Vous nโ€™aurez pas besoin de pilote particulier pour utiliser un clavier QMK. En effet, QMK se prรฉsente ร  l'ordinateur hรดte comme un clavier HID standard et sera reconnu sans problรจme. Cependant vous aurez peut-รชtre besoin d'un pilote pour flasher votre clavier avec Windows. En effet, quand vous redรฉmarrerez votre clavier en mode bootloader, le pรฉriphรฉrique que dรฉtectera Windows ne sera pas un clavier mais un pรฉriphรฉrique bootloader.
Il existe deux exceptions : le bootloader Caterina, qui se trouve en gรฉnรฉral sur les Pro Micros, et le bootloader Halfkay, livrรฉ avec les Teensy de PJRC. Ils apparaissent respectivement sous la forme d'un port sรฉrie et d'un pรฉriphรฉrique HID gรฉnรฉrique, ne nรฉcessitant pas de pilote particulier.
Nous vous recommandons d'utiliser l'utilitaire [Zadig](https://zadig.akeo.ie/). Si vous avez configurรฉ votre environnement de dรฉveloppement avec Msys2 ou WSL, le script `qmk_install.sh` vous aura proposรฉ l'installation des pilotes durant le processus.
## Installation
Passez votre clavier en mode bootloader, soit en appuyant sur le keycode `RESET` (qui peut se trouver dans un calque diffรฉrent) ou en appuyant sur le bouton reset qui se trouve en gรฉnรฉral sous la board. Si votre clavier n'a aucune de ces options, essayez de le brancher en maintenant Escape ou Espace+`B` appuyรฉs (voir la documentation de [Bootmagic](feature_bootmagic.md) pour plus de dรฉtails). Certaines boards utilisent [Command](feature_command.md) ร  la place de Bootmagic. Dans ce cas, vous pouvez entrer en mode bootloader en appuyant, ร  n'importe quel moment lorsque le clavier est branchรฉ, sur les combinaisons de touches Shift Gauche+Shift Droit+`B` ou Shift Gauche+Shift Droit+Escape.
Certains claviers ont des instructions spรฉcifiques pour passer en mode bootloader. Par exemple, la touche [Bootmagic Lite]](feature_bootmagic.md#bootmagic-lite) (dรฉfautโ€ฏ:โ€ฏร‰chap) peut รชtre sur une touche diffรฉrente telle que Contrรดle Gauche. La combinaison pour la Command (dรฉfautโ€ฏ:โ€ฏShift Gauche+Shift Droit) peut รชtre diffรฉrente, par exemple Contrรดle Gauche+Contrรดle Droit. Rรฉfรฉrez-vous au fichier README de votre clavier.
Pour mettre un clavier en mode bootloader avec USBaspLoader, appuyez sur le bouton `RESET` tout en maintenant le bouton `BOOT`. Vous pouvez aussi maintenir le bouton `BOOT` en branchant le cรขble USB.
Zadig dรฉtectera automatiquement les pรฉriphรฉriques en mode bootloader. Il se peut toutefois que vous deviez vรฉrifier en passant par **Options โ†’ List All Devices**.
- Pour les claviers avec des MCUs Atmel AVR, le bootloader aura un nom similaire ร  `ATm32U4DFU`, et un Vendor ID `03EB`.
- Les bootloaders USBasp s'appelleront `USBasp`, avec un VID/PID `16C0:05DC`.
- Les claviers AVR flashรฉ avec le bootloader QMK-DFU s'appelleront `<nom du clavier> Bootloader` et auront aussi le VID `03EB`.
- Pour la plupart des claviers ARM, ils s'appelleront `STM32 BOOTLOADER`, et auront un VID/PID `0483:DF11`.
!> Si Zadig affiche certains de vos pรฉriphรฉriques avec le driver `HidUsb`, votre clavier n'est probablement pas en mode bootloader. La flรจche aura une couleur orange et vous aurez un message de confirmation vous demandant de modifier un pilote systรจme. **Ne continuez pas!**
Si la flรจche apparaรฎt en vert, sรฉlectionnez le driver et appuyez sur le bouton **Install Driver**. Le driver `libusb-win32` devrait normalement fonctionner pour AVR, et `WinUSB` pour ARM. Si vous avez des problรจmes pour flasher la board, essayez d'installer un pilote diffรฉrent de la liste. Pour flasher un pรฉriphรฉrique USBaspLoader en ligne de commande avec msys2, le driver `libusbk` est recommandรฉ, sinon `libusb-win32` devrait fonctionner correctement si vous utilisez QMK Toolbox pour flasher.
![Zadig montrant un driver de bootloader installรฉ correctement](https://i.imgur.com/b8VgXzx.png)
Finalement, dรฉbranchez et rebranchez le clavier afin de vous assurer que le nouveau pilote a bien รฉtรฉ chargรฉ. Si vous utilisez QMK Toolbox pour flasher, redรฉmarrez-le aussi, il arrive qu'il n'arrive pas ร  dรฉtecter le changement de driver.
## Rรฉcupรฉrer l'installation du mauvais pรฉriphรฉrique
Si vous n'arrivez plus ร  saisir de texte avec le clavier, il est possible que vous ayez installรฉ le driver sur le clavier au lieu du bootloader. Vous pouvez facilement vรฉrifier ceci dans Zadig. Un clavier fonctionnel a le pilote `HidUsb` installรฉ sur toutes ses interfaces :
![Un clavier fonctionnel vu par Zadig](https://i.imgur.com/Hx0E5kC.png)
Ouvrez le Gestionnaire de pรฉriphรฉriques et cherchez un pรฉriphรฉrique qui ressemble ร  votre clavier.
![La board avec le mauvais driver installรฉ, dans le Gestionnaire de pรฉriphรฉriques](https://i.imgur.com/L3wvX8f.png)
Cliquez dessus avec le bouton droit et sรฉlectionner **Dรฉsinstaller le pรฉriphรฉrique**. Faites bien attention ร  sรฉlectionner **Supprimer le pilote pour ce pรฉriphรฉrique** avant de valider.
![Le dialogue Suppression de pรฉriphรฉrique, avec la boรฎte "suppression de pilote" cochรฉe](https://i.imgur.com/aEs2RuA.png)
Appuyez sur **Action โ†’ Analyser les changements de hardware**. A ce stade, vous devriez pouvoir saisir ร  nouveau. Vรฉrifiez dans Zadig que les pรฉriphรฉriques utilisent bien le pilote `HidUsb`. Si c'est le cas, vous avez corrigรฉ le problรจme, votre clavier devrait fonctionner ร  nouveauโ€ฏ!
-6
View File
@@ -1,6 +0,0 @@
# Foire Aux Questions
* [FAQ Gรฉnรฉrale](faq_general.md)
* [Construire ou Compiler QMK](faq_build.md)
* [Dรฉbuguer et Dรฉpanner QMK](faq_debug.md)
* [Keymap (disposition)](faq_keymap.md)
-182
View File
@@ -1,182 +0,0 @@
# Foire aux questions sur la compilation
Cette page couvre les questions concernant la compilation de QMK. Si vous ne l'avez pas encore fait, vous devriez lire les guides [Configuration de l'environnement de build](getting_started_build_tools.md) et [Instructions pour Make](getting_started_make_guide.md).
## Je ne peux pas programmer sous Linux
Vous aurez besoin des permissions appropriรฉes pour utiliser un pรฉriphรฉrique. Pour les utilisateurs de Linux, rรฉfรฉrez-vous aux instructions concernant les rรจgles `udev` ci-dessous. Si `udev` vous pose des problรจmes, une alternative est d'utiliser la commande `sudo`. Si vous ne connaissez pas cette commande, rรฉfรฉrez-vous ร  son manuel d'utilisation en utilisant `man sudo` ou [regardez cette page](https://linux.die.net/man/8/sudo).
Un exemple utilisant `sudo`, lorsque votre contrรดleur est un ATMega32u4 :
$ sudo dfu-programmer atmega32u4 erase --force
$ sudo dfu-programmer atmega32u4 flash your.hex
$ sudo dfu-programmer atmega32u4 reset
ou simplement :
$ sudo make <keyboard>:<keymap>:dfu
Veuillez noter que lancer `make` avec `sudo` est gรฉnรฉralement une **mauvaise** idรฉe, et vous devriez prรฉfรฉrer une des mรฉthodes prรฉcรฉdente, si possible.
### Rรจgles `udev` pour Linux
Sous Linux, vous aurez besoin des permissions appropriรฉes pour accรฉder au MCU (le micro-contrรดleur). Vous avez le choix d'utiliser `sudo` en flashant le firmware, ou placer ces fichiers dans `/etc/udev/rules.d`. Une fois ajoutรฉ, lancez les commandes suivantesโ€ฏ:
```console
sudo udevadm control --reload-rules
sudo udevadm trigger
```
**/etc/udev/rules.d/50-atmel-dfu.rules:**
```
# Atmel ATMega32U4
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff4", MODE:="0666"
# Atmel USBKEY AT90USB1287
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ffb", MODE:="0666"
# Atmel ATMega32U2
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2ff0", MODE:="0666"
```
**/etc/udev/rules.d/52-tmk-keyboard.rules:**
```
# tmk keyboard products https://github.com/tmk/tmk_keyboard
SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
```
**/etc/udev/rules.d/54-input-club-keyboard.rules:**
```
# Input Club keyboard bootloader
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"
```
**/etc/udev/rules.d/55-catalina.rules:**
```
# ModemManager should ignore the following devices
ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"
ATTRS{idVendor}=="2341", ENV{ID_MM_DEVICE_IGNORE}="1"
```
**Note:** Le filtrage utilisant ModemManager fonctionnera uniquement si vous n'รชtes pas en mode strict. Les commandes suivantes peuvent changer cette option :
```console
sudo sed -i 's/--filter-policy=strict/--filter-policy=default/' /lib/systemd/system/ModemManager.service
sudo systemctl daemon-reload
sudo systemctl restart ModemManager
```
**/etc/udev/rules.d/56-dfu-util.rules:**
```
# stm32duino
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1eaf", ATTRS{idProduct}=="0003", MODE:="0666"
# Generic stm32
SUBSYSTEMS=="usb", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="df11", MODE:="0666"
```
### Le pรฉriphรฉrique sรฉriel n'est pas dรฉtectรฉ en mode bootloader sous Linux
Assurez-vous que votre kernel ait un support appropriรฉ pour votre pรฉriphรฉrique. Si votre pรฉriphรฉrique utilise USB ACM, par exemple pour les Pro Micro (AtMega32u4), assurez-vous d'inclure `CONFIG_USB_ACM=y`. D'autres pรฉriphรฉriques peuvent avoir besoin de `USB_SERIAL` et de ses sous-options.
## Pรฉriphรฉrique inconnu pour le bootloader DFU
Les problรจmes rencontrรฉs lorsque l'on flash des claviers sous Windows sont, la plupart du temps, dus ร  une installation du mauvais pilote, ou un pilote manquant.
Relancer le script d'installation de QMK (`./util/qmk_install.sh` situรฉ dans rรฉpertoire `qmk_firmware`sous MSYS2 ou WSL) ou rรฉinstaller la QMK Toolbox peut rรฉsoudre le problรจme. Une alternative est de tรฉlรฉcharger et lancer manuellement le package [`qmk_driver_installer`](https://github.com/qmk/qmk_driver_installer).
Si 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.
## WINAVR est obsolรจte
Il n'est plus recommandรฉ et peut causer des problรจmes. Voir [TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
## USB VID et PID
Vous pouvez utiliser l'ID de votre choix en modifier `config.h`. Il y a peu de chance de conflit avec d'autres produits.
La plupart des boards QMK utilisent `0xFEED` comme vendor ID. Vรฉrifiez les autres claviers pour รชtre sรปr de choisir un Product ID unique.
ร‰tudiez aussi ce ticket
https://github.com/tmk/tmk_keyboard/issues/150
Vous pouvez acheter un VID:PID unique ici. Je ne pense pas que ce soit nรฉcessaire pour un usage personnel.
- http://www.obdev.at/products/vusb/license.html
- http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=92&option=com_phpshop&Itemid=1
## Cortex: `cstddef: No such file or directory`
Ce 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.
https://launchpad.net/~terry.guo/+archive/ubuntu/gcc-arm-embedded
https://github.com/tmk/tmk_keyboard/issues/212
https://github.com/tmk/tmk_keyboard/wiki/mbed-cortex-porting#compile-error-cstddef
https://developer.mbed.org/forum/mbed/topic/5205/
## `clock_prescale_set` and `clock_div_1` Not Available
Votre chaรฎne d'outils (Toolchain) est trop vieille pour supporter le MCU. Par exemple, WinAVR 20100110 ne supporte pas ATMega32u2.
```
Compiling C: ../../tmk_core/protocol/lufa/lufa.c
avr-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
../../tmk_core/protocol/lufa/lufa.c: In function 'setup_mcu':
../../tmk_core/protocol/lufa/lufa.c:575: warning: implicit declaration of function 'clock_prescale_set'
../../tmk_core/protocol/lufa/lufa.c:575: error: 'clock_div_1' undeclared (first use in this function)
../../tmk_core/protocol/lufa/lufa.c:575: error: (Each undeclared identifier is reported only once
../../tmk_core/protocol/lufa/lufa.c:575: error: for each function it appears in.)
make: *** [obj_alps64/protocol/lufa/lufa.o] Error 1
```
## BOOTLOADER_SIZE pour AVR
Notez que la taille du bootloader pour les Teensy2.0++ est de 2048bytes. Quelques Makefiles peuvent contenir une erreur et avoir le mauvais commentaire.
```
# Boot Section Size in *bytes*
# Teensy halfKay 512
# Teensy++ halfKay 2048
# Atmel DFU loader 4096 (TMK Alt Controller)
# LUFA bootloader 4096
# USBaspLoader 2048
OPT_DEFS += -DBOOTLOADER_SIZE=2048
```
## `avr-gcc: internal compiler error: Abort trap: 6 (program cc1)` sous MacOS
C'est un problรจme de mise ร  jour avec brew, causรฉe par des liens symboliques (symlinks) dont dรฉpend avr-gcc qui sont dรฉtruits.
La solution est de supprimer et rรฉinstaller tous les modules affectรฉs.
```
brew rm avr-gcc
brew rm dfu-programmer
brew rm dfu-util
brew rm gcc-arm-none-eabi
brew rm avrdude
brew install avr-gcc
brew install dfu-programmer
brew install dfu-util
brew install gcc-arm-none-eabi
brew install avrdude
```
### avr-gcc 8.1 et LUFA
Si vous avez mis ร  jour votre avr-gcc au-dessus de la version 7, vous risquez de voir des erreurs impliquant LUA. Par exemple :
`lib/lufa/LUFA/Drivers/USB/Class/Device/AudioClassDevice.h:380:5: error: 'const' attribute on function returning 'void'`
Pour le moment, vous devrez revenir ร  la version 7 de avr-gcc dans brew.
```
brew uninstall --force avr-gcc
brew install avr-gcc@8
brew link --force avr-gcc@8
```
### Je viens de flasher mon clavier et il ne fait rien/l'appui des touches n'est pas enregistrรฉ - c'est aussi un ARM(rev6 plank, clueboard 60, hs60v2, etc.) (Fรฉvrier 2019)
A cause de la maniรจre dont les EEPROM fonctionnent sur les puces ARM, les options sauvegardรฉes peuvent ne plus รชtre valides. Ceci affecte les calques par dรฉfaut et *peut*, sous certaines conditions que nous essayons encore de dรฉterminer, rendre le clavier inutilisable. Rรฉinitialiser l'EEPROM corrigera le problรจme.
[Rรฉinitialiser EEPROM sur Planck rev6](https://cdn.discordapp.com/attachments/473506116718952450/539284620861243409/planck_rev6_default.bin) peut รชtre utilisรฉ pour forcer une rรฉinitialisation d'EEPROM. Une fois cette image flashรฉe, flashez ร  nouveau votre firmware standard. Cela devrait rรฉtablir le fonctionnement de votre clavier.
Si bootmagic est activรฉ dans n'importe quel forme, vous devriez รชtre capable de faire aussi ceci (regardez [Documentation Bootmagic](feature_bootmagic.md) et les informations spรฉcifiques ร  votre clavier).
-236
View File
@@ -1,236 +0,0 @@
# FAQ Dรฉbugage
Cette page dรฉtaille diverses questions frรฉquemment posรฉes par les utilisateurs sur le dรฉpannage de leurs claviers.
# Console de dรฉbugage
## `hid_listen` ne reconnaรฎt pas de pรฉriphรฉrique
Lorsque la console de dรฉbugage sur votre pรฉriphรฉrique n'est pas prรชt, vous obtiendrez un message similaireโ€ฏ:
```
Waiting for device:.........
```
Une fois le pรฉriphรฉrique connectรฉ, *hid_listen* le trouve et vous obtiendrez ce messageโ€ฏ:
```
Waiting for new device:.........................
Listening:
```
Si vous ne recevez pas ce message `Listening:`, essayez de compiler avec `CONSOLE_ENABLE=yes` dans le [Makefile]
Il se peut que vous ayez besoin de certains privilรจges avancรฉs pour accรฉder ร  des pรฉriphรฉriques sur des OS comme Linux.
- Essayez `sudo hid_listen`
## Ne reรงoit pas de messages sur la console
Vรฉrifiez :
- *hid_listen* trouve votre pรฉriphรฉrique. Voir ci-dessus.
- Activez le dรฉbugage en appuyant sur **Magic**+d. Voir [Commandes Magic](https://github.com/tmk/tmk_keyboard#magic-commands).
- Dรฉfinissez `debug_enable=true` en gรฉnรฉral dans `matrix_init()` du fichier **matrix.c**.
- Essayez d'utiliser la fonction `print` ร  la place du debug print. Voir **common/print.h**.
- Dรฉconnectez tous les autres pรฉriphรฉriques qui utilisent la fonction console. Voir [Issue #97](https://github.com/tmk/tmk_keyboard/issues/97).
## Linux ou les systรจmes UNIX nรฉcessitent des privilรจges super utilisateur
Utilisez `sudo` pour exรฉcuter *hid_listen* avec des privilรจges รฉtendus.
```
$ sudo hid_listen
```
Ou ajoutez une *udev rule* pour les pรฉriphรฉriques TMK en plaรงant un fichier dans le rรฉpertoire rules. Le chemin vers ce rรฉpertoire peut varier en fonction du systรจme.
Fichier: /etc/udev/rules.d/52-tmk-keyboard.rules(sous Ubuntu)
```
# tmk keyboard products https://github.com/tmk/tmk_keyboard
SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
```
***
# Divers
## Considรฉrations de sรฉcuritรฉ
Vous ne voulez probablement pas "briquer" votre clavier, rendre impossible d'รฉcrire un firmware dessus. Il y a quelques paramรจtres qui montrent ce qui est (et n'est probablement pas) trop risquรฉ.
- Si votre map de clavier n'inclut pas de RESET, pour entrer en mode DFU, vous devrez appuyer sur le bouton reset du PCB. Cela implique que vous devrez certainement dรฉvisser certaines piรจces de votre clavier pour y accรฉder.
- Modifier les fichiers tmk_core / common peut rendre le clavier inutilisable
- Si un fichier .hex trop large est la cause du problรจmeโ€ฏ: `make dfu` supprime le bloc puis teste la taille (il ne fait pas les choses dans le bon ordre), ce qui provoque une erreur. En rรฉsultat, le flash nโ€™aura pas รฉtรฉ fait et le clavier restera en mode DFU.
- Pour finir, notez que la taille maximale d'un fichier .hex sur un Plank est de 7000h (28672 decimal)
```
Linking: .build/planck_rev4_cbbrowne.elf [OK]
Creating load file for Flash: .build/planck_rev4_cbbrowne.hex [OK]
Size after:
text data bss dec hex filename
0 22396 0 22396 577c planck_rev4_cbbrowne.hex
```
- La taille du fichier ci-dessus est de 22396/577ch, ce qui est en dessous de 28672/7000h
- Tant que vous avez un fichier .hex alternatif correct, vous pouvez rรฉessayer en le chargeant
- Certaines options que vous pouvez spรฉcifier dans votre Makefile consomme de la mรฉmoire supplรฉmentaire. Faites attention aux options BOOTMAGIC_ENABLE, MOUSEKEY_ENABLE, EXTRAKEY_ENABLE, CONSOLE_ENABLE, API_SYSEX_ENABLE.
- Les outils DFU **ne** vous permettent **pas** d'รฉcrire dans le bootloader (ร  moins que vous n'ajoutiez des options spรฉciales), il n'y a donc peu de risque.
- Les EEPROM ont environ 100000 cycles d'รฉcriture. Ne rรฉรฉcrivez pas le firmware de maniรจre continue et rรฉpรฉtรฉe. Vous allez dรฉtruire dรฉfinitivement l'EEPROM.
## NKRO ne fonctionne pas
Premiรจrement, vous devez compiler le firmware avec l'option de compilation `NKRO_ENABLE` dans le **Makefile**.
Essayez la commande `Magic` **N** (`LShift+RShift+N` par dรฉfaut) si **NKRO** ne fonctionne toujours pas. Vous pouvez utiliser cette commande pour basculer temporairement entre le mode **NKRO** et **6KRO**. Sous certaines conditions, **NKRO** ne fonctionnera pas et vous devrez basculer en **6KRO**, en particulier lorsque vous รชtes dans le BIOS.
Si votre firmware est compilรฉ avec `BOOTMAGIC_ENABLE` vous devrez l'activer avec la commande `BootMagic` **N** (`Espace+N` par dรฉfaut). Cette option est enregistrรฉe dans l'EEPROM et sera gardรฉ entre deux cycles de dรฉmarrage.
https://github.com/tmk/tmk_keyboard#boot-magic-configuration---virtual-dip-switch
## Le TrackPoint a besoin Circuit de rรฉinitialisation (Support de souris PS/2)
Sans circuit de rรฉinitialisation vous allez avoir des rรฉsultats inconsistants ร  cause de la mauvaise initialisation du matรฉriel. Regardez le schรฉma du circuit du TPM754.
- http://geekhack.org/index.php?topic=50176.msg1127447#msg1127447
- http://www.mikrocontroller.net/attachment/52583/tpm754.pdf
## Impossible de lire la colonne de la matrice aprรจs 16
Utilisez `1UL<<16` ร  la place de `1<<16` dans `read_cols()` du fichier [matrix.h] lorsque le nombre de vos colonnes dรฉpassent 16.
En C, `1` implique un type [int] qui est [16 bits] pour les AVR, ce qui implique que vous ne pouvez pas dรฉcaler ร  gauche de plus de 15. Si vous utilisez `1<<16`, vous aurez un rรฉsultat non attendu de zรฉro. Vous devez donc utiliser un type [unsigned long] en utilisant `1UL`.
http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
## Bootloader Jump ne fonctionne pas
Configurez 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**.
```
# Size of Bootloaders in bytes:
# Atmel DFU loader(ATmega32U4) 4096
# Atmel DFU loader(AT90USB128) 8192
# LUFA bootloader(ATmega32U4) 4096
# Arduino Caterina(ATmega32U4) 4096
# USBaspLoader(ATmega***) 2048
# Teensy halfKay(ATmega32U4) 512
# Teensy++ halfKay(AT90USB128) 2048
OPT_DEFS += -DBOOTLOADER_SIZE=4096
```
La 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**.
La section de boot AVR se trouve ร  la fin de la mรฉmoire flash, comme suit.
```
byte Atmel/LUFA(ATMega32u4) byte Atmel(AT90SUB1286)
0x0000 +---------------+ 0x00000 +---------------+
| | | |
| | | |
| Application | | Application |
| | | |
= = = =
| | 32KB-4KB | | 128KB-8KB
0x6000 +---------------+ 0x1E000 +---------------+
| Bootloader | 4KB | Bootloader | 8KB
0x7FFF +---------------+ 0x1FFFF +---------------+
byte Teensy(ATMega32u4) byte Teensy++(AT90SUB1286)
0x0000 +---------------+ 0x00000 +---------------+
| | | |
| | | |
| Application | | Application |
| | | |
= = = =
| | 32KB-512B | | 128KB-2KB
0x7E00 +---------------+ 0x1FC00 +---------------+
| Bootloader | 512B | Bootloader | 2KB
0x7FFF +---------------+ 0x1FFFF +---------------+
```
Rรฉfรฉrez-vous ร  cette discussion pour plus de rรฉfรฉrence.
https://github.com/tmk/tmk_keyboard/issues/179
Si 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.
## Les touches spรฉciales ne fonctionnent pas (Touche Systรจme, Touches de contrรดle du son)
Vous devez dรฉfinir `EXTRAKEY_ENABLE` dans le fichier `rules.mk` pour les utiliser dans QMK.
```
EXTRAKEY_ENABLE = yes # Audio control and System control
```
## Rรฉveiller du mode veille ne fonctionne pas
Sous Windows, activez l'option `Permettre au pรฉriphรฉrique de sortir l'ordinateur de veille` dans les paramรจtres des **Options d'alimentations** du **Gestionnaire de pรฉriphรฉriques**. Vรฉrifiez aussi les paramรจtres du BIOS.
Appuyer sur n'importe quelle touche en mode veille devrait sortir l'ordinateur de veille.
## Vous utilisez un Arduinoโ€ฏ?
**Faites attention au fait que le nommage des pin d'un Arduino diffรจre de la puce**. Par exemple, la pin `D0` n'est pas `PD0`. Vรฉrifiez le circuit avec la fiche technique.
- http://arduino.cc/en/uploads/Main/arduino-leonardo-schematic_3b.pdf
- http://arduino.cc/en/uploads/Main/arduino-micro-schematic.pdf
Les Arduino Leonardo et micro ont des **ATMega32U4** et peuvent รชtre utilisรฉs avec TMK, mais le bootloader Arduino peut causer des problรจmes.
## Activer JTAG
Par dรฉfaut, le dรฉbugage des interfaces JTAG est dรฉsactivรฉ dรจs que le clavier dรฉmarre. Les MCUs compatible JTAG viennent d'usine avec le fusible `JTAGEN` activรฉ, et il prend certaines pins du MCU que la board pourrait utiliser pour la matrice, les LEDs, etc.
Si vous voulez garder JTAG activรฉ, ajoutez la ligne suivante ร  votre fichier `config.h` :
```c
#define NO_JTAG_DISABLE
```
## Adding LED Indicators of Lock Keys
Si vous souhaitez votre propre indicateur LED pour CapsLock, ScrollLock et NumLock alors lisez ce post.
http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p191560
## Programmer Arduino Micro/Leonardo
Appuyez sur le bouton reset puis lancez la commande suivante dans les 8 secondes.
```
avrdude -patmega32u4 -cavr109 -b57600 -Uflash:w:adb_usb.hex -P/dev/ttyACM0
```
Le nom du pรฉriphรฉrique peut varier en fonction de votre systรจme.
http://arduino.cc/en/Main/ArduinoBoardMicro
https://geekhack.org/index.php?topic=14290.msg1563867#msg1563867
## Compatibilitรฉ USB 3
Il semble que certaines personnes ont eu des problรจmes avec les ports USB 3, essayez un port USB 2.
## Compatibilitรฉ Mac
### OS X 10.11 et Hub
https://geekhack.org/index.php?topic=14290.msg1884034#msg1884034
## Problรจme sur BIOS (UEFI) / Resume (Mise en veille et rรฉveil) / Redรฉmarrage
Certaines personnes ont eu des problรจmes de fonctionnement de leur clavier dans le BIOS et/ou aprรจs des redรฉmarrages.
Pour le moment, l'origine du problรจme n'est pas comprise, mais certaines options de compilation semble liรฉes. Dans le Makefile, essayez de dรฉsactiver les options comme `CONSOLE_ENABLE`, `NKRO_ENABLE`, `SLEEP_LED_ENABLE` et/ou d'autres.
https://github.com/tmk/tmk_keyboard/issues/266
https://geekhack.org/index.php?topic=41989.msg1967778#msg1967778
## FLIP ne marche pas
### `AtLibUsbDfu.dll` Not Found
Supprimez le pilote actuel et rรฉinstallez celui donnรฉ par FLIP dans le gestionnaire de pรฉriphรฉriques.
http://imgur.com/a/bnwzy
-16
View File
@@ -1,16 +0,0 @@
# Questions frรฉquemment posรฉes
## Qu'est-ce que QMK ?
[QMK](https://github.com/qmk), acronyme pour Quantum Mechanical Keyboard, est un groupe de personnes qui construisent des outils pour des claviers personnalisรฉs. Nous avons commencรฉ par le [firmware QMK](https://github.com/qmk/qmk_firmware), un fork trรจs modifiรฉ du firmware [TMK](https://github.com/tmk/tmk_keyboard).
## Quelles sont les diffรฉrences entre QMK et TMK ?
TMK a รฉtรฉ conรงu et dรฉveloppรฉ ร  l'origine par [Jun Wako](https://github.com/tmk). QMK a dรฉmarrรฉ comme รฉtant le fork de [Jack Humbert](https://github.com/jackhumbert) pour le Planck. Au bout d'un moment, le fork de Jack a divergรฉ de maniรจre significative de TMK et, en 2015, Jack a dรฉcidรฉ de le renommer QMK.
D'un point de vue technique, QMK se base sur TMK en lui ajoutant plusieurs nouvelles fonctionnalitรฉs.
QMK a notamment augmentรฉ le nombre de keycodes disponibles et les a utilisรฉ pour implรฉmenter des fonctionnalitรฉs avancรฉes telles que `S()`, `LCTL()` et `MO()`. Vous pouvez voir une liste complรจte de ces keycodes dans [Keycodes] (keycodes.md).
D'un point de vue management de projet et communautรฉ, Hasu, sur TMK maintient tous les claviers supportรฉs officiellement par lui-mรชme, avec un peu de support de la communautรฉ. Il existe ou peuvent รชtre crรฉรฉes d'autres communautรฉs maintenant des fork pour d'autres claviers. Peu de keymaps sont dรฉfinies par dรฉfaut, les utilisateurs ne se partagent donc pas leurs keymaps en gรฉnรฉral. QMK encourage le partage des claviers et des keymaps ร  l'aide d'un dรฉpรดt gรฉrรฉ de maniรจre centrale, acceptant les pull requests qui suivent les standards de qualitรฉ. Ceux-ci sont surtout maitenus par la communautรฉ, mais l'รฉquipe de QMK aide aussi lorsque c'est nรฉcessaire.
Les deux approches ont leurs avantages et leurs inconvรฉnients, et le dรฉveloppements de fonctionnalitรฉs intรฉressantes sont partagรฉes entre TMK et QMK lorsque fait sens.
-226
View File
@@ -1,226 +0,0 @@
# FAQ Keymap
Cette page couvre les questions souvent posรฉes ร  propos des keymaps. Si vous ne l'avez pas encore fait, vous devriez commencer par lร  [Aperรงu des Keymap](keymap.md).
## Quels Keycodes puis-je utiliser ?
Regardez [Keycodes](keycodes.md) pour une liste des keycodes disponibles. Certains keycodes spรฉcifiques ont des documentations plus complรจtes de disponible.
Les keycodes sont dรฉfinies dans [common/keycode.h](https://github.com/qmk/qmk_firmware/blob/master/tmk_core/common/keycode.h).
## Quels sont les keycodes par dรฉfaut ?
Il existe 3 configurations de clavier standard utilisรฉes dans le monde: ANSI, ISO et JIS. L'Amรฉrique du Nord utilise principalement l'ANSI, l'Europe et l'Afrique l'ISO et le Japon utilise JIS. Les autres rรฉgions utilisent gรฉnรฉralement ANSI ou ISO. Les keycodes correspondant ร  ces dispositions spรฉcifiques sont affichรฉs ici :
<!-- Source for this image: http://www.keyboard-layout-editor.com/#/gists/bf431647d1001cff5eff20ae55621e9a -->
![Keyboard Layout Image](https://i.imgur.com/5wsh5wM.png)
## Certaines de mes touches sont permutรฉes ou ne fonctionnent pas
QMK possรจde deux fonctionnalitรฉs, Bootmagic et Command, qui vous permettent de modifier le comportement de votre clavier ร  la volรฉe. Cela inclut, sans toutefois s'y limiter, l'รฉchange de Ctrl / Majuscules, la dรฉsactivation de l'interface graphique, le basculement de Alt/Gui, le basculement de barre d'espacement arriรจre/barre oblique inversรฉe, la dรฉsactivation de toutes les touches et d'autres modifications comportementales.
Pour rรฉsoudre rapidement le problรจme, essayez de maintenir les touches Espace + Retour arriรจre enfoncรฉes pendant que vous branchez votre clavier. Cela rรฉinitialisera les paramรจtres stockรฉs sur votre clavier, ramenant ces touches ร  un fonctionnement normal. Si cela ne fonctionne pas, regardez ici:
* [Bootmagic](feature_bootmagic.md)
* [Command](feature_command.md)
## La touche de menu ne fonctionne pas
La touche trouvรฉe sur la plupart des claviers modernes situรฉe entre `KC_RGUI` et` KC_RCTL` est en rรฉalitรฉ appelรฉe `KC_APP`. En effet, lorsque cette touche a รฉtรฉ inventรฉe, il existait dรฉjร  une clรฉ nommรฉe `MENU` dans les normes correspondantes. MS a donc choisi de l'appeler la touche` APP`.
## `KC_SYSREQ` ne fonctionne pas
Utilisez le keycode pour Print Screen (`KC_PSCREEN` or `KC_PSCR`) ร  la place de `KC_SYSREQ`. La combinaison de touche 'Alt + Print Screen' est reconnue comme 'System request'.
Voir [issue #168](https://github.com/tmk/tmk_keyboard/issues/168) et
* http://en.wikipedia.org/wiki/Magic_SysRq_key
* http://en.wikipedia.org/wiki/System_request
## Les touches alimentation ne fonctionnent pas
Un peu dรฉroutant, il y a deux codes de touche "Alimentation" dans QMK: `KC_POWER` dans la page d'utilisation du clavier / keypad, et `KC_SYSTEM_POWER` (ou `KC_PWR`) dans la page Consumer.
Le premier n'est reconnu que sur macOS, alors que le dernier, `KC_SLEP` et `KC_WAKE` sont supportรฉs par les trois principaux systรจmes d'exploitation. Il est donc recommandรฉ de les utiliser ร  la place. Sous Windows, ces touches prennent effet immรฉdiatement, mais sur macOS, elles doivent รชtre maintenues enfoncรฉes jusqu'ร  ce qu'une boรฎte de dialogue apparaisse.
## Modificateur "One Shot"
Cette fonctionnalitรฉ permet de corriger un problรจme avec la touche Shift. En effet, il arrive de saisir plusieurs majuscules en ne voulant en saisir qu'une sur un mot. Exโ€ฏ:โ€ฏ`CEtte` ร  la place de `Cette`. La fonctionnalitรฉ ยซโ€ฏOne shotโ€ฏยป shift permet de corriger รงa.
https://github.com/tmk/tmk_keyboard/issues/67
## Le modificateur d'un calque reste bloquรฉ
Les touches de modification ou les calques peuvent รชtre bloquรฉes si la commutation de calque n'est pas configurรฉe correctement.
Pour les touches de modification et les actions de calque, vous devez placer `KC_TRANS` sur la mรชme position du calque de destination afin de dรฉsenregistrer la clรฉ de modificateur ou de revenir au calque prรฉcรฉdent lors de la libรฉration.
* https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#31-momentary-switching
* http://geekhack.org/index.php?topic=57008.msg1492604#msg1492604
* https://github.com/tmk/tmk_keyboard/issues/248
## Support de touche ร  verrouillage mรฉcanique
Cette fonctionnalitรฉ permet l'usage de *touches ร  verrouillage mรฉcanique* comme [ces interrupteurs Alps](http://deskthority.net/wiki/Alps_SKCL_Lock). Vous pouvez l'activer en ajoutant ceci ร  votre `config.h`โ€ฏ:
```
#define LOCKING_SUPPORT_ENABLE
#define LOCKING_RESYNC_ENABLE
```
Une fois la fonction activรฉe, utilisez les keycodes `KC_LCAP`, `KC_LNUM` et `KC_LSCR` dans votre keymap.
Des vieux claviers mรฉcaniques ont parfois des touches ร  verrouillage, mais les claviers modernes n'en sont pas รฉquipรฉs. ***Vous n'avez pas besoin de cette fonction dans la majoritรฉ des cas et devez utiliser les keycodes `KC_CAPS`, `KC_NLCK` et `KC_SLCK`.***
## Ajouter des caractรจres spรฉciaux autres que ASCII comme la cรฉdille 'ร‡'
IL 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.
Voir ce post pour un exemple de code **MACRO**.
http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p195620
Sous **Windows** vous pouvez utiliser la touche `AltGr` ou **Alt code**.
* http://en.wikipedia.org/wiki/AltGr_key
* http://en.wikipedia.org/wiki/Alt_code
Sous **Mac OS** dรฉfinissez une combinaison de touche `Option`.
* http://en.wikipedia.org/wiki/Option_key#Alternative_keyboard_input
Sous **Xorg** vous pouvez utiliser une touche `compose` ร  la place.
* http://en.wikipedia.org/wiki/Compose_key
Et voir ceci pour une entrรฉe **Unicode**.
* http://en.wikipedia.org/wiki/Unicode_input
## Touche `Fn` sur macOS
Contrairement ร  la plupart des touches Fn, celle des claviers Apple a son propre code d'activation... en quelque sorte. Il remplace le sixiรจme code d'activation dans un rapport de base 6KRO HID - de sorte qu'un clavier Apple ne contient en rรฉalitรฉ que 5KRO.
Il est techniquement possible de demander ร  QMK dโ€™envoyer ce keycode. Cependant, cela nรฉcessite une modification du format du rapport pour ajouter l'รฉtat de la touche Fn.
Pire encore, ce keycode n'est reconnu que si les identifiants du clavier VID et PID correspondent ร  ceux d'un vrai clavier Apple. Malheureusement QMK ne peut juridiquement prendre en charge cette fonctionnalitรฉ et il y a peu de chance que la situation s'amรฉliore.
Voir [cette issue](https://github.com/qmk/qmk_firmware/issues/2179) pour des informations dรฉtaillรฉes.
## Touches Media sous Mac OSX
#### KC_MNXT et KC_MPRV ne fonctionnent pas sous Mac
Utilisez `KC_MFFD`(`KC_MEDIA_FAST_FORWARD`) et `KC_MRWD`(`KC_MEDIA_REWIND`) ร  la place de `KC_MNXT` et `KC_MPRV`.
Voir https://github.com/tmk/tmk_keyboard/issues/195
## Touches supportรฉes sous Mac OSX?
Vous pouvez connaรฎtre les keycodes supportรฉs par OSX en lisant ce code source.
`usb_2_adb_keymap` contient les tableaux des pages Keyboard/Keypad vers les scancodes ADB (keycodes interne ร  OSX).
https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-606.1.7/IOHIDFamily/Cosmo_USB2ADB.c
Et `IOHIDConsumer::dispatchConsumerEvent` s'occupe des utilisations Consumer page.
https://opensource.apple.com/source/IOHIDFamily/IOHIDFamily-606.1.7/IOHIDFamily/IOHIDConsumer.cpp
## Touches JIS dans Mac OSX
Les touches de clavier spรฉcifiques JIS comme `็„กๅค‰ๆ›(Muhenkan)`, `ๅค‰ๆ›(Henkan)`, `ใฒใ‚‰ใŒใช(hiragana)` ne sont pas reconnues par OSX. Vous pouvez utiliser **Seil** pour les activer, esssayez les options suivantes.
* Activer la touche NFER sur clavier PC
* Activer la touche XFER sur clavier PC
* Activer la touche KATAKANA sur clavier PC
https://pqrs.org/osx/karabiner/seil.html
## RN-42 Bluetooth ne fonctionne pas avec Karabiner
Karabiner - Outil de Keymapping sous Mac OSX - Ignore les entrรฉes du module RN-42. Vous devez activer cette option pour rendre Karabiner compatible avec votre clavier.
https://github.com/tekezo/Karabiner/issues/403#issuecomment-102559237
Plus de dรฉtails sur ce problรจme sur les liens suivants.
https://github.com/tmk/tmk_keyboard/issues/213
https://github.com/tekezo/Karabiner/issues/403
## Esc et <code>&#96;</code> sur une touche simple.
Cette fonctionnalitรฉ permet d'utiliser une touche ร  la fois comme touche ร‰chap ou une touche `ยง` (En Azerty) selon le cas dโ€™utilisation. Cela est trรจs utile sur un clavier de petite taille.
Voir la fonctionnalitรฉ [Grave Escape](feature_grave_esc.md).
## Avoir les touches modificatrices qui ont double usage en flรจches directionnelles.
Ceci 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.
Dans TMK la fonction double rรดle s'appelle **TAP**.
```C
#include "keymap_common.h"
/* Arrow keys on right modifier keys with TMK dual role feature
*
* https://github.com/tmk/tmk_core/blob/master/doc/keymap.md#213-modifier-with-tap-keydual-role
* https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
*/
const uint8_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* 0: qwerty */
[0] = LAYOUT( \
ESC, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, MINS,EQL, NUHS,BSPC, \
TAB, Q, W, E, R, T, Y, U, I, O, P, LBRC,RBRC,BSLS, \
LCTL,A, S, D, F, G, H, J, K, L, SCLN,QUOT,ENT, \
LSFT,NUBS,Z, X, C, V, B, N, M, COMM,DOT, SLSH,FN0, ESC, \
FN4, LGUI,LALT, SPC, APP, FN2, FN1, FN3),
[1] = LAYOUT( \
GRV, F1, F2, F3, F4, F5, F6, F7, F8, F9, F10, F11, F12, TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,\
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS, \
TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,TRNS,FN5, TRNS, \
TRNS,TRNS,TRNS, TRNS, TRNS,FN7, FN6, FN8),
};
const uint16_t PROGMEM fn_actions[] = {
[0] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_UP),
[1] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_DOWN),
[2] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_LEFT),
[3] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_RIGHT),
[4] = ACTION_LAYER_MOMENTARY(1),
[5] = ACTION_MODS_TAP_KEY(MOD_RSFT, KC_PGUP),
[6] = ACTION_MODS_TAP_KEY(MOD_RGUI, KC_PGDN),
[7] = ACTION_MODS_TAP_KEY(MOD_RALT, KC_HOME),
[8] = ACTION_MODS_TAP_KEY(MOD_RCTL, KC_END),
};
```
Touches double rรดle : https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
## Eject sur Mac OSX
Le keycode`KC_EJCT` fonctionne sous OSX. https://github.com/tmk/tmk_keyboard/issues/250
Il semble que Windows 10 ignore le code et Linux/Xorg le reconnaรฎt mais n'a pas de mapping par dรฉfaut.
Nous ne sommes pas sรปr quel keycode est utilisรฉ pour la touche Eject sur les claviers Apple officiels. HHKB utilise `F20` pour la touche Eject (`Fn+f`) lorsqu'il est en mode Mac, mais ce n'est probablement pas la mรชme chose que le keycode Eject d'Apple.
## Qu'est-ce que `weak_mods` et `real_mods` dans `action_util.c`
___TO BE IMPROVED___
real_mods est prรฉvu pour retenir l'รฉtat des touches modificateur rรฉelles/physiques, alors que weak_mods ne retient l'รฉtat que des modificateurs temporaires ou virtuels qui ne devraient pas affecter l'รฉtat des touches modificaterus rรฉelles.
Par exemple, disons que vous maintenez la touche physique "shift gauche" et tapez ACTION_MODS_KEY(LSHIFT, KC_A),
en weak_mods,
* (1) maintenir shift gauche : real_mods |= MOD_BIT(LSHIFT)
* (2) appuyer ACTION_MODS_KEY(LSHIFT, KC_A): weak_mods |= MOD_BIT(LSHIFT)
* (3) lรขcher ACTION_MODS_KEY(LSHIFT, KC_A): weak_mods &= ~MOD_BIT(LSHIFT)
real_mods garde sur รฉtat modificateur.
sans weak_mods,
* (1) maintenir shift gauche : real_mods |= MOD_BIT(LSHIFT)
* (2) appuyer ACTION_MODS_KEY(LSHIFT, KC_A): real_mods |= MOD_BIT(LSHIFT)
* (3) lรขcher ACTION_MODS_KEY(LSHIFT, KC_A): real_mods &= ~MOD_BIT(LSHIFT)
ici real_mods a perdu son รฉtat pour 'shift gauche physique'.
weak_mods est ORed avec real_mods lorsque le rapport du clavier est envoyรฉ.
https://github.com/tmk/tmk_core/blob/master/common/action_util.c#L57
+15
View File
@@ -112,6 +112,21 @@ The Toolchain setup is done through the Windows Subsystem for Linux, and the pro
* 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
* 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.
## Windows (Vista and Later) (Deprecated)
These are the old instructions for Windows Vista and later. We recommend you use [MSYS2 as outlined above](#windows-with-msys2-recommended).
1. If you have ever installed WinAVR, uninstall it.
2. 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**.
3. 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).
4. 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.
5. 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.
6. Open the `\util` folder.
7. 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.
8. 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!
If 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.
## Docker
If 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:
+2 -2
View File
@@ -40,7 +40,7 @@ vagrant plugin install vagrant-vbguest
Finished with your environment? From anywhere inside the folder where you checked out this project, Execute:
```console
vagrant destroy
vagrant destory
```
### What if I want to use Docker directly?
@@ -54,4 +54,4 @@ Execute the following to bypass the `vagrant` user booting directly to the offic
```console
vagrant ssh -c 'sudo -i'
```
```
+1 -1
View File
@@ -22,7 +22,7 @@ Support for SSD1306 based OLED displays. For more information see the [OLED Driv
You 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.
## WS2812
## WS2812 (AVR Only)
Support for WS2811/WS2812{a,b,c} LED's. For more information see the [RGB Light](feature_rgblight.md) page.
-34
View File
@@ -1,34 +0,0 @@
<div dir="rtl" markdown="1">
# ืงื•ืฉื—ื” ืขื‘ื•ืจ Quantum Mechanical Keyboard
[![ื’ื™ืจืกื” ื ื•ื›ื—ื™ืช](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)
[![ืžืฆื‘ ื”ื‘ื ื™ื”](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware)
[![ืขืจื•ืฅ ื“ื™ืกืงื•ืจื“](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh)
[![ืžืฆื‘ ืžืกืžื›ื™ื](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
[![ืชื•ืžื›ื™ GitHub](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly)
[![ืžื–ืœื’ื•ืช GitHub](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/)
## ืžื” ื”ื™ื ืงื•ืฉื—ืช QMK?
QMK (*Quantum Mechanical Keyboard*) ื”ื™ื ืงื”ื™ืœืช ืงื•ื“ ืคืชื•ื— (open source) ืฉืžืชื—ื–ืงืช ืืช ืงื•ืฉื—ืช QMK, QMK Toolbox, 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/). ื‘ื ื•ืกืฃ, ื”ืงื•ืฉื—ื” ืขื‘ืจื” ืคื•ืจื˜ ืขื‘ื•ืจ ืฉื‘ื‘ื™ ARM ื‘ืืžืฆืขื•ืช ChibiOS. ื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื” ืขืœ ืžื ืช ืœื”ืคืขื™ืœ ืืช ืžืงืœื“ื•ืช ื” PCB ื”ืžืงื•ืกื˜ืžื•ืช ืฉืœืš.
## ืื™ืš ืœื”ืฉื™ื’ ืื•ืชื”
ืื ืืชื ืžืชื›ื ื ื™ื ืœืชืจื•ื ืžื™ืคื•ื™ ืžืงืฉื™ื, ืžืงืœื“ืช ืื• ื™ื›ื•ืœืช ืœ QMK, ื”ื“ื‘ืจ ื”ืงืœ ื‘ื™ื•ืชืจ ื”ื•ื [ืœืขืฉื•ืช ืคื•ืจืง ืœืจื™ืคื• ื‘Github](https://github.com/qmk/qmk_firmware#fork-destination-box), ื•ืœืขืฉื•ืช ืงืœื•ืŸ ืœืจื™ืคื• ื‘ืกื‘ื™ื‘ื” ื”ืžืงื•ืžื™ืช ื•ืฉื ืœื‘ืฆืข ืืช ื”ืฉื™ื ื•ื™ื™ื ืฉืœื›ื, ืœื“ื—ื•ืฃ ืื•ืชื ื•ืœืคืชื•ื— [Pull Request](https://github.com/qmk/qmk_firmware/pulls) ืžื”ืคื•ืจืง ืฉืœืš.
ืื—ืจืช, ืืคืฉืจ ืœื”ื•ืจื™ื“ ืืช ื”ืงื•ืฉื—ื” ื‘ืื•ืคืŸ ื™ืฉื™ืจ ([zip](https://github.com/qmk/qmk_firmware/zipball/master), [tar](https://github.com/qmk/qmk_firmware/tarball/master)), ืื• ืœืฉื›ืคืœ ืื•ืชื” ื‘ืืžืฆืขื•ืช git (`git@github.com:qmk/qmk_firmware.git`), ืื• https (`https://github.com/qmk/qmk_firmware.git`).
## ืื™ืš ืœืงืžืคืœ
ืœืคื ื™ ืฉืชืฆืœื™ื—ื• ืœืงืžืคืœ, ืชื“ืจืฉื• [ืœื”ืชืงื™ืŸ ืกื‘ื™ื‘ื”](he-il/getting_started_build_tools.md) ืขื‘ื•ืจ ืคื™ืชื•ื— AVR ื•/ืื• ARM. ื‘ืจื’ืข ืฉื”ื“ื‘ืจ ื‘ื•ืฆืข, ืชื•ื›ืœื• ืœื”ืจื™ืฅ ืคืงื•ื“ืช `make` ื›ื“ื™ ืœื‘ื ื•ืช ืžืงืœื“ืช ื•ืžื™ืคื•ื™ ืขื ื”ืชื—ื‘ื™ืจ ื”ื‘ื:
make planck/rev4:default
ื›ืš ืชื•ื›ืœื• ืœื‘ื ื•ืช ืืช ื’ืจืกื `rev4` ืฉืœ ื” `planck` ืขื ืžื™ืคื•ื™ ื‘ืจื™ืจืช ื”ืžื—ื“ืœ (`default`). ืœื ื›ืœ ื”ืžืงืœื“ื•ืช ื‘ืขืœื•ืช ื’ืจืกืื•ืช (ื ืงืจื ื’ื ืชืช-ืคืจื•ื™ื™ืงื˜ ืื• ืชื™ืงื™ื™ื”), ื‘ืžืงืจื” ื›ื–ื”, ืืคืฉืจ ืœื”ืจื™ืฅ ืืช ื”ืคืงื•ื“ื” ื”ื‘ืื”:
make preonic:default
## ืื™ืš ืœื”ืชืื™ื
ืœQMK ื™ืฉ ื”ืžื•ืŸ [ื™ื›ื•ืœื•ืช](he-il/features.md) ืฉืืคืฉืจ ืœื ื•ื•ื˜ ื‘ื”ืŸ, ื•ื›ืžื•ืช ื ื›ื‘ื“ืช ืฉืœ [ืชื™ืขื•ื“ ื•ื“ื•ืงื•ืžื ื˜ืฆื™ื”](http://docs.qmk.fm) ื‘ื” ืืคืฉืจ ืœื ื‘ื•ืจ. ืจื•ื‘ ื”ืคื™ืฆืณืจื™ื ื‘ืื™ื ืœื™ื“ื™ ื‘ื™ื˜ื•ื™ ืขืœ ื™ื“ื™ ืฉื™ื ื•ื™ [ืžื™ืคื•ื™ ื”ืžืงืœื“ืช](he-il/keymap.md) ื•ืฉื™ื ื•ื™ [ืงื•ื“ื™ ื”ืžืงืฉื™ื](he-il/keycodes.md).
</div>
-139
View File
@@ -1,139 +0,0 @@
<div dir="rtl" markdown="1">
**ื‘ืฉืคื” ื”ืขื‘ืจื™ืช**
* [ื”ืžื“ืจื™ืš ื”ืžืœื ืœืžืชื—ื™ืœื™ื](he-il/newbs.md)
* [ืžืงื•ืจื•ืช ืœืœืžื™ื“ื”](he-il/newbs_learn_more_resources.md)
* [ื‘ืกื™ืก QMK](he-il/README.md)
* [ืžื‘ื•ื ืœQMK](he-il/getting_started_introduction.md)
* [ืื™ืš ืœื”ืฉืชืžืฉ ื‘Github](he-il/getting_started_github.md)
* [ืงื‘ืœืช ืขื–ืจื”](he-il/getting_started_getting_help.md)
* [ืฉืืœื•ืช ื ืคื•ืฆื•ืช](he-il/faq.md)
* [ืฉืืœื•ืช ื ืคื•ืฆื•ืช ื›ืœืœื™ื•ืช](he-il/faq_general.md)
* [ื—ื•ืžืจื”](he-il/hardware.md)
* ื”ืชื™ื™ื—ืกื•ื™ื•ืช
* [ืื™ืš ืœืชืขื“ ื ื›ื•ืŸ](he-il/documentation_best_practices.md)
**ื‘ืฉืคื” ื”ืื ื’ืœื™ืช**
* [ื”ืžื“ืจื™ืš ื”ืžืœื ืœืžืชื—ื™ืœื™ื](he-il/newbs.md)
* [ื”ืชื—ืœื”](he-il/newbs_getting_started.md)
* [ื‘ื ื™ื™ื” ืฉืœ ื”ืงื•ืฉื—ื” ื”ืจืืฉื•ื ื” ืฉืœืš](he-il/newbs_building_firmware.md)
* [ืฆืจื™ื‘ื” ืฉืœ ื”ืงื•ืฉื—ื”](he-il/newbs_flashing.md)
* [ื‘ื“ื™ืงื•ืช ื•ื“ื™ื‘ืื’ื™ื ื’](he-il/newbs_testing_debugging.md)
* [ืขื‘ื•ื“ื” ื ื›ื•ื ื” ื‘ GIT](he-il/newbs_best_practices.md)
* [ืžืงื•ืจื•ืช ืœืœืžื™ื“ื”](he-il/newbs_learn_more_resources.md)
* [ื‘ืกื™ืก QMK](he-il/README.md)
* [ืžื‘ื•ื ืœQMK](he-il/getting_started_introduction.md)
* [QMK CLI](he-il/cli.md)
* [QMK CLI Config](he-il/cli_configuration.md)
* [ืชืจื•ืžื” ืœ QMK](he-il/contributing.md)
* [ืื™ืš ืœื”ืฉืชืžืฉ ื‘Github](he-il/getting_started_github.md)
* [ืงื‘ืœืช ืขื–ืจื”](he-il/getting_started_getting_help.md)
* [ืฉื™ื ื•ื™ื™ื ืžืฉืžืขื•ืชื™ื™ื](he-il/breaking_changes.md)
* [2019 Aug 30](he-il/ChangeLog/20190830.md)
* [ืฉืืœื•ืช ื ืคื•ืฆื•ืช](he-il/faq.md)
* [ืฉืืœื•ืช ื ืคื•ืฆื•ืช ื›ืœืœื™ื•ืช](he-il/faq_general.md)
* [ื‘ื ื™ื™ื”/ืงื•ืžืคื™ืœืฆื™ื” ืฉืœ QMK](he-il/faq_build.md)
* [ื“ื™ื‘ืื’ื™ื ื’ ื•ืคืชืจื•ืŸ ืชืงืœื•ืช ืฉืœ QMK](he-il/faq_debug.md)
* [ืžื™ืคื•ื™ ืžืงืฉื™ื](he-il/faq_keymap.md)
* [ื”ืชืงื ืช ื“ืจื™ื™ื‘ืจื™ื ืขื Zadig](he-il/driver_installation_zadig.md)
* ืžื“ืจื™ื›ื™ื ืžืคื•ืจื˜ื™ื
* [ื”ืชืงื ืช ื›ืœื™ Build](he-il/getting_started_build_tools.md)
* [ืžื“ืจื™ืš Vagrant](he-il/getting_started_vagrant.md)
* [ื”ื•ืจืื•ืช ื‘ื ื™ื™ื”/ืงื•ืžืคื™ืœืฆื™ื”](he-il/getting_started_make_guide.md)
* [ืฆืจื™ื‘ืช ืงื•ืฉื—ื”](he-il/flashing.md)
* [ื”ืชืืžื” ืื™ืฉื™ืช ืฉืœ ื”ืคื•ื ืงืฆื™ื•ื ืืœื™ื•ืช](he-il/custom_quantum_functions.md)
* [ืžื™ืคื•ื™ ืžืงืฉื™ื](he-il/keymap.md)
* [ื—ื•ืžืจื”](he-il/hardware.md)
* [ืžืขื‘ื“ื™ AVR](he-il/hardware_avr.md)
* [ื“ืจื™ื™ื‘ืจื™ื](he-il/hardware_drivers.md)
* ื”ืชื™ื™ื—ืกื•ื™ื•ืช
* [ืžื“ืจื™ืš ืœืžืงืœื“ื•ืช](he-il/hardware_keyboard_guidelines.md)
* [ืืคืฉืจื•ื™ื•ืช ื”ื’ื“ืจื•ืช](he-il/config_options.md)
* [ืงื•ื“ื™ ืžืงืฉื™ื](he-il/keycodes.md)
* [ืงื•ื ื‘ื ืฆื™ื•ืช ืงื•ื“ - C](he-il/coding_conventions_c.md)
* [ืงื•ื ื‘ื ืฆื™ื•ืช ืงื•ื“ - Python](he-il/coding_conventions_python.md)
* [ืื™ืš ืœืชืขื“ ื ื›ื•ืŸ](he-il/documentation_best_practices.md)
* [ื˜ืžืคืœื˜ื™ื ืœื“ื•ืงื•ืžื ื˜ืฆื™ื”](he-il/documentation_templates.md)
* [ืžื™ืœื•ืŸ](he-il/reference_glossary.md)
* [ื‘ื“ื™ืงื•ืช ื™ื—ื™ื“ื”](he-il/unit_testing.md)
* [ืคื•ื ืงืฆื™ื•ืช ืฉื™ืžื•ืฉื™ื•ืช](he-il/ref_functions.md)
* [ืชืžื™ื›ื” ื‘Configurator](he-il/reference_configurator_support.md)
* [ืคื•ืจืžื˜ info.json](he-il/reference_info_json.md)
* [ืคื™ืชื•ื— ื‘Python CLI](he-il/cli_development.md)
* [ืชื›ื•ื ื•ืช](he-il/features.md)
* [Basic Keycodes](he-il/keycodes_basic.md)
* [US ANSI Shifted Keys](he-il/keycodes_us_ansi_shifted.md)
* [Quantum Keycodes](he-il/quantum_keycodes.md)
* [Advanced Keycodes](he-il/feature_advanced_keycodes.md)
* [Audio](he-il/feature_audio.md)
* [Auto Shift](he-il/feature_auto_shift.md)
* [Backlight](he-il/feature_backlight.md)
* [Bluetooth](he-il/feature_bluetooth.md)
* [Bootmagic](he-il/feature_bootmagic.md)
* [Combos](he-il/feature_combo.md)
* [Command](he-il/feature_command.md)
* [Debounce API](he-il/feature_debounce_type.md)
* [DIP Switch](he-il/feature_dip_switch.md)
* [Dynamic Macros](he-il/feature_dynamic_macros.md)
* [Encoders](he-il/feature_encoders.md)
* [Grave Escape](he-il/feature_grave_esc.md)
* [Haptic Feedback](he-il/feature_haptic_feedback.md)
* [HD44780 LCD Controller](he-il/feature_hd44780.md)
* [Key Lock](he-il/feature_key_lock.md)
* [Layouts](he-il/feature_layouts.md)
* [Leader Key](he-il/feature_leader_key.md)
* [LED Matrix](he-il/feature_led_matrix.md)
* [Macros](he-il/feature_macros.md)
* [Mouse Keys](he-il/feature_mouse_keys.md)
* [OLED Driver](he-il/feature_oled_driver.md)
* [One Shot Keys](he-il/feature_advanced_keycodes.md#one-shot-keys)
* [Pointing Device](he-il/feature_pointing_device.md)
* [PS/2 Mouse](he-il/feature_ps2_mouse.md)
* [RGB Lighting](he-il/feature_rgblight.md)
* [RGB Matrix](he-il/feature_rgb_matrix.md)
* [Space Cadet](he-il/feature_space_cadet.md)
* [Split Keyboard](he-il/feature_split_keyboard.md)
* [Stenography](he-il/feature_stenography.md)
* [Swap Hands](he-il/feature_swap_hands.md)
* [Tap Dance](he-il/feature_tap_dance.md)
* [Terminal](he-il/feature_terminal.md)
* [Thermal Printer](he-il/feature_thermal_printer.md)
* [Unicode](he-il/feature_unicode.md)
* [Userspace](he-il/feature_userspace.md)
* [Velocikey](he-il/feature_velocikey.md)
* ืœืžื™ื™ืงืจื™ื ื•ืžื•ื“ืจื™ื
* [ืžื“ืจื™ืš ืœื›ืชื™ื‘ื” ื™ื“ื ื™ืช](he-il/hand_wire.md)
* [ืžื“ืจื™ืš ืœืฆืจื™ื‘ืช ISP](he-il/isp_flashing_guide.md)
* [ืžื“ืจื™ืš ืœื“ื™ื‘ืื’ื™ื ื’ ARM](he-il/arm_debugging.md)
* [ืžื ื”ืœ ื”ืชืงืŸ I2C](he-il/i2c_driver.md)
* [ื‘ืงืจืช GPIO](he-il/internals_gpio_control.md)
* [ื”ืžืจืช Proton C](he-il/proton_c_conversion.md)
* ืœื”ื‘ื ื” ืขืžื•ืงื” ื™ื•ืชืจ
* [ืื™ืš ืขื•ื‘ื“ื•ืช ืžืงืœื“ื•ืช](he-il/how_keyboards_work.md)
* [ืœื”ื‘ื™ืŸ ืืช QMK](he-il/understanding_qmk.md)
* ื ื•ืฉืื™ื ื ื•ืกืคื™ื
* [ืฉื™ืžื•ืฉ ื‘ - Eclipse ืขื QMK](he-il/other_eclipse.md)
* [ืฉื™ืžื•ืฉ ื‘ - VSCode ืขื QMK](he-il/other_vscode.md)
* [ืชืžื™ื›ื”](he-il/support.md)
* [ื›ื™ืฆื“ ืœื”ื•ืกื™ืฃ ืชืจื’ื•ื](he-il/translating.md)
* QMK ืžื‘ืคื ื™ื (ื‘ืชื”ืœื™ืš)
* [Defines](he-il/internals_defines.md)
* [Input Callback Reg](he-il/internals_input_callback_reg.md)
* [Midi Device](he-il/internals_midi_device.md)
* [Midi Device Setup Process](he-il/internals_midi_device_setup_process.md)
* [Midi Util](he-il/internals_midi_util.md)
* [Send Functions](he-il/internals_send_functions.md)
* [Sysex Tools](he-il/internals_sysex_tools.md)
</div>
-11
View File
@@ -1,11 +0,0 @@
<div dir="rtl" markdown="1">
# ืื™ืš ืœื”ืคื•ืš ืœืฉื•ืชืฃ ืฉืœ QMK
ืฉื•ืชืฃ ืฉืœ QMK ื”ื•ื ื™ืฆืจืŸ ืžืงืœื“ื•ืช ืื• ืžืขืฆื‘ ืฉืžืขื•ื ื™ื™ืŸ ื‘ืœืขื–ื•ืจ ืœ-QMK ืœื’ื“ื•ืœ ื•ืœืชืžื•ืš ื‘ืžืงืœื“(ื•)ืช ืฉืœื”ื, ื•ืœืขื•ื“ื“ ืืช ื”ืžืฉืชืžืฉื™ื ื•ื”ืฆืจื›ื ื™ื ืœื”ื•ืกื™ืฃ ื™ื›ื•ืœื•ืช, ืจืขื™ื•ื ื•ืช ื•ืžื™ืคื•ื™ื™ื. ืื ื—ื ื• ืชืžื™ื“ ืžื—ืคืฉื™ื ืขื•ื“ ืžืงืœื“ื•ืช ื•ืžืฉืชืคื™ ืคืขื•ืœื”, ืื‘ืœ ืื ื—ื ื• ืžื‘ืงืฉื™ื ืฉื™ืขืžื“ื• ื‘ื“ืจื™ืฉื•ืช ื”ื‘ืื•ืช:
* **ืงื™ื•ื ืœื•ื— PCB ืœืžื›ื™ืจื”.** ืœืฆืขืจื™ื ื•, ื™ืฉ ื™ื•ืชืจ ืžื™ื“ื™ ื”ืกืชื‘ื›ื•ื™ื•ืช ื•ื‘ืขื™ื•ืช ืขื ืžืงืœื“ื•ืช ื”ืžื—ื•ื•ื˜ื•ืช ื™ื“ื ื™ืช.
* **ืชื—ื–ื•ืง ื”ืžืงืœื“ืช ื‘-QMK.** ื–ื” ืื•ืœื™ ืจืง ื™ื“ืจื•ืฉ ื”ื’ื“ืจื” ื‘ืกื™ืกื™ืช ื›ื“ื™ ืœื’ืจื•ื ืœืžืงืœื“ืช ืœืขื‘ื•ื“, ืื‘ืœ ื–ื” ื’ื ื™ื›ื•ืœ ืœื›ืœื•ืœ ื”ืชืืžื” ืฉืœ ืฉื™ื ื•ื™ื™ื ื‘ืงื•ื“ ื”ืœื™ื‘ื” ืฉืœ QMK ืฉื™ื›ื•ืœ ืœืฉื‘ื•ืจ ืงื•ื“ ื™ื™ื—ื•ื“ื™ ืฉืœื›ื.
* **ืื™ืฉื•ืจ ื•ืžื™ื–ื•ื’ Pull Requests ืฉืœ ืžื™ืคื•ื™ื™ ืžืงืœื“ืช ืขื‘ื•ืจ ื”ืžืงืœื“ืช** ืื ื—ื ื• ืจื•ืฆื™ื ืœืขื•ื“ื“ ืžืฉืชืžืฉื™ื ืœืชืจื•ื ืืช ืžื™ืคื•ื™ื™ ื”ืžืงืœื“ืช ืฉืœื”ื ืœืื—ืจื™ื ื›ื“ื™ ืœืขื–ื•ืจ ืœืื—ืจื™ื ืœื”ืชื—ื™ืœ ืœื™ืฆื•ืจ ืืช ืฉืœื”ื.
ืื ืืชื ืขื•ืžื“ื™ื ื‘ื“ืจื™ืฉื•ืช ื”ืœืœื•, ืฉืœื—ื• ืœื ื• ืžื™ื™ืœ ืœื›ืชื•ื‘ืช hello@qmk.fm ืขื ืžื‘ื•ื ื•ืงื™ืฉื•ืจื™ื ืขื‘ื•ืจ ื”ืžืงืœื“ืช ืฉืœื›ื.
</div>
@@ -1,67 +0,0 @@
<div dir="rtl" markdown="1">
# ืื™ืš ืœืชืขื“ ื ื›ื•ืŸ
ืขืžื•ื“ ื–ื” ืงื™ื™ื ื›ื“ื™ ืœืชืขื“ ืืช ื”ืฉื™ื˜ื•ืช ื”ื˜ื•ื‘ื•ืช ื‘ื™ื•ืชืจ ื›ืืฉืจ ื›ื•ืชื‘ื™ื ืชื™ืขื•ื“ ืขื‘ื•ืจ QMK. ืžืขืงื‘ ืื—ืจ ื”ื•ืจืื•ืช ืืœื” ื™ืขื–ื•ืจ ืœืฉืžื•ืจ ืขืœ ืกื’ื ื•ืŸ ื•ื˜ื•ืŸ ืขืงื‘ื™ื™ื, ืืฉืจ ื‘ืชื•ืจื ื™ืขื–ืจื• ืœืื ืฉื™ื ืื—ืจื™ื ืœื”ื‘ื™ืŸ ื˜ื•ื‘ ื™ื•ืชืจ ืืช QMK.
# ืคืชื™ื—ืช ืขืžื•ื“
ื”ืชื™ืขื•ื“ ืฉืœืš ืฆืจื™ืš ื‘ื“ืดื› ืœื”ืคืชื— ืขื ื›ื•ืชืจืช ื‘ื’ื•ื“ืœ H1, ืื—ืจื™ื” ืคืกืงื” ืื—ืช ืฉืœ ืชื™ืื•ืจ ืฉืœ ืžื” ื”ืžืฉืชืžืฉ ื™ืžืฆื ื‘ืขืžื•ื“ ื–ื”.
ื–ื›ื•ืจ ื›ื™ ื›ื•ืชืจืช ื–ื• ื•ื”ืคืกืงื” ื™ืžื•ืงืžื• ืœื™ื“ ืชื•ื›ืŸ ื”ืขื ื™ื™ื ื™ื, ืื– ื—ืฉื•ื‘ ืœืฉืžื•ืจ ืขืœ ื›ื•ืชืจืช ืงืฆืจื” ื•ืœื”ืžื ืข ืžืžืฉืคื˜ื™ื ืืจื•ื›ื™ื ืœืœื ืคื™ืกื•ืง.
ืœื“ื•ื’ืžื”:
```
# ื”ื›ื•ืชืจืช ืฉืœื™
ืขืžื•ื“ ื–ื” ืžื“ื‘ืจ ืขืœ ื”ื™ื›ื•ืœืช ื”ืกื•ืคืจ-ืžื’ื ื™ื‘ื” ืฉืœื™. ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื™ื›ื•ืœืช ื–ื• ื›ื“ื™ ืœื”ื›ื™ืŸ ืงืคื”, ืœืกื—ื•ื˜ ืชืคื•ื–ื™ื ื•ืœืงื‘ืœ ืžืฉืœื•ื— ืฉืœ ื‘ื™ืฆื™ื ื•ืขื•ื’ื•ืช ืžื”ืกื•ืคืจ ื”ืงืจื•ื‘ ื‘ืืžืฆืขื•ืช ืจื—ืคืŸ.
```
# ื›ื•ืชืจื•ืช
ืขืžื•ื“ ื”ืชื™ืขื•ื“ ืฆืจื™ืš ืœืื•ืคืŸ ื›ืœืœื™ ืœื›ืœื•ืœ ืžืกืณ ื›ื•ืชืจื•ืช ื‘ื’ื•ื“ืœ "H1". ืจืง ื›ื•ืชืจื•ืช ืžื’ื•ื“ืœ H1 ื•- H2 ื™ื›ืœืœื• ื‘ืชื•ื›ืŸ ื”ืขื ื™ื™ื ื™ื, ืื– ื—ืฉื•ื‘ ืœืชื›ื ืŸ ืื•ืชื ื‘ื”ืชืื. ื”ื›ื•ืชืจื•ืช ืœื ืœื”ื™ื•ืช ืจื—ื‘ื•ืช ืžื™ื“ื™ ื›ื“ื™ ืœืžื ื•ืข ืžืชื•ื›ืŸ ื”ืขื ื™ื™ื ื™ื ืœื”ืคื•ืš ืœื”ื™ื•ืช ืจื—ื‘ ืžื™ื“ื™
# ื‘ืœื•ืงื™ ืจืžื™ื–ื” ืžืขื•ืฆื‘ื™ื
ื ื™ืชืŸ ืœื”ื•ืกื™ืฃ ื‘ืœื•ืงื™ ืจืžื™ื–ื” ืžืขื•ืฆื‘ื™ื ืฉืžืฆื•ื™ื™ืจื™ื ืžืกื‘ื™ื‘ ืœื˜ืงืกื˜ ื›ื“ื™ ืœืžืฉื•ืš ืชืฉื•ืžืช ืœื‘ ืืœื™ื•.
### ื—ืฉื•ื‘
```
!> ื–ื” ื—ืฉื•ื‘
```
ื™ืชืจื ื“ืจ ื›:
!> ื–ื” ื—ืฉื•ื‘
### ื˜ื™ืคื™ื ื›ืœืœื™ื™ื
```
?> ื–ื”ื• ื˜ื™ืค ืฉื™ืžื•ืฉื™.
```
ื™ืชืจื ื“ืจ ื›:
?> ื–ื”ื• ื˜ื™ืค ืฉื™ืžื•ืฉื™.
# ืชื™ืขื•ื“ ื™ื›ื•ืœื•ืช ื•ืคื™ืฆืณืจื™ืDocumenting Features
ืื ื™ื•ืฆืจื™ื ื™ื›ื•ืœืช ื—ื“ืฉื” ื‘ QMK, ืฆืจื• ืขืžื•ื“ ืชื™ืขื•ื“ ืขื‘ื•ืจื”. ื”ืขืžื•ื“ ืœื ืฆืจื™ืš ืœื”ื™ื•ืช ืืจื•ืš ื‘ืžื™ื•ื—ื“, ืžืกืคืจ ืžืฉืคื˜ื™ื ื”ืžืชืืจื™ื ืืช ื”ื™ื›ื•ืœืช (ืคื™ืฆืณืจ) ื•ื˜ื‘ืœื” ื”ืžืชืืจืช ืงื•ื“ื™ ืžืงืฉื™ื ืจืœื•ื•ื ื˜ื™ื™ื ื–ื” ืžืกืคื™ืง. ื”ื ื” ื“ื•ื’ืžื” ื‘ืกื™ืกื™ืช:
```markdown
# ื”ืคื™ืฆืณืจ ื”ืžื’ื ื™ื‘ ืฉืœื™
ืขืžื•ื“ ื–ื” ืžื“ื‘ืจ ืขืœ ื”ื™ื›ื•ืœืช ื”ืกื•ืคืจ-ืžื’ื ื™ื‘ื” ืฉืœื™. ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ื‘ื™ื›ื•ืœืช ื–ื• ื›ื“ื™ ืœื”ื›ื™ืŸ ืงืคื”, ืœืกื—ื•ื˜ ืชืคื•ื–ื™ื ื•ืœืงื‘ืœ ืžืฉืœื•ื— ืฉืœ ื‘ื™ืฆื™ื ื•ืขื•ื’ื•ืช ืžื”ืกื•ืคืจ ื”ืงืจื•ื‘ ื‘ืืžืฆืขื•ืช ืจื—ืคืŸ.
## ืงื•ื“ื™ ื”ืžืงืฉื™ื ื”ืžื’ื ื™ื‘ื™ื ืฉืœ ื”ื™ื›ื•ืœืช ืฉืœื™
|Long Name|Short Name|Description|
|---------|----------|-----------|
|KC_COFFEE||Make Coffee|
|KC_CREAM||Order Cream|
|KC_SUGAR||Order Sugar|
```
ืžืงืžื• ืืช ื”ืชื™ืขื•ื“ ืฉืœื›ื ื‘ืชื•ืš `docs/feature_<my_cool_feature>.md`, ื•ื”ื•ืกื™ืคื• ืงื™ืฉื•ืจ ืœืงื•ื‘ืฅ ื–ื” ื‘ืžืงื•ื ื”ืžืชืื™ื ื‘ `docs/_sidebar.md`. ืื ื”ื•ืกืคืชื ืงื•ื“ื™ ืžืงืฉื™ื ื ื•ืกืคื™ื, ืชืงืคื™ื“ื• ืœื”ื•ืกื™ืฃ ืื•ืชื ืœ- `docs/keycodes.md` ืขื ืœื™ื ืง ืœืขืžื•ื“ ื”ื™ื›ื•ืœืช ืฉืœื›ื.
</div>
-8
View File
@@ -1,8 +0,0 @@
<div dir="rtl" markdown="1">
# ืฉืืœื•ืช ื ืคื•ืฆื•ืช
* [ื›ืœืœื™](faq_general.md)
* [ื‘ื ื™ื™ื” ืื• ืงื•ืžืคื™ืœืฆื™ื” ืฉืœ QMK](faq_build.md)
* [ื“ื™ื‘ืื’ื™ื ื’ ื•ืคืชืจื•ืŸ ื‘ืขื™ื•ืช ืฉืœ QMK](faq_debug.md)
* [ืžื™ืคื•ื™ ืžืงืฉื™ื](faq_keymap.md)
</div>
-17
View File
@@ -1,17 +0,0 @@
<div dir="rtl" markdown="1">
# ืฉืืœื•ืช ื ืคื•ืฆื•ืช
## ืžื” ื–ื” QMK?
[QMK](https://github.com/qmk), ืงื™ืฆื•ืจ ืขื‘ื•ืจ Quantum Mechanical Keyboard, ื”ื•ื ืงื‘ื•ืฆื” ืฉืœ ืื ืฉื™ื ื”ื‘ื•ื ื™ื ื›ืœื™ื ืขื‘ื•ืจ ืžืงืœื“ื•ืช ืžื•ืชืืžื•ืช ืื™ืฉื™ืช. ื”ืชื—ืœื ื• ืขื [ืงื•ืฉื—ืช QMK](https://github.com/qmk/qmk_firmware), ืคื•ืจืง ืฉืœ [TMK](https://github.com/tmk/tmk_keyboard) ืืฉืจ ืฉื•ื ื” ื‘ืื•ืคืŸ ื ื™ื›ืจ.
## ืžื” ื”ื”ื‘ื“ืœื™ื ื”ืขื™ืงืจื™ื™ื ื‘ื™ืŸ QMK ื•-Keymap TMK?
TMK ืขื•ืฆื‘ ื•ืžื•ืžืฉ ื‘ืžืงื•ืจ ืขืดื™ [Jun Wako](https://github.com/tmk). QMK ื”ืชื—ื™ืœ ื›ืคื•ืจืง ืฉืœ [Jack Humbert](https://github.com/jackhumbert) ืฉืœ ื”ืคืจื•ื™ื™ืงื˜ ืฉืœ TMK ืขื‘ื•ืจ Planck. ืื—ืจื™ ื›ืžื” ื–ืžืŸ ื”ืคื•ืจืง ืฉืœ ื’ืณืง ื”ืฉืชื ื” ืžื–ื” ืฉืœ TMK ื•ื‘- 2015 ื’ืณืง ื”ื—ืœื™ื˜ ืœืฉื ื•ืช ืืช ืฉืžื• ืฉืœ ื”ืคื•ืจืง ืœ- QMK.
ืžื ืงืณ ืžื‘ื˜ ื˜ื›ื ื™ืช, QMK ื ื‘ื ื” ืขืœ ื’ื‘ื™ TMK ืขืดื™ ื”ื•ืกืคืช ื™ื›ื•ืœื•ืช ื•ืคื™ืฆืณืจื™ื ื—ื“ืฉื™ื. ืจืื•ื™ ืœืฆื™ื•ืŸ ืฉ- QMK ื”ืจื—ื™ื‘ ืืช ืžืกืณ ืงื•ื“ื™ ื”ืžืงืœื“ืช ื”ืืคืฉืจื™ื™ื ื•ืžืฉืชืžืฉ ื‘ื”ื ืœืžื™ืžื•ืฉ ื™ื›ื•ืœื•ืช ืžืชืงื“ืžื•ืช ื›ืžื• `S()`, `LCTL()`, ื•- `MO()`. ื ื™ืชืŸ ืœืจืื•ืช ืจืฉื™ืžื” ืžืœืื” ืฉืœ ืงื•ื“ื™ ื”ืžืงืœื“ืช ื”ืืœื” ื‘ - [ืงื•ื“ื™ ืžืงืœื“ืช](keycodes.md).
ืžื ืงืณ ืžื‘ื˜ ืฉืœ ื”ืคืจื•ื™ื™ืงื˜ ื•ื ื™ื”ื•ืœ ื”ืงื”ื™ืœื”, TMK ืžื ื”ืœ ืืช ื›ืœ ื”ืžืงืœื“ื•ืช ื”ื ืชืžื›ื•ืช ื‘ืขืฆืžื•, ืขื ืžืขื˜ ืชืžื™ื›ื” ืžื”ืงื”ื™ืœื”. ื›ืœ ืื—ื“ ื™ื›ื•ืœ ืœืขืฉื•ืช ืคื•ืจืง ืžื”ืคืจื•ื™ื™ืงื˜ ืขื‘ื•ืจ ืžืงืœื“ื•ืช ืื—ืจื•ืช. ืจืง ืžืกืณ ืžื™ืคื•ื™ื™ ืžืงืฉื™ื ื ืžืฆืื™ื ื‘ื‘ืจื™ืจืช ื”ืžื—ื“ืœ ื›ืš ืฉืื ืฉื™ื ื‘ื“ืดื› ืœื ืžืฉืชืคื™ื ืžื™ืคื•ื™ื™ ืžืงืฉื™ื ื–ื” ืขื ื–ื”. QMK ืžืขื•ื“ื“ ืืช ื”ืฉื™ืชื•ืฃ ืฉืœ ื”ืžืงืœื“ื•ืช ื•ืงื•ื“ื™ ื”ืžืงืฉื™ื ื“ืจืš ืจืคื•ื–ื™ื˜ื•ืจื™ ื‘ื ื™ื”ื•ืœ ืžืจื›ื–ื™, ืืฉืจ ืžืงื‘ืœ ืืช ื›ืœ ื‘ืงืฉื•ืช ื”- Pull Requests ืฉืขื•ืžื“ื•ืช ื‘ืกื˜ื ื“ืจื˜ ื”ืื™ื›ื•ืช. ืจื•ื‘ื ืžื ื•ื”ืœื•ืช ืขืดื™ ื”ืงื”ื™ืœื”, ืื‘ืœ ื”ืฆื•ื•ืช ืฉืœ QMK ืขื•ื–ืจ ื›ืฉื ื“ืจืฉ.
ืœืฉืชื™ ื”ื’ื™ืฉื•ืช ื™ืฉ ื™ืชืจื•ื ื•ืช ื•ื—ืกืจื•ื ื•ืช ื•ืงื•ื“ ืขื•ื‘ืจ ื‘ื—ื•ืคืฉื™ื•ืช ื‘ื™ืŸ TMK ืœ- QMK ื›ืฉืฆืจื™ืš.
</div>
@@ -1,17 +0,0 @@
<div dir="rtl" markdown="1">
# ืงื‘ืœืช ืขื–ืจื”
ื™ืฉื ื ืžืฉืื‘ื™ื ืจื‘ื™ื ืœืฆื•ืจืš ืงื‘ืœืช ืขื–ืจื” ืขื QMK.
## ืฆืณืื˜ ื‘ื–ืžืŸ ืืžืช
ืืคืฉืจ ืœืžืฆื•ื ืžืคืชื—ื™ QMK ื•ืžืฉืชืžืฉื™ื [ื‘ืฉืจืช ื”-Discord ื”ืจืืฉื™ ืฉืœื ื•](https://discord.gg/Uq7gcHh). ื™ืฉื ื ืขืจื•ืฆื™ื ืกืคืฆื™ืคื™ื™ื ื‘ืฉืจืช ืœืฆื•ืจืš ืฉื™ื—ื•ืช ืขืœ ื”ืงื•ืฉื—ื”, ืืจื’ื– ื”ื›ืœื™ื, ื—ื•ืžืจื” ื•ื”ืžื’ื“ื™ืจ.
## ืกืื‘-ืจื“ื™ื˜ OLKB
ื”ืคื•ืจื•ื ื”ืจืฉืžื™ ืฉืœ QMK ื ืžืฆื ื‘ - [/r/olkb](https://reddit.com/r/olkb) ื‘ืืชืจ [reddit.com](https://reddit.com).
## ืกื•ื’ื™ื•ืช Github
ื ื™ืชืŸ ืœืคืชื•ื— [ืกื•ื’ื™ื™ื” ื‘-GitHub](https://github.com/qmk/qmk_firmware/issues). ื”ื“ื‘ืจ ืฉื™ืžื•ืฉื™ ื‘ืžื™ื•ื—ื“ ื›ืืฉืจ ื”ืกื•ื’ื™ื” ื“ื•ืจืฉืช ื“ื™ื•ืŸ ืขืžื•ืง ื•ืืจื•ืš ืื• ื“ื™ื‘ืื’ื™ื ื’.
</div>
-69
View File
@@ -1,69 +0,0 @@
<div dir="rtl" markdown="1">
# ืื™ืš ืœื”ืฉืชืžืฉ ื‘-Github ืขื QMK
Github ืขืœื•ืœ ืœื”ื™ื•ืช ืงืฆืช ื˜ืจื™ืงื™ ืœืžื™ ืฉืœื ืžื›ื™ืจ ืืช ื”ืขื‘ื•ื“ื” ืื™ืชื• - ืžื“ืจื™ืš ื–ื” ื™ืœื•ื•ื” ืืชื›ื ืฉืœื‘ ืื—ืจ ืฉืœื‘ ื“ืจืš ื‘ื™ืฆื•ืข ืคืขื•ืœื•ืช fork, clone ื•-pull request ืขื QMK.
?> ืžื“ืจื™ืš ื–ื” ืžื ื™ื— ืฉืืชื ืžืจื’ื™ืฉื™ื ื‘ื ื•ื— ืขื ื”ืจืฆื” ืฉืœ ืคืงื•ื“ื•ืช ื‘ืกื‘ื™ื‘ืช command line (ืฉื•ืจืช ื”ืคืงื•ื“ื”) ื•-git ืžื•ืชืงืŸ ื‘ืžืขืจื›ืช ืฉืœื›ื.
ื”ืชื—ื™ืœื• ื‘- [ืขืžื•ื“ ืฉืœ QMK ื‘-Github](https://github.com/qmk/qmk_firmware), ื•ืชืฆืžืื• ื›ืคืชื•ืจ ื‘ื—ืœืง ื”ืขืœื™ื•ืŸ ืžื™ืžื™ืŸ ืขื ื”ืชื™ื›ื•ื‘ "Fork":
![Fork ื‘-Github](http://i.imgur.com/8Toomz4.jpg)
ืื ืืชื ื—ืœืง ืžืืจื’ื•ืŸ, ืชืฆื˜ืจื›ื• ืœื‘ื—ื•ืจ ืœืื™ื–ื” ื—ืฉื‘ื•ืŸ ืœื‘ืฆืข ืคืขื•ืœืช fork. ื‘ืจื•ื‘ ื”ืžื‘ืงืจื™ื, ืชืจืฆื• ืœื‘ืฆืข fork ืœืชื•ืš ื”ื—ืฉื‘ื•ืŸ ื”ืคืจื˜ื™ ืฉืœื›ื. ื‘ืจื’ืข ืฉื”-fork ื”ืกืชื™ื™ื (ืœืคืขืžื™ื ื–ื” ื™ื›ื•ืœ ืœืงื—ืช ืงืฆืช ื–ืžืŸ) ื”ืงืœื™ืงื• ืขืœ ื›ืคืชื•ืจ ื”-"Clone or Download":
![ื”ื•ืจื“ื” ืž-Github](http://i.imgur.com/N1NYcSz.jpg)
ืชื•ื•ื“ืื• ืฉืืชื ื‘ื•ื—ืจื™ื ื‘ืื•ืคืฆื™ื™ื” ืฉืœ "HTTPS", ื‘ื—ืจื• ืืช ื”ืงื™ืฉื•ืจ ื•ื”ืขืชื™ืงื• ืื•ืชื•:
![ืงื™ืฉื•ืจ HTTPS](http://i.imgur.com/eGO0ohO.jpg)
ืžื›ืืŸ ื•ื”ืœืื”, ื”ืงื™ืฉ `git clone ` ื‘ืฉื•ืจืช ื”ืคืงื•ื“ื” ื•ื”ื“ื‘ื™ืงื• ืืช ื”ืœื™ื ืง ืฉืœื›ื:
<div dir="ltr" markdown="1">
```
user@computer:~$ git clone https://github.com/whoeveryouare/qmk_firmware.git
Cloning into 'qmk_firmware'...
remote: Counting objects: 46625, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 46625 (delta 0), reused 0 (delta 0), pack-reused 46623
Receiving objects: 100% (46625/46625), 84.47 MiB | 3.14 MiB/s, done.
Resolving deltas: 100% (29362/29362), done.
Checking out files: 100% (2799/2799), done.
```
</div>
ื›ืขืช, ื™ืฉ ืœื›ื ืืช ื”-fork ืฉืœ QMK ืขืœ ื”ืžื›ื•ื ื” ื”ืžืงื•ืžื™ืช ืฉืœื›ื ื•ืืชื ื™ื›ื•ืœื™ื ืœื”ื•ืกื™ืฃ ืืช ืžื™ืคื•ื™ื™ ื”ืžืงืฉื™ื ืฉืœื›ื, ืœืงืžืคืœ ืืช ื”ืคืจื•ื™ื™ืงื˜ ื•ืœืฆืจื•ื‘ ืื•ืชื• ืขืœ ื”ืœื•ื— ืฉืœื›ื. ื›ืฉืืชื ืฉืœืžื™ื ืขื ื”ืฉื™ื ื•ื™ ืฉืขืฉื™ืชื, ืชื•ื›ืœื• ืœื”ื•ืกื™ืฃ, ืœื‘ืฆืข ืคืขื•ืœืช commit ื•ืœื“ื—ื•ืฃ ืืช ื”ืฉื™ื ื•ื™ื™ื ืœ-fork ืฉืœื›ื ื‘ืื•ืคืŸ ื”ื‘ื:
<div dir="ltr" markdown="1">
```
user@computer:~$ git add .
user@computer:~$ git commit -m "adding my keymap"
[master cccb1608] adding my keymap
1 file changed, 1 insertion(+)
create mode 100644 keyboards/planck/keymaps/mine/keymap.c
user@computer:~$ git push
Counting objects: 1, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (1/1), done.
Writing objects: 100% (1/1), 1.64 KiB | 0 bytes/s, done.
Total 1 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local objects.
To https://github.com/whoeveryouare/qmk_firmware.git
+ 20043e64...7da94ac5 master -> master
```
</div>
ื”ืฉื™ื ื•ื™ื™ื ืฉืœื›ื ื™ื•ืคื™ืขื• ื‘-fork ืฉืœื›ื ื‘-GitHub - ืื ืชื—ื–ืจื• ืœืฉื (`https://github.com/<whoeveryouare>/qmk_firmware`), ืชื•ื›ืœื• ืœื™ืฆื•ืจ "Pull Request ื—ื“ืฉ" ืขืดื™ ื”ืงืฉื” ืขืœ ื”ื›ืคืชื•ืจ ื”ื‘ื:
![Pull Request ื—ื“ืฉ](http://i.imgur.com/DxMHpJ8.jpg)
ื›ืืŸ ืชื•ื›ืœื• ืœืจืื•ืช ื‘ื“ื™ื•ืง ืœืžื” ืขืฉื™ืชื commit - ืื ื”ื›ืœ ื ืจืื” ืชืงื™ืŸ, ืชื•ื›ืœื• ืœื”ืฉืœื™ื ืืช ื”ืคืขื•ืœื” ืขืดื™ ื”ืงืฉื” ืขืœ "Create Pull Request":
![ืฆืจื• Pull Request](http://i.imgur.com/Ojydlaj.jpg)
ืื—ืจื™ ืฉื”ื’ืฉืชื, ืื ื• ืขืœื•ืœื™ื ืœืคื ื•ืช ืืœื™ื›ื ืœื’ื‘ื™ ื”ืฉื™ื ื•ื™ื™ื ืฉื”ืฆืขืชื, ื ื‘ืงืฉ ืฉืชื‘ืฆืขื• ืฉื™ื ื•ื™ื™ื ื•ื‘ืกื•ืคื• ืฉืœ ื“ื‘ืจ ื ืงื‘ืœ ืืช ื”ืฉื™ื ื•ื™ื™ื! ืชื•ื“ื” ืฉืชืจืžืชื ืœืคืจื•ื™ื™ืงื˜ QMK :)
</div>
Loaded 100 of 1441 files, more files were not shown because too many files have changed in this diff. Show more