Merge remote-tracking branch 'origin/master' into develop
commit
8401b0a6e5
|
@ -1,26 +1,20 @@
|
||||||
# Quantum Mechanical Keyboard Firmware
|
# Quantum Mechanical Keyboard Firmware
|
||||||
|
|
||||||
[![Current Version](https://img.shields.io/github/tag/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/tags)
|
|
||||||
[![Build Status](https://travis-ci.org/qmk/qmk_firmware.svg?branch=master)](https://travis-ci.org/qmk/qmk_firmware)
|
|
||||||
[![Discord](https://img.shields.io/discord/440868230475677696.svg)](https://discord.gg/Uq7gcHh)
|
|
||||||
[![Docs Status](https://img.shields.io/badge/docs-ready-orange.svg)](https://docs.qmk.fm)
|
|
||||||
[![GitHub contributors](https://img.shields.io/github/contributors/qmk/qmk_firmware.svg)](https://github.com/qmk/qmk_firmware/pulse/monthly)
|
|
||||||
[![GitHub forks](https://img.shields.io/github/forks/qmk/qmk_firmware.svg?style=social&label=Fork)](https://github.com/qmk/qmk_firmware/)
|
|
||||||
|
|
||||||
## What is QMK Firmware?
|
## What is QMK Firmware?
|
||||||
|
|
||||||
QMK (*Quantum Mechanical Keyboard*) is an open source community centered around developing computer input devices. The community encompasses all sorts of input devices, such as keyboards, mice, and MIDI devices. A core group of collaborators maintains [QMK Firmware](https://github.com/qmk/qmk_firmware), [QMK Configurator](https://config.qmk.fm), [QMK Toolbox](https://github.com/qmk/qmk_toolbox), [qmk.fm](https://qmk.fm), and this documentation with the help of community members like you.
|
QMK (*Quantum Mechanical Keyboard*) is an open source community centered around developing computer input devices. The community encompasses all sorts of input devices, such as keyboards, mice, and MIDI devices. A core group of collaborators maintains [QMK Firmware](https://github.com/qmk/qmk_firmware), [QMK Configurator](https://config.qmk.fm), [QMK Toolbox](https://github.com/qmk/qmk_toolbox), [qmk.fm](https://qmk.fm), and this documentation with the help of community members like you.
|
||||||
|
|
||||||
## Get Started
|
## Get Started
|
||||||
|
|
||||||
Totally new to QMK? There are two ways to get started:
|
<div class="flex-container">
|
||||||
|
|
||||||
* Basic: [QMK Configurator](https://config.qmk.fm)
|
?> **Basic** [QMK Configurator](newbs_building_firmware_configurator.md) <br>
|
||||||
* Just select your keyboard from the dropdown and program your keyboard.
|
User friendly graphical interfaces, no programming knowledge required.
|
||||||
* We have an [introductory video](https://www.youtube.com/watch?v=-imgglzDMdY) you can watch.
|
|
||||||
* There is also an overview [document you can read](newbs_building_firmware_configurator.md).
|
?> **Advanced** [Use The Source](newbs.md) <br>
|
||||||
* Advanced: [Use The Source](newbs.md)
|
More powerful, but harder to use.
|
||||||
* More powerful, but harder to use
|
|
||||||
|
</div>
|
||||||
|
|
||||||
## Make It Yours
|
## Make It Yours
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,6 @@
|
||||||
* [Setup](newbs_getting_started.md)
|
* [Setup](newbs_getting_started.md)
|
||||||
* [Building Your First Firmware](newbs_building_firmware.md)
|
* [Building Your First Firmware](newbs_building_firmware.md)
|
||||||
* [Flashing Firmware](newbs_flashing.md)
|
* [Flashing Firmware](newbs_flashing.md)
|
||||||
* [Testing and Debugging](newbs_testing_debugging.md)
|
|
||||||
* [Getting Help/Support](support.md)
|
* [Getting Help/Support](support.md)
|
||||||
* [Other Resources](newbs_learn_more_resources.md)
|
* [Other Resources](newbs_learn_more_resources.md)
|
||||||
* [Syllabus](syllabus.md)
|
* [Syllabus](syllabus.md)
|
||||||
|
@ -11,7 +10,8 @@
|
||||||
* FAQs
|
* FAQs
|
||||||
* [General FAQ](faq_general.md)
|
* [General FAQ](faq_general.md)
|
||||||
* [Build/Compile QMK](faq_build.md)
|
* [Build/Compile QMK](faq_build.md)
|
||||||
* [Debugging/Troubleshooting QMK](faq_debug.md)
|
* [Troubleshooting QMK](faq_misc.md)
|
||||||
|
* [Debugging QMK](faq_debug.md)
|
||||||
* [Keymap FAQ](faq_keymap.md)
|
* [Keymap FAQ](faq_keymap.md)
|
||||||
* [Glossary](reference_glossary.md)
|
* [Glossary](reference_glossary.md)
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,94 @@
|
||||||
|
|
||||||
This page details various common questions people have about troubleshooting their keyboards.
|
This page details various common questions people have about troubleshooting their keyboards.
|
||||||
|
|
||||||
# Debug Console
|
## Debugging :id=debugging
|
||||||
|
|
||||||
|
Your keyboard will output debug information if you have `CONSOLE_ENABLE = yes` in your `rules.mk`. By default the output is very limited, but you can turn on debug mode to increase the amount of debug output. Use the `DEBUG` keycode in your keymap, use the [Command](feature_command.md) feature to enable debug mode, or add the following code to your 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;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Debugging Tools
|
||||||
|
|
||||||
|
There are two different tools you can use to debug your keyboard.
|
||||||
|
|
||||||
|
### Debugging With QMK Toolbox
|
||||||
|
|
||||||
|
For compatible platforms, [QMK Toolbox](https://github.com/qmk/qmk_toolbox) can be used to display debug messages from your keyboard.
|
||||||
|
|
||||||
|
### Debugging With hid_listen
|
||||||
|
|
||||||
|
Prefer a terminal based solution? [hid_listen](https://www.pjrc.com/teensy/hid_listen.html), provided by PJRC, can also be used to display debug messages. Prebuilt binaries for Windows,Linux,and MacOS are available.
|
||||||
|
|
||||||
|
## Sending Your Own Debug Messages
|
||||||
|
|
||||||
|
Sometimes it's useful to print debug messages from within your [custom code](custom_quantum_functions.md). Doing so is pretty simple. Start by including `print.h` at the top of your file:
|
||||||
|
|
||||||
|
```c
|
||||||
|
#include "print.h"
|
||||||
|
```
|
||||||
|
|
||||||
|
After that you can use a few different print functions:
|
||||||
|
|
||||||
|
* `print("string")`: Print a simple string.
|
||||||
|
* `uprintf("%s string", var)`: Print a formatted string
|
||||||
|
* `dprint("string")` Print a simple string, but only when debug mode is enabled
|
||||||
|
* `dprintf("%s string", var)`: Print a formatted string, but only when debug mode is enabled
|
||||||
|
|
||||||
|
## Debug Examples
|
||||||
|
|
||||||
|
Below is a collection of real world debugging examples. For additional information, refer to [Debugging/Troubleshooting QMK](faq_debug.md).
|
||||||
|
|
||||||
|
### Which matrix position is this keypress?
|
||||||
|
|
||||||
|
When porting, or when attempting to diagnose pcb issues, it can be useful to know if a keypress is scanned correctly. To enable logging for this scenario, add the following code to your keymaps `keymap.c`
|
||||||
|
|
||||||
|
```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: 0x%04X, col: %u, row: %u, pressed: %b, time: %u, interrupt: %b, count: %u\n", keycode, record->event.key.col, record->event.key.row, record->event.pressed, record->event.time, record->tap.interrupted, record->tap.count);
|
||||||
|
#endif
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Example output
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
|
### How long did it take to scan for a keypress?
|
||||||
|
|
||||||
|
When testing performance issues, it can be useful to know the frequency at which the switch matrix is being scanned. To enable logging for this scenario, add the following code to your keymaps `config.h`
|
||||||
|
|
||||||
|
```c
|
||||||
|
#define DEBUG_MATRIX_SCAN_RATE
|
||||||
|
```
|
||||||
|
|
||||||
|
Example output
|
||||||
|
```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
|
||||||
|
```
|
||||||
|
|
||||||
## `hid_listen` Can't Recognize Device
|
## `hid_listen` Can't Recognize Device
|
||||||
When debug console of your device is not ready you will see like this:
|
When debug console of your device is not ready you will see like this:
|
||||||
|
@ -27,122 +114,6 @@ You may need privilege to access the device on OS like Linux.
|
||||||
Check:
|
Check:
|
||||||
- *hid_listen* finds your device. See above.
|
- *hid_listen* finds your device. See above.
|
||||||
- Enable debug with pressing **Magic**+d. See [Magic Commands](https://github.com/tmk/tmk_keyboard#magic-commands).
|
- 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`. See [Debugging](#debugging)
|
||||||
- try using 'print' function instead of debug print. See **common/print.h**.
|
- 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).
|
- disconnect other devices with console function. See [Issue #97](https://github.com/tmk/tmk_keyboard/issues/97).
|
||||||
|
|
||||||
***
|
|
||||||
|
|
||||||
# Miscellaneous
|
|
||||||
## Safety Considerations
|
|
||||||
|
|
||||||
You probably don't want to "brick" your keyboard, making it impossible
|
|
||||||
to rewrite firmware onto it. Here are some of the parameters to show
|
|
||||||
what things are (and likely aren't) too risky.
|
|
||||||
|
|
||||||
- If your keyboard map does not include RESET, then, to get into DFU
|
|
||||||
mode, you will need to press the reset button on the PCB, which
|
|
||||||
requires unscrewing the bottom.
|
|
||||||
- Messing with tmk_core / common files might make the keyboard
|
|
||||||
inoperable
|
|
||||||
- Too large a .hex file is trouble; `make dfu` will erase the block,
|
|
||||||
test the size (oops, wrong order!), which errors out, failing to
|
|
||||||
flash the keyboard, leaving it in DFU mode.
|
|
||||||
- To this end, note that the maximum .hex file size on Planck is
|
|
||||||
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
|
|
||||||
```
|
|
||||||
|
|
||||||
- The above file is of size 22396/577ch, which is less than
|
|
||||||
28672/7000h
|
|
||||||
- As long as you have a suitable alternative .hex file around, you
|
|
||||||
can retry, loading that one
|
|
||||||
- Some of the options you might specify in your keyboard's Makefile
|
|
||||||
consume extra memory; watch out for BOOTMAGIC_ENABLE,
|
|
||||||
MOUSEKEY_ENABLE, EXTRAKEY_ENABLE, CONSOLE_ENABLE, API_SYSEX_ENABLE
|
|
||||||
- DFU tools do /not/ allow you to write into the bootloader (unless
|
|
||||||
you throw in extra fruit salad of options), so there is little risk
|
|
||||||
there.
|
|
||||||
- EEPROM has around a 100000 write cycle. You shouldn't rewrite the
|
|
||||||
firmware repeatedly and continually; that'll burn the EEPROM
|
|
||||||
eventually.
|
|
||||||
|
|
||||||
## NKRO Doesn't work
|
|
||||||
First you have to compile firmware with this build option `NKRO_ENABLE` in **Makefile**.
|
|
||||||
|
|
||||||
Try `Magic` **N** command(`LShift+RShift+N` by default) when **NKRO** still doesn't work. You can use this command to toggle between **NKRO** and **6KRO** mode temporarily. In some situations **NKRO** doesn't work you need to switch to **6KRO** mode, in particular when you are in BIOS.
|
|
||||||
|
|
||||||
If your firmware built with `BOOTMAGIC_ENABLE` you need to turn its switch on by `BootMagic` **N** command(`Space+N` by default). This setting is stored in EEPROM and kept over power cycles.
|
|
||||||
|
|
||||||
https://github.com/tmk/tmk_keyboard#boot-magic-configuration---virtual-dip-switch
|
|
||||||
|
|
||||||
|
|
||||||
## TrackPoint Needs Reset Circuit (PS/2 Mouse Support)
|
|
||||||
Without reset circuit you will have inconsistent result due to improper initialize of the hardware. See circuit schematic of TPM754.
|
|
||||||
|
|
||||||
- http://geekhack.org/index.php?topic=50176.msg1127447#msg1127447
|
|
||||||
- http://www.mikrocontroller.net/attachment/52583/tpm754.pdf
|
|
||||||
|
|
||||||
|
|
||||||
## Can't Read Column of Matrix Beyond 16
|
|
||||||
Use `1UL<<16` instead of `1<<16` in `read_cols()` in [matrix.h] when your columns goes beyond 16.
|
|
||||||
|
|
||||||
In C `1` means one of [int] type which is [16 bit] in case of AVR so you can't shift left more than 15. You will get unexpected zero when you say `1<<16`. You have to use [unsigned long] type with `1UL`.
|
|
||||||
|
|
||||||
http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
|
|
||||||
|
|
||||||
## Special Extra Key Doesn't Work (System, Audio Control Keys)
|
|
||||||
You need to define `EXTRAKEY_ENABLE` in `rules.mk` to use them in QMK.
|
|
||||||
|
|
||||||
```
|
|
||||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
|
||||||
```
|
|
||||||
|
|
||||||
## Wakeup from Sleep Doesn't Work
|
|
||||||
|
|
||||||
In Windows check `Allow this device to wake the computer` setting in Power **Management property** tab of **Device Manager**. Also check BIOS setting.
|
|
||||||
|
|
||||||
Pressing any key during sleep should wake host.
|
|
||||||
|
|
||||||
## Using Arduino?
|
|
||||||
|
|
||||||
**Note that Arduino pin naming is different from actual chip.** For example, Arduino pin `D0` is not `PD0`. Check circuit with its schematics yourself.
|
|
||||||
|
|
||||||
- http://arduino.cc/en/uploads/Main/arduino-leonardo-schematic_3b.pdf
|
|
||||||
- http://arduino.cc/en/uploads/Main/arduino-micro-schematic.pdf
|
|
||||||
|
|
||||||
Arduino Leonardo and micro have **ATMega32U4** and can be used for TMK, though Arduino bootloader may be a problem.
|
|
||||||
|
|
||||||
## Enabling JTAG
|
|
||||||
|
|
||||||
By default, the JTAG debugging interface is disabled as soon as the keyboard starts up. JTAG-capable MCUs come from the factory with the `JTAGEN` fuse set, and it takes over certain pins of the MCU that the board may be using for the switch matrix, LEDs, etc.
|
|
||||||
|
|
||||||
If you would like to keep JTAG enabled, just add the following to your `config.h`:
|
|
||||||
|
|
||||||
```c
|
|
||||||
#define NO_JTAG_DISABLE
|
|
||||||
```
|
|
||||||
|
|
||||||
## USB 3 Compatibility
|
|
||||||
I heard some people have a problem with USB 3 port, try USB 2 port.
|
|
||||||
|
|
||||||
|
|
||||||
## Mac Compatibility
|
|
||||||
### OS X 10.11 and Hub
|
|
||||||
https://geekhack.org/index.php?topic=14290.msg1884034#msg1884034
|
|
||||||
|
|
||||||
|
|
||||||
## Problem on BIOS (UEFI)/Resume (Sleep & Wake)/Power Cycles
|
|
||||||
Some people reported their keyboard stops working on BIOS and/or after resume(power cycles).
|
|
||||||
|
|
||||||
As of now root of its cause is not clear but some build options seem to be related. In Makefile try to disable those options like `CONSOLE_ENABLE`, `NKRO_ENABLE`, `SLEEP_LED_ENABLE` and/or others.
|
|
||||||
|
|
||||||
https://github.com/tmk/tmk_keyboard/issues/266
|
|
||||||
https://geekhack.org/index.php?topic=41989.msg1967778#msg1967778
|
|
||||||
|
|
|
@ -0,0 +1,118 @@
|
||||||
|
# Miscellaneous FAQ
|
||||||
|
|
||||||
|
## How do I test my keyboard? :id=testing
|
||||||
|
|
||||||
|
Testing your keyboard is usually pretty straightforward. Press every single key and make sure it sends the keys you expect. You can use [QMK Configurator](https://config.qmk.fm/#/test/)'s test mode to check your keyboard, even if it doesn't run QMK.
|
||||||
|
|
||||||
|
## Safety Considerations
|
||||||
|
|
||||||
|
You probably don't want to "brick" your keyboard, making it impossible
|
||||||
|
to rewrite firmware onto it. Here are some of the parameters to show
|
||||||
|
what things are (and likely aren't) too risky.
|
||||||
|
|
||||||
|
- If your keyboard map does not include RESET, then, to get into DFU
|
||||||
|
mode, you will need to press the reset button on the PCB, which
|
||||||
|
requires unscrewing the bottom.
|
||||||
|
- Messing with tmk_core / common files might make the keyboard
|
||||||
|
inoperable
|
||||||
|
- Too large a .hex file is trouble; `make dfu` will erase the block,
|
||||||
|
test the size (oops, wrong order!), which errors out, failing to
|
||||||
|
flash the keyboard, leaving it in DFU mode.
|
||||||
|
- To this end, note that the maximum .hex file size on Planck is
|
||||||
|
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
|
||||||
|
```
|
||||||
|
|
||||||
|
- The above file is of size 22396/577ch, which is less than
|
||||||
|
28672/7000h
|
||||||
|
- As long as you have a suitable alternative .hex file around, you
|
||||||
|
can retry, loading that one
|
||||||
|
- Some of the options you might specify in your keyboard's Makefile
|
||||||
|
consume extra memory; watch out for BOOTMAGIC_ENABLE,
|
||||||
|
MOUSEKEY_ENABLE, EXTRAKEY_ENABLE, CONSOLE_ENABLE, API_SYSEX_ENABLE
|
||||||
|
- DFU tools do /not/ allow you to write into the bootloader (unless
|
||||||
|
you throw in extra fruit salad of options), so there is little risk
|
||||||
|
there.
|
||||||
|
- EEPROM has around a 100000 write cycle. You shouldn't rewrite the
|
||||||
|
firmware repeatedly and continually; that'll burn the EEPROM
|
||||||
|
eventually.
|
||||||
|
|
||||||
|
## NKRO Doesn't work
|
||||||
|
First you have to compile firmware with this build option `NKRO_ENABLE` in **Makefile**.
|
||||||
|
|
||||||
|
Try `Magic` **N** command(`LShift+RShift+N` by default) when **NKRO** still doesn't work. You can use this command to toggle between **NKRO** and **6KRO** mode temporarily. In some situations **NKRO** doesn't work you need to switch to **6KRO** mode, in particular when you are in BIOS.
|
||||||
|
|
||||||
|
If your firmware built with `BOOTMAGIC_ENABLE` you need to turn its switch on by `BootMagic` **N** command(`Space+N` by default). This setting is stored in EEPROM and kept over power cycles.
|
||||||
|
|
||||||
|
https://github.com/tmk/tmk_keyboard#boot-magic-configuration---virtual-dip-switch
|
||||||
|
|
||||||
|
|
||||||
|
## TrackPoint Needs Reset Circuit (PS/2 Mouse Support)
|
||||||
|
Without reset circuit you will have inconsistent result due to improper initialize of the hardware. See circuit schematic of TPM754.
|
||||||
|
|
||||||
|
- http://geekhack.org/index.php?topic=50176.msg1127447#msg1127447
|
||||||
|
- http://www.mikrocontroller.net/attachment/52583/tpm754.pdf
|
||||||
|
|
||||||
|
|
||||||
|
## Can't Read Column of Matrix Beyond 16
|
||||||
|
Use `1UL<<16` instead of `1<<16` in `read_cols()` in [matrix.h] when your columns goes beyond 16.
|
||||||
|
|
||||||
|
In C `1` means one of [int] type which is [16 bit] in case of AVR so you can't shift left more than 15. You will get unexpected zero when you say `1<<16`. You have to use [unsigned long] type with `1UL`.
|
||||||
|
|
||||||
|
http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
|
||||||
|
|
||||||
|
## Special Extra Key Doesn't Work (System, Audio Control Keys)
|
||||||
|
You need to define `EXTRAKEY_ENABLE` in `rules.mk` to use them in QMK.
|
||||||
|
|
||||||
|
```
|
||||||
|
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||||
|
```
|
||||||
|
|
||||||
|
## Wakeup from Sleep Doesn't Work
|
||||||
|
|
||||||
|
In Windows check `Allow this device to wake the computer` setting in Power **Management property** tab of **Device Manager**. Also check BIOS setting.
|
||||||
|
|
||||||
|
Pressing any key during sleep should wake host.
|
||||||
|
|
||||||
|
## Using Arduino?
|
||||||
|
|
||||||
|
**Note that Arduino pin naming is different from actual chip.** For example, Arduino pin `D0` is not `PD0`. Check circuit with its schematics yourself.
|
||||||
|
|
||||||
|
- http://arduino.cc/en/uploads/Main/arduino-leonardo-schematic_3b.pdf
|
||||||
|
- http://arduino.cc/en/uploads/Main/arduino-micro-schematic.pdf
|
||||||
|
|
||||||
|
Arduino Leonardo and micro have **ATMega32U4** and can be used for TMK, though Arduino bootloader may be a problem.
|
||||||
|
|
||||||
|
## Enabling JTAG
|
||||||
|
|
||||||
|
By default, the JTAG debugging interface is disabled as soon as the keyboard starts up. JTAG-capable MCUs come from the factory with the `JTAGEN` fuse set, and it takes over certain pins of the MCU that the board may be using for the switch matrix, LEDs, etc.
|
||||||
|
|
||||||
|
If you would like to keep JTAG enabled, just add the following to your `config.h`:
|
||||||
|
|
||||||
|
```c
|
||||||
|
#define NO_JTAG_DISABLE
|
||||||
|
```
|
||||||
|
|
||||||
|
## USB 3 Compatibility
|
||||||
|
I heard some people have a problem with USB 3 port, try USB 2 port.
|
||||||
|
|
||||||
|
|
||||||
|
## Mac Compatibility
|
||||||
|
### OS X 10.11 and Hub
|
||||||
|
https://geekhack.org/index.php?topic=14290.msg1884034#msg1884034
|
||||||
|
|
||||||
|
|
||||||
|
## Problem on BIOS (UEFI)/Resume (Sleep & Wake)/Power Cycles
|
||||||
|
Some people reported their keyboard stops working on BIOS and/or after resume(power cycles).
|
||||||
|
|
||||||
|
As of now root of its cause is not clear but some build options seem to be related. In Makefile try to disable those options like `CONSOLE_ENABLE`, `NKRO_ENABLE`, `SLEEP_LED_ENABLE` and/or others.
|
||||||
|
|
||||||
|
https://github.com/tmk/tmk_keyboard/issues/266
|
||||||
|
https://geekhack.org/index.php?topic=41989.msg1967778#msg1967778
|
|
@ -6,25 +6,19 @@ QMK tries to put a lot of power into your hands by making easy things easy, and
|
||||||
|
|
||||||
Not sure if your keyboard can run QMK? If it's a mechanical keyboard you built yourself chances are good it can. We support a [large number of hobbyist boards](http://qmk.fm/keyboards/). If your current keyboard can't run QMK there are a lot of choices out there for boards that do.
|
Not sure if your keyboard can run QMK? If it's a mechanical keyboard you built yourself chances are good it can. We support a [large number of hobbyist boards](http://qmk.fm/keyboards/). If your current keyboard can't run QMK there are a lot of choices out there for boards that do.
|
||||||
|
|
||||||
## Is This Guide For Me?
|
?> **Is This Guide For Me?**<br>
|
||||||
|
If the thought of programming intimidates you, please [take a look at our online GUI](newbs_building_firmware_configurator.md) instead.</div>
|
||||||
This guide is suitable for everyone who wants to build a keyboard firmware using the source code. If you are already a programmer you will find the process very familiar and easier to follow. If the thought of programming intimidates you please [take a look at our online GUI](newbs_building_firmware_configurator.md) instead.
|
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
||||||
There are 4 main sections to this guide:
|
This guide is suitable for everyone who wants to build a keyboard firmware using the source code. If you are already a programmer you will find the process very familiar and easier to follow. There are 3 main sections to this guide:
|
||||||
|
|
||||||
1. [Setup Your Environment](newbs_getting_started.md)
|
1. [Setup Your Environment](newbs_getting_started.md)
|
||||||
2. [Building Your First Firmware](newbs_building_firmware.md)
|
2. [Building Your First Firmware](newbs_building_firmware.md)
|
||||||
3. [Flashing Firmware](newbs_flashing.md)
|
3. [Flashing Firmware](newbs_flashing.md)
|
||||||
4. [Testing and Debugging](newbs_testing_debugging.md)
|
|
||||||
|
|
||||||
This guide is focused on helping someone who has never compiled software before. It makes choices and recommendations based on that viewpoint. There are alternative methods for many of these procedures, and we support most of those alternatives. If you have any doubt about how to accomplish a task you can [ask us for guidance](getting_started_getting_help.md).
|
This guide is focused on helping someone who has never compiled software before. It makes choices and recommendations based on that viewpoint. There are alternative methods for many of these procedures, and we support most of those alternatives. If you have any doubt about how to accomplish a task you can [ask us for guidance](getting_started_getting_help.md).
|
||||||
|
|
||||||
## Additional Resources
|
## Additional Resources
|
||||||
|
|
||||||
Beyond this guide there are several resources you may find helpful while you learn QMK. We've collected them on the [Learning Resources](newbs_learn_more_resources.md) page.
|
Beyond this guide there are several resources you may find helpful while you learn QMK. We've collected them on the [Syllabus](syllabus.md) and [Learning Resources](newbs_learn_more_resources.md) pages.
|
||||||
|
|
||||||
## Open Source
|
|
||||||
|
|
||||||
QMK is Open Source Software released under the GNU General Public License.
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
[![QMK Configurator Screenshot](https://i.imgur.com/anw9cOL.png)](https://config.qmk.fm/)
|
[![QMK Configurator Screenshot](https://i.imgur.com/anw9cOL.png)](https://config.qmk.fm/)
|
||||||
|
|
||||||
The [QMK Configurator](https://config.qmk.fm) is an online graphical user interface that generates QMK Firmware hex files.
|
The [QMK Configurator](https://config.qmk.fm) is an online graphical user interface that generates QMK Firmware `.hex` or `.bin` files.
|
||||||
|
|
||||||
Watch the [Video Tutorial](https://www.youtube.com/watch?v=-imgglzDMdY). Many people find that is enough information to start programming their own keyboard.
|
Watch the [Video Tutorial](https://www.youtube.com/watch?v=-imgglzDMdY). Many people find that is enough information to start programming their own keyboard.
|
||||||
|
|
||||||
|
|
|
@ -37,18 +37,22 @@ Begin by opening the QMK Toolbox application. You'll want to locate the firmware
|
||||||
|
|
||||||
If you are on Windows or macOS, there are commands you can use to easily open the current folder in Explorer or Finder.
|
If you are on Windows or macOS, there are commands you can use to easily open the current folder in Explorer or Finder.
|
||||||
|
|
||||||
#### Windows
|
<!-- tabs:start -->
|
||||||
|
|
||||||
|
#### ** Windows **
|
||||||
|
|
||||||
```
|
```
|
||||||
start .
|
start .
|
||||||
```
|
```
|
||||||
|
|
||||||
#### macOS
|
#### ** macOS **
|
||||||
|
|
||||||
```
|
```
|
||||||
open .
|
open .
|
||||||
```
|
```
|
||||||
|
|
||||||
|
<!-- tabs:end -->
|
||||||
|
|
||||||
The firmware file always follows this naming format:
|
The firmware file always follows this naming format:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -106,6 +110,9 @@ In this case, you'll have to fall back on specifying the bootloader. See the [Fl
|
||||||
|
|
||||||
## Test It Out!
|
## Test It Out!
|
||||||
|
|
||||||
Congrats! Your custom firmware has been programmed to your keyboard!
|
Congrats! Your custom firmware has been programmed to your keyboard and you're ready to test it out!
|
||||||
|
|
||||||
Give it a try and make sure everything works the way you want it to. We've written [Testing and Debugging](newbs_testing_debugging.md) to round out this guide, so head over there to learn about validating your firmware and how to troubleshoot your custom functionality.
|
With a little bit of luck everything will work perfectly, but if not there are steps that will help you figure out what's wrong.
|
||||||
|
Testing your keyboard is usually pretty straightforward. Press every single key and make sure it sends the keys you expect. You can use [QMK Configurator](https://config.qmk.fm/#/test/)'s test mode to check your keyboard, even if it doesn't run QMK.
|
||||||
|
|
||||||
|
Still not working? Browse the FAQ topics for more information, or [chat with us on Discord](https://discord.gg/Uq7gcHh).
|
||||||
|
|
|
@ -2,41 +2,21 @@
|
||||||
|
|
||||||
Before you can build keymaps, you need to install some software and set up your build environment. This only has to be done once no matter how many keyboards you plan to compile firmware for.
|
Before you can build keymaps, you need to install some software and set up your build environment. This only has to be done once no matter how many keyboards you plan to compile firmware for.
|
||||||
|
|
||||||
## 1. Download Software
|
## 1. Prerequisites
|
||||||
|
|
||||||
There are a few pieces of software you'll need to get started.
|
There are a few pieces of software you'll need to get started.
|
||||||
|
|
||||||
### Text Editor
|
* [Text editor](newbs_learn_more_resources.md#text-editor-resources)
|
||||||
|
* You’ll need a program that can edit and save plain text files. The default editor that comes with many OS's does not save plain text files, so you'll need to make sure that whatever editor you chose does.
|
||||||
|
* [Toolbox (optional)](https://github.com/qmk/qmk_toolbox)
|
||||||
|
* A graphical program for Windows and macOS that allows you to both program and debug your custom keyboard
|
||||||
|
|
||||||
You'll need a program that can edit and save **plain text** files. If you're on Windows you can make do with Notepad, and on Linux you can use gedit. Both of these are simple but functional text editors. On macOS, be careful with the default TextEdit app: it will not save plain text files unless you explicitly select _Make Plain Text_ from the _Format_ menu.
|
?> If you haven't worked with the Linux/Unix command line before, there are a few basic concepts and commands you should learn. [These resources](newbs_learn_more_resources.md#command-line-resources) will teach you enough to be able to work with QMK.
|
||||||
|
|
||||||
You can also download and install a dedicated text editor like [Sublime Text](https://www.sublimetext.com/) or [VS Code](https://code.visualstudio.com/). This is probably the best way to go regardless of platform, as these programs are specifically made for editing code.
|
|
||||||
|
|
||||||
?> Not sure which text editor to use? Laurence Bradford wrote [a great introduction](https://learntocodewith.me/programming/basics/text-editors/) to the subject.
|
|
||||||
|
|
||||||
### 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)
|
|
||||||
|
|
||||||
### A Unix-like Environment
|
|
||||||
|
|
||||||
Linux and macOS come with unix shells you can execute already. You will only need to setup your build environment.
|
|
||||||
|
|
||||||
On Windows you will need to install MSYS2 or WSL and use those environments. Instructions for setting up MSYS2 are provided below.
|
|
||||||
|
|
||||||
## 2. Prepare Your Build Environment :id=set-up-your-environment
|
## 2. Prepare Your Build Environment :id=set-up-your-environment
|
||||||
|
|
||||||
We've tried to make QMK as easy to set up as possible. You only have to prepare your Linux or Unix environment, then let QMK install the rest.
|
We've tried to make QMK as easy to set up as possible. You only have to prepare your Linux or Unix environment, then let QMK install the rest.
|
||||||
|
|
||||||
?> If you haven't worked with the Linux/Unix command line before, there are a few basic concepts and commands you should learn. These resources will teach you enough to be able to work with QMK:<br>
|
|
||||||
[Must Know Linux Commands](https://www.guru99.com/must-know-linux-commands.html)<br>
|
|
||||||
[Some Basic Unix Commands](https://www.tjhsst.edu/~dhyatt/superap/unixcmd.html)
|
|
||||||
|
|
||||||
<!-- tabs:start -->
|
<!-- tabs:start -->
|
||||||
|
|
||||||
### ** Windows **
|
### ** Windows **
|
||||||
|
@ -45,9 +25,9 @@ QMK maintains a Bundle of MSYS2, the CLI and all necessary dependencies. It also
|
||||||
|
|
||||||
#### Prerequisites
|
#### Prerequisites
|
||||||
|
|
||||||
You will need to install `QMK MSYS`. The latest release is available at https://msys.qmk.fm/.
|
You will need to install [QMK MSYS](https://msys.qmk.fm/). The latest release is available [here](https://github.com/qmk/qmk_distro_msys/releases/latest).
|
||||||
|
|
||||||
Alternatively, if you'd like to manually install msys2, the following section will walk you through the process.
|
Alternatively, if you'd like to manually install MSYS2, the following section will walk you through the process.
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Manual Install</summary>
|
<summary>Manual Install</summary>
|
||||||
|
|
|
@ -2,15 +2,26 @@
|
||||||
|
|
||||||
These resources are aimed at giving new members in the QMK community more understanding to the information provided in the Newbs docs.
|
These resources are aimed at giving new members in the QMK community more understanding to the information provided in the Newbs docs.
|
||||||
|
|
||||||
**QMK resources**:
|
### QMK resources
|
||||||
|
|
||||||
* [Thomas Baart's QMK Basics Blog](https://thomasbaart.nl/category/mechanical-keyboards/firmware/qmk/qmk-basics/) – A user-created blog covering the basics of how to use QMK Firmware, as seen from a new user's perspective.
|
* [Thomas Baart's QMK Basics Blog](https://thomasbaart.nl/category/mechanical-keyboards/firmware/qmk/qmk-basics/) – A user-created blog covering the basics of how to use QMK Firmware, as seen from a new user's perspective.
|
||||||
|
|
||||||
**Command Line resources**:
|
### Command Line resources
|
||||||
|
|
||||||
* [Good General Tutorial on Command Line](https://www.codecademy.com/learn/learn-the-command-line)
|
* [Good General Tutorial on Command Line](https://www.codecademy.com/learn/learn-the-command-line)
|
||||||
|
* [Must Know Linux Commands](https://www.guru99.com/must-know-linux-commands.html)<br>
|
||||||
|
* [Some Basic Unix Commands](https://www.tjhsst.edu/~dhyatt/superap/unixcmd.html)
|
||||||
|
|
||||||
**Git resources**:
|
### Text Editor resources
|
||||||
|
|
||||||
|
Not sure which text editor to use?
|
||||||
|
* [a great introduction to the subject](https://learntocodewith.me/programming/basics/text-editors/)
|
||||||
|
|
||||||
|
Editors specifically made for code:
|
||||||
|
* [Sublime Text](https://www.sublimetext.com/)
|
||||||
|
* [VS Code](https://code.visualstudio.com/)
|
||||||
|
|
||||||
|
### Git resources
|
||||||
|
|
||||||
* [Great General Tutorial](https://www.codecademy.com/learn/learn-git)
|
* [Great General Tutorial](https://www.codecademy.com/learn/learn-git)
|
||||||
* [Flight Rules For Git](https://github.com/k88hudson/git-flight-rules)
|
* [Flight Rules For Git](https://github.com/k88hudson/git-flight-rules)
|
||||||
|
|
|
@ -1,96 +1,9 @@
|
||||||
# Testing and Debugging
|
# Testing and Debugging
|
||||||
|
|
||||||
Once you've flashed your keyboard with a custom firmware you're ready to test it out. With a little bit of luck everything will work perfectly, but if not this document will help you figure out what's wrong.
|
|
||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
|
|
||||||
Testing your keyboard is usually pretty straightforward. Press every single key and make sure it sends the keys you expect. You can use [QMK Configurator](https://config.qmk.fm/#/test/)'s test mode to check your keyboard, even if it doesn't run QMK.
|
[Moved here](faq_misc.md#testing)
|
||||||
|
|
||||||
## Debugging :id=debugging
|
## Debugging :id=debugging
|
||||||
|
|
||||||
Your keyboard will output debug information if you have `CONSOLE_ENABLE = yes` in your `rules.mk`. By default the output is very limited, but you can turn on debug mode to increase the amount of debug output. Use the `DEBUG` keycode in your keymap, use the [Command](feature_command.md) feature to enable debug mode, or add the following code to your keymap.
|
[Moved here](faq_debug.md#debugging)
|
||||||
|
|
||||||
```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;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Debugging Tools
|
|
||||||
|
|
||||||
There are two different tools you can use to debug your keyboard.
|
|
||||||
|
|
||||||
### Debugging With QMK Toolbox
|
|
||||||
|
|
||||||
For compatible platforms, [QMK Toolbox](https://github.com/qmk/qmk_toolbox) can be used to display debug messages from your keyboard.
|
|
||||||
|
|
||||||
### Debugging With hid_listen
|
|
||||||
|
|
||||||
Prefer a terminal based solution? [hid_listen](https://www.pjrc.com/teensy/hid_listen.html), provided by PJRC, can also be used to display debug messages. Prebuilt binaries for Windows,Linux,and MacOS are available.
|
|
||||||
|
|
||||||
## Sending Your Own Debug Messages
|
|
||||||
|
|
||||||
Sometimes it's useful to print debug messages from within your [custom code](custom_quantum_functions.md). Doing so is pretty simple. Start by including `print.h` at the top of your file:
|
|
||||||
|
|
||||||
```c
|
|
||||||
#include "print.h"
|
|
||||||
```
|
|
||||||
|
|
||||||
After that you can use a few different print functions:
|
|
||||||
|
|
||||||
* `print("string")`: Print a simple string.
|
|
||||||
* `uprintf("%s string", var)`: Print a formatted string
|
|
||||||
* `dprint("string")` Print a simple string, but only when debug mode is enabled
|
|
||||||
* `dprintf("%s string", var)`: Print a formatted string, but only when debug mode is enabled
|
|
||||||
|
|
||||||
## Debug Examples
|
|
||||||
|
|
||||||
Below is a collection of real world debugging examples. For additional information, refer to [Debugging/Troubleshooting QMK](faq_debug.md).
|
|
||||||
|
|
||||||
### Which matrix position is this keypress?
|
|
||||||
|
|
||||||
When porting, or when attempting to diagnose pcb issues, it can be useful to know if a keypress is scanned correctly. To enable logging for this scenario, add the following code to your keymaps `keymap.c`
|
|
||||||
|
|
||||||
```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;
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
Example output
|
|
||||||
```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
|
|
||||||
```
|
|
||||||
|
|
||||||
### How long did it take to scan for a keypress?
|
|
||||||
|
|
||||||
When testing performance issues, it can be useful to know the frequency at which the switch matrix is being scanned. To enable logging for this scenario, add the following code to your keymaps `config.h`
|
|
||||||
|
|
||||||
```c
|
|
||||||
#define DEBUG_MATRIX_SCAN_RATE
|
|
||||||
```
|
|
||||||
|
|
||||||
Example output
|
|
||||||
```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,6 +28,9 @@
|
||||||
border-bottom: 1px solid #777 !important;
|
border-bottom: 1px solid #777 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.markdown-section p.warn > strong {
|
||||||
|
color: #c8c8c8;
|
||||||
|
}
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--docsifytabs-border-color: #555;
|
--docsifytabs-border-color: #555;
|
||||||
|
@ -36,11 +39,3 @@
|
||||||
--docsifytabs-tab-background: #444;
|
--docsifytabs-tab-background: #444;
|
||||||
--docsifytabs-tab-background-active: #3f3f3f;
|
--docsifytabs-tab-background-active: #3f3f3f;
|
||||||
}
|
}
|
||||||
|
|
||||||
.docsify-tabs__tab:focus {
|
|
||||||
outline: none !important;
|
|
||||||
}
|
|
||||||
|
|
||||||
.docsify-tabs__content .anchor {
|
|
||||||
transition: none;
|
|
||||||
}
|
|
||||||
|
|
|
@ -29,13 +29,16 @@
|
||||||
padding: 0;
|
padding: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@media only screen and (min-width: 768px) {
|
||||||
:root {
|
.flex-container {
|
||||||
--docsifytabs-border-color: #ddd;
|
display:flex;
|
||||||
--docsifytabs-tab-highlight-color: var(--theme-color, #0074d9);
|
flex-flow:row;
|
||||||
|
}
|
||||||
--docsifytabs-tab-background: #f8f8f8;
|
.flex-container > p {
|
||||||
--docsifytabs-tab-background-active: transparent;
|
flex-basis: 100%;
|
||||||
|
flex: 1;
|
||||||
|
margin: 1em 2em 1em 2em;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.docsify-tabs__tab:focus {
|
.docsify-tabs__tab:focus {
|
||||||
|
@ -45,3 +48,11 @@
|
||||||
.docsify-tabs__content .anchor {
|
.docsify-tabs__content .anchor {
|
||||||
transition: none;
|
transition: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--docsifytabs-border-color: #ddd;
|
||||||
|
--docsifytabs-tab-highlight-color: var(--theme-color, #0074d9);
|
||||||
|
|
||||||
|
--docsifytabs-tab-background: #f8f8f8;
|
||||||
|
--docsifytabs-tab-background-active: transparent;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue