parent
89bcdde927
commit
e6c638bed1
@ -1,216 +1,6 @@ |
||||
# Frequently Asked Questions |
||||
|
||||
## General |
||||
|
||||
### What is QMK? |
||||
|
||||
[QMK](https://github.com/qmk), short for Quantum Mechanical Keyboard, is a group of people building tools for custom keyboards. We started with the [QMK firmware](https://github.com/qmk/qmk_firmware), a heavily modified fork of [TMK](https://github.com/tmk/tmk_keyboard). |
||||
|
||||
### Why the name Quantum? |
||||
|
||||
<!-- FIXME --> |
||||
|
||||
### What Differences Are There Between QMK and TMK? |
||||
|
||||
TMK was originally designed and implemented by [Jun Wako](https://github.com/tmk). QMK started as [Jack Humbert's](https://github.com/jackhumbert) fork of TMK for the Planck. After a while Jack's fork had diverged quite a bit from TMK, and in 2015 Jack decided to rename his fork to QMK. |
||||
|
||||
From a technical standpoint QMK builds upon TMK by adding several new features. Most notably QMK has expanded the number of available keycodes and uses these to implement advanced features like `S()`, `LCTL()`, and `MO()`. You can see a complete list of these keycodes in [Quantum Keycodes](quantum_keycodes.html). |
||||
|
||||
From a project and community management standpoint TMK maintains all the officially supported keyboards by himself, with a bit of community support. Separate community maintained forks exist or can be created for other keyboards. Only a few keymaps are provided by default, so users typically don't share keymaps with each other. QMK encourages sharing of both keyboards and keymaps through a centrally managed repository, accepting all pull requests that follows the quality standards. These are mostly community maintained, but the QMK team also helps when necessary. |
||||
|
||||
Both approaches have their merits and their drawbacks, and code flows freely between TMK and QMK when it makes sense. |
||||
|
||||
# Building |
||||
|
||||
## Windows |
||||
|
||||
### I'm on Windows Vista, 7, or 8, how do I setup my build environment? |
||||
|
||||
Follow the build instructions to [install MHV AVR Tools](https://docs.qmk.fm/build_environment_setup.html#windows-vista-and-later). |
||||
|
||||
### I'm on Windows 10 without the Creators Update. Do I have to install it? |
||||
|
||||
No, but if you don't install the creators update you will not be able to build and flash with a single command. You will be able to build but to flash you will have to use a separate program, such as [QMK Flasher](https://github.com/qmk/qmk_flasher). |
||||
|
||||
# Troubleshooting |
||||
|
||||
## Debug Console |
||||
### hid_listen can't recognize device |
||||
When debug console of your device is not ready you will see like this: |
||||
|
||||
``` |
||||
Waiting for device:......... |
||||
``` |
||||
|
||||
once the device is pluged in then *hid_listen* finds it you will get this message: |
||||
|
||||
``` |
||||
Waiting for new device:......................... |
||||
Listening: |
||||
``` |
||||
|
||||
If you can't get this 'Listening:' message try building with `CONSOLE_ENABLE=yes` in [Makefile] |
||||
|
||||
You may need privilege to access the device on OS like Linux. |
||||
- try `sudo hid_listen` |
||||
|
||||
### Can't get message on console |
||||
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` 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). |
||||
|
||||
### Linux or UNIX like system requires Super User privilege |
||||
Just use 'sudo' to execute *hid_listen* with privilege. |
||||
``` |
||||
$ sudo hid_listen |
||||
``` |
||||
|
||||
Or add an *udev rule* for TMK devices with placing a file in rules directory. The directory may vary on each system. |
||||
|
||||
File: /etc/udev/rules.d/52-tmk-keyboard.rules(in case of Ubuntu) |
||||
``` |
||||
# tmk keyboard products https://github.com/tmk/tmk_keyboard |
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666" |
||||
``` |
||||
|
||||
## Software Issues |
||||
|
||||
### NKRO Doesn't work |
||||
First you have to compile frimware 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 firmeare 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 keeped over power cycles. |
||||
|
||||
https://github.com/tmk/tmk_keyboard#boot-magic-configuration---virtual-dip-switch |
||||
|
||||
### 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 [16bit] 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 |
||||
|
||||
|
||||
### Bootloader jump doesn't work |
||||
Properly configure bootloader size in **Makefile**. With wrong section size bootloader won't probably start with **Magic command** and **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 |
||||
``` |
||||
AVR Boot section size are defined by setting **BOOTSZ** fuse in fact. Consult with your MCU datasheet. |
||||
Note that **Word**(2 bytes) size and address are used in datasheet while TMK uses **Byte**. |
||||
|
||||
AVR Boot section is located at end of Flash memory like the followings. |
||||
``` |
||||
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 +---------------+ |
||||
``` |
||||
|
||||
And see this discussion for further reference. |
||||
https://github.com/tmk/tmk_keyboard/issues/179 |
||||
|
||||
|
||||
### 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. |
||||
|
||||
## Hardware Issues |
||||
|
||||
### TrackPoint needs reset circuit(PS/2 mouse support) |
||||
Without reset circuit you will have inconsistent reuslt 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 |
||||
|
||||
### 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. |
||||
|
||||
### Using PF4-7 pins of USB AVR? |
||||
You need to set JTD bit of MCUCR yourself to use PF4-7 as GPIO. Those pins are configured to serve JTAG function by default. MCUs like ATMega*U* or AT90USB* are affeteced with this. |
||||
|
||||
If you are using Teensy this isn't needed. Teensy is shipped with JTAGEN fuse bit unprogrammed to disable the function. |
||||
|
||||
See this code. |
||||
``` |
||||
// JTAG disable for PORT F. write JTD bit twice within four cycles. |
||||
MCUCR |= (1<<JTD); |
||||
MCUCR |= (1<<JTD); |
||||
``` |
||||
https://github.com/tmk/tmk_keyboard/blob/master/keyboard/hbkb/matrix.c#L67 |
||||
|
||||
And read **26.5.1 MCU Control Register – MCUCR** of ATMega32U4 datasheet. |
||||
|
||||
|
||||
### Program Arduino Micro/Leonardo |
||||
Push reset button and then run command like this within 8 seconds. |
||||
|
||||
``` |
||||
avrdude -patmega32u4 -cavr109 -b57600 -Uflash:w:adb_usb.hex -P/dev/ttyACM0 |
||||
``` |
||||
|
||||
Device name will vary depending on your system. |
||||
|
||||
http://arduino.cc/en/Main/ArduinoBoardMicro |
||||
https://geekhack.org/index.php?topic=14290.msg1563867#msg1563867 |
||||
|
||||
### 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 |
||||
|
||||
## Flashing Problems |
||||
|
||||
### Can't use dfu-programmer or QMK Flasher to flash on Windows |
||||
|
||||
Windows requires a driver to support the keyboard in DFU mode. You can use [QMK Driver Installer](https://github.com/qmk/qmk_driver_installer/releases) to install the necessary drivers. |
||||
* [General](faq_general.md) |
||||
* [Building or Compiling QMK](faq_build.md) |
||||
* [Debugging and Troubleshooting QMK](faq_debug.md) |
||||
* [Keymap](faq_keymap.md) |
||||
|
@ -0,0 +1,203 @@ |
||||
# Debugging FAQ |
||||
|
||||
This page details various common questions people have about troubleshooting their keyboards. |
||||
|
||||
# Debug Console |
||||
|
||||
## hid_listen can't recognize device |
||||
When debug console of your device is not ready you will see like this: |
||||
|
||||
``` |
||||
Waiting for device:......... |
||||
``` |
||||
|
||||
once the device is pluged in then *hid_listen* finds it you will get this message: |
||||
|
||||
``` |
||||
Waiting for new device:......................... |
||||
Listening: |
||||
``` |
||||
|
||||
If you can't get this 'Listening:' message try building with `CONSOLE_ENABLE=yes` in [Makefile] |
||||
|
||||
You may need privilege to access the device on OS like Linux. |
||||
- try `sudo hid_listen` |
||||
|
||||
## Can't get message on console |
||||
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` 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). |
||||
|
||||
## Linux or UNIX like system requires Super User privilege |
||||
Just use 'sudo' to execute *hid_listen* with privilege. |
||||
``` |
||||
$ sudo hid_listen |
||||
``` |
||||
|
||||
Or add an *udev rule* for TMK devices with placing a file in rules directory. The directory may vary on each system. |
||||
|
||||
File: /etc/udev/rules.d/52-tmk-keyboard.rules(in case of Ubuntu) |
||||
``` |
||||
# tmk keyboard products https://github.com/tmk/tmk_keyboard |
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666" |
||||
``` |
||||
|
||||
*** |
||||
|
||||
# Miscellaneous |
||||
## NKRO Doesn't work |
||||
First you have to compile frimware 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 firmeare 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 keeped 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 reuslt 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 [16bit] 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 |
||||
|
||||
|
||||
## Bootloader jump doesn't work |
||||
Properly configure bootloader size in **Makefile**. With wrong section size bootloader won't probably start with **Magic command** and **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 |
||||
``` |
||||
AVR Boot section size are defined by setting **BOOTSZ** fuse in fact. Consult with your MCU datasheet. |
||||
Note that **Word**(2 bytes) size and address are used in datasheet while TMK uses **Byte**. |
||||
|
||||
AVR Boot section is located at end of Flash memory like the followings. |
||||
``` |
||||
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 +---------------+ |
||||
``` |
||||
|
||||
And see this discussion for further reference. |
||||
https://github.com/tmk/tmk_keyboard/issues/179 |
||||
|
||||
|
||||
## 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. |
||||
|
||||
|
||||
## Using PF4-7 pins of USB AVR? |
||||
You need to set JTD bit of MCUCR yourself to use PF4-7 as GPIO. Those pins are configured to serve JTAG function by default. MCUs like ATMega*U* or AT90USB* are affeteced with this. |
||||
|
||||
If you are using Teensy this isn't needed. Teensy is shipped with JTAGEN fuse bit unprogrammed to disable the function. |
||||
|
||||
See this code. |
||||
``` |
||||
// JTAG disable for PORT F. write JTD bit twice within four cycles. |
||||
MCUCR |= (1<<JTD); |
||||
MCUCR |= (1<<JTD); |
||||
``` |
||||
https://github.com/tmk/tmk_keyboard/blob/master/keyboard/hbkb/matrix.c#L67 |
||||
|
||||
And read **26.5.1 MCU Control Register – MCUCR** of ATMega32U4 datasheet. |
||||
|
||||
|
||||
## Adding LED indicators of Lock keys |
||||
You need your own LED indicators for CapsLock, ScrollLock and NumLock? See this post. |
||||
|
||||
http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p191560 |
||||
|
||||
## Program Arduino Micro/Leonardo |
||||
Push reset button and then run command like this within 8 seconds. |
||||
|
||||
``` |
||||
avrdude -patmega32u4 -cavr109 -b57600 -Uflash:w:adb_usb.hex -P/dev/ttyACM0 |
||||
``` |
||||
|
||||
Device name will vary depending on your system. |
||||
|
||||
http://arduino.cc/en/Main/ArduinoBoardMicro |
||||
https://geekhack.org/index.php?topic=14290.msg1563867#msg1563867 |
||||
|
||||
|
||||
## 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 |
||||
|
||||
|
||||
|
||||
## FLIP doesn't work |
||||
### AtLibUsbDfu.dll not found |
||||
Remove current driver and reinstall one FLIP provides from DeviceManager. |
||||
http://imgur.com/a/bnwzy |
@ -0,0 +1,20 @@ |
||||
# Frequently Asked Questions |
||||
|
||||
## What is QMK? |
||||
|
||||
[QMK](https://github.com/qmk), short for Quantum Mechanical Keyboard, is a group of people building tools for custom keyboards. We started with the [QMK firmware](https://github.com/qmk/qmk_firmware), a heavily modified fork of [TMK](https://github.com/tmk/tmk_keyboard). |
||||
|
||||
### Why the name Quantum? |
||||
|
||||
<!-- FIXME --> |
||||
|
||||
## What Differences Are There Between QMK and TMK? |
||||
|
||||
TMK was originally designed and implemented by [Jun Wako](https://github.com/tmk). QMK started as [Jack Humbert's](https://github.com/jackhumbert) fork of TMK for the Planck. After a while Jack's fork had diverged quite a bit from TMK, and in 2015 Jack decided to rename his fork to QMK. |
||||
|
||||
From a technical standpoint QMK builds upon TMK by adding several new features. Most notably QMK has expanded the number of available keycodes and uses these to implement advanced features like `S()`, `LCTL()`, and `MO()`. You can see a complete list of these keycodes in [Quantum Keycodes](quantum_keycodes.html). |
||||
|
||||
From a project and community management standpoint TMK maintains all the officially supported keyboards by himself, with a bit of community support. Separate community maintained forks exist or can be created for other keyboards. Only a few keymaps are provided by default, so users typically don't share keymaps with each other. QMK encourages sharing of both keyboards and keymaps through a centrally managed repository, accepting all pull requests that follows the quality standards. These are mostly community maintained, but the QMK team also helps when necessary. |
||||
|
||||
Both approaches have their merits and their drawbacks, and code flows freely between TMK and QMK when it makes sense. |
||||
|
@ -0,0 +1,47 @@ |
||||
# Introduction |
||||
|
||||
This page attempts to explain the basic information you need to know to work with the QMK project. It assumes that you are familiar with navigating a UNIX shell, but does not assume you are familiar with C or with compiling using make. |
||||
|
||||
## Basic QMK structure |
||||
|
||||
QMK is a fork of @tmk's [tmk_keyboard](https://github.com/tmk/tmk_keyboard) project. The original TMK code, with modifications, can be found in the `tmk` folder. The QMK additions to the project may be found in the `quantum` folder. Keyboard projects may be found in the `handwired` and `keyboard` folders. |
||||
|
||||
### Keyboard project structure |
||||
|
||||
Within the `handwired` and `keyboard` folders is a directory for each keyboard project, for example `qmk_firmware/keyboards/clueboard`. Within you'll find the following structure: |
||||
|
||||
* `keymaps/`: Different keymaps that can be built |
||||
* `rules.mk`: The file that sets the default "make" options. Do not edit this file directly, instead use a keymap specific `Makefile`. |
||||
* `config.h`: The file that sets the default compile time options. Do not edit this file directly, instead use a keymap specific `config.h`. |
||||
|
||||
### Keymap structure |
||||
|
||||
In every keymap folder, the following files may be found. Only `keymap.c` is required, if the rest of the files are not found the default options will be chosen. |
||||
|
||||
* `config.h`: the options to configure your keymap |
||||
* `keymap.c`: all of your keymap code, required |
||||
* `rules.mk`: the features of QMK that are enabled |
||||
* `readme.md`: a description of your keymap, how others might use it, and explanations of features. Please upload images to a service like imgur. |
||||
|
||||
# The `config.h` file |
||||
|
||||
There are 2 `config.h` locations: |
||||
|
||||
* keyboard (`/keyboards/<keyboard>/config.h`) |
||||
* keymap (`/keyboards/<keyboard>/keymaps/<keymap>/config.h`) |
||||
|
||||
If the keymap `config.h` exists that file is included by the build system and the keyboard `config.h` is not included. If you wish to override settings in your keymap's `config.h` you will need to include some glue code: |
||||
|
||||
``` |
||||
#ifndef CONFIG_USER_H |
||||
#define CONFIG_USER_H |
||||
|
||||
#include "../../config.h" |
||||
``` |
||||
|
||||
If you want to override a setting from the parent `config.h` file, you need to `#undef` and then `#define` the setting again, like this: |
||||
|
||||
```c |
||||
#undef MY_SETTING |
||||
#define MY_SETTING 4 |
||||
``` |
@ -1,75 +0,0 @@ |
||||
# QMK Overview |
||||
|
||||
This page attempts to explain the basic information you need to know to work with the QMK project. It assumes that you are familiar with navigating a UNIX shell, but does not assume you are familiar with C or with compiling using make. |
||||
|
||||
# Basic QMK structure |
||||
|
||||
QMK is a fork of @tmk's [tmk_keyboard](https://github.com/tmk/tmk_keyboard) project. The original TMK code, with modifications, can be found in the `tmk` folder. The QMK additions to the project may be found in the `quantum` folder. Keyboard projects may be found in the `handwired` and `keyboard` folders. |
||||
|
||||
## Keyboard project structure |
||||
|
||||
Within the `handwired` and `keyboard` folders is a directory for each keyboard project, for example `qmk_firmware/keyboards/clueboard`. Within you'll find the following structure: |
||||
|
||||
* `keymaps/`: Different keymaps that can be built |
||||
* `rules.mk`: The file that sets the default "make" options. Do not edit this file directly, instead use a keymap specific `Makefile`. |
||||
* `config.h`: The file that sets the default compile time options. Do not edit this file directly, instead use a keymap specific `config.h`. |
||||
|
||||
### Keymap structure |
||||
|
||||
In every keymap folder, the following files may be found. Only `keymap.c` is required, if the rest of the files are not found the default options will be chosen. |
||||
|
||||
* `config.h`: the options to configure your keymap |
||||
* `keymap.c`: all of your keymap code, required |
||||
* `Makefile`: the features of QMK that are enabled, required to run `make` in your keymap folder |
||||
* `readme.md`: a description of your keymap, how others might use it, and explanations of features |
||||
* Other files: Some people choose to include an image depicting the layout, and other files that help people to use or understand a particular keymap. |
||||
|
||||
# The `make` command |
||||
|
||||
The `make` command is how you compile the firmware into a .hex file, which can be loaded by a dfu programmer (like dfu-progammer via `make dfu`) or the [Teensy loader](https://www.pjrc.com/teensy/loader.html) (only used with Teensys). It it recommended that you always run make from within the `root` folder. |
||||
|
||||
**NOTE:** To abort a make command press `Ctrl-c` |
||||
|
||||
For more details on the QMK build process see [Make Instructions](make_instructions.md). |
||||
|
||||
### Simple instructions for building and uploading a keyboard |
||||
|
||||
**Most keyboards have more specific instructions in the keyboard specific readme.md file, so please check that first** |
||||
|
||||
1. Enter the `root` folder |
||||
2. Run `make <keyboard>-<subproject>-<keymap>-<programmer>` |
||||
|
||||
In the above commands, replace: |
||||
|
||||
* `<keyboard>` with the name of your keyboard |
||||
* `<keymap>` with the name of your keymap |
||||
* `<subproject>` with the name of the subproject (revision or sub-model of your keyboard). For example, for Ergodox it can be `ez` or `infinity`, and for Planck `rev3` or `rev4`. |
||||
* If the keyboard doesn't have a subproject, or if you are happy with the default (defined in `rules.mk` file of the `keyboard` folder), you can leave it out. But remember to also remove the dash (`-`) from the command. |
||||
* `<programmer>` The programmer to use. Most keyboards use `dfu`, but some use `teensy`. Infinity keyboards use `dfu-util`. Check the readme file in the keyboard folder to find out which programmer to use. |
||||
* If you don't add `-<programmer` to the command line, the firmware will be still be compiled into a hex file, but the upload will be skipped. |
||||
|
||||
**NOTE:** Some operating systems will refuse to program unless you run the make command as root for example `sudo make clueboard-default-dfu` |
||||
|
||||
## Make Examples |
||||
|
||||
* Build all Clueboard keymaps: `make clueboard` |
||||
* Build the default Planck keymap: `make planck-rev4-default` |
||||
* Build and flash your ergodox-ez: `make ergodox-ez-default-teensy` |
||||
|
||||
# The `config.h` file |
||||
|
||||
There are 2 `config.h` locations: |
||||
|
||||
* keyboard (`/keyboards/<keyboard>/`) |
||||
* keymap (`/keyboards/<keyboard>/keymaps/<keymap>/`) |
||||
|
||||
The keyboard `config.h` is included only if the keymap one doesn't exist. The format to use for your custom one [is here](https://github.com/qmk/qmk_firmware/blob/master/doc/keymap_config_h_example.h). If you want to override a setting from the parent `config.h` file, you need to do this: |
||||
|
||||
```c |
||||
#undef MY_SETTING |
||||
#define MY_SETTING 4 |
||||
``` |
||||
|
||||
For a value of `4` for this imaginary setting. So we `undef` it first, then `define` it. |
||||
|
||||
You can then override any settings, rather than having to copy and paste the whole thing. |
Loading…
Reference in new issue