mirror of
https://github.com/mfulz/qmk_firmware.git
synced 2025-11-04 15:22:41 +01:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9e64d5f6c2 |
No files matched your search
@@ -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,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. -->
|
||||
|
||||
@@ -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,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,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. -->
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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 \
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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`
|
||||
|
||||
@@ -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.
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -1,33 +0,0 @@
|
||||
# Quantum Mechanical Keyboard Firmware
|
||||
|
||||
[](https://github.com/qmk/qmk_firmware/tags)
|
||||
[](https://travis-ci.org/qmk/qmk_firmware)
|
||||
[](https://discord.gg/Uq7gcHh)
|
||||
[](https://docs.qmk.fm)
|
||||
[](https://github.com/qmk/qmk_firmware/pulse/monthly)
|
||||
[](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.
|
||||
@@ -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)
|
||||
@@ -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.
|
||||
|
||||

|
||||
|
||||
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 .
|
||||
|
||||

|
||||
|
||||
รffne den Gerรคte-Manager und suche nach einem Gerรคt das wie deine Tastatur aussieht.
|
||||
|
||||

|
||||
|
||||
Rechtsklick und **Gerรคt deinstallieren** anklicken. Bitte gehe sicher dass in diesem Schritt auch **Treibersoftware fรผr dieses Gerรคt lรถschen** markiert ist.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
@@ -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).
|
||||
@@ -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.
|
||||
@@ -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.
|
||||
@@ -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).
|
||||
@@ -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)
|
||||
@@ -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
|
||||
```
|
||||
@@ -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.
|
||||
@@ -1,32 +0,0 @@
|
||||
# Firmware Quantum Mechanical Keyboard
|
||||
|
||||
[](https://github.com/qmk/qmk_firmware/tags)
|
||||
[](https://travis-ci.org/qmk/qmk_firmware)
|
||||
[](https://discord.gg/Uq7gcHh)
|
||||
[](https://docs.qmk.fm)
|
||||
[](https://github.com/qmk/qmk_firmware/pulse/monthly)
|
||||
[](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).
|
||||
@@ -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)
|
||||
@@ -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!
|
||||
@@ -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)
|
||||
@@ -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.
|
||||
@@ -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).
|
||||
|
||||
@@ -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) ← This is the organization folder, there's no `rules.mk` file
|
||||
* [`60`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/60) ← This is a compilable keyboard, it has a `rules.mk` file
|
||||
* [`66`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66) ← 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) ← compilable: `make clueboard/66/rev1`
|
||||
* [`rev2`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66/rev2) ← compilable: `make clueboard/66/rev2`
|
||||
* [`rev3`](https://github.com/qmk/qmk_firmware/tree/master/keyboards/clueboard/66/rev3) ← 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)!
|
||||
@@ -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.
|
||||
@@ -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 — cuando dos o mรกs usuarios han editado la misma parte de un archivo al mismo tiempo — 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 — juntos conocidos como "refs" — 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` — `-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.
|
||||
@@ -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)
|
||||
@@ -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.
|
||||
@@ -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).
|
||||
@@ -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)
|
||||
@@ -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
@@ -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
@@ -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).
|
||||
|
||||
|
||||
@@ -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
@@ -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
@@ -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 |
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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.
|
||||
@@ -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 }
|
||||
```
|
||||
@@ -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.
|
||||
@@ -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
@@ -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
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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`:
|
||||
|
||||
|
||||
@@ -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%"/>
|
||||
|
||||
|
||||
@@ -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`.
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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).
|
||||
@@ -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.
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.
@@ -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)
|
||||
@@ -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.
|
||||
|
||||

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

|
||||
|
||||
Ouvrez le Gestionnaire de pรฉriphรฉriques et cherchez un pรฉriphรฉrique qui ressemble ร votre clavier.
|
||||
|
||||

|
||||
|
||||
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.
|
||||
|
||||

|
||||
|
||||
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โฏ!
|
||||
@@ -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)
|
||||
@@ -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).
|
||||
@@ -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
|
||||
@@ -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.
|
||||
@@ -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 -->
|
||||

|
||||
|
||||
## 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>`</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
|
||||
@@ -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:
|
||||
|
||||
@@ -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'
|
||||
```
|
||||
```
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
<div dir="rtl" markdown="1">
|
||||
# ืงืืฉืื ืขืืืจ Quantum Mechanical Keyboard
|
||||
|
||||
[](https://github.com/qmk/qmk_firmware/tags)
|
||||
[](https://travis-ci.org/qmk/qmk_firmware)
|
||||
[](https://discord.gg/Uq7gcHh)
|
||||
[](https://docs.qmk.fm)
|
||||
[](https://github.com/qmk/qmk_firmware/pulse/monthly)
|
||||
[](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>
|
||||
@@ -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>
|
||||
@@ -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>
|
||||
@@ -1,8 +0,0 @@
|
||||
<div dir="rtl" markdown="1">
|
||||
# ืฉืืืืช ื ืคืืฆืืช
|
||||
|
||||
* [ืืืื](faq_general.md)
|
||||
* [ืื ืืื ืื ืงืืืคืืืฆืื ืฉื QMK](faq_build.md)
|
||||
* [ืืืืืืื ื ืืคืชืจืื ืืขืืืช ืฉื QMK](faq_debug.md)
|
||||
* [ืืืคืื ืืงืฉืื](faq_keymap.md)
|
||||
</div>
|
||||
@@ -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>
|
||||
@@ -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. ืืจืื ืืืืงืจืื, ืชืจืฆื ืืืฆืข fork ืืชืื ืืืฉืืื ืืคืจืื ืฉืืื. ืืจืืข ืฉื-fork ืืกืชืืื (ืืคืขืืื ืื ืืืื ืืงืืช ืงืฆืช ืืื) ืืงืืืงื ืขื ืืคืชืืจ ื-"Clone or Download":
|
||||
|
||||

|
||||
|
||||
ืชืืืืื ืฉืืชื ืืืืจืื ืืืืคืฆืืื ืฉื "HTTPS", ืืืจื ืืช ืืงืืฉืืจ ืืืขืชืืงื ืืืชื:
|
||||
|
||||

|
||||
|
||||
ืืืื ืืืืื, ืืงืืฉ `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 ืืืฉ" ืขืดื ืืงืฉื ืขื ืืืคืชืืจ ืืื:
|
||||
|
||||

|
||||
|
||||
ืืื ืชืืืื ืืจืืืช ืืืืืง ืืื ืขืฉืืชื commit - ืื ืืื ื ืจืื ืชืงืื, ืชืืืื ืืืฉืืื ืืช ืืคืขืืื ืขืดื ืืงืฉื ืขื "Create Pull Request":
|
||||
|
||||

|
||||
|
||||
ืืืจื ืฉืืืฉืชื, ืื ื ืขืืืืื ืืคื ืืช ืืืืื ืืืื ืืฉืื ืืืื ืฉืืฆืขืชื, ื ืืงืฉ ืฉืชืืฆืขื ืฉืื ืืืื ืืืกืืคื ืฉื ืืืจ ื ืงืื ืืช ืืฉืื ืืืื! ืชืืื ืฉืชืจืืชื ืืคืจืืืืงื QMK :)
|
||||
</div>
|
||||
Loaded 100 of 1441 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user