mirror of
https://github.com/qmk/qmk_firmware.git
synced 2025-08-16 13:08:30 +00:00
Compare commits
132 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
2d1c985ff4 | ||
![]() |
e4818cf732 | ||
![]() |
a1b53b45ca | ||
![]() |
09c7304bd9 | ||
![]() |
58b2c72d53 | ||
![]() |
627d6c154c | ||
![]() |
4fbb53e817 | ||
![]() |
ab78386e02 | ||
![]() |
f5638e54f5 | ||
![]() |
77efa1c620 | ||
![]() |
a037cedfdc | ||
![]() |
df78593b1b | ||
![]() |
45e71aedf0 | ||
![]() |
bbad6e1ae7 | ||
![]() |
efb21c00ce | ||
![]() |
071eb2478f | ||
![]() |
770a4ee729 | ||
![]() |
ccda62616d | ||
![]() |
698d0dbda8 | ||
![]() |
1af31a0523 | ||
![]() |
a8153774b5 | ||
![]() |
10e8ed7430 | ||
![]() |
cde56a7eee | ||
![]() |
8551ab3daf | ||
![]() |
b0bee465aa | ||
![]() |
7085066f08 | ||
![]() |
e4dd9e1393 | ||
![]() |
9c6a7522d7 | ||
![]() |
01653a5f96 | ||
![]() |
5acb7e3707 | ||
![]() |
6c834dea7b | ||
![]() |
b3c7864990 | ||
![]() |
8984f24f7c | ||
![]() |
294caf1ff1 | ||
![]() |
033c7af292 | ||
![]() |
15e5f57952 | ||
![]() |
4b11c2b552 | ||
![]() |
201c5bfa5c | ||
![]() |
34f302e1a5 | ||
![]() |
722c196b08 | ||
![]() |
c6ebb59a8b | ||
![]() |
4808b930db | ||
![]() |
c74295de88 | ||
![]() |
a7209533a3 | ||
![]() |
3d78e6078e | ||
![]() |
e676278474 | ||
![]() |
730a736ef0 | ||
![]() |
a8320f20f7 | ||
![]() |
f275ffbdfc | ||
![]() |
36a6e269bf | ||
![]() |
e8efc46e74 | ||
![]() |
1b08a19e3e | ||
![]() |
419128bfa1 | ||
![]() |
2d256f48d0 | ||
![]() |
380e05ad6e | ||
![]() |
de4eb79c6a | ||
![]() |
be47f91bc4 | ||
![]() |
8030c17d63 | ||
![]() |
9c8e66dc05 | ||
![]() |
3ad389de55 | ||
![]() |
66040506a7 | ||
![]() |
d598f01cb7 | ||
![]() |
1718dfa658 | ||
![]() |
1c8208ad9a | ||
![]() |
583be4a5f3 | ||
![]() |
24507ddca8 | ||
![]() |
3152bf572b | ||
![]() |
96d4ba84c2 | ||
![]() |
680924777b | ||
![]() |
75c8a79d0e | ||
![]() |
da1a527c90 | ||
![]() |
bf962821b3 | ||
![]() |
ce5678b819 | ||
![]() |
d9cf6c6730 | ||
![]() |
b386ccc786 | ||
![]() |
0ed492978a | ||
![]() |
a2c6257942 | ||
![]() |
a14c9a057a | ||
![]() |
c9838fea12 | ||
![]() |
dfe18b40aa | ||
![]() |
f099142004 | ||
![]() |
d98ed28e7c | ||
![]() |
beb9f3ab71 | ||
![]() |
77c04d148e | ||
![]() |
90c74701aa | ||
![]() |
ede67df6bd | ||
![]() |
27bf464dc3 | ||
![]() |
fb02593bd4 | ||
![]() |
c0dbd81b2b | ||
![]() |
385454e602 | ||
![]() |
7164e8eeb5 | ||
![]() |
f9521ffa21 | ||
![]() |
2048df8832 | ||
![]() |
99f3321e26 | ||
![]() |
235da6973d | ||
![]() |
5c41fa6062 | ||
![]() |
99a58aa2b8 | ||
![]() |
4ae87ab40a | ||
![]() |
7e62705877 | ||
![]() |
1604f79623 | ||
![]() |
265c415f5e | ||
![]() |
2b318ba01b | ||
![]() |
2f3adc3e24 | ||
![]() |
57581ad733 | ||
![]() |
b663a5b248 | ||
![]() |
f6ffa28b27 | ||
![]() |
170261328e | ||
![]() |
5a6737a778 | ||
![]() |
a2cedf4555 | ||
![]() |
397897180b | ||
![]() |
36cde567ab | ||
![]() |
572d3329eb | ||
![]() |
c0fe8dbfb4 | ||
![]() |
f0f161e572 | ||
![]() |
3a7085dee4 | ||
![]() |
583094aa26 | ||
![]() |
f4fb0e1617 | ||
![]() |
6a8c0a6468 | ||
![]() |
d14573620d | ||
![]() |
9ea9806d67 | ||
![]() |
7874f297b3 | ||
![]() |
3541f01a72 | ||
![]() |
eae21eed74 | ||
![]() |
e62ab7e259 | ||
![]() |
0270d4d5a1 | ||
![]() |
7e9ed2acbf | ||
![]() |
66d4734371 | ||
![]() |
6cf574396a | ||
![]() |
f0a9c10b6d | ||
![]() |
78954a0d3e | ||
![]() |
02412156d5 | ||
![]() |
e70fef03c1 |
4
.github/stale.yml
vendored
4
.github/stale.yml
vendored
@@ -18,7 +18,7 @@ pulls:
|
||||
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
|
||||
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: >
|
||||
@@ -45,7 +45,7 @@ issues:
|
||||
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
|
||||
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.
|
||||
|
5
bin/qmk
5
bin/qmk
@@ -25,6 +25,11 @@ with open(os.path.join(qmk_dir, 'requirements.txt'), 'r') as fd:
|
||||
line = line.split('#')[0]
|
||||
|
||||
module = line.split('=')[0] if '=' in line else line
|
||||
|
||||
if module in ['pep8-naming']:
|
||||
# Not every module is importable by its own name.
|
||||
continue
|
||||
|
||||
if not find_spec(module):
|
||||
print('Could not find module %s!' % module)
|
||||
print('Please run `pip3 install -r requirements.txt` to install the python dependencies.')
|
||||
|
@@ -22,5 +22,5 @@ else ifneq ("$(wildcard $(MAIN_KEYMAP_PATH_1)/keymap.json)","")
|
||||
endif
|
||||
|
||||
# Generate the keymap.c
|
||||
$(KEYBOARD_OUTPUT)/src/keymap.c:
|
||||
$(KEYBOARD_OUTPUT)/src/keymap.c: $(KEYMAP_JSON)
|
||||
bin/qmk json-keymap --quiet --output $(KEYMAP_C) $(KEYMAP_JSON)
|
||||
|
@@ -407,12 +407,18 @@ 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
|
||||
MAGIC_ENABLE ?= yes
|
||||
ifeq ($(strip $(MAGIC_ENABLE)), yes)
|
||||
SRC += $(QUANTUM_DIR)/process_keycode/process_magic.c
|
||||
OPT_DEFS += -DMAGIC_KEYCODE_ENABLE
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(DYNAMIC_MACRO_ENABLE)), yes)
|
||||
SRC += $(QUANTUM_DIR)/process_keycode/process_dynamic_macro.c
|
||||
OPT_DEFS += -DDYNAMIC_MACRO_ENABLE
|
||||
endif
|
||||
|
||||
ifeq ($(strip $(DIP_SWITCH_ENABLE)), yes)
|
||||
SRC += $(QUANTUM_DIR)/dip_switch.c
|
||||
OPT_DEFS += -DDIP_SWITCH_ENABLE
|
||||
endif
|
||||
|
@@ -4,5 +4,6 @@
|
||||
- [:es: Español](/es/)
|
||||
- [:fr: Français](/fr-fr/)
|
||||
- [:he: עברית](/he-il/)
|
||||
- [:brazil: Português](/pt-br/)
|
||||
- [:ru: Русский](/ru-ru/)
|
||||
- [:jp: 日本語](/ja/)
|
||||
|
@@ -3,7 +3,10 @@
|
||||
* [Building Your First Firmware](newbs_building_firmware.md)
|
||||
* [Flashing Firmware](newbs_flashing.md)
|
||||
* [Testing and Debugging](newbs_testing_debugging.md)
|
||||
* [Git Best Practices](newbs_best_practices.md)
|
||||
* [Best Git Practices](newbs_git_best_practices.md)
|
||||
* [Using Your Fork's Master](newbs_git_using_your_master_branch.md)
|
||||
* [Resolving Merge Conflicts](newbs_git_resolving_merge_conflicts.md)
|
||||
* [Resynchronizing a Branch](newbs_git_resynchronize_a_branch.md)
|
||||
* [Learning Resources](newbs_learn_more_resources.md)
|
||||
|
||||
* [QMK Basics](README.md)
|
||||
@@ -98,6 +101,7 @@
|
||||
* [Hand Wiring Guide](hand_wire.md)
|
||||
* [ISP Flashing Guide](isp_flashing_guide.md)
|
||||
* [ARM Debugging Guide](arm_debugging.md)
|
||||
* [ADC Driver](adc_driver.md)
|
||||
* [I2C Driver](i2c_driver.md)
|
||||
* [WS2812 Driver](ws2812_driver.md)
|
||||
* [GPIO Controls](internals_gpio_control.md)
|
||||
@@ -111,7 +115,7 @@
|
||||
* [Using Eclipse with QMK](other_eclipse.md)
|
||||
* [Using VSCode with QMK](other_vscode.md)
|
||||
* [Support](support.md)
|
||||
* [How to add translations](translating.md)
|
||||
* [Translating the QMK Docs](translating.md)
|
||||
|
||||
* QMK Internals (In Progress)
|
||||
* [Defines](internals_defines.md)
|
||||
|
50
docs/adc_driver.md
Normal file
50
docs/adc_driver.md
Normal file
@@ -0,0 +1,50 @@
|
||||
# ADC Driver
|
||||
|
||||
QMK can leverage the Analog-to-Digital Converter (ADC) on supported MCUs to measure voltages on certain pins. This can be useful for implementing things such as battery level indicators for Bluetooth keyboards, or volume controls using a potentiometer, as opposed to a [rotary encoder](feature_encoders.md).
|
||||
|
||||
This driver is currently AVR-only. The values returned are 10-bit integers (0-1023) mapped between 0V and VCC (usually 5V or 3.3V).
|
||||
|
||||
## Usage
|
||||
|
||||
To use this driver, add the following to your `rules.mk`:
|
||||
|
||||
```make
|
||||
SRC += analog.c
|
||||
```
|
||||
|
||||
Then place this include at the top of your code:
|
||||
|
||||
```c
|
||||
#include "analog.h"
|
||||
```
|
||||
|
||||
## Channels
|
||||
|
||||
|Channel|AT90USB64/128|ATmega16/32U4|ATmega32A|ATmega328P|
|
||||
|-------|-------------|-------------|---------|----------|
|
||||
|0 |`F0` |`F0` |`A0` |`C0` |
|
||||
|1 |`F1` |`F1` |`A1` |`C1` |
|
||||
|2 |`F2` | |`A2` |`C2` |
|
||||
|3 |`F3` | |`A3` |`C3` |
|
||||
|4 |`F4` |`F4` |`A4` |`C4` |
|
||||
|5 |`F5` |`F5` |`A5` |`C5` |
|
||||
|6 |`F6` |`F6` |`A6` |* |
|
||||
|7 |`F7` |`F7` |`A7` |* |
|
||||
|8 | |`D4` | | |
|
||||
|9 | |`D6` | | |
|
||||
|10 | |`D7` | | |
|
||||
|11 | |`B4` | | |
|
||||
|12 | |`B5` | | |
|
||||
|13 | |`B6` | | |
|
||||
|
||||
<sup>\* The ATmega328P possesses two extra ADC channels; however, they are not present on the DIP pinout, and are not shared with GPIO pins. You can use `adc_read()` directly to gain access to these.</sup>
|
||||
|
||||
## Functions
|
||||
|
||||
|Function |Description |
|
||||
|----------------------------|-------------------------------------------------------------------------------------------------------------------|
|
||||
|`analogReference(mode)` |Sets the analog voltage reference source. Must be one of `ADC_REF_EXTERNAL`, `ADC_REF_POWER` or `ADC_REF_INTERNAL`.|
|
||||
|`analogRead(pin)` |Reads the value from the specified Arduino pin, eg. `4` for ADC6 on the ATmega32U4. |
|
||||
|`analogReadPin(pin)` |Reads the value from the specified QMK pin, eg. `F6` for ADC6 on the ATmega32U4. |
|
||||
|`pinToMux(pin)` |Translates a given QMK pin to a mux value. If an unsupported pin is given, returns the mux value for "0V (GND)". |
|
||||
|`adc_read(mux)` |Reads the value from the ADC according to the specified mux. See your MCU's datasheet for more information. |
|
@@ -14,7 +14,7 @@ Most of our style is pretty easy to pick up on, but right now it's not entirely
|
||||
* Think of them as a story describing the feature
|
||||
* Use them liberally to explain why particular decisions were made.
|
||||
* Do not write obvious comments
|
||||
* If you not sure if a comment is obvious, go ahead and include it.
|
||||
* If you're not sure if a comment is obvious, go ahead and include it.
|
||||
* In general we don't wrap lines, they can be as long as needed. If you do choose to wrap lines please do not wrap any wider than 76 columns.
|
||||
* We use `#pragma once` at the start of header files rather than old-style include guards (`#ifndef THIS_FILE_H`, `#define THIS_FILE_H`, ..., `#endif`)
|
||||
* We accept both forms of preprocessor if's: `#ifdef DEFINED` and `#if defined(DEFINED)`
|
||||
|
@@ -8,7 +8,7 @@ Most of our style follows PEP8 with some local modifications to make things less
|
||||
* Think of them as a story describing the feature
|
||||
* Use them liberally to explain why particular decisions were made.
|
||||
* Do not write obvious comments
|
||||
* If you not sure if a comment is obvious, go ahead and include it.
|
||||
* If you're not sure if a comment is obvious, go ahead and include it.
|
||||
* We require useful docstrings for all functions.
|
||||
* In general we don't wrap lines, they can be as long as needed. If you do choose to wrap lines please do not wrap any wider than 76 columns.
|
||||
* Some of our practices conflict with the wider python community to make our codebase more approachable to non-pythonistas.
|
||||
|
@@ -101,6 +101,18 @@ 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.
|
||||
|
@@ -114,7 +114,15 @@ 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 struct parameter.
|
||||
|
||||
You must return either `true` or `false` from this function, depending on whether you want to override the keyboard-level implementation.
|
||||
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.
|
||||
|
||||
@@ -122,66 +130,41 @@ You must return either `true` or `false` from this function, depending on whethe
|
||||
|
||||
```c
|
||||
bool led_update_kb(led_t led_state) {
|
||||
if(led_update_user(led_state)) {
|
||||
if (led_state.num_lock) {
|
||||
writePinLow(B0);
|
||||
} else {
|
||||
writePinHigh(B0);
|
||||
}
|
||||
if (led_state.caps_lock) {
|
||||
writePinLow(B1);
|
||||
} else {
|
||||
writePinHigh(B1);
|
||||
}
|
||||
if (led_state.scroll_lock) {
|
||||
writePinLow(B2);
|
||||
} else {
|
||||
writePinHigh(B2);
|
||||
}
|
||||
if (led_state.compose) {
|
||||
writePinLow(B3);
|
||||
} else {
|
||||
writePinHigh(B3);
|
||||
}
|
||||
if (led_state.kana) {
|
||||
writePinLow(B4);
|
||||
} else {
|
||||
writePinHigh(B4);
|
||||
}
|
||||
return true;
|
||||
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);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
```
|
||||
|
||||
### Example `led_update_user()` Implementation
|
||||
|
||||
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.
|
||||
|
||||
```c
|
||||
#ifdef AUDIO_ENABLE
|
||||
float caps_on[][2] = SONG(CAPS_LOCK_ON_SOUND);
|
||||
float caps_off[][2] = SONG(CAPS_LOCK_OFF_SOUND);
|
||||
#endif
|
||||
|
||||
bool led_update_user(led_t led_state) {
|
||||
if (led_state.num_lock) {
|
||||
writePinLow(B0);
|
||||
} else {
|
||||
writePinHigh(B0);
|
||||
}
|
||||
if (led_state.caps_lock) {
|
||||
writePinLow(B1);
|
||||
} else {
|
||||
writePinHigh(B1);
|
||||
}
|
||||
if (led_state.scroll_lock) {
|
||||
writePinLow(B2);
|
||||
} else {
|
||||
writePinHigh(B2);
|
||||
}
|
||||
if (led_state.compose) {
|
||||
writePinLow(B3);
|
||||
} else {
|
||||
writePinHigh(B3);
|
||||
}
|
||||
if (led_state.kana) {
|
||||
writePinLow(B4);
|
||||
} else {
|
||||
writePinHigh(B4);
|
||||
#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;
|
||||
}
|
||||
```
|
||||
@@ -411,7 +394,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);
|
||||
}
|
||||
}
|
||||
@@ -459,18 +442,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
|
||||
}
|
||||
}
|
||||
@@ -483,7 +466,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
|
||||
@@ -508,7 +491,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
|
||||
|
@@ -111,7 +111,7 @@
|
||||
* [Support](de/support.md)
|
||||
* [Übersetzungen](de/translating.md)
|
||||
|
||||
* QMK Internals (de/In Progress)
|
||||
* 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)
|
||||
|
@@ -19,7 +19,7 @@ De cualquier manera, también puedes descargarlo directamente en formatos ([zip]
|
||||
|
||||
## Cómo compilar
|
||||
|
||||
Antes de poder compilar, necesitarás [instalar un entorno](getting_started_build_tools.md) para el desarrollo de AVR y/o ARM. Una vez hayas completado este paso, usarás el comando `make` para compilar un teclado y keymap con la siguiente notación:
|
||||
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
|
||||
|
||||
@@ -29,4 +29,4 @@ Este ejemplo compilaría la revisión `rev4` del teclado `planck` con el keymap
|
||||
|
||||
## Cómo personalizar
|
||||
|
||||
QMK tiene montones de [características](features.md) para explorar, y una buena cantidad de [documentación de referencia](http://docs.qmk.fm) en la que sumergirse. Se pueden sacar provecho de la mayoría de las características modificando tu [keymap](keymap.md), y cambiando los [keycodes](keycodes.md).
|
||||
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 +1,121 @@
|
||||
* [Guía completa para novatos](newbs.md)
|
||||
* [Empezando](newbs_getting_started.md)
|
||||
* [Construyendo tu primer firmare](newbs_building_firmware.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)
|
||||
* [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](README.md)
|
||||
* [Introducción a QMK](getting_started_introduction.md)
|
||||
* [QMK CLI](cli.md)
|
||||
* [Configuración de QMK CLI](cli_configuration.md)
|
||||
* [Contribuyendo a QMK](contributing.md)
|
||||
* [Cómo usar Github](getting_started_github.md)
|
||||
* [Obtener ayuda](getting_started_getting_help.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](breaking_changes.md)
|
||||
* [30 Ago 2019](ChangeLog/20190830.md)
|
||||
* [Cambios incompatibles](es/breaking_changes.md)
|
||||
* [30 Ago 2019](es/ChangeLog/20190830.md)
|
||||
|
||||
* [Preguntas frecuentes](faq.md)
|
||||
* [General](faq_general.md)
|
||||
* [Construir/Compilar QMK](faq_build.md)
|
||||
* [Depurando/Encontrando problemas en QMK](faq_debug.md)
|
||||
* [Keymap](faq_keymap.md)
|
||||
* [Instalación de drivers con Zadig](driver_installation_zadig.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](getting_started_build_tools.md)
|
||||
* [Guía Vagrant](getting_started_vagrant.md)
|
||||
* [Instrucciones de Construcción/Compilado](getting_started_make_guide.md)
|
||||
* [Flasheando Firmware](flashing.md)
|
||||
* [Personalizando funcionalidad](custom_quantum_functions.md)
|
||||
* [Visión general del Keymap](keymap.md)
|
||||
* [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](hardware.md)
|
||||
* [Procesadores AVR](hardware_avr.md)
|
||||
* [Drivers](hardware_drivers.md)
|
||||
* [Hardware](es/hardware.md)
|
||||
* [Procesadores AVR](es/hardware_avr.md)
|
||||
* [Drivers](es/hardware_drivers.md)
|
||||
|
||||
* Referencia
|
||||
* [Pautas de teclados](hardware_keyboard_guidelines.md)
|
||||
* [Opciones de configuración](config_options.md)
|
||||
* [Keycodes](keycodes.md)
|
||||
* [Convenciones de código - C](coding_conventions_c.md)
|
||||
* [Convenciones de código - Python](coding_conventions_python.md)
|
||||
* [Mejores prácticas de documentación](documentation_best_practices.md)
|
||||
* [Plantillas de documentación](documentation_templates.md)
|
||||
* [Glosario](reference_glossary.md)
|
||||
* [Tests unitarios](unit_testing.md)
|
||||
* [Funciones útiles](ref_functions.md)
|
||||
* [Sporte configurador](reference_configurator_support.md)
|
||||
* [Formato info.json](reference_info_json.md)
|
||||
* [Desarrollo Python CLI](cli_development.md)
|
||||
* [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](features.md)
|
||||
* [Keycodes Básicos](keycodes_basic.md)
|
||||
* [Teclas US ANSI Shifted](keycodes_us_ansi_shifted.md)
|
||||
* [Keycodes Quantum](quantum_keycodes.md)
|
||||
* [Keycodes Avanzados](feature_advanced_keycodes.md)
|
||||
* [Audio](feature_audio.md)
|
||||
* [Auto Shift](feature_auto_shift.md)
|
||||
* [Retroiluminación](feature_backlight.md)
|
||||
* [Bluetooth](feature_bluetooth.md)
|
||||
* [Bootmagic](feature_bootmagic.md)
|
||||
* [Combos](feature_combo.md)
|
||||
* [Comando](feature_command.md)
|
||||
* [API Debounce](feature_debounce_type.md)
|
||||
* [Switch DIP](feature_dip_switch.md)
|
||||
* [Macros Dinámicas](feature_dynamic_macros.md)
|
||||
* [Encoders](feature_encoders.md)
|
||||
* [Grave Escape](feature_grave_esc.md)
|
||||
* [Feedback Háptico](feature_haptic_feedback.md)
|
||||
* [Controlador LCD HD44780](feature_hd44780.md)
|
||||
* [Key Lock](feature_key_lock.md)
|
||||
* [Layouts](feature_layouts.md)
|
||||
* [Tecla Leader](feature_leader_key.md)
|
||||
* [Matriz LED](feature_led_matrix.md)
|
||||
* [Macros](feature_macros.md)
|
||||
* [Teclas del ratón](feature_mouse_keys.md)
|
||||
* [Driver OLED](feature_oled_driver.md)
|
||||
* [Teclas One Shot](feature_advanced_keycodes.md#one-shot-keys)
|
||||
* [Dispositivo de apuntado](feature_pointing_device.md)
|
||||
* [Ratón PS/2](feature_ps2_mouse.md)
|
||||
* [Iluminación RGB](feature_rgblight.md)
|
||||
* [Matriz RGB](feature_rgb_matrix.md)
|
||||
* [Cadete espacial](feature_space_cadet.md)
|
||||
* [Teclado dividido](feature_split_keyboard.md)
|
||||
* [Stenografía](feature_stenography.md)
|
||||
* [Swap Hands](feature_swap_hands.md)
|
||||
* [Tap Dance](feature_tap_dance.md)
|
||||
* [Terminal](feature_terminal.md)
|
||||
* [Impresora Térmica](feature_thermal_printer.md)
|
||||
* [Unicode](feature_unicode.md)
|
||||
* [Userspace](feature_userspace.md)
|
||||
* [Velocikey](feature_velocikey.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](hand_wire.md)
|
||||
* [Guía de flasheado de ISP](isp_flashing_guide.md)
|
||||
* [Guía de depuración de ARM](arm_debugging.md)
|
||||
* [Driver I2C](i2c_driver.md)
|
||||
* [Controles GPIO](internals_gpio_control.md)
|
||||
* [Conversión Proton C](proton_c_conversion.md)
|
||||
* [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](how_keyboards_work.md)
|
||||
* [Entendiendo QMK](understanding_qmk.md)
|
||||
* [Cómo funcionan los teclados](es/how_keyboards_work.md)
|
||||
* [Entendiendo QMK](es/understanding_qmk.md)
|
||||
|
||||
* Otros temas
|
||||
* [Usando Eclipse con QMK](other_eclipse.md)
|
||||
* [Usando VSCode con QMK](other_vscode.md)
|
||||
* [Soporte](support.md)
|
||||
* [Cómo añadir traducciones](translating.md)
|
||||
* [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](internals_defines.md)
|
||||
* [Input Callback Reg](internals_input_callback_reg.md)
|
||||
* [Dispositivo Midi](internals_midi_device.md)
|
||||
* [Proceso de configuración de un dispositivo Midi](internals_midi_device_setup_process.md)
|
||||
* [Utilidad Midi](internals_midi_util.md)
|
||||
* [Funciones Send](internals_send_functions.md)
|
||||
* [Herramientas Sysex](internals_sysex_tools.md)
|
||||
* [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)
|
||||
|
@@ -47,7 +47,7 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="feed", MODE:="0666"
|
||||
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"
|
||||
```
|
||||
|
||||
**/etc/udev/rules.d/55-catalina.rules:**
|
||||
**/etc/udev/rules.d/55-caterina.rules:**
|
||||
```
|
||||
# ModemManager should ignore the following devices
|
||||
ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1"
|
||||
@@ -69,6 +69,12 @@ 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.
|
||||
@@ -81,10 +87,6 @@ Re-running the QMK installation script (`./util/qmk_install.sh` from the `qmk_fi
|
||||
|
||||
If that doesn't work, then you may need to download and run Zadig. See [Bootloader Driver Installation with Zadig](driver_installation_zadig.md) for more detailed information.
|
||||
|
||||
## WINAVR is Obsolete
|
||||
It is no longer recommended and may cause some problem.
|
||||
See [TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
|
||||
|
||||
## USB VID and PID
|
||||
You can use any ID you want with editing `config.h`. Using any presumably unused ID will be no problem in fact except for very low chance of collision with other product.
|
||||
|
||||
@@ -97,29 +99,6 @@ You can buy a really unique VID:PID here. I don't think you need this for person
|
||||
- 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`
|
||||
GCC 4.8 of Ubuntu 14.04 had this problem and had to update to 4.9 with this 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
|
||||
Your toolchain is too old to support the MCU. For example WinAVR 20100110 doesn't support 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 for AVR
|
||||
Note that Teensy2.0++ bootloader size is 2048byte. Some Makefiles may have wrong comment.
|
||||
|
||||
|
@@ -112,56 +112,6 @@ In C `1` means one of [int] type which is [16 bit] in case of AVR so you can't s
|
||||
|
||||
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
|
||||
|
||||
If you are using a TeensyUSB, there is a [known bug](https://github.com/qmk/qmk_firmware/issues/164) in which the hardware reset button prevents the RESET key from working. Unplugging the keyboard and plugging it back in should resolve the problem.
|
||||
|
||||
## Special Extra Key Doesn't Work (System, Audio Control Keys)
|
||||
You need to define `EXTRAKEY_ENABLE` in `rules.mk` to use them in QMK.
|
||||
|
||||
@@ -194,24 +144,6 @@ If you would like to keep JTAG enabled, just add the following to your `config.h
|
||||
#define NO_JTAG_DISABLE
|
||||
```
|
||||
|
||||
## 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.
|
||||
|
||||
|
@@ -67,24 +67,8 @@ After enabling this feature use keycodes `KC_LCAP`, `KC_LNUM` and `KC_LSCR` in y
|
||||
Old vintage mechanical keyboards occasionally have lock switches but modern ones don't have. ***You don't need this feature in most case and just use keycodes `KC_CAPS`, `KC_NLCK` and `KC_SLCK`.***
|
||||
|
||||
## Input Special Characters Other Than ASCII like Cédille 'Ç'
|
||||
NO UNIVERSAL METHOD TO INPUT THOSE WORKS OVER ALL SYSTEMS. You have to define **MACRO** in way specific to your OS or layout.
|
||||
|
||||
See this post for example **MACRO** code.
|
||||
|
||||
http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p195620
|
||||
|
||||
On **Windows** you can use `AltGr` key or **Alt code**.
|
||||
* http://en.wikipedia.org/wiki/AltGr_key
|
||||
* http://en.wikipedia.org/wiki/Alt_code
|
||||
|
||||
On **Mac** OS defines `Option` key combinations.
|
||||
* http://en.wikipedia.org/wiki/Option_key#Alternative_keyboard_input
|
||||
|
||||
On **Xorg** you can use `compose` key, instead.
|
||||
* http://en.wikipedia.org/wiki/Compose_key
|
||||
|
||||
And see this for **Unicode** input.
|
||||
* http://en.wikipedia.org/wiki/Unicode_input
|
||||
See the [Unicode](feature_unicode.md) feature.
|
||||
|
||||
## `Fn` Key on macOS
|
||||
|
||||
@@ -130,51 +114,6 @@ https://github.com/tekezo/Karabiner/issues/403
|
||||
|
||||
See the [Grave Escape](feature_grave_esc.md) feature.
|
||||
|
||||
## Arrow on Right Modifier Keys with Dual-Role
|
||||
This turns right modifier keys into arrow keys when the keys are tapped while still modifiers when the keys are hold. In TMK the dual-role function is dubbed **TAP**.
|
||||
```
|
||||
|
||||
#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),
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
Dual-role key: https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
|
||||
|
||||
|
||||
## Eject on Mac OSX
|
||||
`KC_EJCT` keycode works on OSX. https://github.com/tmk/tmk_keyboard/issues/250
|
||||
It seems Windows 10 ignores the code and Linux/Xorg recognizes but has no mapping by default.
|
||||
|
@@ -155,7 +155,7 @@ You can control the behavior of one shot keys by defining these in `config.h`:
|
||||
|
||||
Sometimes, you want to activate a one-shot key as part of a macro or tap dance routine.
|
||||
|
||||
For one shot layers, you need to call `set_oneshot_layer(LAYER, ONESHOT_START)` on key down, and `set_oneshot_layer(ONESHOT_PRESSED)` on key up. If you want to cancel the oneshot, call `reset_oneshot_layer()`.
|
||||
For one shot layers, you need to call `set_oneshot_layer(LAYER, ONESHOT_START)` on key down, and `clear_oneshot_layer_state(ONESHOT_OTHER_KEY_PRESSED)` on key up. If you want to cancel the oneshot, call `reset_oneshot_layer()`.
|
||||
|
||||
For one shot mods, you need to call `set_oneshot_mods(MOD)` to set it, or `clear_oneshot_mods()` to cancel it.
|
||||
|
||||
|
@@ -56,37 +56,37 @@ Hold down the Bootmagic key (Space by default) and the desired hotkey while plug
|
||||
|
||||
## Keycodes
|
||||
|
||||
|Keycode |Aliases |Description |
|
||||
|----------------------------------|---------|------------------------------------------|
|
||||
|`MAGIC_CAPSLOCK_TO_CONTROL` | |Treat Caps Lock as Left Control |
|
||||
|`MAGIC_UNCAPSLOCK_TO_CONTROL` | |Stop treating Caps Lock as Left Control |
|
||||
|`MAGIC_HOST_NKRO` | |Force N-Key Rollover (NKRO) on |
|
||||
|`MAGIC_UNHOST_NKRO` | |Force NKRO off |
|
||||
|`MAGIC_TOGGLE_NKRO` | |Turn NKRO on or off |
|
||||
|`MAGIC_NO_GUI` | |Disable the GUI keys (useful when gaming) |
|
||||
|`MAGIC_UNNO_GUI` | |Enable the GUI keys |
|
||||
|`MAGIC_SWAP_ALT_GUI` |`AG_SWAP`|Swap Alt and GUI on both sides (for macOS)|
|
||||
|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Alt and GUI |
|
||||
|`MAGIC_TOGGLE_ALT_GUI` |`AG_TOGG`|Toggle Alt and GUI swap |
|
||||
|`MAGIC_SWAP_CTL_GUI` |`CG_SWAP`|Swap Ctrl and GUI on both sides (for macOS)|
|
||||
|`MAGIC_UNSWAP_CTL_GUI` |`CG_NORM`|Unswap Ctrl and GUI |
|
||||
|`MAGIC_TOGGLE_CTL_GUI` |`CG_TOGG`|Toggle Ctrl and GUI swap |
|
||||
|`MAGIC_SWAP_BACKSLASH_BACKSPACE` | |Swap `\` and Backspace |
|
||||
|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`| |Unswap `\` and Backspace |
|
||||
|`MAGIC_SWAP_CONTROL_CAPSLOCK` | |Swap Left Control and Caps Lock |
|
||||
|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` | |Unswap Left Control and Caps Lock |
|
||||
|`MAGIC_SWAP_GRAVE_ESC` | |Swap <code>`</code> and Escape |
|
||||
|`MAGIC_UNSWAP_GRAVE_ESC` | |Unswap <code>`</code> and Escape |
|
||||
|`MAGIC_SWAP_LALT_LGUI` | |Swap Left Alt and Left GUI |
|
||||
|`MAGIC_UNSWAP_LALT_LGUI` | |Unswap Left Alt and Left GUI |
|
||||
|`MAGIC_SWAP_RALT_RGUI` | |Swap Right Alt and Right GUI |
|
||||
|`MAGIC_UNSWAP_RALT_RGUI` | |Unswap Right Alt and Right GUI |
|
||||
|`MAGIC_SWAP_LCTL_LGUI` | |Swap Left Control and Left GUI |
|
||||
|`MAGIC_UNSWAP_LCTL_LGUI` | |Unswap Left Control and Left GUI |
|
||||
|`MAGIC_SWAP_RCTL_RGUI` | |Swap Right Control and Right GUI |
|
||||
|`MAGIC_UNSWAP_RCTL_RGUI` | |Unswap Right Control and Right GUI |
|
||||
|`MAGIC_EE_HANDS_LEFT` | |Set "Left Hand" for EE_HANDS handedness |
|
||||
|`MAGIC_EE_HANDS_RIGHT` | |Set "Right Hand" for EE_HANDS handedness |
|
||||
|Key |Aliases |Description |
|
||||
|----------------------------------|---------|--------------------------------------------------------------------------|
|
||||
|`MAGIC_SWAP_CONTROL_CAPSLOCK` |`CL_SWAP`|Swap Caps Lock and Left Control |
|
||||
|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` |`CL_NORM`|Unswap Caps Lock and Left Control |
|
||||
|`MAGIC_CAPSLOCK_TO_CONTROL` |`CL_CTRL`|Treat Caps Lock as Control |
|
||||
|`MAGIC_UNCAPSLOCK_TO_CONTROL` |`CL_CAPS`|Stop treating Caps Lock as Control |
|
||||
|`MAGIC_SWAP_LCTL_LGUI` |`LCG_SWP`|Swap Left Control and GUI |
|
||||
|`MAGIC_UNSWAP_LCTL_LGUI` |`LCG_NRM`|Unswap Left Control and GUI |
|
||||
|`MAGIC_SWAP_RCTL_RGUI` |`RCG_SWP`|Swap Right Control and GUI |
|
||||
|`MAGIC_UNSWAP_RCTL_RGUI` |`RCG_NRM`|Unswap Right Control and GUI |
|
||||
|`MAGIC_SWAP_CTL_GUI` |`CG_SWAP`|Swap Control and GUI on both sides |
|
||||
|`MAGIC_UNSWAP_CTL_GUI` |`CG_NORM`|Unswap Control and GUI on both sides |
|
||||
|`MAGIC_TOGGLE_CTL_GUI` |`CG_TOGG`|Toggle Control and GUI swap on both sides |
|
||||
|`MAGIC_SWAP_LALT_LGUI` |`LAG_SWP`|Swap Left Alt and GUI |
|
||||
|`MAGIC_UNSWAP_LALT_LGUI` |`LAG_NRM`|Unswap Left Alt and GUI |
|
||||
|`MAGIC_SWAP_RALT_RGUI` |`RAG_SWP`|Swap Right Alt and GUI |
|
||||
|`MAGIC_UNSWAP_RALT_RGUI` |`RAG_NRM`|Unswap Right Alt and GUI |
|
||||
|`MAGIC_SWAP_ALT_GUI` |`AG_SWAP`|Swap Alt and GUI on both sides |
|
||||
|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Alt and GUI on both sides |
|
||||
|`MAGIC_TOGGLE_ALT_GUI` |`AG_TOGG`|Toggle Alt and GUI swap on both sides |
|
||||
|`MAGIC_NO_GUI` |`GUI_OFF`|Disable the GUI keys |
|
||||
|`MAGIC_UNNO_GUI` |`GUI_ON` |Enable the GUI keys |
|
||||
|`MAGIC_SWAP_GRAVE_ESC` |`GE_SWAP`|Swap <code>`</code> and Escape |
|
||||
|`MAGIC_UNSWAP_GRAVE_ESC` |`GE_NORM`|Unswap <code>`</code> and Escape |
|
||||
|`MAGIC_SWAP_BACKSLASH_BACKSPACE` |`BS_SWAP`|Swap `\` and Backspace |
|
||||
|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`|`BS_NORM`|Unswap `\` and Backspace |
|
||||
|`MAGIC_HOST_NKRO` |`NK_ON` |Enable N-key rollover |
|
||||
|`MAGIC_UNHOST_NKRO` |`NK_OFF` |Disable N-key rollover |
|
||||
|`MAGIC_TOGGLE_NKRO` |`NK_TOGG`|Toggle N-key rollover |
|
||||
|`MAGIC_EE_HANDS_LEFT` |`EH_LEFT`|Set the master half of a split keyboard as the left hand (for `EE_HANDS`) |
|
||||
|`MAGIC_EE_HANDS_RIGHT` |`EH_RGHT`|Set the master half of a split keyboard as the right hand (for `EE_HANDS`)|
|
||||
|
||||
## Configuration
|
||||
|
||||
|
@@ -2,7 +2,7 @@
|
||||
|
||||
## Haptic feedback rules.mk options
|
||||
|
||||
The following options are currently available for haptic feedback in `rule.mk`:
|
||||
The following options are currently available for haptic feedback in `rules.mk`:
|
||||
|
||||
`HAPTIC_ENABLE += DRV2605L`
|
||||
|
||||
|
@@ -22,10 +22,10 @@ void matrix_scan_user(void) {
|
||||
SEND_STRING("QMK is awesome.");
|
||||
}
|
||||
SEQ_TWO_KEYS(KC_D, KC_D) {
|
||||
SEND_STRING(SS_LCTRL("a")SS_LCTRL("c"));
|
||||
SEND_STRING(SS_LCTL("a") SS_LCTL("c"));
|
||||
}
|
||||
SEQ_THREE_KEYS(KC_D, KC_D, KC_S) {
|
||||
SEND_STRING("https://start.duckduckgo.com"SS_TAP(X_ENTER));
|
||||
SEND_STRING("https://start.duckduckgo.com\n");
|
||||
}
|
||||
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_LCTRL(SS_LSFT("t")));
|
||||
SEND_STRING(SS_LCTL(SS_LSFT("t")));
|
||||
did_leader_succeed = true;
|
||||
} else
|
||||
SEQ_TWO_KEYS(KC_E, KC_D) {
|
||||
SEND_STRING(SS_LGUI("r")"cmd"SS_TAP(KC_ENTER)SS_LCTRL("c"));
|
||||
SEND_STRING(SS_LGUI("r") "cmd\n" SS_LCTL("c"));
|
||||
did_leader_succeed = true;
|
||||
}
|
||||
leader_end();
|
||||
|
@@ -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/" SS_TAP(X_ENTER));
|
||||
SEND_STRING("https://qmk.fm/\n");
|
||||
} else {
|
||||
// when keycode QMKURL is released
|
||||
}
|
||||
break;
|
||||
case MY_OTHER_MACRO:
|
||||
if (record->event.pressed) {
|
||||
SEND_STRING(SS_LCTRL("ac")); // selects all and copies
|
||||
SEND_STRING(SS_LCTL("ac")); // selects all and copies
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -109,18 +109,21 @@ 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_LCTRL(string)`
|
||||
* `SS_LGUI(string)`
|
||||
* `SS_LALT(string)`
|
||||
* `SS_LCTL(string)`
|
||||
* `SS_LSFT(string)`
|
||||
* `SS_RALT(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)`
|
||||
|
||||
These press the respective modifier, send the supplied string and then release the modifier.
|
||||
They can be used like this:
|
||||
|
||||
SEND_STRING(SS_LCTRL("a"));
|
||||
SEND_STRING(SS_LCTL("a"));
|
||||
|
||||
Which would send LCTRL+a (LCTRL down, a, LCTRL up) - notice that they take strings (eg `"k"`), and not the `X_K` keycodes.
|
||||
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.
|
||||
|
||||
### Alternative Keymaps
|
||||
|
||||
|
@@ -173,16 +173,20 @@ As mentioned earlier, the center of the keyboard by default is expected to be `{
|
||||
|
||||
All RGB keycodes are currently shared with the RGBLIGHT system:
|
||||
|
||||
* `RGB_TOG` - toggle
|
||||
* `RGB_MOD` - cycle through modes
|
||||
* `RGB_HUI` - increase hue
|
||||
* `RGB_HUD` - decrease hue
|
||||
* `RGB_SAI` - increase saturation
|
||||
* `RGB_SAD` - decrease saturation
|
||||
* `RGB_VAI` - increase value
|
||||
* `RGB_VAD` - decrease value
|
||||
* `RGB_SPI` - increase speed effect (no EEPROM support)
|
||||
* `RGB_SPD` - decrease speed effect (no EEPROM support)
|
||||
|Key |Aliases |Description |
|
||||
|-------------------|----------|--------------------------------------------------------------------------------------|
|
||||
|`RGB_TOG` | |Toggle RGB lighting on or off |
|
||||
|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held |
|
||||
|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held |
|
||||
|`RGB_HUI` | |Increase hue, decrease hue when Shift is held |
|
||||
|`RGB_HUD` | |Decrease hue, increase hue when Shift is held |
|
||||
|`RGB_SAI` | |Increase saturation, decrease saturation when Shift is held |
|
||||
|`RGB_SAD` | |Decrease saturation, increase saturation when Shift is held |
|
||||
|`RGB_VAI` | |Increase value (brightness), decrease value when Shift is held |
|
||||
|`RGB_VAD` | |Decrease value (brightness), increase value when Shift is held |
|
||||
|`RGB_SPI` | |Increase effect speed (does not support eeprom yet), decrease speed when Shift is held|
|
||||
|`RGB_SPD` | |Decrease effect speed (does not support eeprom yet), increase speed when Shift is held|
|
||||
|
||||
* `RGB_MODE_*` keycodes will generally work, but are not currently mapped to the correct effects for the RGB Matrix system
|
||||
|
||||
## RGB Matrix Effects
|
||||
@@ -282,7 +286,7 @@ You can disable a single effect by defining `DISABLE_[EFFECT_NAME]` in your `con
|
||||
|
||||
## Custom RGB Matrix Effects
|
||||
|
||||
By setting `RGB_MATRIX_CUSTOM_USER` (and/or `RGB_MATRIX_CUSTOM_KB`) in `rule.mk`, new effects can be defined directly from userspace, without having to edit any QMK core files.
|
||||
By setting `RGB_MATRIX_CUSTOM_USER` (and/or `RGB_MATRIX_CUSTOM_KB`) in `rules.mk`, new effects can be defined directly from userspace, without having to edit any QMK core files.
|
||||
|
||||
To declare new effects, create a new `rgb_matrix_user/kb.inc` that looks something like this:
|
||||
|
||||
|
@@ -48,12 +48,12 @@ Changing the **Value** sets the overall brightness.<br>
|
||||
|`RGB_TOG` | |Toggle RGB lighting on or off |
|
||||
|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held |
|
||||
|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held|
|
||||
|`RGB_HUI` | |Increase hue |
|
||||
|`RGB_HUD` | |Decrease hue |
|
||||
|`RGB_SAI` | |Increase saturation |
|
||||
|`RGB_SAD` | |Decrease saturation |
|
||||
|`RGB_VAI` | |Increase value (brightness) |
|
||||
|`RGB_VAD` | |Decrease value (brightness) |
|
||||
|`RGB_HUI` | |Increase hue, decrease hue when Shift is held |
|
||||
|`RGB_HUD` | |Decrease hue, increase hue when Shift is held |
|
||||
|`RGB_SAI` | |Increase saturation, decrease saturation when Shift is held |
|
||||
|`RGB_SAD` | |Decrease saturation, increase saturation when Shift is held |
|
||||
|`RGB_VAI` | |Increase value (brightness), decrease value when Shift is held |
|
||||
|`RGB_VAD` | |Decrease value (brightness), increase value when Shift is held |
|
||||
|`RGB_MODE_PLAIN` |`RGB_M_P `|Static (no animation) mode |
|
||||
|`RGB_MODE_BREATHE` |`RGB_M_B` |Breathing animation mode |
|
||||
|`RGB_MODE_RAINBOW` |`RGB_M_R` |Rainbow animation mode |
|
||||
|
@@ -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");
|
||||
}
|
||||
SEND_STRING(SS_TAP(X_ENTER));
|
||||
tap_code(KC_ENT);
|
||||
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:
|
||||
|
||||
|
@@ -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](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](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 :
|
||||
|
||||
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](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).
|
||||
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).
|
||||
|
@@ -29,97 +29,97 @@
|
||||
**En Anglais**
|
||||
|
||||
* 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)
|
||||
* [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](custom_quantum_functions.md)
|
||||
* [Aperçu des fonctionnalités des dispositions](keymap.md)
|
||||
* [Personnaliser les fonctionnalités](fr-fr/custom_quantum_functions.md)
|
||||
* [Aperçu des fonctionnalités des dispositions](fr-fr/keymap.md)
|
||||
|
||||
* [Hardware](hardware.md)
|
||||
* [Processeurs AVR](hardware_avr.md)
|
||||
* [Pilotes / Drivers](hardware_drivers.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](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)
|
||||
* [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](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)
|
||||
* [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](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)
|
||||
* [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](how_keyboards_work.md)
|
||||
* [Comprendre QMK](understanding_qmk.md)
|
||||
* [Comment fonctionnent les claviers](fr-fr/how_keyboards_work.md)
|
||||
* [Comprendre QMK](fr-fr/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)
|
||||
* [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](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)
|
||||
* [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)
|
||||
|
@@ -86,10 +86,6 @@ Relancer le script d'installation de QMK (`./util/qmk_install.sh` situé dans r
|
||||
|
||||
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.
|
||||
@@ -103,30 +99,6 @@ Vous pouvez acheter un VID:PID unique ici. Je ne pense pas que ce soit nécessai
|
||||
- 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.
|
||||
|
@@ -104,58 +104,6 @@ En C, `1` implique un type [int] qui est [16 bits] pour les AVR, ce qui implique
|
||||
|
||||
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.
|
||||
@@ -189,25 +137,6 @@ Si vous voulez garder JTAG activé, ajoutez la ligne suivante à votre fichier `
|
||||
#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.
|
||||
|
@@ -72,24 +72,7 @@ Des vieux claviers mécaniques ont parfois des touches à verrouillage, mais les
|
||||
|
||||
## 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
|
||||
Voir la fonctionnalité [Unicode](feature_unicode.md).
|
||||
|
||||
## Touche `Fn` sur macOS
|
||||
|
||||
@@ -144,54 +127,6 @@ Cette fonctionnalité permet d'utiliser une touche à la fois comme touche Écha
|
||||
|
||||
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
|
||||
|
@@ -19,7 +19,7 @@ And be sure to select "HTTPS", and select the link and copy it:
|
||||
From here, enter `git clone ` into the command line, and then paste your link:
|
||||
|
||||
```
|
||||
user@computer:~$ git clone https://github.com/whoeveryouare/qmk_firmware.git
|
||||
user@computer:~$ git clone --recurse-submodules https://github.com/whoeveryouare/qmk_firmware.git
|
||||
Cloning into 'qmk_firmware'...
|
||||
remote: Counting objects: 46625, done.
|
||||
remote: Compressing objects: 100% (2/2), done.
|
||||
|
@@ -4,7 +4,7 @@ This page attempts to explain the basic information you need to know to work wit
|
||||
|
||||
## Basic QMK Structure
|
||||
|
||||
QMK is a fork of [Jun Wako](https://github.com/tmk)'s [tmk_keyboard](https://github.com/tmk/tmk_keyboard) project. The original TMK code, with modifications, can be found in the `tmk` folder. The QMK additions to the project may be found in the `quantum` folder. Keyboard projects may be found in the `handwired` and `keyboard` folders.
|
||||
QMK is a fork of [Jun Wako](https://github.com/tmk)'s [tmk_keyboard](https://github.com/tmk/tmk_keyboard) project. The original TMK code, with modifications, can be found in the `tmk_core` folder. The QMK additions to the project may be found in the `quantum` folder. Keyboard projects may be found in the `handwired` and `keyboard` folders.
|
||||
|
||||
### Userspace Structure
|
||||
|
||||
|
@@ -59,7 +59,7 @@ To disable debug messages (*dprint*) and reduce the .hex file size, include `#de
|
||||
|
||||
To disable print messages (*print*, *xprintf*) and user print messages (*uprint*) and reduce the .hex file size, include `#define NO_PRINT` in your `config.h` file.
|
||||
|
||||
To disable print messages (*print*, *xprintf*) and **KEEP** user print messages (*uprint*), include `#define USER_PRINT` in your `config.h` file.
|
||||
To disable print messages (*print*, *xprintf*) and **KEEP** user print messages (*uprint*), include `#define USER_PRINT` in your `config.h` file (do not also include `#define NO_PRINT` in this case).
|
||||
|
||||
To see the text, open `hid_listen` and enjoy looking at your printed messages.
|
||||
|
||||
|
@@ -20,7 +20,7 @@ QMK (*Quantum Mechanical Keyboard*) היא קהילת קוד פתוח (open sour
|
||||
|
||||
## איך לקמפל
|
||||
|
||||
לפני שתצליחו לקמפל, תדרשו [להתקין סביבה](getting_started_build_tools.md) עבור פיתוח AVR ו/או ARM. ברגע שהדבר בוצע, תוכלו להריץ פקודת `make` כדי לבנות מקלדת ומיפוי עם התחביר הבא:
|
||||
לפני שתצליחו לקמפל, תדרשו [להתקין סביבה](he-il/getting_started_build_tools.md) עבור פיתוח AVR ו/או ARM. ברגע שהדבר בוצע, תוכלו להריץ פקודת `make` כדי לבנות מקלדת ומיפוי עם התחביר הבא:
|
||||
|
||||
make planck/rev4:default
|
||||
|
||||
@@ -30,5 +30,5 @@ QMK (*Quantum Mechanical Keyboard*) היא קהילת קוד פתוח (open sour
|
||||
|
||||
## איך להתאים
|
||||
|
||||
לQMK יש המון [יכולות](features.md) שאפשר לנווט בהן, וכמות נכבדת של [תיעוד ודוקומנטציה](http://docs.qmk.fm) בה אפשר לנבור. רוב הפיצ׳רים באים לידי ביטוי על ידי שינוי [מיפוי המקלדת](keymap.md) ושינוי [קודי המקשים](keycodes.md).
|
||||
לQMK יש המון [יכולות](he-il/features.md) שאפשר לנווט בהן, וכמות נכבדת של [תיעוד ודוקומנטציה](http://docs.qmk.fm) בה אפשר לנבור. רוב הפיצ׳רים באים לידי ביטוי על ידי שינוי [מיפוי המקלדת](he-il/keymap.md) ושינוי [קודי המקשים](he-il/keycodes.md).
|
||||
</div>
|
||||
|
@@ -1,6 +1,7 @@
|
||||
<div dir="rtl" markdown="1">
|
||||
|
||||
**בשפה העברית**
|
||||
* [המדריך המלא למתחילים](newbs.md)
|
||||
* [המדריך המלא למתחילים](he-il/newbs.md)
|
||||
* [מקורות ללמידה](he-il/newbs_learn_more_resources.md)
|
||||
* [בסיס QMK](he-il/README.md)
|
||||
* [מבוא לQMK](he-il/getting_started_introduction.md)
|
||||
@@ -13,126 +14,126 @@
|
||||
* [איך לתעד נכון](he-il/documentation_best_practices.md)
|
||||
|
||||
**בשפה האנגלית**
|
||||
* [המדריך המלא למתחילים](newbs.md)
|
||||
* [התחלה](newbs_getting_started.md)
|
||||
* [בנייה של הקושחה הראשונה שלך](newbs_building_firmware.md)
|
||||
* [צריבה של הקושחה](newbs_flashing.md)
|
||||
* [בדיקות ודיבאגינג](newbs_testing_debugging.md)
|
||||
* [עבודה נכונה ב GIT](newbs_best_practices.md)
|
||||
* [מקורות ללמידה](newbs_learn_more_resources.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](README.md)
|
||||
* [מבוא לQMK](getting_started_introduction.md)
|
||||
* [QMK CLI](cli.md)
|
||||
* [QMK CLI Config](cli_configuration.md)
|
||||
* [תרומה ל QMK](contributing.md)
|
||||
* [איך להשתמש בGithub](getting_started_github.md)
|
||||
* [קבלת עזרה](getting_started_getting_help.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)
|
||||
|
||||
* [שינויים משמעותיים](breaking_changes.md)
|
||||
* [2019 Aug 30](ChangeLog/20190830.md)
|
||||
* [שינויים משמעותיים](he-il/breaking_changes.md)
|
||||
* [2019 Aug 30](he-il/ChangeLog/20190830.md)
|
||||
|
||||
* [שאלות נפוצות](faq.md)
|
||||
* [שאלות נפוצות כלליות](faq_general.md)
|
||||
* [בנייה/קומפילציה של QMK](faq_build.md)
|
||||
* [דיבאגינג ופתרון תקלות של QMK](faq_debug.md)
|
||||
* [מיפוי מקשים](faq_keymap.md)
|
||||
* [התקנת דרייברים עם Zadig](driver_installation_zadig.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](getting_started_build_tools.md)
|
||||
* [מדריך Vagrant](getting_started_vagrant.md)
|
||||
* [הוראות בנייה/קומפילציה](getting_started_make_guide.md)
|
||||
* [צריבת קושחה](flashing.md)
|
||||
* [התאמה אישית של הפונקציונאליות](custom_quantum_functions.md)
|
||||
* [מיפוי מקשים](keymap.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)
|
||||
|
||||
* [חומרה](hardware.md)
|
||||
* [מעבדי AVR](hardware_avr.md)
|
||||
* [דרייברים](hardware_drivers.md)
|
||||
* [חומרה](he-il/hardware.md)
|
||||
* [מעבדי AVR](he-il/hardware_avr.md)
|
||||
* [דרייברים](he-il/hardware_drivers.md)
|
||||
|
||||
* התייחסויות
|
||||
* [מדריך למקלדות](hardware_keyboard_guidelines.md)
|
||||
* [אפשרויות הגדרות](config_options.md)
|
||||
* [קודי מקשים](keycodes.md)
|
||||
* [קונבנציות קוד - C](coding_conventions_c.md)
|
||||
* [קונבנציות קוד - Python](coding_conventions_python.md)
|
||||
* [איך לתעד נכון](documentation_best_practices.md)
|
||||
* [טמפלטים לדוקומנטציה](documentation_templates.md)
|
||||
* [מילון](reference_glossary.md)
|
||||
* [בדיקות יחידה](unit_testing.md)
|
||||
* [פונקציות שימושיות](ref_functions.md)
|
||||
* [תמיכה בConfigurator](reference_configurator_support.md)
|
||||
* [פורמט info.json](reference_info_json.md)
|
||||
* [פיתוח בPython CLI](cli_development.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)
|
||||
|
||||
* [תכונות](features.md)
|
||||
* [Basic Keycodes](keycodes_basic.md)
|
||||
* [US ANSI Shifted Keys](keycodes_us_ansi_shifted.md)
|
||||
* [Quantum Keycodes](quantum_keycodes.md)
|
||||
* [Advanced Keycodes](feature_advanced_keycodes.md)
|
||||
* [Audio](feature_audio.md)
|
||||
* [Auto Shift](feature_auto_shift.md)
|
||||
* [Backlight](feature_backlight.md)
|
||||
* [Bluetooth](feature_bluetooth.md)
|
||||
* [Bootmagic](feature_bootmagic.md)
|
||||
* [Combos](feature_combo.md)
|
||||
* [Command](feature_command.md)
|
||||
* [Debounce API](feature_debounce_type.md)
|
||||
* [DIP Switch](feature_dip_switch.md)
|
||||
* [Dynamic Macros](feature_dynamic_macros.md)
|
||||
* [Encoders](feature_encoders.md)
|
||||
* [Grave Escape](feature_grave_esc.md)
|
||||
* [Haptic Feedback](feature_haptic_feedback.md)
|
||||
* [HD44780 LCD Controller](feature_hd44780.md)
|
||||
* [Key Lock](feature_key_lock.md)
|
||||
* [Layouts](feature_layouts.md)
|
||||
* [Leader Key](feature_leader_key.md)
|
||||
* [LED Matrix](feature_led_matrix.md)
|
||||
* [Macros](feature_macros.md)
|
||||
* [Mouse Keys](feature_mouse_keys.md)
|
||||
* [OLED Driver](feature_oled_driver.md)
|
||||
* [One Shot Keys](feature_advanced_keycodes.md#one-shot-keys)
|
||||
* [Pointing Device](feature_pointing_device.md)
|
||||
* [PS/2 Mouse](feature_ps2_mouse.md)
|
||||
* [RGB Lighting](feature_rgblight.md)
|
||||
* [RGB Matrix](feature_rgb_matrix.md)
|
||||
* [Space Cadet](feature_space_cadet.md)
|
||||
* [Split Keyboard](feature_split_keyboard.md)
|
||||
* [Stenography](feature_stenography.md)
|
||||
* [Swap Hands](feature_swap_hands.md)
|
||||
* [Tap Dance](feature_tap_dance.md)
|
||||
* [Terminal](feature_terminal.md)
|
||||
* [Thermal Printer](feature_thermal_printer.md)
|
||||
* [Unicode](feature_unicode.md)
|
||||
* [Userspace](feature_userspace.md)
|
||||
* [Velocikey](feature_velocikey.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)
|
||||
|
||||
* למייקרים ומודרים
|
||||
* [מדריך לכתיבה ידנית](hand_wire.md)
|
||||
* [מדריך לצריבת ISP](isp_flashing_guide.md)
|
||||
* [מדריך לדיבאגינג ARM](arm_debugging.md)
|
||||
* [מנהל התקן I2C](i2c_driver.md)
|
||||
* [בקרת GPIO](internals_gpio_control.md)
|
||||
* [המרת Proton C](proton_c_conversion.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)
|
||||
|
||||
* להבנה עמוקה יותר
|
||||
* [איך עובדות מקלדות](how_keyboards_work.md)
|
||||
* [להבין את QMK](understanding_qmk.md)
|
||||
* [איך עובדות מקלדות](he-il/how_keyboards_work.md)
|
||||
* [להבין את QMK](he-il/understanding_qmk.md)
|
||||
|
||||
* נושאים נוספים
|
||||
* [שימוש ב - Eclipse עם QMK](other_eclipse.md)
|
||||
* [שימוש ב - VSCode עם QMK](other_vscode.md)
|
||||
* [תמיכה](support.md)
|
||||
* [כיצד להוסיף תרגום](translating.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](internals_defines.md)
|
||||
* [Input Callback Reg](internals_input_callback_reg.md)
|
||||
* [Midi Device](internals_midi_device.md)
|
||||
* [Midi Device Setup Process](internals_midi_device_setup_process.md)
|
||||
* [Midi Util](internals_midi_util.md)
|
||||
* [Send Functions](internals_send_functions.md)
|
||||
* [Sysex Tools](internals_sysex_tools.md)
|
||||
* [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>
|
||||
|
@@ -21,7 +21,7 @@
|
||||
<div id="app"></div>
|
||||
<script>
|
||||
window.$docsify = {
|
||||
alias : {
|
||||
alias: {
|
||||
'/en/(.*)': '/$1',
|
||||
'/en-us/(.*)': '/$1',
|
||||
'/en-gb/(.*)': '/$1',
|
||||
@@ -29,12 +29,32 @@
|
||||
},
|
||||
basePath: '/',
|
||||
name: 'QMK Firmware',
|
||||
nameLink: '/',
|
||||
nameLink: {
|
||||
'/de/': '/#/de/',
|
||||
'/es/': '/#/es/',
|
||||
'/fr-fr/': '/#/fr-fr/',
|
||||
'/he-il/': '/#/he-il/',
|
||||
'/ja/': '/#/ja/',
|
||||
'/pt-br/': '/#/pt-br/',
|
||||
'/ru-ru/': '/#/ru-ru/',
|
||||
'/zh-cn/': '/#/zh-cn/',
|
||||
'/': '/#/'
|
||||
},
|
||||
repo: 'qmk/qmk_firmware',
|
||||
loadSidebar: '_summary.md',
|
||||
loadNavbar: '_langs.md',
|
||||
mergeNavbar: true,
|
||||
auto2top: true,
|
||||
fallbackLanguages: [
|
||||
'de',
|
||||
'es',
|
||||
'fr-fr',
|
||||
'he-il',
|
||||
'ja',
|
||||
'pt-br',
|
||||
'ru-ru',
|
||||
'zh-cn'
|
||||
],
|
||||
formatUpdated: '{YYYY}/{MM}/{DD} {HH}:{mm}',
|
||||
search: {
|
||||
paths: 'auto',
|
||||
@@ -42,12 +62,14 @@
|
||||
'/es/': 'Buscar',
|
||||
'/zh-cn/': '搜索',
|
||||
'/ja/': '検索',
|
||||
'/pt-br/': 'Busca',
|
||||
'/': 'Search'
|
||||
},
|
||||
noData: {
|
||||
'/es/': '¡Ningún resultado!',
|
||||
'/zh-cn/': '没有结果!',
|
||||
'/ja/': '見つかりません!',
|
||||
'/pt-br/': 'Nenhum resultado!',
|
||||
'/': 'No results!'
|
||||
},
|
||||
depth: 6
|
||||
|
37
docs/ja/README.md
Normal file
37
docs/ja/README.md
Normal file
@@ -0,0 +1,37 @@
|
||||
# Quantum Mechanical Keyboard Firmware
|
||||
|
||||
<!---
|
||||
original document: eae21eed7:docs/README.md
|
||||
git diff eae21eed7 HEAD docs/README.md | cat
|
||||
-->
|
||||
|
||||
[](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*)は QMK ファームウェア、QMK ツールボックス、qmk.fm およびそれらのドキュメントを保守するオープンソースコミュニティです。QMK ファームウェアは[tmk\_keyboard](http://github.com/tmk/tmk_keyboard) を元にしたキーボードファームウェアで、Atmel AVR コントローラ、より具体的には [OLKB 製品](http://olkb.com)、[ErgoDox EZ](http://www.ergodox-ez.com) キーボードおよび [Clueboard 製品](http://clueboard.co/) のための幾つかの便利な機能を持ちます。また、ChibiOS を使って ARM チップに移植されています。これを使ってあなたの作った手配線のキーボードあるいはカスタムキーボード PCB で作ったキーボードを動かすことができます。
|
||||
|
||||
## 入手方法
|
||||
|
||||
QMK のキーマップ、キーボード、機能に貢献をする予定がある場合、最も簡単なのは、[Github を介してリポジトリをフォークし](https://github.com/qmk/qmk_firmware#fork-destination-box)、リポジトリをあなたの開発環境にクローンして変更を加え、それらをプッシュし、[プルリクエスト](https://github.com/qmk/qmk_firmware/pulls)を開くことです。
|
||||
|
||||
それ以外の場合は、`git clone https://github.com/qmk/qmk_firmware` を介して直接クローンすることができます。zip または tar ファイルをダウンロードしないでください。コンパイルするためのサブモジュールをダウンロードするために git リポジトリが必要です。
|
||||
|
||||
## コンパイル方法
|
||||
|
||||
コンパイルをする前に、AVR または ARM 開発のための[環境をインストール](ja/getting_started_build_tools.md)する必要があります。それが完了したら、`make` コマンドを使用して、以下の表記でキーボードとキーマップをビルドします。
|
||||
|
||||
make planck/rev4:default
|
||||
|
||||
これは、`planck` の `rev4` リビジョンを `default` キーマップでビルドします。全てのキーボードにリビジョン(サブプロジェクトまたはフォルダとも呼ばれます)があるわけではありません。その場合は省略されます:
|
||||
|
||||
make preonic:default
|
||||
|
||||
## カスタマイズ方法
|
||||
|
||||
QMK には、探求すべき多くの[機能](ja/features.md)と、深堀りするための[リファレンス ドキュメント](http://docs.qmk.fm)がたくさんあります。ほとんどの機能は[キーマップ](ja/keymap.md)を変更し、[キーコード](ja/keycodes.md)を変更することで活用されます。
|
92
docs/ja/arm_debugging.md
Normal file
92
docs/ja/arm_debugging.md
Normal file
@@ -0,0 +1,92 @@
|
||||
# Eclipse を使った ARM デバッグ
|
||||
|
||||
<!---
|
||||
original document: eae21eed7:docs/arm_debugging.md
|
||||
git diff eae21eed7 HEAD docs/arm_debugging.md | cat
|
||||
-->
|
||||
|
||||
このページでは、SWD アダプタとオープンソース/フリーツールを使って ARM MCU をデバッグするためのセットアップ方法について説明します。このガイドでは、GNU MCU Eclipse IDE for C/C++ Developers および OpenOCD を必要な依存関係と一緒にインストールします。
|
||||
|
||||
このガイドは上級者向けであり、あなたのマシンで、MAKE フローを使って、ARM 互換キーボードをコンパイルできることを前提にしています。
|
||||
|
||||
## ソフトウェアのインストール
|
||||
|
||||
ここでの主な目的は MCU Eclipse IDE を正しくマシンにインストールすることです。必要な手順は[この](https://gnu-mcu-eclipse.github.io/install/)インストールガイドから派生しています。
|
||||
|
||||
### xPack マネージャ
|
||||
|
||||
このツールはソフトウェアパッケージマネージャであり、必要な依存関係を取得するために使われます。
|
||||
|
||||
XPM は Node.js を使って実行されるため、[ここ](https://nodejs.org/en/)から取得してください。インストール後に、ターミナルを開き `npm -v` と入力します。バージョン番号が返ってくるとインストールは成功です。
|
||||
|
||||
XPM のインストール手順は[ここ](https://www.npmjs.com/package/xpm)で見つけることができ、OS 固有のものです。ターミナルに `xpm --version` と入力すると、ソフトウェアのバージョンが返ってくるはずです。
|
||||
|
||||
### ARM ツールチェーン
|
||||
|
||||
XPM を使うと、ARM ツールチェーンをとても簡単にインストールできます。`xpm install --global @gnu-mcu-eclipse/arm-none-eabi-gcc` とコマンドを入力します。
|
||||
|
||||
### Windows ビルドツール
|
||||
|
||||
Windows を使っている場合は、これをインストールする必要があります!
|
||||
|
||||
`xpm install --global @gnu-mcu-eclipse/windows-build-tools`
|
||||
|
||||
### プログラマ/デバッガドライバ
|
||||
|
||||
プログラマのドライバをインストールします。このチュートリアルはほとんどどこでも入手できる ST-Link v2 を使って作成されました。
|
||||
ST-Link を持っている場合は、ドライバは[ここ](https://www.st.com/en/development-tools/stsw-link009.html)で見つけることができます。そうでない場合はツールの製造元にお問い合わせください。
|
||||
|
||||
### OpenOCD
|
||||
|
||||
この依存関係により、SWD は GDB からアクセスでき、デバッグに不可欠です。`xpm install --global @gnu-mcu-eclipse/openocd` を実行します。
|
||||
|
||||
### Java
|
||||
|
||||
Java は Eclipse で必要とされるため、[ここ](https://www.oracle.com/technetwork/java/javase/downloads/index.html)からダウンロードしてください。
|
||||
|
||||
### GNU MCU Eclipse IDE
|
||||
|
||||
最後に IDE をインストールする番です。[ここ](https://github.com/gnu-mcu-eclipse/org.eclipse.epp.packages/releases/)のリリースページから最新バージョンを取得します。
|
||||
|
||||
## Eclipse の設定
|
||||
|
||||
ダウンロードした Eclipse IDE を開きます。QMK ディレクトリをインポートするために、File -> Import -> C/C++ -> Existing code as Makefile Project を選択します。Next を選択し、Browse を使用して QMK フォルダを選択します。tool-chain リストから ARM Cross GCC を選択し、Finish を選択します。
|
||||
|
||||
これで、左側に QMK フォルダが表示されます。右クリックして、Properties を選択します。左側で MCU を展開し、ARM Toolchain Paths を選択します。xPack を押して OK を押します。OpenOCD Path で同じことを繰り返し、Windows の場合は、Build Tool Path でも同じことを繰り返します。Apply and Close を選択します。
|
||||
|
||||
ここで、必要な MCU パッケージをインストールします。Window -> Open Perspective -> Others -> Packs を選択して、Packs perspective に移動します。Packs タブの横にある黄色のリフレッシュ記号を選択します。これは様々な場所から MCU の定義を要求するため、時間が掛かります。一部のリンクが失敗した場合は、おそらく Ignore を選択できます。
|
||||
|
||||
これが終了すると、ビルドやデバッグする MCU を見つけることができるはずです。この例では、STM32F3 シリーズの MCU を使います。左側で、STMicroelectronics -> STM32F3 Series を選択します。中央のウィンドウに、pack が表示されます。右クリックし、Install を選択します。それが終了したら、Window -> Open Perspective -> Others -> C/C++ を選択してデフォルトのパースペクティブに戻ることができます。
|
||||
|
||||
Eclipse に QMK をビルドしようとするデバイスを教える必要があります。QMK フォルダを右クリック -> Properties -> C/C++ Build -> Settings を選択します。Devices タブを選択し、devices の下から MCU の適切な種類を選択します。私の例では、STM32F303CC です。
|
||||
|
||||
この間に、build コマンドもセットアップしましょう。C/C++ Build を選択し、Behavior タブを選択します。build コマンドのところで、`all` を必要な make コマンドに置き換えます。例えば、rev6 Planck の default キーマップの場合、これは `planck/rev6:default` になります。Apply and Close を選択します。
|
||||
|
||||
## ビルド
|
||||
|
||||
全て正しくセットアップできていれば、ハンマーボタンを押すとファームウェアがビルドされ、.binファイルが出力されるはずです。
|
||||
|
||||
## デバッグ
|
||||
|
||||
### デバッガの接続
|
||||
|
||||
ARM MCU は、クロック信号(SWCLK) とデータ信号(SWDIO) で構成される Single Wire Debug (SWD) プロトコルを使います。MCUを 完全に操作するには、この2本のワイヤとグラウンドを接続するだけで十分です。ここでは、キーボードは USB を介して電力が供給されると想定しています。手動でリセットボタンを使えるため、RESET 信号は必要ありません。より高度なセットアップのために printf と scanf をホストに非同期にパイプする SWO 信号を使用できますが、私たちのセットアップでは無視します。
|
||||
|
||||
注意: SWCLK と SWDIO ピンがキーボードのマトリックスで使われていないことを確認してください。もし使われている場合は、一時的に他のピンに切り替えることができます。
|
||||
|
||||
### デバッガの設定
|
||||
|
||||
QMK フォルダを右クリックし、Debug As -> Debug Configuration を選択します。ここで、GDB OpenOCD Debugging をダブルクリックします。Debugger タブを選択し、MCU に必要な設定を入力します。これを見つけるにはいじったりググったりする必要があるかもしれません。STM32F3 用のデフォルトスクリプトは stm32f3discovery.cfg と呼ばれます。OpenOCD に伝えるには、Config options で `-f board/stm32f3discovery.cfg` と入力します。
|
||||
|
||||
注意: 私の場合、この設定スクリプトはリセット操作を無効にするために編集が必要です。スクリプトの場所は、通常はパス `openocd/version/.content/scripts/board` の下の実際の実行可能フィールドの中で見つかります。ここで、私は `reset_config srst_only` を `reset_config none` に編集しました。
|
||||
|
||||
Apply and Close を選択します。
|
||||
|
||||
### デバッガの実行
|
||||
|
||||
キーボードをリセットしてください。
|
||||
|
||||
虫アイコンをクリックし、もし全てうまく行けば debug パースペクティブに移動します。ここでは、main 関数の最初でプログラムカウンタが停止するので、Play ボタンを押します。全てのデバッガのほとんどの機能は ARM MCU で動作しますが、正確な詳細については google があなたのお友達です!
|
||||
|
||||
|
||||
ハッピーデバッギング!
|
376
docs/ja/config_options.md
Normal file
376
docs/ja/config_options.md
Normal file
@@ -0,0 +1,376 @@
|
||||
# QMK の設定
|
||||
|
||||
<!---
|
||||
original document: eae21eed7:docs/config_options.md
|
||||
git diff eae21eed7 HEAD docs/config_options.md | cat
|
||||
-->
|
||||
|
||||
QMK はほぼ無制限に設定可能です。可能なところはいかなるところでも、やりすぎな程、ユーザーがコードサイズを犠牲にしてでも彼らのキーボードをカスタマイズをすることを許しています。ただし、このレベルの柔軟性により設定が困難になります。
|
||||
|
||||
QMK には主に2種類の設定ファイルがあります- `config.h` と `rules.mk`。これらのファイルは QMK の様々なレベルに存在し、同じ種類の全てのファイルは最終的な設定を構築するために組み合わされます。最低の優先度から最高の優先度までのレベルは以下の通りです:
|
||||
|
||||
* QMK デフォルト
|
||||
* キーボード
|
||||
* フォルダ (最大5レべルの深さ)
|
||||
* キーマップ
|
||||
|
||||
## QMK デフォルト
|
||||
|
||||
QMK での全ての利用可能な設定にはデフォルトがあります。その設定がキーボード、フォルダ、あるいはキーマップレべルで設定されない場合、これが使用される設定です。
|
||||
|
||||
## キーボード
|
||||
|
||||
このレベルにはキーボード全体に適用される設定オプションが含まれています。一部の設定は、リビジョンあるいはほとんどのキーマップで変更されません。他の設定はこのキーボードのデフォルトに過ぎず、フォルダあるいはキーマップによって上書きされる可能性があります。
|
||||
|
||||
## フォルダ
|
||||
|
||||
一部のキーボードには、異なるハードウェア構成のためのフォルダとサブフォルダがあります。ほとんどのキーボードは深さ1のフォルダのみですが、QMK は最大深さ5のフォルダの構造をサポートします。各フォルダは、最終的な設定に組み込まれる独自の `config.h` と `rules.mk` ファイルを持つことができます。
|
||||
|
||||
## キーマップ
|
||||
|
||||
このレベルには特定のキーマップのための全てのオプションが含まれています。以前の定義を上書きしたい場合は、`#undef <variable>` を使って定義を解除し、エラー無しで再定義することができます。
|
||||
|
||||
# `config.h` ファイル
|
||||
|
||||
これは最初に include されるものの 1 つである C ヘッダファイルで、プロジェクト全体(もし含まれる場合)にわたって持続します。多くの変数をここで設定し、他の場所からアクセスすることができます。`config.h` ファイルでは、以下のもの以外の、他の `config.h` ファイルやその他のファイルの include をしないでください:
|
||||
|
||||
#include "config_common.h"
|
||||
|
||||
|
||||
## ハードウェアオプション
|
||||
* `#define VENDOR_ID 0x1234`
|
||||
* VID を定義します。ほとんどの DIY プロジェクトにおいて、任意のものを定義できます
|
||||
* `#define PRODUCT_ID 0x5678`
|
||||
* PID を定義します。ほとんどの DIY プロジェクトでは、任意のものを定義できます
|
||||
* `#define DEVICE_VER 0`
|
||||
* デバイスのバージョンを定義します (多くの場合リビジョンに使われます)
|
||||
* `#define MANUFACTURER Me`
|
||||
* 一般的に、誰もしくはどのブランドがボードを作成したか
|
||||
* `#define PRODUCT Board`
|
||||
* キーボードの名前
|
||||
* `#define DESCRIPTION a keyboard`
|
||||
* キーボードの簡単な説明
|
||||
* `#define MATRIX_ROWS 5`
|
||||
* キーボードのマトリックスの行の数
|
||||
* `#define MATRIX_COLS 15`
|
||||
* キーボードのマトリックスの列の数
|
||||
* `#define MATRIX_ROW_PINS { D0, D5, B5, B6 }`
|
||||
* 行のピン、上から下へ
|
||||
* `#define MATRIX_COL_PINS { F1, F0, B0, C7, F4, F5, F6, F7, D4, D6, B4, D7 }`
|
||||
* 列のピン、左から右へ
|
||||
* `#define UNUSED_PINS { D1, D2, D3, B1, B2, B3 }`
|
||||
* 参考として、キーボードで使われていないピン
|
||||
* `#define MATRIX_HAS_GHOST`
|
||||
* マトリックスにゴーストがあるか(ありそうにないか)定義します
|
||||
* `#define DIODE_DIRECTION COL2ROW`
|
||||
* COL2ROW あるいは ROW2COL - マトリックスがどのように設定されているか。COL2ROW は、スイッチとロウ(行)ラインの間にダイオードが黒い印をロウ(行)ラインに向けて置いてあることを意味します。
|
||||
* `#define DIRECT_PINS { { F1, F0, B0, C7 }, { F4, F5, F6, F7 } }`
|
||||
* ロウ(行)ラインとカラム(列)ラインにマップされているピンを左から右に。各スイッチが個別のピンとグラウンドに接続されているマトリックスを定義します。
|
||||
* `#define AUDIO_VOICES`
|
||||
* (循環させるために)代替音声を有効にします
|
||||
* `#define C4_AUDIO`
|
||||
* ピン C4 のオーディオを有効にします
|
||||
* `#define C5_AUDIO`
|
||||
* ピン C5 のオーディオを有効にします
|
||||
* `#define C6_AUDIO`
|
||||
* ピン C6 のオーディオを有効にします
|
||||
* `#define B5_AUDIO`
|
||||
* ピン B5 のオーディオを有効にします (C[4-6]\_AUDIO の1つとともに B[5-7]\_AUDIO の1つが有効にされている場合、疑似ステレオが有効にされます)
|
||||
* `#define B6_AUDIO`
|
||||
* ピン B6 のオーディオを有効にします (C[4-6]\_AUDIO の1つとともに B[5-7]\_AUDIO の1つが有効にされている場合、疑似ステレオが有効にされます)
|
||||
* `#define B7_AUDIO`
|
||||
* ピン B7 のオーディオを有効にします (C[4-6]\_AUDIO の1つとともに B[5-7]\_AUDIO の1つが有効にされている場合、疑似ステレオが有効にされます)
|
||||
* `#define BACKLIGHT_PIN B7`
|
||||
* バックライトのピン
|
||||
* `#define BACKLIGHT_LEVELS 3`
|
||||
* バックライトのレベル数 (off を除いて最大15)
|
||||
* `#define BACKLIGHT_BREATHING`
|
||||
* バックライトのブレスを有効にします
|
||||
* `#define BREATHING_PERIOD 6`
|
||||
* 1つのバックライトの "ブレス" の長さの秒数
|
||||
* `#define DEBOUNCE 5`
|
||||
* ピンの値を読み取る時の遅延 (5がデフォルト)
|
||||
* `#define LOCKING_SUPPORT_ENABLE`
|
||||
* メカニカルロックのサポート。キーマップで KC_LCAP、 KC_LNUM そして KC_LSCR を使えるようにします
|
||||
* `#define LOCKING_RESYNC_ENABLE`
|
||||
* キーボードの LED の状態をスイッチの状態と一致させ続けようとします
|
||||
* `#define IS_COMMAND() (get_mods() == MOD_MASK_SHIFT)`
|
||||
* マジックコマンドの使用を可能にするキーの組み合わせ (デバッグに便利です)
|
||||
* `#define USB_MAX_POWER_CONSUMPTION 500`
|
||||
* デバイスの USB 経由の最大電力(mA) を設定します (デフォルト: 500)
|
||||
* `#define USB_POLLING_INTERVAL_MS 10`
|
||||
* キーボード、マウス および 共有 (NKRO/メディアキー) インタフェースのための USB ポーリングレートをミリ秒で設定します
|
||||
* `#define F_SCL 100000L`
|
||||
* I2C を使用するキーボードのための I2C クロックレート速度を設定します。デフォルトは `400000L` ですが、`split_common` を使っているキーボードは別でデフォルトは `100000L` です。
|
||||
|
||||
## 無効にできる機能
|
||||
|
||||
これらのオプションを定義すると、関連する機能が無効になり、コードサイズを節約できます。
|
||||
|
||||
* `#define NO_DEBUG`
|
||||
* デバッグを無効にします
|
||||
* `#define NO_PRINT`
|
||||
* hid_listen を使った出力やデバッグを無効にします
|
||||
* `#define NO_ACTION_LAYER`
|
||||
* レイヤーを無効にします
|
||||
* `#define NO_ACTION_TAPPING`
|
||||
* タップダンスと他のタップ機能を無効にします
|
||||
* `#define NO_ACTION_ONESHOT`
|
||||
* ワンショットモディファイアを無効にします
|
||||
* `#define NO_ACTION_MACRO`
|
||||
* 古い形式のマクロ処理を無効にします: MACRO() & action_get_macro
|
||||
* `#define NO_ACTION_FUNCTION`
|
||||
* fn_actions 配列(非推奨)からの action_function() の呼び出しを無効にします
|
||||
|
||||
## 有効にできる機能
|
||||
|
||||
これらのオプションを定義すると、関連する機能が有効になり、コードサイズが大きくなるかもしれません。
|
||||
|
||||
* `#define FORCE_NKRO`
|
||||
* NKRO をデフォルトでオンにする必要があります。これにより EEPROM の設定に関係なく、キーボードの起動時に NKRO が強制的にオンになります。NKRO は引き続きオフにできますが、キーボードを再起動すると再びオンになります。
|
||||
* `#define STRICT_LAYER_RELEASE`
|
||||
* キーリリースがどのレイヤーから来たのかを覚えるのではなく、現在のレイヤースタックを使って強制的に評価されるようにします (高度なケースに使われます)
|
||||
|
||||
## 設定可能な挙動
|
||||
|
||||
* `#define TAPPING_TERM 200`
|
||||
* タップがホールドになるまでの時間。500以上に設定された場合、タップ期間中にタップされたキーもホールドになります。(訳注: PERMISSIVE_HOLDも参照)
|
||||
* `#define TAPPING_TERM_PER_KEY`
|
||||
* キーごとの `TAPPING_TERM` 設定の処理を有効にします
|
||||
* `#define RETRO_TAPPING`
|
||||
* 押下とリリースの間に他のキーによる中断がなければ、TAPPING_TERM の後であってもとにかくタップします
|
||||
* 詳細は [Retro Tapping](ja/feature_advanced_keycodes.md#retro-tapping) を見てください
|
||||
* `#define TAPPING_TOGGLE 2`
|
||||
* トグルを引き起こす前のタップ数
|
||||
* `#define PERMISSIVE_HOLD`
|
||||
* `TAPPING_TERM` にヒットしていなくても、リリースする前に別のキーが押されると、タップとフォールドキーがホールドを引き起こします
|
||||
* 詳細は [Permissive Hold](ja/feature_advanced_keycodes.md#permissive-hold) を見てください
|
||||
* `#define IGNORE_MOD_TAP_INTERRUPT`
|
||||
* 両方のキーに `TAPPING_TERM` を適用することで、ホールド時に他のキーに変換するキーを使ってローリングコンボ (zx) をすることができるようにします
|
||||
* 詳細は [Mod tap interrupt](ja/feature_advanced_keycodes.md#ignore-mod-tap-interrupt) を見てください
|
||||
* `#define TAPPING_FORCE_HOLD`
|
||||
* タップされた直後に、デュアルロールキーを修飾子として使用できるようにします
|
||||
* [Hold after tap](ja/feature_advanced_keycodes.md#tapping-force-hold)を見てください
|
||||
* タップトグル機能を無効にします (`TT` あるいは One Shot Tap Toggle)
|
||||
* `#define LEADER_TIMEOUT 300`
|
||||
* リーダーキーがタイムアウトするまでの時間
|
||||
* タイムアウトする前にシーケンスを終了できない場合は、タイムアウトの設定を増やす必要があるかもしれません。あるいは、`LEADER_PER_KEY_TIMING` オプションを有効にすると良いでしょう。これは各キーがタップされた後でタイムアウトを再設定します。
|
||||
* `#define LEADER_PER_KEY_TIMING`
|
||||
* 全体では無く各キーを押すたびに実行されるリーダーキーコードのタイマーを設定します
|
||||
* `#define LEADER_KEY_STRICT_KEY_PROCESSING`
|
||||
* Mod-Tap および Layer-Tap キーコードのためのキーコードフィルタリングを無効にします。例えば、これを有効にすると、`KC_A` を使いたい場合は `MT(MOD_CTL, KC_A)` を指定する必要があります。
|
||||
* `#define ONESHOT_TIMEOUT 300`
|
||||
* ワンショットがタイムアウトするまでの時間
|
||||
* `#define ONESHOT_TAP_TOGGLE 2`
|
||||
* ワンショットトグルが引き起こされるまでのタップ数
|
||||
* `#define QMK_KEYS_PER_SCAN 4`
|
||||
* 走査ごとに1つ以上のキーを送信できるようにします。デフォルトでは、走査ごとに `process_record()` 経由で1つのキーイベントのみが送信されます。これはほとんどのタイピングにほとんど影響しませんが、多くのコードを入力しているか、走査レートが最初から遅い場合、キーイベントの処理に多少の遅延が生じる可能性があります。それぞれのプレスとリリースは別のイベントです。スキャン時間が 1ms 程度のキーボードの場合、とても高速なタイピストでさえ、実際にキーボードから数 ms 以上の遅延を発生させるのに必要な 500 キーストロークを1秒間に生成することはないでしょう。しかし、3~4ms の走査時間でコードを入力している場合はどうでしょうか?おそらくこれが必要です。
|
||||
* `#define COMBO_COUNT 2`
|
||||
* [コンボ](ja/feature_combo.md)機能で使っているコンボの数にこれを設定します。
|
||||
* `#define COMBO_TERM 200`
|
||||
* コンボキーが検出されるまでの時間。定義されていない場合は、デフォルトは `TAPPING_TERM` です。
|
||||
* `#define TAP_CODE_DELAY 100`
|
||||
* 適切な登録に問題がある場合(VUSB ボードで珍しくない)、`register_code` と `unregister_code` の間の遅延を設定します。値はミリ秒です。
|
||||
* `#define TAP_HOLD_CAPS_DELAY 80`
|
||||
* MacOS で特別な処理が行われるため、`KC_CAPSLOCK` を使う時にタップホールドキー (`LT`, `MT`) に遅延を設定します。この値はミリ秒で、定義されていない場合はデフォルトは80msです。macOS については、これを200以上に設定すると良いでしょう。
|
||||
|
||||
## RGB ライト設定 :id=rgb-light-configuration
|
||||
|
||||
* `#define RGB_DI_PIN D7`
|
||||
* WS2812 の DI 端子につなぐピン
|
||||
* `#define RGBLIGHT_ANIMATIONS`
|
||||
* RGB アニメーションを実行します
|
||||
* `#define RGBLED_NUM 12`
|
||||
* LED の数
|
||||
* `#define RGBLIGHT_SPLIT`
|
||||
* 分割キーボードの左半分の RGB LED の出力を右半分の RGB LED の入力につなげるかわりに、それぞれの側で個別にコントローラの出力ピンが直接 RGB LED の入力に繋がっているときは、この定義が必要です。
|
||||
* `#define RGBLED_SPLIT { 6, 6 }`
|
||||
* 分割キーボードの各半分の `RGB_DI_PIN` に直接配線されている接続されているLEDの数
|
||||
* 最初の値は左半分の LED の数を示し、2番目の値は右半分です。
|
||||
* RGBLED_SPLIT が定義されている場合、RGBLIGHT_SPLIT は暗黙的に定義されます。
|
||||
* `#define RGBLIGHT_HUE_STEP 12`
|
||||
* 色相の増減時のステップ単位
|
||||
* `#define RGBLIGHT_SAT_STEP 25`
|
||||
* 彩度の増減時のステップ単位
|
||||
* `#define RGBLIGHT_VAL_STEP 12`
|
||||
* 値(明度)の増減時のステップ単位
|
||||
* `#define RGBW`
|
||||
* RGBW LED のサポートを有効にします
|
||||
|
||||
## マウスキーオプション
|
||||
|
||||
* `#define MOUSEKEY_INTERVAL 20`
|
||||
* `#define MOUSEKEY_DELAY 0`
|
||||
* `#define MOUSEKEY_TIME_TO_MAX 60`
|
||||
* `#define MOUSEKEY_MAX_SPEED 7`
|
||||
* `#define MOUSEKEY_WHEEL_DELAY 0`
|
||||
|
||||
## 分割キーボードオプション
|
||||
|
||||
分割キーボード固有のオプション。あなたの rules.mk に 'SPLIT_KEYBOARD = yes' が有ることを確認してください。
|
||||
|
||||
* `SPLIT_TRANSPORT = custom`
|
||||
* 標準の分割通信ルーチンをカスタムのものに置き換えることができます。現在、ARM ベースの分割キーボードはこれを使わなければなりません。
|
||||
|
||||
### 左右の設定
|
||||
|
||||
一つ覚えておかなければならないことは、USB ポートが接続されている側が常にマスター側であるということです。USB に接続されていない側はスレーブです。
|
||||
|
||||
分割キーボードの左右を設定するには、幾つかの異なる方法があります (優先度の順にリストされています):
|
||||
|
||||
1. `SPLIT_HAND_PIN` を設定します: 左右を決定するためにピンを読み込みます。ピンが high の場合、それが左側です。low であれば、その半分側が右側であると決定されます。
|
||||
2. `EE_HANDS` を設定し、各半分に `eeprom-lefthand.eep`/`eeprom-righthand.eep` を書き込みます
|
||||
* DFU ブートローダを搭載したボードでは、これらの EEPROM ファイルを書き込むために `:dfu-split-left`/`:dfu-split-right` を使うことができます
|
||||
* Caterina ブートローダを搭載したボード (標準的な Pro Micros など)では、`:avrdude-split-left`/`:avrdude-split-right` を使ってください
|
||||
* ARM DFU ブートローダを搭載したボード (Proton C など)では、`:dfu-util-split-left`/`:dfu-util-split-right` を使ってください
|
||||
3. `MASTER_RIGHT` を設定します: USBポートに差し込まれた側はマスター側で右側であると決定されます(デフォルトの逆)
|
||||
4. デフォルト: USB ポートに差し込まれている側がマスター側であり、左側であると見なされます。スレーブ側は右側です
|
||||
|
||||
#### 左右を定義します
|
||||
|
||||
* `#define SPLIT_HAND_PIN B7`
|
||||
* high/low ピンを使って左右を決定します。low = 右手、high = 左手。`B7` を使っているピンに置き換えます。これはオプションで、`SPLIT_HAND_PIN` が未定義のままである場合、EE_HANDS メソッドまたは標準の Let's Splitが使っている MASTER_LEFT / MASTER_RIGHT 定義をまだ使うことができます。
|
||||
|
||||
* `#define EE_HANDS` (`SPLIT_HAND_PIN` が定義されていない場合のみ動作します)
|
||||
* `eeprom-lefthand.eep`/`eeprom-righthand.eep` がそれぞれの半分に書き込まれた後で、EEPROM 内に格納されている左右の設定の値を読み込みます。
|
||||
|
||||
* `#define MASTER_RIGHT`
|
||||
* マスター側が右側と定義されます。
|
||||
|
||||
### 他のオプション
|
||||
|
||||
* `#define USE_I2C`
|
||||
* Serial の代わりに I2C を使う場合 (デフォルトは serial)
|
||||
|
||||
* `#define SOFT_SERIAL_PIN D0`
|
||||
* serial を使う場合、これを定義します。`D0` あるいは `D1`,`D2`,`D3`,`E6`。
|
||||
|
||||
* `#define MATRIX_ROW_PINS_RIGHT { <row pins> }`
|
||||
* `#define MATRIX_COL_PINS_RIGHT { <col pins> }`
|
||||
* 右半分に左半分と異なるピン配置を指定したい場合は、`MATRIX_ROW_PINS_RIGHT`/`MATRIX_COL_PINS_RIGHT` を定義することができます。現在のところ、`MATRIX_ROW_PINS` のサイズは `MATRIX_ROW_PINS_RIGHT` と同じでなければならず、列の定義も同様です。
|
||||
|
||||
* `#define DIRECT_PINS_RIGHT { { F1, F0, B0, C7 }, { F4, F5, F6, F7 } }`
|
||||
* 右半分に左半分と異なる直接ピン配置を指定したい場合は、`DIRECT_PINS_RIGHT` を定義することができます。現在のところ、`DIRECT_PINS` のサイズは `DIRECT_PINS_RIGHT` と同じでなければなりません。
|
||||
|
||||
* `#define RGBLED_SPLIT { 6, 6 }`
|
||||
* [RGB ライト設定](#rgb-light-configuration)を見てください。
|
||||
|
||||
* `#define SELECT_SOFT_SERIAL_SPEED <speed>` (デフォルトの速度は1です)
|
||||
* serial 通信を使う時のプロトコルの速度を設定します。
|
||||
* 速度:
|
||||
* 0: 約189kbps (実験目的のみ)
|
||||
* 1: 約 137kbps (デフォルト)
|
||||
* 2: 約 75kbps
|
||||
* 3: 約 39kbps
|
||||
* 4: 約 26kbps
|
||||
* 5: 約 20kbps
|
||||
|
||||
* `#define SPLIT_USB_DETECT`
|
||||
* マスタ/スレーブを委任する時に(タイムアウト付きで) USB 接続を検出します
|
||||
* ARM についてはデフォルトの挙動
|
||||
* AVR Teensy については必須
|
||||
|
||||
* `#define SPLIT_USB_TIMEOUT 2500`
|
||||
* `SPLIT_USB_DETECT` を使う時のマスタ/スレーブを検出する場合の最大タイムアウト
|
||||
|
||||
# `rules.mk` ファイル
|
||||
|
||||
これは、トップレベルの `Makefile` から include される [make](https://www.gnu.org/software/make/manual/make.html) ファイルです。これは特定の機能を有効または無効にするだけでなく、コンパイルする MCU に関する情報を設定するために使われます。
|
||||
|
||||
## ビルドオプション
|
||||
|
||||
* `DEFAULT_FOLDER`
|
||||
* キーボードに1つ以上のサブフォルダがある場合にデフォルトのフォルダを指定するために使われます。
|
||||
* `FIRMWARE_FORMAT`
|
||||
* ビルドの後でルート `qmk_firmware` フォルダにコピーされる形式 (bin, hex) を定義します。
|
||||
* `SRC`
|
||||
* コンパイル・リンクリストにファイルを追加するために使われます。
|
||||
* `LAYOUTS`
|
||||
* このキーボードがサポートする[レイアウト](ja/feature_layouts.md)のリスト
|
||||
|
||||
## AVR MCU オプション
|
||||
* `MCU = atmega32u4`
|
||||
* `F_CPU = 16000000`
|
||||
* `ARCH = AVR8`
|
||||
* `F_USB = $(F_CPU)`
|
||||
* `OPT_DEFS += -DINTERRUPT_CONTROL_ENDPOINT`
|
||||
* `BOOTLOADER = atmel-dfu` と以下のオプション:
|
||||
* `atmel-dfu`
|
||||
* `lufa-dfu`
|
||||
* `qmk-dfu`
|
||||
* `halfkay`
|
||||
* `caterina`
|
||||
* `bootloadHID`
|
||||
* `USBasp`
|
||||
|
||||
## 機能オプション
|
||||
|
||||
これらを使って特定の機能のビルドを有効または無効にします。有効にすればするほどファームウェアが大きくなり、MCU には大きすぎるファームウェアを構築するリスクがあります。
|
||||
|
||||
* `BOOTMAGIC_ENABLE`
|
||||
* 仮想 DIP スイッチ設定
|
||||
* `MOUSEKEY_ENABLE`
|
||||
* マウスキー
|
||||
* `EXTRAKEY_ENABLE`
|
||||
* オーディオ制御とシステム制御
|
||||
* `CONSOLE_ENABLE`
|
||||
* デバッグ用コンソール
|
||||
* `COMMAND_ENABLE`
|
||||
* デバッグ及び設定用のコマンド
|
||||
* `COMBO_ENABLE`
|
||||
* キーコンボ機能
|
||||
* `NKRO_ENABLE`
|
||||
* USB N-キーロールオーバー - これが動作しない場合は、ここを見てください: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
* `AUDIO_ENABLE`
|
||||
* オーディオサブシステムを有効にします。
|
||||
* `RGBLIGHT_ENABLE`
|
||||
* キーボードアンダーライト機能を有効にします
|
||||
* `LEADER_ENABLE`
|
||||
* リーダーキーコードを有効にします
|
||||
* `MIDI_ENABLE`
|
||||
* MIDI 制御
|
||||
* `UNICODE_ENABLE`
|
||||
* Unicode
|
||||
* `BLUETOOTH_ENABLE`
|
||||
* Adafruit EZ-Key HID で Bluetooth を有効にするレガシーオプション。BLUETOOTH を見てください
|
||||
* `BLUETOOTH`
|
||||
* 現在のオプションは、AdafruitEzKey、AdafruitBLE、RN42
|
||||
* `SPLIT_KEYBOARD`
|
||||
* 分割キーボード (let's split や bakingpy のキーボードのようなデュアル MCU) のサポートを有効にし、quantum/split_common にある全ての必要なファイルをインクルードします
|
||||
* `CUSTOM_MATRIX`
|
||||
* 標準マトリックス走査ルーチンを独自のものに置き換えることができます。
|
||||
* `DEBOUNCE_TYPE`
|
||||
* 標準キーデバウンスルーチンを代替または独自のものに置き換えることができます。
|
||||
* `WAIT_FOR_USB`
|
||||
* キーボードが起動する前に、USB 接続が確立されるのをキーボードに待機させます
|
||||
* `NO_USB_STARTUP_CHECK`
|
||||
* キーボードの起動後の usb サスペンドチェックを無効にします。通常、キーボードはタスクが実行される前にホストがウェイク アップするのを待ちます。分割キーボードは半分はウェイクアップコールを取得できませんが、マスタにコマンドを送信する必要があるため、役に立ちます。
|
||||
* `LINK_TIME_OPTIMIZATION_ENABLE`
|
||||
* キーボードをコンパイルする時に、Link Time Optimization (`LTO`) を有効にします。これは処理に時間が掛かりますが、コンパイルされたサイズを大幅に減らします (そして、ファームウェアが小さいため、追加の時間は分からないくらいです)。ただし、`LTO` が有効な場合、古いマクロと関数の機能が壊れるため、自動的にこれらの機能を無効にします。これは `NO_ACTION_MACRO` と `NO_ACTION_FUNCTION` を自動的に定義することで行われます。
|
||||
* `LINK_TIME_OPTIMIZATION_ENABLE` の代わりに `LTO_ENABLE` を使うことができます。
|
||||
|
||||
## USB エンドポイントの制限
|
||||
|
||||
USB 経由でサービスを提供するために、QMK は USB エンドポイントを使う必要があります。
|
||||
これらは有限なリソースです: 各マイクロコントローラは特定の数しか持ちません。
|
||||
これは一緒に有効にできる機能を制限します。
|
||||
利用可能なエンドポイントを超えると、ビルドエラーをひきおこします。
|
||||
|
||||
以下の機能は個別のエンドポイントを必要とするかもしれません:
|
||||
|
||||
* `MOUSEKEY_ENABLE`
|
||||
* `EXTRAKEY_ENABLE`
|
||||
* `CONSOLE_ENABLE`
|
||||
* `NKRO_ENABLE`
|
||||
* `MIDI_ENABLE`
|
||||
* `RAW_ENABLE`
|
||||
* `VIRTSER_ENABLE`
|
||||
|
||||
エンドポイントの使用率を向上させるために、HID 機能を組み合わせて1つのエンドポイントを使うようにすることができます。
|
||||
デフォルトでは、`MOUSEKEY`、`EXTRAKEY` および `NKRO` が単一のエンドポイントに結合されます。
|
||||
|
||||
基本キーボード機能も、`KEYBOARD_SHARED_EP = yes` を設定することで同じエンドポイントに結合することができます。
|
||||
これによりもう1つのエンドポイントが解放されますが、一部の BIOS ではブートキーボードプロトコルの切り替えを実装しないため、キーボードが動作しなくなるかもしれません。
|
||||
|
||||
マウスの結合も、ブートマウス互換性を破壊します。
|
||||
この機能が必要な場合は、`MOUSE_SHARED_EP = no` を設定することで、マウスを結合しないようにすることができます。
|
100
docs/keycodes.md
100
docs/keycodes.md
@@ -257,37 +257,37 @@ This is a reference only. Each group of keys links to the page documenting their
|
||||
|
||||
## [Bootmagic](feature_bootmagic.md)
|
||||
|
||||
|Key |Aliases |Description |
|
||||
|----------------------------------|---------|-------------------------------------------|
|
||||
|`MAGIC_SWAP_CONTROL_CAPSLOCK` | |Swap Caps Lock and Left Control |
|
||||
|`MAGIC_CAPSLOCK_TO_CONTROL` | |Treat Caps Lock as Control |
|
||||
|`MAGIC_SWAP_LCTL_LGUI` | |Swap Left Control and GUI |
|
||||
|`MAGIC_SWAP_RCTL_RGUI` | |Swap Right Control and GUI |
|
||||
|`MAGIC_SWAP_LALT_LGUI` | |Swap Left Alt and GUI |
|
||||
|`MAGIC_SWAP_RALT_RGUI` | |Swap Right Alt and GUI |
|
||||
|`MAGIC_NO_GUI` | |Disable the GUI key |
|
||||
|`MAGIC_SWAP_GRAVE_ESC` | |Swap <code>`</code> and Escape |
|
||||
|`MAGIC_SWAP_BACKSLASH_BACKSPACE` | |Swap `\` and Backspace |
|
||||
|`MAGIC_HOST_NKRO` | |Force NKRO on |
|
||||
|`MAGIC_SWAP_ALT_GUI` |`AG_SWAP`|Swap Alt and GUI on both sides |
|
||||
|`MAGIC_SWAP_CTL_GUI` |`CG_SWAP`|Swap Ctrl and GUI on both sides (for macOS)|
|
||||
|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` | |Unswap Caps Lock and Left Control |
|
||||
|`MAGIC_UNCAPSLOCK_TO_CONTROL` | |Stop treating Caps Lock as Control |
|
||||
|`MAGIC_UNSWAP_LCTL_LGUI` | |Unswap Left Control and GUI |
|
||||
|`MAGIC_UNSWAP_RCTL_RGUI` | |Unswap Right Control and GUI |
|
||||
|`MAGIC_UNSWAP_LALT_LGUI` | |Unswap Left Alt and GUI |
|
||||
|`MAGIC_UNSWAP_RALT_RGUI` | |Unswap Right Alt and GUI |
|
||||
|`MAGIC_UNNO_GUI` | |Enable the GUI key |
|
||||
|`MAGIC_UNSWAP_GRAVE_ESC` | |Unswap <code>`</code> and Escape |
|
||||
|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`| |Unswap `\` and Backspace |
|
||||
|`MAGIC_UNHOST_NKRO` | |Force NKRO off |
|
||||
|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Alt and GUI on both sides |
|
||||
|`MAGIC_UNSWAP_CTL_GUI` |`CG_NORM`|Unswap Ctrl and GUI on both sides |
|
||||
|`MAGIC_TOGGLE_ALT_GUI` |`AG_TOGG`|Toggle Alt and GUI swap on both sides |
|
||||
|`MAGIC_TOGGLE_CTL_GUI` |`CG_TOGG`|Toggle Ctrl and GUI swap on both sides |
|
||||
|`MAGIC_TOGGLE_NKRO` | |Turn NKRO on or off |
|
||||
|`MAGIC_EE_HANDS_LEFT` | |Set "Left Hand" for EE_HANDS handedness |
|
||||
|`MAGIC_EE_HANDS_RIGHT` | |Set "Right Hand" for EE_HANDS handedness |
|
||||
|Key |Aliases |Description |
|
||||
|----------------------------------|---------|--------------------------------------------------------------------------|
|
||||
|`MAGIC_SWAP_CONTROL_CAPSLOCK` |`CL_SWAP`|Swap Caps Lock and Left Control |
|
||||
|`MAGIC_UNSWAP_CONTROL_CAPSLOCK` |`CL_NORM`|Unswap Caps Lock and Left Control |
|
||||
|`MAGIC_CAPSLOCK_TO_CONTROL` |`CL_CTRL`|Treat Caps Lock as Control |
|
||||
|`MAGIC_UNCAPSLOCK_TO_CONTROL` |`CL_CAPS`|Stop treating Caps Lock as Control |
|
||||
|`MAGIC_SWAP_LCTL_LGUI` |`LCG_SWP`|Swap Left Control and GUI |
|
||||
|`MAGIC_UNSWAP_LCTL_LGUI` |`LCG_NRM`|Unswap Left Control and GUI |
|
||||
|`MAGIC_SWAP_RCTL_RGUI` |`RCG_SWP`|Swap Right Control and GUI |
|
||||
|`MAGIC_UNSWAP_RCTL_RGUI` |`RCG_NRM`|Unswap Right Control and GUI |
|
||||
|`MAGIC_SWAP_CTL_GUI` |`CG_SWAP`|Swap Control and GUI on both sides |
|
||||
|`MAGIC_UNSWAP_CTL_GUI` |`CG_NORM`|Unswap Control and GUI on both sides |
|
||||
|`MAGIC_TOGGLE_CTL_GUI` |`CG_TOGG`|Toggle Control and GUI swap on both sides |
|
||||
|`MAGIC_SWAP_LALT_LGUI` |`LAG_SWP`|Swap Left Alt and GUI |
|
||||
|`MAGIC_UNSWAP_LALT_LGUI` |`LAG_NRM`|Unswap Left Alt and GUI |
|
||||
|`MAGIC_SWAP_RALT_RGUI` |`RAG_SWP`|Swap Right Alt and GUI |
|
||||
|`MAGIC_UNSWAP_RALT_RGUI` |`RAG_NRM`|Unswap Right Alt and GUI |
|
||||
|`MAGIC_SWAP_ALT_GUI` |`AG_SWAP`|Swap Alt and GUI on both sides |
|
||||
|`MAGIC_UNSWAP_ALT_GUI` |`AG_NORM`|Unswap Alt and GUI on both sides |
|
||||
|`MAGIC_TOGGLE_ALT_GUI` |`AG_TOGG`|Toggle Alt and GUI swap on both sides |
|
||||
|`MAGIC_NO_GUI` |`GUI_OFF`|Disable the GUI keys |
|
||||
|`MAGIC_UNNO_GUI` |`GUI_ON` |Enable the GUI keys |
|
||||
|`MAGIC_SWAP_GRAVE_ESC` |`GE_SWAP`|Swap <code>`</code> and Escape |
|
||||
|`MAGIC_UNSWAP_GRAVE_ESC` |`GE_NORM`|Unswap <code>`</code> and Escape |
|
||||
|`MAGIC_SWAP_BACKSLASH_BACKSPACE` |`BS_SWAP`|Swap `\` and Backspace |
|
||||
|`MAGIC_UNSWAP_BACKSLASH_BACKSPACE`|`BS_NORM`|Unswap `\` and Backspace |
|
||||
|`MAGIC_HOST_NKRO` |`NK_ON` |Enable N-key rollover |
|
||||
|`MAGIC_UNHOST_NKRO` |`NK_OFF` |Disable N-key rollover |
|
||||
|`MAGIC_TOGGLE_NKRO` |`NK_TOGG`|Toggle N-key rollover |
|
||||
|`MAGIC_EE_HANDS_LEFT` |`EH_LEFT`|Set the master half of a split keyboard as the left hand (for `EE_HANDS`) |
|
||||
|`MAGIC_EE_HANDS_RIGHT` |`EH_RGHT`|Set the master half of a split keyboard as the right hand (for `EE_HANDS`)|
|
||||
|
||||
## [Bluetooth](feature_bluetooth.md)
|
||||
|
||||
@@ -389,12 +389,12 @@ This is a reference only. Each group of keys links to the page documenting their
|
||||
|`RGB_TOG` | |Toggle RGB lighting on or off |
|
||||
|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held |
|
||||
|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held|
|
||||
|`RGB_HUI` | |Increase hue |
|
||||
|`RGB_HUD` | |Decrease hue |
|
||||
|`RGB_SAI` | |Increase saturation |
|
||||
|`RGB_SAD` | |Decrease saturation |
|
||||
|`RGB_VAI` | |Increase value (brightness) |
|
||||
|`RGB_VAD` | |Decrease value (brightness) |
|
||||
|`RGB_HUI` | |Increase hue, decrease hue when Shift is held |
|
||||
|`RGB_HUD` | |Decrease hue, increase hue when Shift is held |
|
||||
|`RGB_SAI` | |Increase saturation, decrease saturation when Shift is held |
|
||||
|`RGB_SAD` | |Decrease saturation, increase saturation when Shift is held |
|
||||
|`RGB_VAI` | |Increase value (brightness), decrease value when Shift is held |
|
||||
|`RGB_VAD` | |Decrease value (brightness), increase value when Shift is held |
|
||||
|`RGB_MODE_PLAIN` |`RGB_M_P `|Static (no animation) mode |
|
||||
|`RGB_MODE_BREATHE` |`RGB_M_B` |Breathing animation mode |
|
||||
|`RGB_MODE_RAINBOW` |`RGB_M_R` |Rainbow animation mode |
|
||||
@@ -407,19 +407,19 @@ This is a reference only. Each group of keys links to the page documenting their
|
||||
|
||||
## [RGB Matrix Lighting](feature_rgb_matrix.md)
|
||||
|
||||
|Key |Aliases |Description |
|
||||
|-------------------|----------|--------------------------------------------------------------------|
|
||||
|`RGB_TOG` | |Toggle RGB lighting on or off |
|
||||
|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held |
|
||||
|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held|
|
||||
|`RGB_HUI` | |Increase hue |
|
||||
|`RGB_HUD` | |Decrease hue |
|
||||
|`RGB_SAI` | |Increase saturation |
|
||||
|`RGB_SAD` | |Decrease saturation |
|
||||
|`RGB_VAI` | |Increase value (brightness) |
|
||||
|`RGB_VAD` | |Decrease value (brightness) |
|
||||
|`RGB_SPI` | |Increase effect speed (does no support eeprom yet) |
|
||||
|`RGB_SPD` | |Decrease effect speed (does no support eeprom yet) |
|
||||
|Key |Aliases |Description |
|
||||
|-------------------|----------|--------------------------------------------------------------------------------------|
|
||||
|`RGB_TOG` | |Toggle RGB lighting on or off |
|
||||
|`RGB_MODE_FORWARD` |`RGB_MOD` |Cycle through modes, reverse direction when Shift is held |
|
||||
|`RGB_MODE_REVERSE` |`RGB_RMOD`|Cycle through modes in reverse, forward direction when Shift is held |
|
||||
|`RGB_HUI` | |Increase hue, decrease hue when Shift is held |
|
||||
|`RGB_HUD` | |Decrease hue, increase hue when Shift is held |
|
||||
|`RGB_SAI` | |Increase saturation, decrease saturation when Shift is held |
|
||||
|`RGB_SAD` | |Decrease saturation, increase saturation when Shift is held |
|
||||
|`RGB_VAI` | |Increase value (brightness), decrease value when Shift is held |
|
||||
|`RGB_VAD` | |Decrease value (brightness), increase value when Shift is held |
|
||||
|`RGB_SPI` | |Increase effect speed (does not support eeprom yet), decrease speed when Shift is held|
|
||||
|`RGB_SPD` | |Decrease effect speed (does not support eeprom yet), increase speed when Shift is held|
|
||||
|
||||
## [Thermal Printer](feature_thermal_printer.md)
|
||||
|
||||
|
@@ -1,163 +0,0 @@
|
||||
# Best Practices
|
||||
|
||||
## Or, "How I Learned to Stop Worrying and Love Git."
|
||||
|
||||
This document aims to instruct novices in the best ways to have a smooth experience in contributing to QMK. We will walk through the process of contributing to QMK, detailing some ways to make this task easier, and then later we'll break some things in order to teach you how to fix them.
|
||||
|
||||
This document assumes a few things:
|
||||
|
||||
1. You have a GitHub account, and have [forked the qmk_firmware repository](getting_started_github.md) to your account.
|
||||
2. You've [set up your build environment](newbs_getting_started.md#set-up-your-environment).
|
||||
|
||||
|
||||
## Your fork's master: Update Often, Commit Never
|
||||
|
||||
It is highly recommended for QMK development, regardless of what is being done or where, to keep your `master` branch updated, but ***never*** commit to it. Instead, do all your changes in a development branch and issue pull requests from your branches when you're developing.
|
||||
|
||||
To reduce the chances of merge conflicts — instances where two or more users have edited the same part of a file concurrently — keep your `master` branch relatively up-to-date, and start any new developments by creating a new branch.
|
||||
|
||||
### Updating your master branch
|
||||
|
||||
To keep your `master` branch updated, it is recommended to add the QMK Firmware repository ("repo") as a remote repository in git. To do this, open your Git command line interface and enter:
|
||||
|
||||
```
|
||||
git remote add upstream https://github.com/qmk/qmk_firmware.git
|
||||
```
|
||||
|
||||
To verify that the repository has been added, run `git remote -v`, which should return the following:
|
||||
|
||||
```
|
||||
$ 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)
|
||||
```
|
||||
|
||||
Now that this is done, you can check for updates to the repo by running `git fetch upstream`. This retrieves the branches and tags — collectively referred to as "refs" — from the QMK repo, which now has the nickname `upstream`. We can now compare the data on our fork `origin` to that held by QMK.
|
||||
|
||||
To update your fork's master, run the following, hitting the Enter key after each line:
|
||||
|
||||
```
|
||||
git checkout master
|
||||
git fetch upstream
|
||||
git pull upstream master
|
||||
git push origin master
|
||||
```
|
||||
|
||||
This switches you to your `master` branch, retrieves the refs from the QMK repo, downloads the current QMK `master` branch to your computer, and then uploads it to your fork.
|
||||
|
||||
### Making Changes
|
||||
|
||||
To make changes, create a new branch by entering:
|
||||
|
||||
```
|
||||
git checkout -b dev_branch
|
||||
git push --set-upstream origin dev_branch
|
||||
```
|
||||
|
||||
This creates a new branch named `dev_branch`, checks it out, and then saves the new branch to your fork. The `--set-upstream` argument tells git to use your fork and the `dev_branch` branch every time you use `git push` or `git pull` from this branch. It only needs to be used on the first push; after that, you can safely use `git push` or `git pull`, without the rest of the arguments.
|
||||
|
||||
!> With `git push`, you can use `-u` in place of `--set-upstream` — `-u` is an alias for `--set-upstream`.
|
||||
|
||||
You can name your branch nearly anything you want, though it is recommended to name it something related to the changes you are going to make.
|
||||
|
||||
By default `git checkout -b` will base your new branch on the branch that is checked out. You can base your new branch on an existing branch that is not checked out by adding the name of the existing branch to the command:
|
||||
|
||||
```
|
||||
git checkout -b dev_branch master
|
||||
```
|
||||
|
||||
Now that you have a development branch, open your text editor and make whatever changes you need to make. It is recommended to make many small commits to your branch; that way, any change that causes issues can be more easily traced and undone if needed. To make your changes, edit and save any files that need to be updated, add them to Git's *staging area*, and then commit them to your branch:
|
||||
|
||||
```
|
||||
git add path/to/updated_file
|
||||
git commit -m "My commit message."
|
||||
```
|
||||
|
||||
`git add` adds files that have been changed to Git's *staging area*, which is Git's "loading zone." This contains the changes that are going to be *committed* by `git commit`, which saves the changes to the repo. Use descriptive commit messages so you can know what was changed at a glance.
|
||||
|
||||
!> If you've changed a lot of files, but all the files are part of the same change, you can use `git add .` to add all the changed files that are in your current directory, rather than having to add each file individually.
|
||||
|
||||
### Publishing Your Changes
|
||||
|
||||
The last step is to push your changes to your fork. To do this, enter `git push`. Git now publishes the current state of `dev_branch` to your fork.
|
||||
|
||||
|
||||
## Resolving Merge Conflicts
|
||||
|
||||
Sometimes when your work in a branch takes a long time to complete, changes that have been made by others conflict with changes you have made to your branch when you open a pull request. This is called a *merge conflict*, and is what happens when multiple people edit the same parts of the same files.
|
||||
|
||||
### Rebasing Your Changes
|
||||
|
||||
A *rebase* is Git's way of taking changes that were applied at one point, reversing them, and then applying the same changes to another point. In the case of a merge conflict, you can rebase your branch to grab the changes that were made between when you created your branch and the present time.
|
||||
|
||||
To start, run the following:
|
||||
|
||||
```
|
||||
git fetch upstream
|
||||
git rev-list --left-right --count HEAD...upstream/master
|
||||
```
|
||||
|
||||
The `git rev-list` command entered here returns the number of commits that differ between the current branch and QMK's master branch. We run `git fetch` first to make sure we have the refs that represent the current state of the upstream repo. The output of the `git rev-list` command entered returns two numbers:
|
||||
|
||||
```
|
||||
$ git rev-list --left-right --count HEAD...upstream/master
|
||||
7 35
|
||||
```
|
||||
|
||||
The first number represents the number of commits on the current branch since it was created, and the second number is the number of commits made to `upstream/master` since the current branch was created, and thus, the changes that are not recorded in the current branch.
|
||||
|
||||
Now that the current states of both the current branch and the upstream repo are known, we can start a rebase operation:
|
||||
|
||||
```
|
||||
git rebase upstream/master
|
||||
```
|
||||
|
||||
This tells Git to undo the commits on the current branch, and then reapply them against QMK's master branch.
|
||||
|
||||
```
|
||||
$ 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".
|
||||
```
|
||||
|
||||
This tells us that we have a merge conflict, and gives the name of the file with the conflict. Open the conflicting file in your text editor, and somewhere in the file, you'll find something like this:
|
||||
|
||||
```
|
||||
<<<<<<< HEAD
|
||||
<p>For help with any issues, email us at support@webhost.us.</p>
|
||||
=======
|
||||
<p>Need help? Email support@webhost.us.</p>
|
||||
>>>>>>> Commit #1
|
||||
```
|
||||
|
||||
The line `<<<<<<< HEAD` marks the beginning of a merge conflict, and the `>>>>>>> Commit #1` line marks the end, with the conflicting sections separated by `=======`. The part on the `HEAD` side is from the QMK master version of the file, and the part marked with the commit message is from the current branch and commit.
|
||||
|
||||
Because Git tracks *changes to files* rather than the contents of the files directly, if Git can't find the text that was in the file previous to the commit that was made, it won't know how to edit the file. Re-editing the file will solve the conflict. Make your changes, and then save the file.
|
||||
|
||||
```
|
||||
<p>Need help? Email support@webhost.us.</p>
|
||||
```
|
||||
|
||||
Now run:
|
||||
|
||||
```
|
||||
git add conflicting_file_1.txt
|
||||
git rebase --continue
|
||||
```
|
||||
|
||||
Git logs the changes to the conflicting file, and continues applying the commits from our branch until it reaches the end.
|
16
docs/newbs_git_best_practices.md
Normal file
16
docs/newbs_git_best_practices.md
Normal file
@@ -0,0 +1,16 @@
|
||||
# Best Git Practices for Working with QMK
|
||||
|
||||
## Or, "How I Learned to Stop Worrying and Love Git."
|
||||
|
||||
This section aims to instruct novices in the best ways to have a smooth experience in contributing to QMK. We will walk through the process of contributing to QMK, detailing some ways to make this task easier, and then later we'll break some things in order to teach you how to fix them.
|
||||
|
||||
This section assumes a few things:
|
||||
|
||||
1. You have a GitHub account, and have [forked the qmk_firmware repository](getting_started_github.md) to your account.
|
||||
2. You've set up both [your build environment](newbs_getting_started.md#set-up-your-environment) and [QMK](newbs_getting_started.md#set-up-qmk).
|
||||
|
||||
---
|
||||
|
||||
- Part 1: [Your Fork's Master: Update Often, Commit Never](newbs_git_using_your_master_branch.md)
|
||||
- Part 2: [Resolving Merge Conflicts](newbs_git_resolving_merge_conflicts.md)
|
||||
- Part 3: [Resynchronizing an Out-of-Sync Git Branch](newbs_git_resynchronize_a_branch.md)
|
79
docs/newbs_git_resolving_merge_conflicts.md
Normal file
79
docs/newbs_git_resolving_merge_conflicts.md
Normal file
@@ -0,0 +1,79 @@
|
||||
# Resolving Merge Conflicts
|
||||
|
||||
Sometimes when your work in a branch takes a long time to complete, changes that have been made by others conflict with changes you have made to your branch when you open a pull request. This is called a *merge conflict*, and is what happens when multiple people edit the same parts of the same files.
|
||||
|
||||
?> This document builds upon the concepts detailed in [Your Fork's Master: Update Often, Commit Never](newbs_git_using_your_master_branch.md). If you are not familiar with that document, please read it first, then return here.
|
||||
|
||||
## Rebasing Your Changes
|
||||
|
||||
A *rebase* is Git's way of taking changes that were applied at one point in the commit history, reversing them, and then applying the same changes at another point. In the case of a merge conflict, you can rebase your branch to grab the changes that were made between when you created your branch and the present time.
|
||||
|
||||
To start, run the following:
|
||||
|
||||
```
|
||||
git fetch upstream
|
||||
git rev-list --left-right --count HEAD...upstream/master
|
||||
```
|
||||
|
||||
The `git rev-list` command entered here returns the number of commits that differ between the current branch and QMK's master branch. We run `git fetch` first to make sure we have the refs that represent the current state of the upstream repo. The output of the `git rev-list` command entered returns two numbers:
|
||||
|
||||
```
|
||||
$ git rev-list --left-right --count HEAD...upstream/master
|
||||
7 35
|
||||
```
|
||||
|
||||
The first number represents the number of commits on the current branch since it was created, and the second number is the number of commits made to `upstream/master` since the current branch was created, and thus, the changes that are not recorded in the current branch.
|
||||
|
||||
Now that the current states of both the current branch and the upstream repo are known, we can start a rebase operation:
|
||||
|
||||
```
|
||||
git rebase upstream/master
|
||||
```
|
||||
|
||||
This tells Git to undo the commits on the current branch, and then reapply them against QMK's master branch.
|
||||
|
||||
```
|
||||
$ 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".
|
||||
```
|
||||
|
||||
This tells us that we have a merge conflict, and gives the name of the file with the conflict. Open the conflicting file in your text editor, and somewhere in the file, you'll find something like this:
|
||||
|
||||
```
|
||||
<<<<<<< HEAD
|
||||
<p>For help with any issues, email us at support@webhost.us.</p>
|
||||
=======
|
||||
<p>Need help? Email support@webhost.us.</p>
|
||||
>>>>>>> Commit #1
|
||||
```
|
||||
|
||||
The line `<<<<<<< HEAD` marks the beginning of a merge conflict, and the `>>>>>>> Commit #1` line marks the end, with the conflicting sections separated by `=======`. The part on the `HEAD` side is from the QMK master version of the file, and the part marked with the commit message is from the current branch and commit.
|
||||
|
||||
Because Git tracks *changes to files* rather than the contents of the files directly, if Git can't find the text that was in the file previous to the commit that was made, it won't know how to edit the file. Re-editing the file will solve the conflict. Make your changes, and then save the file.
|
||||
|
||||
```
|
||||
<p>Need help? Email support@webhost.us.</p>
|
||||
```
|
||||
|
||||
Now run:
|
||||
|
||||
```
|
||||
git add conflicting_file_1.txt
|
||||
git rebase --continue
|
||||
```
|
||||
|
||||
Git logs the changes to the conflicting file, and continues applying the commits from our branch until it reaches the end.
|
71
docs/newbs_git_resynchronize_a_branch.md
Normal file
71
docs/newbs_git_resynchronize_a_branch.md
Normal file
@@ -0,0 +1,71 @@
|
||||
# Resynchronizing an Out-of-Sync Git Branch
|
||||
|
||||
Suppose you have committed to your `master` branch, and now need to update your QMK repository. You could `git pull` QMK's `master` branch into your own, but GitHub will tell you that your commit is a number of commits ahead of `qmk:master`, which can create issues if you want to make a pull request to QMK.
|
||||
|
||||
?> This document builds upon the concepts detailed in [Your Fork's Master: Update Often, Commit Never](newbs_git_using_your_master_branch.md). If you are not familiar with that document, please read it first, then return here.
|
||||
|
||||
## Backing Up the Changes on Your Own Master Branch (Optional)
|
||||
|
||||
No one wants to lose work if it can be helped. If you want to save the changes you've already made to your `master` branch, the simplest way to do so is to simply create a duplicate of your "dirty" `master` branch:
|
||||
|
||||
```sh
|
||||
git branch old_master master
|
||||
```
|
||||
|
||||
Now you have a branch named `old_master` that is a duplicate of your `master` branch.
|
||||
|
||||
## Resynchronizing Your Branch
|
||||
|
||||
Now it's time to resynchronize your `master` branch. For this step, you'll want to have QMK's repository configured as a remote in Git. To check your configured remotes, run `git remote -v`, which should return something similar to:
|
||||
|
||||
```sh
|
||||
QMKuser ~/qmk_firmware (master)
|
||||
$ 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)
|
||||
```
|
||||
|
||||
If you only see one fork referenced:
|
||||
|
||||
```sh
|
||||
QMKuser ~/qmk_firmware (master)
|
||||
$ git remote -v
|
||||
origin https://github.com/qmk/qmk_firmware.git (fetch)
|
||||
origin https://github.com/qmk/qmk_firmware.git (push)
|
||||
```
|
||||
|
||||
add a new remote with:
|
||||
|
||||
```sh
|
||||
git remote add upstream https://github.com/qmk/qmk_firmware.git
|
||||
```
|
||||
|
||||
Then, redirect the `origin` remote to your own fork with:
|
||||
|
||||
```sh
|
||||
git remote set-url origin https://github.com/<your_username>/qmk_firmware.git
|
||||
```
|
||||
|
||||
Now that you have both remotes configured, you need to update the references for the upstream repository, which is QMK's, by running:
|
||||
|
||||
```sh
|
||||
git fetch upstream
|
||||
```
|
||||
|
||||
At this point, resynchronize your branch to QMK's by running:
|
||||
|
||||
```sh
|
||||
git reset --hard upstream/master
|
||||
```
|
||||
|
||||
These steps will update the repository on your computer, but your GitHub fork will still be out of sync. To resynchronize your fork on GitHub, you need to push to your fork, instructing Git to override any remote changes that are not reflected in your local repository. To do this, run:
|
||||
|
||||
```sh
|
||||
git push --force-with-lease
|
||||
```
|
||||
|
||||
!> **DO NOT** run `git push --force-with-lease` on a fork to which other users post commits. This will erase their commits.
|
||||
|
||||
Now your GitHub fork, your local files, and QMK's repository are all the same. From here you can make further needed changes ([use a branch!](newbs_git_using_your_master_branch.md#making-changes)) and post them as normal.
|
74
docs/newbs_git_using_your_master_branch.md
Normal file
74
docs/newbs_git_using_your_master_branch.md
Normal file
@@ -0,0 +1,74 @@
|
||||
# Your Fork's Master: Update Often, Commit Never
|
||||
|
||||
It is highly recommended for QMK development, regardless of what is being done or where, to keep your `master` branch updated, but ***never*** commit to it. Instead, do all your changes in a development branch and issue pull requests from your branches when you're developing.
|
||||
|
||||
To reduce the chances of merge conflicts — instances where two or more users have edited the same part of a file concurrently — keep your `master` branch relatively up-to-date, and start any new developments by creating a new branch.
|
||||
|
||||
## Updating your master branch
|
||||
|
||||
To keep your `master` branch updated, it is recommended to add the QMK Firmware repository ("repo") as a remote repository in git. To do this, open your Git command line interface and enter:
|
||||
|
||||
```
|
||||
git remote add upstream https://github.com/qmk/qmk_firmware.git
|
||||
```
|
||||
|
||||
?> The name `upstream` is arbitrary, but a common convention; you can give the QMK remote any name that suits you. Git's `remote` command uses the syntax `git remote add <name> <url>`, `<name>` being shorthand for the remote repo. This name can be used with many Git commands, including but not limited to `fetch`, `pull` and `push`, to specify the remote repo on which to act.
|
||||
|
||||
To verify that the repository has been added, run `git remote -v`, which should return the following:
|
||||
|
||||
```
|
||||
$ 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)
|
||||
```
|
||||
|
||||
Now that this is done, you can check for updates to the repo by running `git fetch upstream`. This retrieves the branches and tags — collectively referred to as "refs" — from the QMK repo, which now has the nickname `upstream`. We can now compare the data on our fork `origin` to that held by QMK.
|
||||
|
||||
To update your fork's master, run the following, hitting the Enter key after each line:
|
||||
|
||||
```
|
||||
git checkout master
|
||||
git fetch upstream
|
||||
git pull upstream master
|
||||
git push origin master
|
||||
```
|
||||
|
||||
This switches you to your `master` branch, retrieves the refs from the QMK repo, downloads the current QMK `master` branch to your computer, and then uploads it to your fork.
|
||||
|
||||
## Making Changes
|
||||
|
||||
To make changes, create a new branch by entering:
|
||||
|
||||
```
|
||||
git checkout -b dev_branch
|
||||
git push --set-upstream origin dev_branch
|
||||
```
|
||||
|
||||
This creates a new branch named `dev_branch`, checks it out, and then saves the new branch to your fork. The `--set-upstream` argument tells git to use your fork and the `dev_branch` branch every time you use `git push` or `git pull` from this branch. It only needs to be used on the first push; after that, you can safely use `git push` or `git pull`, without the rest of the arguments.
|
||||
|
||||
?> With `git push`, you can use `-u` in place of `--set-upstream` — `-u` is an alias for `--set-upstream`.
|
||||
|
||||
You can name your branch nearly anything you want, though it is recommended to name it something related to the changes you are going to make.
|
||||
|
||||
By default `git checkout -b` will base your new branch on the branch that is currently checked out. You can base your new branch on an existing branch that is not checked out by adding the name of the existing branch to the command:
|
||||
|
||||
```
|
||||
git checkout -b dev_branch master
|
||||
```
|
||||
|
||||
Now that you have a development branch, open your text editor and make whatever changes you need to make. It is recommended to make many small commits to your branch; that way, any change that causes issues can be more easily traced and undone if needed. To make your changes, edit and save any files that need to be updated, add them to Git's *staging area*, and then commit them to your branch:
|
||||
|
||||
```
|
||||
git add path/to/updated_file
|
||||
git commit -m "My commit message."
|
||||
```
|
||||
|
||||
`git add` adds files that have been changed to Git's *staging area*, which is Git's "loading zone." This contains the changes that are going to be *committed* by `git commit`, which saves the changes to the repo. Use descriptive commit messages so you can know what was changed at a glance.
|
||||
|
||||
?> If you've changed multiple files, you can use `git add -- path/to/file1 path/to/file2 ...` to add all your desired files.
|
||||
|
||||
## Publishing Your Changes
|
||||
|
||||
The last step is to push your changes to your fork. To do this, enter `git push`. Git will then publish the current state of `dev_branch` to your fork.
|
@@ -29,3 +29,5 @@ These are defaults based on what has been implemented for ARM boards.
|
||||
| [Audio](feature_audio.md) | Enabled |
|
||||
| [RGB Lighting](feature_rgblight.md) | Disabled |
|
||||
| [Backlight](feature_backlight.md) | Forces [task driven PWM](feature_backlight.md#software-pwm-driver) until ARM can provide automatic configuration |
|
||||
| USB Host (e.g. USB-USB converter) | Not supported (USB host code is AVR specific and is not currently supported on ARM) |
|
||||
| [Split keyboards](feature_split_keyboard.md) | Not supported yet |
|
||||
|
31
docs/pt-br/README.md
Normal file
31
docs/pt-br/README.md
Normal file
@@ -0,0 +1,31 @@
|
||||
# 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/)
|
||||
|
||||
## O que é o firmware QMK?
|
||||
QMK (*Quantum Mechanical Keyboard*) é uma comunidade de código aberto que mantém o QMK Firmware, o QMK Toolbox, qmk.fm e suas documentações. O QMK Firmware é um software embarcado ("firmware") de teclado baseado no [tmk\_keyboard](http://github.com/tmk/tmk_keyboard) com alguns recursos úteis para os controladores Atmel AVR e, mais especificamente, na [linha de produtos OLKB](http://olkb.com), o teclado [ErgoDox EZ](http://www.ergodox-ez.com) e a [linha de produtos Clueboard](http://clueboard.co/). Também foi portado para chips ARM usando o ChibiOS. Você pode usá-lo no seu próprio teclado com fio ou personalizado.
|
||||
|
||||
## Como obter e usar o QMK
|
||||
|
||||
Se você planeja contribuir com um _keymap_ ("mapa de teclas"), teclado ou recursos para o QMK, o jeito mais fácil é [percorrer o repositório através do Github](https://github.com/qmk/qmk_firmware#fork-destination-box) e clonar seu repositório localmente para fazer suas alterações, dê um _push_ nelas e abra uma [_Pull request_](https://github.com/qmk/qmk_firmware/pulls) no seu fork.
|
||||
|
||||
Caso contrário, você pode cloná-lo diretamente com `git clone https://github.com/qmk/qmk_firmware`. Não faça o download dos arquivos zip ou tar; é necessário um repositório git para baixar os submódulos para compilar.
|
||||
|
||||
## Como compilar
|
||||
|
||||
Antes de compilar, você precisará [instalar um ambiente específico](getting_started_build_tools.md) para o desenvolvimento em plataforma AVR e/ou ARM; vez que isto for feito, você usará o comando `make` para criar um teclado e um mapa de teclas com a seguinte notação:
|
||||
|
||||
make planck/rev4:default
|
||||
|
||||
Isso compilaria a revisão `rev4` do teclado ` planck` com o mapa de teclas `default`. Nem todos os teclados têm revisões (também chamadas de _subprojects_ ou _folders_); nesse caso, a revisão pode ser omitida:
|
||||
|
||||
make preonic:default
|
||||
|
||||
## Como personalizar
|
||||
|
||||
O QMK tem muitos [recursos](features.md) para explorar e uma boa quantidade de [documentação de referência](http://docs.qmk.fm) para explorar. A maioria dos recursos é aproveitada modificando seu [keymap](keymap.md) e alterando os [keycodes](keycodes.md).
|
121
docs/pt-br/_summary.md
Normal file
121
docs/pt-br/_summary.md
Normal file
@@ -0,0 +1,121 @@
|
||||
* [Complete Newbs Guide](pt-br/newbs.md)
|
||||
* [Getting Started](pt-br/newbs_getting_started.md)
|
||||
* [Building Your First Firmware](pt-br/newbs_building_firmware.md)
|
||||
* [Flashing Firmware](pt-br/newbs_flashing.md)
|
||||
* [Testing and Debugging](pt-br/newbs_testing_debugging.md)
|
||||
* [Git Best Practices](pt-br/newbs_best_practices.md)
|
||||
* [Learning Resources](pt-br/newbs_learn_more_resources.md)
|
||||
|
||||
* [QMK Basics](pt-br/README.md)
|
||||
* [QMK Introduction](pt-br/getting_started_introduction.md)
|
||||
* [QMK CLI](pt-br/cli.md)
|
||||
* [QMK CLI Config](pt-br/cli_configuration.md)
|
||||
* [Contributing to QMK](pt-br/contributing.md)
|
||||
* [How to Use Github](pt-br/getting_started_github.md)
|
||||
* [Getting Help](pt-br/getting_started_getting_help.md)
|
||||
|
||||
* [Breaking Changes](pt-br/breaking_changes.md)
|
||||
* [2019 Aug 30](pt-br/ChangeLog/20190830.md)
|
||||
|
||||
* [FAQ](faq.md)
|
||||
* [General FAQ](pt-br/faq_general.md)
|
||||
* [Build/Compile QMK](pt-br/faq_build.md)
|
||||
* [Debugging/Troubleshooting QMK](pt-br/faq_debug.md)
|
||||
* [Keymap](pt-br/faq_keymap.md)
|
||||
* [Driver Installation with Zadig](pt-br/driver_installation_zadig.md)
|
||||
|
||||
* Detailed Guides
|
||||
* [Install Build Tools](pt-br/getting_started_build_tools.md)
|
||||
* [Vagrant Guide](pt-br/getting_started_vagrant.md)
|
||||
* [Build/Compile Instructions](pt-br/getting_started_make_guide.md)
|
||||
* [Flashing Firmware](pt-br/flashing.md)
|
||||
* [Customizing Functionality](pt-br/custom_quantum_functions.md)
|
||||
* [Keymap Overview](pt-br/keymap.md)
|
||||
|
||||
* [Hardware](hardware.md)
|
||||
* [AVR Processors](pt-br/hardware_avr.md)
|
||||
* [Drivers](pt-br/hardware_drivers.md)
|
||||
|
||||
* Reference
|
||||
* [Keyboard Guidelines](pt-br/hardware_keyboard_guidelines.md)
|
||||
* [Config Options](pt-br/config_options.md)
|
||||
* [Keycodes](pt-br/keycodes.md)
|
||||
* [Coding Conventions - C](pt-br/coding_conventions_c.md)
|
||||
* [Coding Conventions - Python](pt-br/coding_conventions_python.md)
|
||||
* [Documentation Best Practices](pt-br/documentation_best_practices.md)
|
||||
* [Documentation Templates](pt-br/documentation_templates.md)
|
||||
* [Glossary](pt-br/reference_glossary.md)
|
||||
* [Unit Testing](pt-br/unit_testing.md)
|
||||
* [Useful Functions](pt-br/ref_functions.md)
|
||||
* [Configurator Support](pt-br/reference_configurator_support.md)
|
||||
* [info.json Format](pt-br/reference_info_json.md)
|
||||
* [Python CLI Development](pt-br/cli_development.md)
|
||||
|
||||
* [Features](pt-br/features.md)
|
||||
* [Basic Keycodes](pt-br/keycodes_basic.md)
|
||||
* [US ANSI Shifted Keys](pt-br/keycodes_us_ansi_shifted.md)
|
||||
* [Quantum Keycodes](pt-br/quantum_keycodes.md)
|
||||
* [Advanced Keycodes](pt-br/feature_advanced_keycodes.md)
|
||||
* [Audio](pt-br/feature_audio.md)
|
||||
* [Auto Shift](pt-br/feature_auto_shift.md)
|
||||
* [Backlight](pt-br/feature_backlight.md)
|
||||
* [Bluetooth](pt-br/feature_bluetooth.md)
|
||||
* [Bootmagic](pt-br/feature_bootmagic.md)
|
||||
* [Combos](pt-br/feature_combo.md)
|
||||
* [Command](pt-br/feature_command.md)
|
||||
* [Debounce API](pt-br/feature_debounce_type.md)
|
||||
* [DIP Switch](pt-br/feature_dip_switch.md)
|
||||
* [Dynamic Macros](pt-br/feature_dynamic_macros.md)
|
||||
* [Encoders](pt-br/feature_encoders.md)
|
||||
* [Grave Escape](pt-br/feature_grave_esc.md)
|
||||
* [Haptic Feedback](pt-br/feature_haptic_feedback.md)
|
||||
* [HD44780 LCD Controller](pt-br/feature_hd44780.md)
|
||||
* [Key Lock](pt-br/feature_key_lock.md)
|
||||
* [Layouts](pt-br/feature_layouts.md)
|
||||
* [Leader Key](pt-br/feature_leader_key.md)
|
||||
* [LED Matrix](pt-br/feature_led_matrix.md)
|
||||
* [Macros](pt-br/feature_macros.md)
|
||||
* [Mouse Keys](pt-br/feature_mouse_keys.md)
|
||||
* [OLED Driver](pt-br/feature_oled_driver.md)
|
||||
* [One Shot Keys](pt-br/feature_advanced_keycodes.md#one-shot-keys)
|
||||
* [Pointing Device](pt-br/feature_pointing_device.md)
|
||||
* [PS/2 Mouse](pt-br/feature_ps2_mouse.md)
|
||||
* [RGB Lighting](pt-br/feature_rgblight.md)
|
||||
* [RGB Matrix](pt-br/feature_rgb_matrix.md)
|
||||
* [Space Cadet](pt-br/feature_space_cadet.md)
|
||||
* [Split Keyboard](pt-br/feature_split_keyboard.md)
|
||||
* [Stenography](pt-br/feature_stenography.md)
|
||||
* [Swap Hands](pt-br/feature_swap_hands.md)
|
||||
* [Tap Dance](pt-br/feature_tap_dance.md)
|
||||
* [Terminal](pt-br/feature_terminal.md)
|
||||
* [Thermal Printer](pt-br/feature_thermal_printer.md)
|
||||
* [Unicode](pt-br/feature_unicode.md)
|
||||
* [Userspace](pt-br/feature_userspace.md)
|
||||
* [Velocikey](pt-br/feature_velocikey.md)
|
||||
|
||||
* For Makers and Modders
|
||||
* [Hand Wiring Guide](pt-br/hand_wire.md)
|
||||
* [ISP Flashing Guide](pt-br/isp_flashing_guide.md)
|
||||
* [ARM Debugging Guide](pt-br/arm_debugging.md)
|
||||
* [I2C Driver](pt-br/i2c_driver.md)
|
||||
* [GPIO Controls](pt-br/internals_gpio_control.md)
|
||||
* [Proton C Conversion](pt-br/proton_c_conversion.md)
|
||||
|
||||
* For a Deeper Understanding
|
||||
* [How Keyboards Work](pt-br/how_keyboards_work.md)
|
||||
* [Understanding QMK](pt-br/understanding_qmk.md)
|
||||
|
||||
* Other Topics
|
||||
* [Using Eclipse with QMK](pt-br/other_eclipse.md)
|
||||
* [Using VSCode with QMK](pt-br/other_vscode.md)
|
||||
* [Support](pt-br/support.md)
|
||||
* [How to add translations](pt-br/translating.md)
|
||||
|
||||
* QMK Internals (In Progress)
|
||||
* [Defines](pt-br/internals_defines.md)
|
||||
* [Input Callback Reg](pt-br/internals_input_callback_reg.md)
|
||||
* [Midi Device](pt-br/internals_midi_device.md)
|
||||
* [Midi Device Setup Process](pt-br/internals_midi_device_setup_process.md)
|
||||
* [Midi Util](pt-br/internals_midi_util.md)
|
||||
* [Send Functions](pt-br/internals_send_functions.md)
|
||||
* [Sysex Tools](pt-br/internals_sysex_tools.md)
|
123
docs/ru-ru/_summary.md
Normal file
123
docs/ru-ru/_summary.md
Normal file
@@ -0,0 +1,123 @@
|
||||
* [Complete Newbs Guide](ru-ru/newbs.md)
|
||||
* [Getting Started](ru-ru/newbs_getting_started.md)
|
||||
* [Building Your First Firmware](ru-ru/newbs_building_firmware.md)
|
||||
* [Flashing Firmware](ru-ru/newbs_flashing.md)
|
||||
* [Testing and Debugging](ru-ru/newbs_testing_debugging.md)
|
||||
* [Git Best Practices](ru-ru/newbs_best_practices.md)
|
||||
* [Learning Resources](ru-ru/newbs_learn_more_resources.md)
|
||||
|
||||
* [QMK Basics](ru-ru/README.md)
|
||||
* [QMK Introduction](ru-ru/getting_started_introduction.md)
|
||||
* [QMK CLI](ru-ru/cli.md)
|
||||
* [QMK CLI Config](ru-ru/cli_configuration.md)
|
||||
* [Contributing to QMK](ru-ru/contributing.md)
|
||||
* [How to Use Github](ru-ru/getting_started_github.md)
|
||||
* [Getting Help](ru-ru/getting_started_getting_help.md)
|
||||
|
||||
* [Breaking Changes](ru-ru/breaking_changes.md)
|
||||
* [2019 Aug 30](ru-ru/ChangeLog/20190830.md)
|
||||
|
||||
* [FAQ](ru-ru/faq.md)
|
||||
* [General FAQ](ru-ru/faq_general.md)
|
||||
* [Build/Compile QMK](ru-ru/faq_build.md)
|
||||
* [Debugging/Troubleshooting QMK](ru-ru/faq_debug.md)
|
||||
* [Keymap](ru-ru/faq_keymap.md)
|
||||
* [Driver Installation with Zadig](ru-ru/driver_installation_zadig.md)
|
||||
|
||||
* Detailed Guides
|
||||
* [Install Build Tools](ru-ru/getting_started_build_tools.md)
|
||||
* [Vagrant Guide](ru-ru/getting_started_vagrant.md)
|
||||
* [Build/Compile Instructions](ru-ru/getting_started_make_guide.md)
|
||||
* [Flashing Firmware](ru-ru/flashing.md)
|
||||
* [Customizing Functionality](ru-ru/custom_quantum_functions.md)
|
||||
* [Keymap Overview](ru-ru/keymap.md)
|
||||
|
||||
* [Hardware](ru-ru/hardware.md)
|
||||
* [Compatible Microcontrollers](ru-ru/compatible_microcontrollers.md)
|
||||
* [AVR Processors](ru-ru/hardware_avr.md)
|
||||
* [Drivers](ru-ru/hardware_drivers.md)
|
||||
|
||||
* Reference
|
||||
* [Keyboard Guidelines](ru-ru/hardware_keyboard_guidelines.md)
|
||||
* [Config Options](ru-ru/config_options.md)
|
||||
* [Keycodes](ru-ru/keycodes.md)
|
||||
* [Coding Conventions - C](ru-ru/coding_conventions_c.md)
|
||||
* [Coding Conventions - Python](ru-ru/coding_conventions_python.md)
|
||||
* [Documentation Best Practices](ru-ru/documentation_best_practices.md)
|
||||
* [Documentation Templates](ru-ru/documentation_templates.md)
|
||||
* [Glossary](ru-ru/reference_glossary.md)
|
||||
* [Unit Testing](ru-ru/unit_testing.md)
|
||||
* [Useful Functions](ru-ru/ref_functions.md)
|
||||
* [Configurator Support](ru-ru/reference_configurator_support.md)
|
||||
* [info.json Format](ru-ru/reference_info_json.md)
|
||||
* [Python CLI Development](ru-ru/cli_development.md)
|
||||
|
||||
* [Features](ru-ru/features.md)
|
||||
* [Basic Keycodes](ru-ru/keycodes_basic.md)
|
||||
* [US ANSI Shifted Keys](ru-ru/keycodes_us_ansi_shifted.md)
|
||||
* [Quantum Keycodes](ru-ru/quantum_keycodes.md)
|
||||
* [Advanced Keycodes](ru-ru/feature_advanced_keycodes.md)
|
||||
* [Audio](ru-ru/feature_audio.md)
|
||||
* [Auto Shift](ru-ru/feature_auto_shift.md)
|
||||
* [Backlight](ru-ru/feature_backlight.md)
|
||||
* [Bluetooth](ru-ru/feature_bluetooth.md)
|
||||
* [Bootmagic](ru-ru/feature_bootmagic.md)
|
||||
* [Combos](ru-ru/feature_combo.md)
|
||||
* [Command](ru-ru/feature_command.md)
|
||||
* [Debounce API](ru-ru/feature_debounce_type.md)
|
||||
* [DIP Switch](ru-ru/feature_dip_switch.md)
|
||||
* [Dynamic Macros](ru-ru/feature_dynamic_macros.md)
|
||||
* [Encoders](ru-ru/feature_encoders.md)
|
||||
* [Grave Escape](ru-ru/feature_grave_esc.md)
|
||||
* [Haptic Feedback](ru-ru/feature_haptic_feedback.md)
|
||||
* [HD44780 LCD Controller](ru-ru/feature_hd44780.md)
|
||||
* [Key Lock](ru-ru/feature_key_lock.md)
|
||||
* [Layouts](ru-ru/feature_layouts.md)
|
||||
* [Leader Key](ru-ru/feature_leader_key.md)
|
||||
* [LED Matrix](ru-ru/feature_led_matrix.md)
|
||||
* [Macros](ru-ru/feature_macros.md)
|
||||
* [Mouse Keys](ru-ru/feature_mouse_keys.md)
|
||||
* [OLED Driver](ru-ru/feature_oled_driver.md)
|
||||
* [One Shot Keys](ru-ru/feature_advanced_keycodes.md#one-shot-keys)
|
||||
* [Pointing Device](ru-ru/feature_pointing_device.md)
|
||||
* [PS/2 Mouse](ru-ru/feature_ps2_mouse.md)
|
||||
* [RGB Lighting](ru-ru/feature_rgblight.md)
|
||||
* [RGB Matrix](ru-ru/feature_rgb_matrix.md)
|
||||
* [Space Cadet](ru-ru/feature_space_cadet.md)
|
||||
* [Split Keyboard](ru-ru/feature_split_keyboard.md)
|
||||
* [Stenography](ru-ru/feature_stenography.md)
|
||||
* [Swap Hands](ru-ru/feature_swap_hands.md)
|
||||
* [Tap Dance](ru-ru/feature_tap_dance.md)
|
||||
* [Terminal](ru-ru/feature_terminal.md)
|
||||
* [Thermal Printer](ru-ru/feature_thermal_printer.md)
|
||||
* [Unicode](ru-ru/feature_unicode.md)
|
||||
* [Userspace](ru-ru/feature_userspace.md)
|
||||
* [Velocikey](ru-ru/feature_velocikey.md)
|
||||
|
||||
* For Makers and Modders
|
||||
* [Hand Wiring Guide](ru-ru/hand_wire.md)
|
||||
* [ISP Flashing Guide](ru-ru/isp_flashing_guide.md)
|
||||
* [ARM Debugging Guide](ru-ru/arm_debugging.md)
|
||||
* [I2C Driver](ru-ru/i2c_driver.md)
|
||||
* [WS2812 Driver](ru-ru/ws2812_driver.md)
|
||||
* [GPIO Controls](ru-ru/internals_gpio_control.md)
|
||||
* [Proton C Conversion](ru-ru/proton_c_conversion.md)
|
||||
|
||||
* For a Deeper Understanding
|
||||
* [How Keyboards Work](ru-ru/how_keyboards_work.md)
|
||||
* [Understanding QMK](ru-ru/understanding_qmk.md)
|
||||
|
||||
* Other Topics
|
||||
* [Using Eclipse with QMK](ru-ru/other_eclipse.md)
|
||||
* [Using VSCode with QMK](ru-ru/other_vscode.md)
|
||||
* [Support](ru-ru/support.md)
|
||||
* [Translating the QMK Docs](ru-ru/translating.md)
|
||||
|
||||
* QMK Internals (In Progress)
|
||||
* [Defines](ru-ru/internals_defines.md)
|
||||
* [Input Callback Reg](ru-ru/internals_input_callback_reg.md)
|
||||
* [Midi Device](ru-ru/internals_midi_device.md)
|
||||
* [Midi Device Setup Process](ru-ru/internals_midi_device_setup_process.md)
|
||||
* [Midi Util](ru-ru/internals_midi_util.md)
|
||||
* [Send Functions](ru-ru/internals_send_functions.md)
|
||||
* [Sysex Tools](ru-ru/internals_sysex_tools.md)
|
9
docs/ru-ru/becoming_a_qmk_collaborator.md
Normal file
9
docs/ru-ru/becoming_a_qmk_collaborator.md
Normal file
@@ -0,0 +1,9 @@
|
||||
# Стать соавтором QMK
|
||||
|
||||
Соавтор QMK - это производитель или разработчик клавиатуры, который заинтересован в том, чтобы помочь QMK вырасти. Для этого он полностью поддерживает свои клавиатуры, поощряет пользователей и клиентов создавать новый функционал, идеи и раскладки клавиатур. Мы всегда стремимся добавлять больше клавиатур и соавторов, но нам важно, чтобы они соответствовали следующим требованиям:
|
||||
|
||||
* **Иметь печатную плату на продажу.** К сожалению, у собранных вручную клавиатур слишком много вариаций и сложностей.
|
||||
* **Поддерживать вашу клавиатуру в QMK.** Это может потребовать просто начальной настройки, чтобы ваша клавиатура заработала. Но поддержка также может заключаться в адаптации изменений ядра QMK, которые способны сломать или сделать избыточным любой пользовательский код.
|
||||
* **Одобрять и производить слияние пулреквестов для вашей клавиатуры.** Мы призываем пользователей делиться своими раскладками клавиатур, чтобы другие могли их видеть и опираться на них при создании своих собственных.
|
||||
|
||||
Если вы чувствуете, что удовлетворяете этим требованиям, напишите нам письмо по адресу hello@qmk.fm с кратким описанием и ссылками на вашу клавиатуру!
|
58
docs/ru-ru/getting_started_introduction.md
Normal file
58
docs/ru-ru/getting_started_introduction.md
Normal file
@@ -0,0 +1,58 @@
|
||||
# Введение
|
||||
|
||||
Эта страница пытается объяснить основную информацию, которую вы должны знать, чтобы работать с проектом QMK. Предполагается, что вы знакомы с навигацией в оболочке Unix, но не предполагается, что вы знакомы с C или с компиляцией с использованием make.
|
||||
|
||||
## Базовая структура QMK
|
||||
|
||||
QMK - это форк [Джуна Вако (Jun Wako)](https://github.com/tmk) проекта [tmk_keyboard](https://github.com/tmk/tmk_keyboard). Оригинальный код TMK с изменениями можно найти в папке `tmk`. Дополнения QMK к проекту можно найти в папке `quantum`. Проекты клавиатур можно найти в папках `handwired` и `keyboard`.
|
||||
|
||||
### Структура пространства пользователя
|
||||
|
||||
Внутри папки `users` находится каталог для каждого пользователя. Это место для пользователей, куда они могут поместить код, чтобы использовать его с разными клавиатурами. Для получения дополнительной информации обратитесь к документации по [функциям пользовательского пространства](ru-ru/feature_userspace.md).
|
||||
|
||||
### Структура проекта клавиатуры
|
||||
|
||||
Внутри папки `keyboards` есть подпапки `handwired` и есть подкаталоги поставщиков и производителей, для примера, `clueboard` - это каталог для каждого проекта клавиатуры, например, `qmk_firmware/keyboards/clueboard/2x1800`. В нем вы найдете следующую структуру:
|
||||
* `keymaps/`: Различные раскладки клавиш, которые можно собрать.
|
||||
* `rules.mk`: Файл, который устанавливает параметры по умолчанию для команды "make". Не редактируйте этот файл напрямую, вместо этого используйте `rules.mk`, относящийся к конкретной раскладке.
|
||||
* `config.h`: Файл, который устанавливает параметры времени компиляции по умолчанию. Не редактируйте этот файл напрямую, вместо этого используйте `config.h`, относящийся к конкретной раскладке.
|
||||
* `info.json`: Файл настройки раскладки для QMK Configurator. Посмотрите [Поддержку конфигуратора](ru-ru/reference_configurator_support.md) для дополнительной информации.
|
||||
* `readme.md`: Краткий обзор клавиатуры.
|
||||
* `<keyboardName>.h`: В этом файле определяется раскладка клавиатуры по матрице переключателей клавиатуры.
|
||||
* `<keyboardName>.c`: В этом файле вы можете найти пользовательский код для клавиатуры.
|
||||
|
||||
Для получения дополнительной информации о структуре проекта обратитесь к [Руководству QMK по клавиатуре](ru-ru/hardware_keyboard_guidelines.md).
|
||||
|
||||
### Структура раскладки клавиатуры
|
||||
|
||||
В каждой папке раскладки клавиатуры могут быть найдены следующие файлы. Обязательным является только файл `keymap.c`, и если остальные файлы не найдены, то будут выбраны параметры по умолчанию.
|
||||
|
||||
* `config.h`: настройки вашей раскладки клавиатуры.
|
||||
* `keymap.c`: весь код вашей раскладки клавиатуры (обязателен).
|
||||
* `rules.mk`: активированные функции QMK.
|
||||
* `readme.md`: описание вашей раскладки клавиш, как ее могут использовать другие, и объяснения функций. Пожалуйста, загрузите изображения на сервис, такой как imgur.
|
||||
|
||||
# Файл `config.h`
|
||||
|
||||
Существует 3 возможных местоположения `config.h`:
|
||||
|
||||
* клавиатура (`/keyboards/<keyboard>/config.h`)
|
||||
* пространство пользователя (`/users/<user>/config.h`)
|
||||
* раскладка клавиш (`/keyboards/<keyboard>/keymaps/<keymap>/config.h`)
|
||||
|
||||
Система сборки автоматически загружает файлы конфигурации в указанном выше порядке. Если вы хотите переопределить любую настройку, заданную предыдущим `config.h`, вам сначала нужно будет включить некоторый шаблонный код для настроек, которые вы хотите изменить.
|
||||
|
||||
```
|
||||
#pragma once
|
||||
```
|
||||
|
||||
Затем, чтобы переопределить настройку из предыдущего файла `config.h`, вы должны сделать `#undef` и `#define` для неё снова.
|
||||
|
||||
Код и настройка шаблона вместе выглядят так:
|
||||
```
|
||||
#pragma once
|
||||
|
||||
// Переопределения производятся здесь!
|
||||
#undef MY_SETTING
|
||||
#define MY_SETTING 4
|
||||
```
|
@@ -1,29 +1,55 @@
|
||||
# How to translate the QMK docs into different languages
|
||||
# Translating the QMK Docs
|
||||
|
||||
All files in the root folder (`docs/`) should be in English - all other languages should be in subfolders with the ISO 639-1 language codes, followed by `-` and the country code where relevant. [A list of common ones can be found here](https://www.andiamo.co.uk/resources/iso-language-codes/). If this folder doesn't exist, you may create it. Each of the translated files should have the same name as the English version, so things can fall back successfully.
|
||||
|
||||
A `_summary.md` file should exist in this folder with a list of links to each file, with a translated name, and link preceded by the language folder:
|
||||
|
||||
* [QMK简介](zh-cn/getting_started_introduction.md)
|
||||
```markdown
|
||||
* [QMK简介](zh-cn/getting_started_introduction.md)
|
||||
```
|
||||
|
||||
All links to other docs pages must also be prefixed with the language folder. If the link is to a specific part of the page (ie. a certain heading), you must use the English ID for the heading, like so:
|
||||
|
||||
```markdown
|
||||
[建立你的环境](zh-cn/newbs-getting-started.md#set-up-your-environment)
|
||||
|
||||
## 建立你的环境 :id=set-up-your-environment
|
||||
```
|
||||
|
||||
Once you've finished translating a new language, you'll also need to modify the following files:
|
||||
|
||||
* [`docs/_langs.md`](https://github.com/qmk/qmk_firmware/blob/master/docs/_langs.md)
|
||||
Each line should contain a country flag in the format `:us:` followed by the name represented in its own language:
|
||||
|
||||
- [:cn: 中文](/zh-cn/)
|
||||
Each line should contain a country flag as a [GitHub emoji shortcode](https://github.com/ikatyang/emoji-cheat-sheet/blob/master/README.md#country-flag) followed by the name represented in its own language:
|
||||
|
||||
```markdown
|
||||
- [:cn: 中文](/zh-cn/)
|
||||
```
|
||||
|
||||
* [`docs/index.html`](https://github.com/qmk/qmk_firmware/blob/master/docs/index.html)
|
||||
Both `placeholder` and `noData` objects should have a dictionary entry for the language folder in a string:
|
||||
|
||||
'/zh-cn/': '没有结果!',
|
||||
Both `placeholder` and `noData` objects should have a dictionary entry for the language folder in a string:
|
||||
|
||||
## Previewing the translations
|
||||
```js
|
||||
'/zh-cn/': '没有结果!',
|
||||
```
|
||||
|
||||
Before opening a pull request, you can preview your additions if you have Python 3 installed by running this command in the `docs/` folder:
|
||||
The `nameLink` object, for setting the "QMK Firmware" heading link in the sidebar, must also be added to:
|
||||
|
||||
python -m http.server 9000
|
||||
```js
|
||||
'/zh-cn/': '/#/zh-cn/',
|
||||
```
|
||||
|
||||
and navigating to http://localhost:9000/ - you should be able to select your new language from the "Translations" menu at the top-right.
|
||||
And make sure to add the language folder in the `fallbackLanguages` list, so it will properly fall back to English instead of 404ing:
|
||||
|
||||
```js
|
||||
fallbackLanguages: [
|
||||
// ...
|
||||
'zh-cn',
|
||||
// ...
|
||||
],
|
||||
```
|
||||
|
||||
## Previewing the Translations
|
||||
|
||||
See [Previewing the Documentation](contributing.md#previewing-the-documentation) for how to set up a local instance of the docs - you should be able to select your new language from the "Translations" menu at the top-right.
|
||||
|
||||
Once you're happy with your work, feel free to open a pull request!
|
||||
|
@@ -19,7 +19,7 @@ QMK (*Quantum Mechanical Keyboard*) 是一个社区维护的开源软件,包
|
||||
|
||||
## 如何编译
|
||||
|
||||
在你能编译之前, 你需要[部署环境](getting_started_build_tools.md) 用于 AVR or/and ARM 开发。完成后, 你可以使用 `make` 命令来编译一个键盘和布局使用以下命令:
|
||||
在你能编译之前, 你需要[部署环境](zh-cn/getting_started_build_tools.md) 用于 AVR or/and ARM 开发。完成后, 你可以使用 `make` 命令来编译一个键盘和布局使用以下命令:
|
||||
|
||||
make planck/rev4:default
|
||||
|
||||
@@ -29,4 +29,4 @@ QMK (*Quantum Mechanical Keyboard*) 是一个社区维护的开源软件,包
|
||||
|
||||
## 如何定制
|
||||
|
||||
QMK 有许多 [特性](features.md)来探索,也有很多 [参考文档](http://docs.qmk.fm) 供您发掘。你可以通过修改 [布局](keymap.md)和[键码](keycodes.md)来利用许多特性。
|
||||
QMK 有许多 [特性](zh-cn/features.md)来探索,也有很多 [参考文档](http://docs.qmk.fm) 供您发掘。你可以通过修改 [布局](zh-cn/keymap.md)和[键码](zh-cn/keycodes.md)来利用许多特性。
|
||||
|
@@ -56,11 +56,6 @@ SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c11", MODE:="0666"
|
||||
?> 事实上没有一个驱动的最佳选择,有些选项就是和某些系统相辅相成。但libUSB和WinUSB似乎也算是这里的最佳选择了。
|
||||
如果bootloader在设备列表中没有显示,你可能要使能 "List all devices"选项在选项菜单中`Options`,然后找到有问题的bootloader设备。(译者注:在win10中可能为 查看-显示隐藏的设备)
|
||||
|
||||
|
||||
## WINAVR已淘汰
|
||||
不再推荐使用WINAVR,使用可能会导致问题
|
||||
详情请见[TMK Issue #99](https://github.com/tmk/tmk_keyboard/issues/99).
|
||||
|
||||
## USB VID 和 PID
|
||||
你可以在编辑`config.h`时使用任何你想用的ID值。实际上,使用任何可能未使用的ID都没有问题,除了有极低的与其他产品发生冲突的可能性。
|
||||
|
||||
@@ -73,29 +68,6 @@ https://github.com/tmk/tmk_keyboard/issues/150
|
||||
- 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`
|
||||
在Ubuntu 14.04上的GCC 4.8 会出现这种问题需要用这个PPA升级到4.9。
|
||||
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
|
||||
你的工具链太旧了不支持MCU。比如WinAVR 20100110就不支持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
|
||||
```
|
||||
|
||||
|
||||
## AVR的BOOTLOADER_SIZE
|
||||
注意Teensy2.0++ bootloader的大小是2048字节。有些Makefile注释错了。
|
||||
|
||||
|
@@ -101,56 +101,6 @@ https://github.com/tmk/tmk_keyboard#boot-magic-configuration---virtual-dip-switc
|
||||
|
||||
http://deskthority.net/workshop-f7/rebuilding-and-redesigning-a-classic-thinkpad-keyboard-t6181-60.html#p146279
|
||||
|
||||
|
||||
## Bootloader跳转不好用
|
||||
在**Makefile**中正确配置**Makefile**大小。如果分区大小不正确,引导加载程序可能无法从**Magic command**和**Boot Magic**加载。
|
||||
```
|
||||
# bootloader字节数:
|
||||
# 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引导大小是通过**BOOTSZ**熔丝位来设置的。查阅你单片机的datasheet。
|
||||
记住,datasheet用的是**Word**(2字节)表示大小和地址,TMK用的是**Byte**。
|
||||
|
||||
AVR引导部分位于闪存的末尾,如下所示(Application是应用区,Bootloader是引导区)。
|
||||
```
|
||||
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 +---------------+
|
||||
```
|
||||
|
||||
详情请见下方issue。
|
||||
https://github.com/tmk/tmk_keyboard/issues/179
|
||||
|
||||
如果你使用TeensyUSB, 有一个[已知bug](https://github.com/qmk/qmk_firmware/issues/164)硬件重置按钮阻止软件定义重置键工作。重新插拔键盘就好了。
|
||||
|
||||
## 特殊额外键不起作用(系统,音频控制键)
|
||||
你要在`rules.mk`定义`EXTRAKEY_ENABLE`在QMK中使用它们。
|
||||
|
||||
@@ -173,24 +123,6 @@ EXTRAKEY_ENABLE = yes # 音频控制和系统控制
|
||||
|
||||
Arduino Leonardo和micro使用**ATMega32U4**,该芯片TMK可用,但Arduino的bootloader会导致问题。
|
||||
|
||||
## 为锁定键添加指示灯
|
||||
你要自制CapsLock, ScrollLock 和 NumLock指示灯?见下文。
|
||||
|
||||
http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p191560
|
||||
|
||||
## 为Arduino Micro/Leonardo编程
|
||||
按下重置键然后在8秒内运行下方这样的命令。
|
||||
|
||||
```
|
||||
avrdude -patmega32u4 -cavr109 -b57600 -Uflash:w:adb_usb.hex -P/dev/ttyACM0
|
||||
```
|
||||
|
||||
设备名称因系统而异。
|
||||
|
||||
http://arduino.cc/en/Main/ArduinoBoardMicro
|
||||
https://geekhack.org/index.php?topic=14290.msg1563867#msg1563867
|
||||
|
||||
|
||||
## USB 3 兼容性
|
||||
据传说有些人用USB3接口会有问题,用USB2的试试。
|
||||
|
||||
|
@@ -66,24 +66,8 @@ https://github.com/tmk/tmk_keyboard/issues/67
|
||||
远古机械键盘偶尔会有自锁机械开关,现在几乎没有了。***大多数情况下你不需要使用该功能,且要使用`KC_CAPS`, `KC_NLCK`和`KC_SLCK`这三个键码。***
|
||||
|
||||
## 输入ASCII之外的特殊字符比如Cédille 'Ç'
|
||||
没有在所有系统中输入这个的通用方法。你要定义针对你的特定操作系统或布局的**宏**。
|
||||
|
||||
比如看这个**宏**代码的文章。
|
||||
|
||||
http://deskthority.net/workshop-f7/tmk-keyboard-firmware-collection-t4478-120.html#p195620
|
||||
<!--翻译问题:下方维基百科链接应全部替换为中文链接,暂未找到全部-->
|
||||
在**Windows**上,可以用`AltGr`键或**Alt码**。
|
||||
* http://en.wikipedia.org/wiki/AltGr_key
|
||||
* https://zh.wikipedia.org/wiki/Alt%E7%A0%81
|
||||
|
||||
在**Mac OS**定义`Option`键组合。
|
||||
* https://zh.wikipedia.org/wiki/Option%E9%94%AE#%E6%9B%BF%E4%BB%A3%E9%94%AE%E7%9B%98%E8%BE%93%E5%85%A5
|
||||
|
||||
在**Xorg**可以改用`compose`键。
|
||||
* http://en.wikipedia.org/wiki/Compose_key
|
||||
|
||||
下方链接查看**Unicode**输入。
|
||||
* http://en.wikipedia.org/wiki/Unicode_input
|
||||
请见[Unicode](feature_unicode.md)功能。
|
||||
|
||||
## macOS上的`Fn`
|
||||
|
||||
@@ -136,51 +120,6 @@ https://github.com/tekezo/Karabiner/issues/403
|
||||
|
||||
请见[Grave Escape](feature_grave_esc.md)功能。
|
||||
|
||||
## 右侧双角色修改键(诸如Shift、Alt等有修改其他键作用的键)变箭头键
|
||||
右侧修改键单击时会变为箭头键,长按就还是修改键。在TMK中双角色键称之为**TAP**.
|
||||
```
|
||||
|
||||
#include "keymap_common.h"
|
||||
|
||||
|
||||
/* 用TMK双角色键功能实现右侧修改键改箭头键
|
||||
*
|
||||
* 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),
|
||||
};
|
||||
|
||||
```
|
||||
|
||||
双角色键说明: https://en.wikipedia.org/wiki/Modifier_key#Dual-role_keys
|
||||
|
||||
|
||||
## Mac OSX的弹出键
|
||||
`KC_EJCT` 键码在OSX可以使用 https://github.com/tmk/tmk_keyboard/issues/250
|
||||
似乎Windows10会忽略该键码,Linux/Xorg可以识别该键码但默认不映射。
|
||||
|
@@ -3,7 +3,6 @@ tmk_core/protocol/bluefruit
|
||||
tmk_core/protocol/chibios
|
||||
tmk_core/protocol/iwrap
|
||||
tmk_core/protocol/lufa
|
||||
tmk_core/protocol/mbed
|
||||
tmk_core/protocol/midi
|
||||
tmk_core/protocol/midi/bytequeue
|
||||
tmk_core/protocol/midi/Config
|
||||
|
@@ -62,7 +62,7 @@ __attribute__((weak)) void i2c_init(void) {
|
||||
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_INPUT);
|
||||
|
||||
chThdSleepMilliseconds(10);
|
||||
#ifdef USE_I2CV1
|
||||
#if defined(USE_GPIOV1)
|
||||
palSetPadMode(I2C1_SCL_BANK, I2C1_SCL, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
|
||||
palSetPadMode(I2C1_SDA_BANK, I2C1_SDA, PAL_MODE_STM32_ALTERNATE_OPENDRAIN);
|
||||
#else
|
||||
|
@@ -27,7 +27,7 @@
|
||||
#include "ch.h"
|
||||
#include <hal.h>
|
||||
|
||||
#if defined(STM32F1XX) || defined(STM32F1xx) || defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32L0xx) || defined(STM32L1xx)
|
||||
#if defined(STM32F1XX) || defined(STM32F1xx) || defined(STM32F2xx) || defined(STM32F4xx) || defined(STM32F4XX) || defined(STM32L0xx) || defined(STM32L1xx)
|
||||
# define USE_I2CV1
|
||||
#endif
|
||||
|
||||
@@ -51,6 +51,20 @@
|
||||
# define I2C1_SDA 7
|
||||
#endif
|
||||
|
||||
#if defined(STM32F1XX) || defined(STM32F1xx)
|
||||
# define USE_GPIOV1
|
||||
#endif
|
||||
|
||||
#ifndef USE_GPIOV1
|
||||
// The default PAL alternate modes are used to signal that the pins are used for I2C
|
||||
# ifndef I2C1_SCL_PAL_MODE
|
||||
# define I2C1_SCL_PAL_MODE 4
|
||||
# endif
|
||||
# ifndef I2C1_SDA_PAL_MODE
|
||||
# define I2C1_SDA_PAL_MODE 4
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef USE_I2CV1
|
||||
# ifndef I2C1_OPMODE
|
||||
# define I2C1_OPMODE OPMODE_I2C
|
||||
@@ -62,14 +76,6 @@
|
||||
# define I2C1_DUTY_CYCLE STD_DUTY_CYCLE /* FAST_DUTY_CYCLE_2 */
|
||||
# endif
|
||||
#else
|
||||
// The default PAL alternate modes are used to signal that the pins are used for I2C
|
||||
# ifndef I2C1_SCL_PAL_MODE
|
||||
# define I2C1_SCL_PAL_MODE 4
|
||||
# endif
|
||||
# ifndef I2C1_SDA_PAL_MODE
|
||||
# define I2C1_SDA_PAL_MODE 4
|
||||
# endif
|
||||
|
||||
// The default timing values below configures the I2C clock to 400khz assuming a 72Mhz clock
|
||||
// For more info : https://www.st.com/en/embedded-software/stsw-stm32126.html
|
||||
# ifndef I2C1_TIMINGR_PRESC
|
||||
|
@@ -6,7 +6,7 @@
|
||||
/* Adapted from https://github.com/bigjosh/SimpleNeoPixelDemo/ */
|
||||
|
||||
#ifndef NOP_FUDGE
|
||||
# if defined(STM32F1XX) || defined(STM32F1xx) || defined(STM32F0XX) || defined(STM32F0xx) || defined(STM32F3XX) || defined(STM32F3xx) || defined(STM32L0XX) || defined(STM32L0xx)
|
||||
# if defined(STM32F0XX) || defined(STM32F1XX) || defined(STM32F3XX) || defined(STM32F4XX) || defined(STM32L0XX)
|
||||
# define NOP_FUDGE 0.4
|
||||
# else
|
||||
# error("NOP_FUDGE configuration required")
|
||||
|
@@ -14,24 +14,31 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
// Simple analog to digitial conversion
|
||||
|
||||
#include <avr/io.h>
|
||||
#include <avr/pgmspace.h>
|
||||
#include <stdint.h>
|
||||
#include "analog.h"
|
||||
|
||||
static uint8_t aref = (1 << REFS0); // default to AREF = Vcc
|
||||
static uint8_t aref = ADC_REF_POWER;
|
||||
|
||||
void analogReference(uint8_t mode) { aref = mode & 0xC0; }
|
||||
void analogReference(uint8_t mode) { aref = mode & (_BV(REFS1) | _BV(REFS0)); }
|
||||
|
||||
// Arduino compatible pin input
|
||||
int16_t analogRead(uint8_t pin) {
|
||||
#if defined(__AVR_ATmega32U4__)
|
||||
static const uint8_t PROGMEM pin_to_mux[] = {0x00, 0x01, 0x04, 0x05, 0x06, 0x07, 0x25, 0x24, 0x23, 0x22, 0x21, 0x20};
|
||||
// clang-format off
|
||||
static const uint8_t PROGMEM pin_to_mux[] = {
|
||||
//A0 A1 A2 A3 A4 A5
|
||||
//F7 F6 F5 F4 F1 F0
|
||||
0x07, 0x06, 0x05, 0x04, 0x01, 0x00,
|
||||
//A6 A7 A8 A9 A10 A11
|
||||
//D4 D7 B4 B5 B6 D6
|
||||
0x20, 0x22, 0x23, 0x24, 0x25, 0x21
|
||||
};
|
||||
// clang-format on
|
||||
if (pin >= 12) return 0;
|
||||
return adc_read(pgm_read_byte(pin_to_mux + pin));
|
||||
#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
|
||||
#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) || defined(__AVR_ATmega328P__)
|
||||
if (pin >= 8) return 0;
|
||||
return adc_read(pin);
|
||||
#else
|
||||
@@ -39,20 +46,87 @@ int16_t analogRead(uint8_t pin) {
|
||||
#endif
|
||||
}
|
||||
|
||||
// Mux input
|
||||
int16_t analogReadPin(pin_t pin) { return adc_read(pinToMux(pin)); }
|
||||
|
||||
uint8_t pinToMux(pin_t pin) {
|
||||
switch (pin) {
|
||||
// clang-format off
|
||||
#if defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__)
|
||||
case F0: return 0; // ADC0
|
||||
case F1: return _BV(MUX0); // ADC1
|
||||
case F2: return _BV(MUX1); // ADC2
|
||||
case F3: return _BV(MUX1) | _BV(MUX0); // ADC3
|
||||
case F4: return _BV(MUX2); // ADC4
|
||||
case F5: return _BV(MUX2) | _BV(MUX0); // ADC5
|
||||
case F6: return _BV(MUX2) | _BV(MUX1); // ADC6
|
||||
case F7: return _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // ADC7
|
||||
default: return _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // 0V
|
||||
#elif defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__)
|
||||
case F0: return 0; // ADC0
|
||||
case F1: return _BV(MUX0); // ADC1
|
||||
case F4: return _BV(MUX2); // ADC4
|
||||
case F5: return _BV(MUX2) | _BV(MUX0); // ADC5
|
||||
case F6: return _BV(MUX2) | _BV(MUX1); // ADC6
|
||||
case F7: return _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // ADC7
|
||||
case D4: return _BV(MUX5); // ADC8
|
||||
case D6: return _BV(MUX5) | _BV(MUX0); // ADC9
|
||||
case D7: return _BV(MUX5) | _BV(MUX1); // ADC10
|
||||
case B4: return _BV(MUX5) | _BV(MUX1) | _BV(MUX0); // ADC11
|
||||
case B5: return _BV(MUX5) | _BV(MUX2); // ADC12
|
||||
case B6: return _BV(MUX5) | _BV(MUX2) | _BV(MUX0); // ADC13
|
||||
default: return _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // 0V
|
||||
#elif defined(__AVR_ATmega32A__)
|
||||
case A0: return 0; // ADC0
|
||||
case A1: return _BV(MUX0); // ADC1
|
||||
case A2: return _BV(MUX1); // ADC2
|
||||
case A3: return _BV(MUX1) | _BV(MUX0); // ADC3
|
||||
case A4: return _BV(MUX2); // ADC4
|
||||
case A5: return _BV(MUX2) | _BV(MUX0); // ADC5
|
||||
case A6: return _BV(MUX2) | _BV(MUX1); // ADC6
|
||||
case A7: return _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // ADC7
|
||||
default: return _BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // 0V
|
||||
#elif defined(__AVR_ATmega328P__)
|
||||
case C0: return 0; // ADC0
|
||||
case C1: return _BV(MUX0); // ADC1
|
||||
case C2: return _BV(MUX1); // ADC2
|
||||
case C3: return _BV(MUX1) | _BV(MUX0); // ADC3
|
||||
case C4: return _BV(MUX2); // ADC4
|
||||
case C5: return _BV(MUX2) | _BV(MUX0); // ADC5
|
||||
// ADC7:6 not present in DIP package and not shared by GPIO pins
|
||||
default: return _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0); // 0V
|
||||
#endif
|
||||
// clang-format on
|
||||
}
|
||||
}
|
||||
|
||||
int16_t adc_read(uint8_t mux) {
|
||||
#if defined(__AVR_AT90USB162__)
|
||||
return 0;
|
||||
#else
|
||||
uint8_t low;
|
||||
|
||||
ADCSRA = (1 << ADEN) | ADC_PRESCALER; // enable ADC
|
||||
ADCSRB = (1 << ADHSM) | (mux & 0x20); // high speed mode
|
||||
ADMUX = aref | (mux & 0x1F); // configure mux input
|
||||
ADCSRA = (1 << ADEN) | ADC_PRESCALER | (1 << ADSC); // start the conversion
|
||||
while (ADCSRA & (1 << ADSC))
|
||||
; // wait for result
|
||||
low = ADCL; // must read LSB first
|
||||
return (ADCH << 8) | low; // must read MSB only once!
|
||||
// Enable ADC and configure prescaler
|
||||
ADCSRA = _BV(ADEN) | ADC_PRESCALER;
|
||||
|
||||
#if defined(__AVR_ATmega16U4__) || defined(__AVR_ATmega32U4__)
|
||||
// High speed mode and ADC8-13
|
||||
ADCSRB = _BV(ADHSM) | (mux & _BV(MUX5));
|
||||
#elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) || defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__)
|
||||
// High speed mode only
|
||||
ADCSRB = _BV(ADHSM);
|
||||
#endif
|
||||
|
||||
// Configure mux input
|
||||
#if defined(MUX4)
|
||||
ADMUX = aref | (mux & (_BV(MUX4) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0)));
|
||||
#else
|
||||
ADMUX = aref | (mux & (_BV(MUX3) | _BV(MUX2) | _BV(MUX1) | _BV(MUX0)));
|
||||
#endif
|
||||
|
||||
// Start the conversion
|
||||
ADCSRA |= _BV(ADSC);
|
||||
// Wait for result
|
||||
while (ADCSRA & _BV(ADSC))
|
||||
;
|
||||
// Must read LSB first
|
||||
low = ADCL;
|
||||
// Must read MSB only once!
|
||||
return (ADCH << 8) | low;
|
||||
}
|
||||
|
@@ -14,45 +14,40 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef _analog_h_included__
|
||||
#define _analog_h_included__
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
void analogReference(uint8_t mode);
|
||||
int16_t analogRead(uint8_t pin);
|
||||
|
||||
int16_t analogReadPin(pin_t pin);
|
||||
uint8_t pinToMux(pin_t pin);
|
||||
|
||||
int16_t adc_read(uint8_t mux);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#define ADC_REF_POWER (1 << REFS0)
|
||||
#define ADC_REF_INTERNAL ((1 << REFS1) | (1 << REFS0))
|
||||
#define ADC_REF_EXTERNAL (0)
|
||||
#define ADC_REF_EXTERNAL 0 // AREF, Internal Vref turned off
|
||||
#define ADC_REF_POWER _BV(REFS0) // AVCC with external capacitor on AREF pin
|
||||
#define ADC_REF_INTERNAL (_BV(REFS1) | _BV(REFS0)) // Internal 2.56V Voltage Reference with external capacitor on AREF pin (1.1V for 328P)
|
||||
|
||||
// These prescaler values are for high speed mode, ADHSM = 1
|
||||
#if F_CPU == 16000000L
|
||||
# define ADC_PRESCALER ((1 << ADPS2) | (1 << ADPS1))
|
||||
#if F_CPU == 16000000L || F_CPU == 12000000L
|
||||
# define ADC_PRESCALER (_BV(ADPS2) | _BV(ADPS1)) // /64
|
||||
#elif F_CPU == 8000000L
|
||||
# define ADC_PRESCALER ((1 << ADPS2) | (1 << ADPS0))
|
||||
# define ADC_PRESCALER (_BV(ADPS2) | _BV(ADPS0)) // /32
|
||||
#elif F_CPU == 4000000L
|
||||
# define ADC_PRESCALER ((1 << ADPS2))
|
||||
# define ADC_PRESCALER (_BV(ADPS2)) // /16
|
||||
#elif F_CPU == 2000000L
|
||||
# define ADC_PRESCALER ((1 << ADPS1) | (1 << ADPS0))
|
||||
# define ADC_PRESCALER (_BV(ADPS1) | _BV(ADPS0)) // /8
|
||||
#elif F_CPU == 1000000L
|
||||
# define ADC_PRESCALER ((1 << ADPS1))
|
||||
# define ADC_PRESCALER _BV(ADPS1) // /4
|
||||
#else
|
||||
# define ADC_PRESCALER ((1 << ADPS0))
|
||||
#endif
|
||||
|
||||
// some avr-libc versions do not properly define ADHSM
|
||||
#if defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)
|
||||
# if !defined(ADHSM)
|
||||
# define ADHSM (7)
|
||||
# endif
|
||||
#endif
|
||||
|
||||
# define ADC_PRESCALER _BV(ADPS0) // /2
|
||||
#endif
|
||||
|
@@ -76,3 +76,20 @@ uint8_t pca9555_readPins(uint8_t slave_addr, uint8_t port) {
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
uint16_t pca9555_readAllPins(uint8_t slave_addr) {
|
||||
uint8_t addr = SLAVE_TO_ADDR(slave_addr);
|
||||
|
||||
typedef union {
|
||||
uint8_t u8[2];
|
||||
uint16_t u16;
|
||||
} data16;
|
||||
|
||||
data16 data;
|
||||
|
||||
i2c_status_t ret = i2c_readReg(addr, CMD_INPUT_0, &data.u8[0], sizeof(data), TIMEOUT);
|
||||
if (ret != I2C_STATUS_SUCCESS) {
|
||||
print("pca9555_readAllPins::FAILED\n");
|
||||
}
|
||||
return data.u16;
|
||||
}
|
||||
|
@@ -53,3 +53,5 @@ void pca9555_set_config(uint8_t slave_addr, uint8_t port, uint8_t conf);
|
||||
void pca9555_set_output(uint8_t slave_addr, uint8_t port, uint8_t conf);
|
||||
|
||||
uint8_t pca9555_readPins(uint8_t slave_addr, uint8_t port);
|
||||
|
||||
uint16_t pca9555_readAllPins(uint8_t slave_addr);
|
||||
|
@@ -24,10 +24,10 @@
|
||||
# include "wait.h"
|
||||
#endif
|
||||
|
||||
#include "is31fl3733.h"
|
||||
#include <string.h>
|
||||
#include "i2c_master.h"
|
||||
#include "progmem.h"
|
||||
#include "is31fl3733.h"
|
||||
|
||||
// This is a 7-bit address, that gets left-shifted and bit 0
|
||||
// set to 0 for write, 1 for read (as per I2C protocol)
|
||||
@@ -80,43 +80,54 @@ bool g_pwm_buffer_update_required[DRIVER_COUNT] = {false};
|
||||
uint8_t g_led_control_registers[DRIVER_COUNT][24] = {{0}, {0}};
|
||||
bool g_led_control_registers_update_required[DRIVER_COUNT] = {false};
|
||||
|
||||
void IS31FL3733_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
|
||||
bool IS31FL3733_write_register(uint8_t addr, uint8_t reg, uint8_t data) {
|
||||
// If the transaction fails function returns false.
|
||||
g_twi_transfer_buffer[0] = reg;
|
||||
g_twi_transfer_buffer[1] = data;
|
||||
|
||||
#if ISSI_PERSISTENCE > 0
|
||||
for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
|
||||
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) == 0) break;
|
||||
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) != 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#else
|
||||
i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT);
|
||||
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 2, ISSI_TIMEOUT) != 0) {
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
void IS31FL3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
|
||||
// assumes PG1 is already selected
|
||||
|
||||
// transmit PWM registers in 12 transfers of 16 bytes
|
||||
bool IS31FL3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer) {
|
||||
// Assumes PG1 is already selected.
|
||||
// If any of the transactions fails function returns false.
|
||||
// Transmit PWM registers in 12 transfers of 16 bytes.
|
||||
// g_twi_transfer_buffer[] is 20 bytes
|
||||
|
||||
// iterate over the pwm_buffer contents at 16 byte intervals
|
||||
// Iterate over the pwm_buffer contents at 16 byte intervals.
|
||||
for (int i = 0; i < 192; i += 16) {
|
||||
g_twi_transfer_buffer[0] = i;
|
||||
// copy the data from i to i+15
|
||||
// device will auto-increment register for data after the first byte
|
||||
// thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer
|
||||
// Copy the data from i to i+15.
|
||||
// Device will auto-increment register for data after the first byte
|
||||
// Thus this sets registers 0x00-0x0F, 0x10-0x1F, etc. in one transfer.
|
||||
for (int j = 0; j < 16; j++) {
|
||||
g_twi_transfer_buffer[1 + j] = pwm_buffer[i + j];
|
||||
}
|
||||
|
||||
#if ISSI_PERSISTENCE > 0
|
||||
for (uint8_t i = 0; i < ISSI_PERSISTENCE; i++) {
|
||||
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) == 0) break;
|
||||
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) != 0) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
#else
|
||||
i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT);
|
||||
if (i2c_transmit(addr << 1, g_twi_transfer_buffer, 17, ISSI_TIMEOUT) != 0) {
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void IS31FL3733_init(uint8_t addr, uint8_t sync) {
|
||||
@@ -213,11 +224,15 @@ void IS31FL3733_set_led_control_register(uint8_t index, bool red, bool green, bo
|
||||
|
||||
void IS31FL3733_update_pwm_buffers(uint8_t addr, uint8_t index) {
|
||||
if (g_pwm_buffer_update_required[index]) {
|
||||
// Firstly we need to unlock the command register and select PG1
|
||||
// Firstly we need to unlock the command register and select PG1.
|
||||
IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER_WRITELOCK, 0xC5);
|
||||
IS31FL3733_write_register(addr, ISSI_COMMANDREGISTER, ISSI_PAGE_PWM);
|
||||
|
||||
IS31FL3733_write_pwm_buffer(addr, g_pwm_buffer[index]);
|
||||
// If any of the transactions fail we risk writing dirty PG0,
|
||||
// refresh page 0 just in case.
|
||||
if (!IS31FL3733_write_pwm_buffer(addr, g_pwm_buffer[index])){
|
||||
g_led_control_registers_update_required[index] = true;
|
||||
}
|
||||
}
|
||||
g_pwm_buffer_update_required[index] = false;
|
||||
}
|
||||
@@ -231,6 +246,5 @@ void IS31FL3733_update_led_control_registers(uint8_t addr, uint8_t index) {
|
||||
IS31FL3733_write_register(addr, i, g_led_control_registers[index][i]);
|
||||
}
|
||||
}
|
||||
// This seems counter intuitive but sometimes this page can get corrupted. So update it every time.
|
||||
// g_led_control_registers_update_required[index] = false;
|
||||
g_led_control_registers_update_required[index] = false;
|
||||
}
|
||||
|
@@ -32,8 +32,8 @@ typedef struct is31_led {
|
||||
extern const is31_led g_is31_leds[DRIVER_LED_TOTAL];
|
||||
|
||||
void IS31FL3733_init(uint8_t addr, uint8_t sync);
|
||||
void IS31FL3733_write_register(uint8_t addr, uint8_t reg, uint8_t data);
|
||||
void IS31FL3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
|
||||
bool IS31FL3733_write_register(uint8_t addr, uint8_t reg, uint8_t data);
|
||||
bool IS31FL3733_write_pwm_buffer(uint8_t addr, uint8_t *pwm_buffer);
|
||||
|
||||
void IS31FL3733_set_color(int index, uint8_t red, uint8_t green, uint8_t blue);
|
||||
void IS31FL3733_set_color_all(uint8_t red, uint8_t green, uint8_t blue);
|
||||
|
@@ -21,6 +21,3 @@
|
||||
|
||||
/* COL2ROW or ROW2COL */
|
||||
#define DIODE_DIRECTION COL2ROW
|
||||
|
||||
/* prevent stuck modifiers */
|
||||
#define PREVENT_STUCK_MODIFIERS
|
||||
|
@@ -133,7 +133,7 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
|
||||
};
|
||||
|
||||
uint32_t layer_state_set_user(uint32_t state) {
|
||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
|
||||
}
|
||||
|
||||
|
1
keyboards/7skb/7skb.c
Normal file
1
keyboards/7skb/7skb.c
Normal file
@@ -0,0 +1 @@
|
||||
#include "7skb.h"
|
7
keyboards/7skb/7skb.h
Normal file
7
keyboards/7skb/7skb.h
Normal file
@@ -0,0 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
#ifdef KEYBOARD_7skb_rev1
|
||||
#include "rev1.h"
|
||||
#endif
|
21
keyboards/7skb/config.h
Normal file
21
keyboards/7skb/config.h
Normal file
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||
Copyright 2015 Jack Humbert
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "config_common.h"
|
76
keyboards/7skb/info.json
Normal file
76
keyboards/7skb/info.json
Normal file
@@ -0,0 +1,76 @@
|
||||
{
|
||||
"keyboard_name": "7skb",
|
||||
"url": "https://salicylic-acid3.hatenablog.com/",
|
||||
"maintainer": "Salicylic_acid3",
|
||||
"width": 16,
|
||||
"height": 5,
|
||||
"layouts": {
|
||||
"LAYOUT": {
|
||||
"layout": [
|
||||
{"label":"Esc", "x":0, "y":0},
|
||||
{"label":"1", "x":1, "y":0},
|
||||
{"label":"2", "x":2, "y":0},
|
||||
{"label":"3", "x":3, "y":0},
|
||||
{"label":"4", "x":4, "y":0},
|
||||
{"label":"5", "x":5, "y":0},
|
||||
{"label":"6", "x":7, "y":0},
|
||||
{"label":"7", "x":8, "y":0},
|
||||
{"label":"8", "x":9, "y":0},
|
||||
{"label":"9", "x":10, "y":0},
|
||||
{"label":"0", "x":11, "y":0},
|
||||
{"label":"-", "x":12, "y":0},
|
||||
{"label":"=", "x":13, "y":0},
|
||||
{"label":"\\", "x":14, "y":0},
|
||||
{"label":"`", "x":15, "y":0},
|
||||
{"label":"Tab", "x":0, "y":1, "w":1.5},
|
||||
{"label":"Q", "x":1.5, "y":1},
|
||||
{"label":"W", "x":2.5, "y":1},
|
||||
{"label":"E", "x":3.5, "y":1},
|
||||
{"label":"R", "x":4.5, "y":1},
|
||||
{"label":"T", "x":5.5, "y":1},
|
||||
{"label":"Y", "x":7.5, "y":1},
|
||||
{"label":"U", "x":8.5, "y":1},
|
||||
{"label":"I", "x":9.5, "y":1},
|
||||
{"label":"O", "x":10.5, "y":1},
|
||||
{"label":"P", "x":11.5, "y":1},
|
||||
{"label":"[", "x":12.5, "y":1},
|
||||
{"label":"]", "x":13.5, "y":1},
|
||||
{"label":"Delete", "x":14.5, "y":1, "w":1.5},
|
||||
{"label":"Control", "x":0, "y":2, "w":1.75},
|
||||
{"label":"A", "x":1.75, "y":2},
|
||||
{"label":"S", "x":2.75, "y":2},
|
||||
{"label":"D", "x":3.75, "y":2},
|
||||
{"label":"F", "x":4.75, "y":2},
|
||||
{"label":"G", "x":5.75, "y":2},
|
||||
{"label":"H", "x":7.75, "y":2},
|
||||
{"label":"J", "x":8.75, "y":2},
|
||||
{"label":"K", "x":9.75, "y":2},
|
||||
{"label":"L", "x":10.75, "y":2},
|
||||
{"label":";", "x":11.75, "y":2},
|
||||
{"label":"'", "x":12.75, "y":2},
|
||||
{"label":"Enter", "x":13.75, "y":2, "w":2.25},
|
||||
{"label":"Shift", "x":0, "y":3, "w":2.25},
|
||||
{"label":"Z", "x":2.25, "y":3},
|
||||
{"label":"X", "x":3.25, "y":3},
|
||||
{"label":"C", "x":4.25, "y":3},
|
||||
{"label":"V", "x":5.25, "y":3},
|
||||
{"label":"B", "x":6.25, "y":3},
|
||||
{"label":"N", "x":8.25, "y":3},
|
||||
{"label":"M", "x":9.25, "y":3},
|
||||
{"label":",", "x":10.25, "y":3},
|
||||
{"label":".", "x":11.25, "y":3},
|
||||
{"label":"/", "x":12.25, "y":3},
|
||||
{"label":"Shift", "x":13.25, "y":3, "w":1.75},
|
||||
{"label":"Fn", "x":15, "y":3},
|
||||
{"label":"Alt", "x":1.5, "y":4},
|
||||
{"label":"GUI", "x":2.5, "y":4, "w":1.5},
|
||||
{"x":4, "y":4, "w":1.5},
|
||||
{"x":5.5, "y":4, "w":1.25},
|
||||
{"x":7.75, "y":4, "w":1.25},
|
||||
{"x":9, "y":4, "w":2},
|
||||
{"label":"GUI", "x":11, "y":4, "w":1.5},
|
||||
{"label":"Alt", "x":12.5, "y":4}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
22
keyboards/7skb/keymaps/default/config.h
Normal file
22
keyboards/7skb/keymaps/default/config.h
Normal file
@@ -0,0 +1,22 @@
|
||||
/* Copyright 2018 Salicylic_acid3
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/* Select hand configuration */
|
||||
|
||||
#define TAPPING_FORCE_HOLD
|
||||
#define TAPPING_TERM 180
|
115
keyboards/7skb/keymaps/default/keymap.c
Normal file
115
keyboards/7skb/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,115 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
//Following line allows macro to read current RGB settings
|
||||
extern rgblight_config_t rgblight_config;
|
||||
#endif
|
||||
|
||||
extern uint8_t is_master;
|
||||
|
||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
enum layer_number {
|
||||
_QWERTY = 0,
|
||||
_FN,
|
||||
_ADJUST,
|
||||
};
|
||||
|
||||
enum custom_keycodes {
|
||||
RGB_RST = SAFE_RANGE
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_QWERTY] = LAYOUT(
|
||||
//,-----------------------------------------------------| |--------------------------------------------------------------------------------.
|
||||
KC_ESC, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSLS,KC_GRAVE,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LCBR, KC_RCBR,KC_BSPC,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, MO(_FN),
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||
KC_LALT, KC_LGUI, KC_SPC, KC_SPC, KC_SPC, KC_SPC, KC_RGUI, KC_RALT
|
||||
//`---------------------------------------------| |--------------------------------------------'
|
||||
),
|
||||
|
||||
[_FN] = LAYOUT(
|
||||
//,-----------------------------------------------------| |--------------------------------------------------------------------------------.
|
||||
TG(_ADJUST), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK,KC_PAUSE, KC_UP, _______, KC_BSPC,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_LEFT,KC_RIGHT, _______,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, KC_DOWN, _______, _______,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||
_______, _______, _______, _______, _______, _______, KC_STOP, _______
|
||||
//`---------------------------------------------| |--------------------------------------------'
|
||||
),
|
||||
|
||||
[_ADJUST] = LAYOUT( /* Base */
|
||||
//,-----------------------------------------------------| |--------------------------------------------------------------------------------.
|
||||
TG(_ADJUST), XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_RST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_VAD, RGB_VAI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, XXXXXXX,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_STOP, XXXXXXX
|
||||
//`---------------------------------------------| |--------------------------------------------'
|
||||
)
|
||||
};
|
||||
|
||||
|
||||
//A description for expressing the layer position in LED mode.
|
||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
switch (get_highest_layer(state)) {
|
||||
case _FN:
|
||||
rgblight_sethsv_at(HSV_BLUE, 0);
|
||||
break;
|
||||
case _ADJUST:
|
||||
rgblight_sethsv_at(HSV_PURPLE, 0);
|
||||
break;
|
||||
default: // for any other layers, or the default layer
|
||||
rgblight_sethsv_at( 0, 0, 0, 0);
|
||||
break;
|
||||
}
|
||||
rgblight_set_effect_range( 1, 4);
|
||||
#endif
|
||||
return state;
|
||||
}
|
||||
|
||||
int RGB_current_mode;
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
bool result = false;
|
||||
switch (keycode) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
case RGB_MOD:
|
||||
if (record->event.pressed) {
|
||||
rgblight_mode(RGB_current_mode);
|
||||
rgblight_step();
|
||||
RGB_current_mode = rgblight_config.mode;
|
||||
}
|
||||
break;
|
||||
case RGB_RST:
|
||||
if (record->event.pressed) {
|
||||
eeconfig_update_rgblight_default();
|
||||
rgblight_enable();
|
||||
RGB_current_mode = rgblight_config.mode;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
result = true;
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
23
keyboards/7skb/keymaps/salicylic/config.h
Normal file
23
keyboards/7skb/keymaps/salicylic/config.h
Normal file
@@ -0,0 +1,23 @@
|
||||
/* Copyright 2018 Salicylic_acid3
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
/* Select hand configuration */
|
||||
|
||||
#define TAPPING_FORCE_HOLD
|
||||
#define TAPPING_TERM 180
|
||||
//#define MASTER_RIGHT
|
181
keyboards/7skb/keymaps/salicylic/keymap.c
Normal file
181
keyboards/7skb/keymaps/salicylic/keymap.c
Normal file
@@ -0,0 +1,181 @@
|
||||
#include QMK_KEYBOARD_H
|
||||
#include "keymap_jp.h"
|
||||
|
||||
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
//Following line allows macro to read current RGB settings
|
||||
extern rgblight_config_t rgblight_config;
|
||||
#endif
|
||||
|
||||
extern uint8_t is_master;
|
||||
|
||||
// Each layer gets a name for readability, which is then used in the keymap matrix below.
|
||||
// The underscores don't mean anything - you can have a layer called STUFF or any other name.
|
||||
// Layer names don't all need to be of the same length, obviously, and you can also skip them
|
||||
// entirely and just use numbers.
|
||||
enum layer_number {
|
||||
_QWERTY = 0,
|
||||
_FLOCK,
|
||||
_FN,
|
||||
_LOWER,
|
||||
_RAISE,
|
||||
_ADJUST,
|
||||
};
|
||||
|
||||
enum custom_keycodes {
|
||||
RGB_RST = SAFE_RANGE
|
||||
};
|
||||
|
||||
enum tapdances{
|
||||
TD_ESFL = 0,
|
||||
TD_ESQW,
|
||||
};
|
||||
|
||||
qk_tap_dance_action_t tap_dance_actions[] = {
|
||||
[TD_ESFL] = ACTION_TAP_DANCE_DUAL_ROLE(KC_ESC, _FLOCK),
|
||||
[TD_ESQW] = ACTION_TAP_DANCE_DUAL_ROLE(KC_ESC, _QWERTY),
|
||||
};
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[_QWERTY] = LAYOUT(
|
||||
//,-----------------------------------------------------| |--------------------------------------------------------------------------------.
|
||||
TD(TD_ESFL), KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, JP_MINS, JP_EQL, JP_BSLS, KC_ZKHK,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, JP_LBRC, JP_RBRC,KC_BSPC,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
KC_LCTRL, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, JP_MINS, JP_BSLS, KC_ENT,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, JP_SLSH, KC_RSFT, MO(_FN),
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||
KC_ZKHK,LGUI_T(KC_MHEN),LT(_LOWER,KC_ENT), KC_BSPC, KC_DEL, LT(_RAISE,KC_SPC),ALT_T(KC_HENK), KC_APP
|
||||
//`---------------------------------------------| |--------------------------------------------'
|
||||
),
|
||||
|
||||
[_FLOCK] = LAYOUT(
|
||||
//,-----------------------------------------------------| |--------------------------------------------------------------------------------.
|
||||
TD(TD_ESQW), KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, _______,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
//`---------------------------------------------| |--------------------------------------------'
|
||||
),
|
||||
|
||||
[_FN] = LAYOUT(
|
||||
//,-----------------------------------------------------| |--------------------------------------------------------------------------------.
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, _______, KC_DEL,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_PSCR, KC_SLCK,KC_PAUSE, KC_UP, _______, KC_BSPC,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_HOME, KC_PGUP, KC_LEFT,KC_RIGHT, _______,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||
_______, _______, _______, _______, _______, _______, _______, _______, KC_END, KC_PGDN, KC_DOWN, _______, _______,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||
_______, _______, _______, _______, _______, _______, KC_STOP, _______
|
||||
//`---------------------------------------------| |--------------------------------------------'
|
||||
),
|
||||
|
||||
[_LOWER] = LAYOUT(
|
||||
//,-----------------------------------------------------| |--------------------------------------------------------------------------------.
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
JP_QUOT, JP_EXLM, JP_QUES, JP_LBRC, JP_RBRC, JP_TILD, KC_P6, KC_P7, KC_P8, KC_P9, JP_ASTR, JP_SLSH, _______, KC_BSPC,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
JP_QUOT, JP_HASH, JP_DQT, JP_LPRN, JP_RPRN, JP_AT, XXXXXXX, KC_P4, KC_P5, KC_P6, JP_MINS, JP_EQL, _______,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||
JP_CIRC, JP_PERC, JP_AMPR, JP_SCLN, JP_COLN, JP_PIPE, KC_P0, KC_P1, KC_P2, KC_P3, JP_PLUS, _______, _______,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||
_______, _______,MO(_LOWER), _______, _______, MO(_RAISE), JP_DOT, _______
|
||||
//`---------------------------------------------| |--------------------------------------------'
|
||||
),
|
||||
|
||||
[_RAISE] = LAYOUT(
|
||||
//,-----------------------------------------------------| |--------------------------------------------------------------------------------.
|
||||
_______, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_INS, KC_DEL,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
KC_TAB, KC_1, KC_2, KC_3, KC_4, KC_5, XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, KC_PGUP, XXXXXXX, _______, KC_BSPC,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
LCTL_T(KC_F11),XXXXXXX, KC_F2, KC_F3, KC_F4, KC_F5, XXXXXXX, KC_LEFT, KC_DOWN,KC_RIGHT, XXXXXXX, XXXXXXX, _______,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||
SFT_T(KC_F12), KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_PGDN, _______, _______,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||
_______, _______, _______, _______, _______, _______, _______, _______
|
||||
//`---------------------------------------------| |--------------------------------------------'
|
||||
),
|
||||
|
||||
[_ADJUST] = LAYOUT( /* Base */
|
||||
//,-----------------------------------------------------| |--------------------------------------------------------------------------------.
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RESET,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_RST, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------+--------|
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_TOG, RGB_MOD, XXXXXXX, LCA(KC_DEL), LALT(KC_PSCR),KC_PSCR, XXXXXXX,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||
XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, RGB_VAD, RGB_VAI, RGB_HUD, RGB_HUI, RGB_SAD, RGB_SAI, XXXXXXX,
|
||||
//|--------+--------+--------+--------+--------+--------| |--------+--------+--------+--------+--------+--------+--------|
|
||||
XXXXXXX, XXXXXXX, _______, RESET, RESET, _______, KC_STOP, XXXXXXX
|
||||
//`---------------------------------------------| |--------------------------------------------'
|
||||
)
|
||||
};
|
||||
|
||||
|
||||
//A description for expressing the layer position in LED mode.
|
||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
state = update_tri_layer_state(state, _RAISE, _LOWER, _ADJUST);
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
switch (get_highest_layer(state)) {
|
||||
case _FLOCK:
|
||||
rgblight_sethsv_at(HSV_YELLOW, 0);
|
||||
break;
|
||||
case _FN:
|
||||
rgblight_sethsv_at(HSV_GREEN, 0);
|
||||
break;
|
||||
case _LOWER:
|
||||
rgblight_sethsv_at(HSV_BLUE, 0);
|
||||
break;
|
||||
case _RAISE:
|
||||
rgblight_sethsv_at(HSV_RED, 0);
|
||||
break;
|
||||
case _ADJUST:
|
||||
rgblight_sethsv_at(HSV_PURPLE, 0);
|
||||
break;
|
||||
default: // for any other layers, or the default layer
|
||||
rgblight_sethsv_at( 0, 0, 0, 0);
|
||||
break;
|
||||
}
|
||||
rgblight_set_effect_range( 1, 4);
|
||||
#endif
|
||||
return state;
|
||||
}
|
||||
|
||||
int RGB_current_mode;
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
bool result = false;
|
||||
switch (keycode) {
|
||||
#ifdef RGBLIGHT_ENABLE
|
||||
case RGB_MOD:
|
||||
if (record->event.pressed) {
|
||||
rgblight_mode(RGB_current_mode);
|
||||
rgblight_step();
|
||||
RGB_current_mode = rgblight_config.mode;
|
||||
}
|
||||
break;
|
||||
case RGB_RST:
|
||||
if (record->event.pressed) {
|
||||
eeconfig_update_rgblight_default();
|
||||
rgblight_enable();
|
||||
RGB_current_mode = rgblight_config.mode;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
result = true;
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
1
keyboards/7skb/keymaps/salicylic/rules.mk
Normal file
1
keyboards/7skb/keymaps/salicylic/rules.mk
Normal file
@@ -0,0 +1 @@
|
||||
TAP_DANCE_ENABLE = yes
|
17
keyboards/7skb/readme.md
Normal file
17
keyboards/7skb/readme.md
Normal file
@@ -0,0 +1,17 @@
|
||||
# 7skb
|
||||
|
||||

|
||||
|
||||
This is 63 keys Custom keyboard.
|
||||
|
||||
* Keyboard Maintainer: [Salicylic_acid3](https://github.com/Salicylic-acid3)
|
||||
* Hardware Supported: 7skb PCB, Pro Micro
|
||||
* Hardware Availability: [PCB & Case Data](https://github.com/Salicylic-acid3/PCB_Data), [Booth Shop](https://salicylic-acid3.booth.pm/items/1673395)
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make 7skb:default
|
||||
|
||||
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).
|
||||
|
||||
[Build guide](https://salicylic-acid3.hatenablog.com/entry/7skb-mx-build-guide)
|
84
keyboards/7skb/rev1/config.h
Normal file
84
keyboards/7skb/rev1/config.h
Normal file
@@ -0,0 +1,84 @@
|
||||
/*
|
||||
Copyright 2012 Jun Wako <wakojun@gmail.com>
|
||||
Copyright 2015 Jack Humbert
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include QMK_KEYBOARD_CONFIG_H
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x3060
|
||||
#define DEVICE_VER 0x0007
|
||||
#define MANUFACTURER Salicylic_Acid
|
||||
#define PRODUCT 7skb
|
||||
#define DESCRIPTION A custom keyboard
|
||||
|
||||
/* key matrix size */
|
||||
#define MATRIX_ROWS 10
|
||||
#define MATRIX_COLS 8
|
||||
|
||||
// wiring of each half
|
||||
#define MATRIX_ROW_PINS { D4, C6, D7, E6, B4 }
|
||||
#define MATRIX_COL_PINS { F4, F5, F6, F7, B1, B3, B2, B5 }
|
||||
|
||||
/* Set 0 if debouncing isn't needed */
|
||||
#define DEBOUNCE 5
|
||||
|
||||
/* serial.c configuration for split keyboard */
|
||||
#define SOFT_SERIAL_PIN D2
|
||||
#define SPLIT_HAND_PIN B6
|
||||
|
||||
/* Mechanical locking support. Use KC_LCAP, KC_LNUM or KC_LSCR instead in keymap */
|
||||
#define LOCKING_SUPPORT_ENABLE
|
||||
/* Locking resynchronize hack */
|
||||
#define LOCKING_RESYNC_ENABLE
|
||||
|
||||
/* ws2812 RGB LED */
|
||||
#define RGB_DI_PIN D3
|
||||
|
||||
#ifndef RGBLED_NUM
|
||||
#define RGBLED_NUM 10
|
||||
#define RGBLIGHT_SPLIT
|
||||
#define RGBLED_SPLIT { 5, 5 }
|
||||
#endif
|
||||
|
||||
#define RGBLIGHT_ANIMATIONS
|
||||
|
||||
#ifndef IOS_DEVICE_ENABLE
|
||||
#define RGBLIGHT_LIMIT_VAL 180
|
||||
#define RGBLIGHT_VAL_STEP 17
|
||||
#else
|
||||
#define RGBLIGHT_LIMIT_VAL 50
|
||||
#define RGBLIGHT_VAL_STEP 4
|
||||
#endif
|
||||
#define RGBLIGHT_HUE_STEP 10
|
||||
#define RGBLIGHT_SAT_STEP 17
|
||||
|
||||
#if defined(RGBLIGHT_ENABLE) && !defined(IOS_DEVICE_ENABLE)
|
||||
// USB_MAX_POWER_CONSUMPTION value for naked48 keyboard
|
||||
// 120 RGBoff, OLEDoff
|
||||
// 120 OLED
|
||||
// 330 RGB 6
|
||||
// 300 RGB 32
|
||||
// 310 OLED & RGB 32
|
||||
#define USB_MAX_POWER_CONSUMPTION 400
|
||||
#else
|
||||
// fix iPhone and iPad power adapter issue
|
||||
// iOS device need lessthan 100
|
||||
#define USB_MAX_POWER_CONSUMPTION 100
|
||||
#endif
|
1
keyboards/7skb/rev1/rev1.c
Normal file
1
keyboards/7skb/rev1/rev1.c
Normal file
@@ -0,0 +1 @@
|
||||
#include "rev1.h"
|
42
keyboards/7skb/rev1/rev1.h
Normal file
42
keyboards/7skb/rev1/rev1.h
Normal file
@@ -0,0 +1,42 @@
|
||||
#pragma once
|
||||
|
||||
#include "7skb.h"
|
||||
|
||||
#include "quantum.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// When only use 7skb.
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
/*
|
||||
* ,------------------------------------ ------------------------------------------------------.
|
||||
* | L00 | L01 | L02 | L03 | L04 | L05 | | R00 | R01 | R02 | R03 | R04 | R05 | R06 | R07 | R17 |
|
||||
* |---------------------------------------------------------------------------------------------+
|
||||
* | L10 | L11 | L12 | L13 | L14 | L15 | | R10 | R11 | R12 | R13 | R14 | R15 | R16 | R27 |
|
||||
* |---------------------------------------- ---------------------------------------------------+
|
||||
* | L20 | L21 | L22 | L23 | L24 | L25 | | R20 | R21 | R22 | R23 | R24 | R25 | R26 |
|
||||
* |---------------------------------------------------------------------------------------------+
|
||||
* | L30 | L31 | L32 | L33 | L34 | L35 | | R30 | R31 | R32 | R33 | R34 | R35 | R36 |
|
||||
* |------------------------------------------- -----------------------------------------------'
|
||||
* | L41 | L42 | L43 | L44 | | R40 | R41 | R43 | R44 |
|
||||
* |------------------------------ ---------------------------------'
|
||||
*/
|
||||
|
||||
#define LAYOUT( \
|
||||
L00, L01, L02, L03, L04, L05, R00, R01, R02, R03, R04, R05, R06, R07, R17, \
|
||||
L10, L11, L12, L13, L14, L15, R10, R11, R12, R13, R14, R15, R16, R27, \
|
||||
L20, L21, L22, L23, L24, L25, R20, R21, R22, R23, R24, R25, R26, \
|
||||
L30, L31, L32, L33, L34, L35, R30, R31, R32, R33, R34, R35, R36, \
|
||||
L41, L42, L43, L44, R40, R41, R43, R44 \
|
||||
) \
|
||||
{ \
|
||||
{ L00, L01, L02, L03, L04, L05, KC_NO, KC_NO }, \
|
||||
{ L10, L11, L12, L13, L14, L15, KC_NO, KC_NO }, \
|
||||
{ L20, L21, L22, L23, L24, L25, KC_NO, KC_NO }, \
|
||||
{ L30, L31, L32, L33, L34, L35, KC_NO, KC_NO }, \
|
||||
{KC_NO, L41, L42, L43, L44, KC_NO, KC_NO, KC_NO }, \
|
||||
{ R00, R01, R02, R03, R04, R05, R06, R07 }, \
|
||||
{ R10, R11, R12, R13, R14, R15, R16, R17 }, \
|
||||
{ R20, R21, R22, R23, R24, R25, R26, R27 }, \
|
||||
{ R30, R31, R32, R33, R34, R35, R36, KC_NO }, \
|
||||
{ R40, R41, KC_NO, R43, R44, KC_NO, KC_NO, KC_NO } \
|
||||
}
|
0
keyboards/7skb/rev1/rules.mk
Normal file
0
keyboards/7skb/rev1/rules.mk
Normal file
35
keyboards/7skb/rules.mk
Normal file
35
keyboards/7skb/rules.mk
Normal file
@@ -0,0 +1,35 @@
|
||||
# MCU name
|
||||
MCU = atmega32u4
|
||||
|
||||
# Bootloader selection
|
||||
# Teensy halfkay
|
||||
# Pro Micro caterina
|
||||
# Atmel DFU atmel-dfu
|
||||
# LUFA DFU lufa-dfu
|
||||
# QMK DFU qmk-dfu
|
||||
# ATmega32A bootloadHID
|
||||
# ATmega328P USBasp
|
||||
BOOTLOADER = caterina
|
||||
|
||||
# Build Options
|
||||
# change to "no" to disable the options, or define them in the Makefile in
|
||||
# the appropriate keymap folder that will get included automatically
|
||||
#
|
||||
BOOTMAGIC_ENABLE = no # Virtual DIP switch configuration
|
||||
MOUSEKEY_ENABLE = no # Mouse keys
|
||||
EXTRAKEY_ENABLE = yes # Audio control and System control
|
||||
CONSOLE_ENABLE = no # Console for debug
|
||||
COMMAND_ENABLE = yes # Commands for debug and configuration
|
||||
NKRO_ENABLE = no # Nkey Rollover - if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
|
||||
BACKLIGHT_ENABLE = no # Enable keyboard backlight functionality
|
||||
MIDI_ENABLE = no # MIDI controls
|
||||
AUDIO_ENABLE = no # Audio output on port C6
|
||||
UNICODE_ENABLE = no # Unicode
|
||||
BLUETOOTH_ENABLE = no # Enable Bluetooth with the Adafruit EZ-Key HID
|
||||
RGBLIGHT_ENABLE = yes # Enable WS2812 RGB underlight.
|
||||
# Do not enable SLEEP_LED_ENABLE. it uses the same timer as BACKLIGHT_ENABLE
|
||||
SLEEP_LED_ENABLE = no # Breathing sleep LED during USB suspend
|
||||
|
||||
SPLIT_KEYBOARD = yes
|
||||
|
||||
DEFAULT_FOLDER = 7skb/rev1
|
@@ -90,8 +90,8 @@ void led_set_user(uint8_t usb_led) {
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t layer_state_set_user(uint32_t state) {
|
||||
switch (biton32(state)) {
|
||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
switch (get_highest_layer(state)) {
|
||||
case 1:
|
||||
writePinHigh(D1);
|
||||
break;
|
||||
|
@@ -85,7 +85,7 @@ void led_set_user(uint8_t usb_led) {
|
||||
|
||||
}
|
||||
|
||||
uint32_t layer_state_set_user(uint32_t state) {
|
||||
layer_state_t layer_state_set_user(layer_state_t state) {
|
||||
|
||||
return state;
|
||||
}
|
||||
|
@@ -54,7 +54,7 @@ bool is_keyboard_master(void)
|
||||
}
|
||||
|
||||
static void keyboard_master_setup(void) {
|
||||
#if defined(USE_I2C) || defined(EH)
|
||||
#if defined(USE_I2C)
|
||||
#ifdef SSD1306OLED
|
||||
matrix_master_OLED_init ();
|
||||
#endif
|
||||
|
@@ -18,7 +18,7 @@
|
||||
extern backlight_config_t backlight_config;
|
||||
#endif
|
||||
|
||||
#if defined(USE_I2C) || defined(EH)
|
||||
#if defined(USE_I2C)
|
||||
|
||||
#include "i2c.h"
|
||||
|
||||
|
@@ -13,7 +13,7 @@
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "angel64.h"
|
||||
#include "alpha.h"
|
||||
|
||||
// Optional override functions below.
|
||||
// You can leave any or all of these undefined.
|
@@ -21,7 +21,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
/* USB Device descriptor parameter */
|
||||
#define VENDOR_ID 0xFEED
|
||||
#define PRODUCT_ID 0x0000
|
||||
#define PRODUCT_ID 0x0A64
|
||||
#define DEVICE_VER 0x0001
|
||||
#define MANUFACTURER kakunpc
|
||||
#define PRODUCT angel64
|
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"keyboard_name": "angel64",
|
||||
"keyboard_name": "angel64_alpha",
|
||||
"url": "https://kakunpc.booth.pm/",
|
||||
"maintainer": "kakunpc",
|
||||
"width": 14,
|
60
keyboards/angel64/alpha/keymaps/default/keymap.c
Normal file
60
keyboards/angel64/alpha/keymaps/default/keymap.c
Normal file
@@ -0,0 +1,60 @@
|
||||
/* Copyright 2019 kakunpc
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum layers{
|
||||
BASE = 0,
|
||||
COMMAND
|
||||
};
|
||||
|
||||
#define KC_COMMAND LT(COMMAND,KC_SPC)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[BASE] = LAYOUT(
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC,
|
||||
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
LCTL_T(KC_TAB), KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT,
|
||||
KC_TAB, KC_LALT, KC_LGUI, KC_COMMAND, KC_SPC, KC_COMMAND, KC_APP, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL),
|
||||
[COMMAND] = LAYOUT(
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC,
|
||||
KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_LSFT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, _______, KC_NO, _______, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO),
|
||||
};
|
||||
|
||||
#ifdef OLED_DRIVER_ENABLE
|
||||
void oled_task_user(void) {
|
||||
oled_write_P(PSTR("Layer: "), false);
|
||||
switch (biton32(layer_state)) {
|
||||
case BASE:
|
||||
oled_write_P(PSTR("Default\n"), false);
|
||||
break;
|
||||
case COMMAND:
|
||||
oled_write_P(PSTR("COMMAND\n"), false);
|
||||
break;
|
||||
default:
|
||||
// Or use the write_ln shortcut over adding 'n' to the end of your string
|
||||
oled_write_ln_P(PSTR("Undefined"), false);
|
||||
}
|
||||
|
||||
// Host Keyboard LED Status
|
||||
oled_write_P(IS_HOST_LED_ON(USB_LED_NUM_LOCK) ? PSTR("NUMLCK ") : PSTR(" "), false);
|
||||
oled_write_P(IS_HOST_LED_ON(USB_LED_CAPS_LOCK) ? PSTR("CAPLCK ") : PSTR(" "), false);
|
||||
oled_write_P(IS_HOST_LED_ON(USB_LED_SCROLL_LOCK) ? PSTR("SCRLCK ") : PSTR(" "), false);
|
||||
}
|
||||
#endif
|
15
keyboards/angel64/alpha/readme.md
Normal file
15
keyboards/angel64/alpha/readme.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# angel64
|
||||
|
||||

|
||||
|
||||
Keyboard for tablets.
|
||||
|
||||
* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
|
||||
* Hardware Supported: angel64_alpha, promicro
|
||||
* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
make angel64/alpha:default
|
||||
|
||||
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).
|
0
keyboards/angel64/alpha/rules.mk
Normal file
0
keyboards/angel64/alpha/rules.mk
Normal file
@@ -1,58 +0,0 @@
|
||||
/* Copyright 2019 kakunpc
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include QMK_KEYBOARD_H
|
||||
|
||||
enum layers{
|
||||
BASE = 0,
|
||||
COMMAND
|
||||
};
|
||||
|
||||
#define KC_COMMAND LT(COMMAND,KC_SPC)
|
||||
|
||||
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
|
||||
[BASE] = LAYOUT(
|
||||
KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC ,
|
||||
KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS,
|
||||
KC_TAB, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT,
|
||||
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_UP, KC_RSFT,
|
||||
KC_LCTL, KC_LALT, KC_LGUI, KC_COMMAND, KC_SPC, KC_COMMAND, KC_CAPS, KC_LEFT, KC_DOWN, KC_RIGHT, KC_DEL
|
||||
),
|
||||
[COMMAND] = LAYOUT(
|
||||
KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_BSPC ,
|
||||
KC_NO, KC_UP, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_LEFT, KC_DOWN, KC_RIGHT, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO,
|
||||
KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO, KC_NO
|
||||
)
|
||||
};
|
||||
|
||||
bool process_record_user(uint16_t keycode, keyrecord_t *record) {
|
||||
return true;
|
||||
}
|
||||
|
||||
void matrix_init_user(void) {
|
||||
}
|
||||
|
||||
void matrix_scan_user(void) {
|
||||
|
||||
}
|
||||
|
||||
void led_set_user(uint8_t usb_led) {
|
||||
|
||||
}
|
||||
|
||||
void keyboard_post_init_user(void) {
|
||||
}
|
@@ -1,12 +1,12 @@
|
||||
# angel64
|
||||
|
||||

|
||||

|
||||
|
||||
Keyboard for tablets.
|
||||
|
||||
Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
|
||||
Hardware Supported: angel64_alpha, promicro
|
||||
Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
|
||||
* Keyboard Maintainer: [kakunpc](https://github.com/kakunpc)
|
||||
* Hardware Supported: angel64_alpha, angel64_rev1, promicro
|
||||
* Hardware Availability: booth([@kakunpc](https://kakunpc.booth.pm/))
|
||||
|
||||
Make example for this keyboard (after setting up your build environment):
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user