Compare commits

..
9 Commits
Author SHA1 Message Date
skullydazed 9c58da6b12 Improve a number of things about how MILC operates (#7344)
* Pull in updates for MILC

* Remove the shadow argparser
* Make it easier to reason about arguments and how they're translated into the config tree
* Populate self.config during init to support setting user.qmk_home for the global CLI
* Remove the short argument -c so that we can unambiguously determine the config file location without doing full argument processing
* Remove the --save-config option as it's a little confusing anyway
* Use Pathlib for path manipulation

* Fix commands with no arguments
2019-11-18 14:54:50 -08:00
moyi4681 b608bddc5e knight Indicator light fix (#7398)
* knight Indicator light fix

* Update knight.c

* Update knight.c

* Update knight.c

* Update knight.c
2019-11-18 19:25:35 +11:00
Takeshi ISHII cee8df3edf [Docs] Modified the description about setting debug_enable in docs/faq_debug.md. (#7394) 2019-11-17 17:09:57 -08:00
Luiz Correia e58dd1a09a [Keyboard] Add abnt2 layout to gh60 (#7371)
* [keymap] Add abnt2 format to gh60

* Fix typing errors

* Change key names to capitals

* Fix layout define

* Apply suggestions from code review

* Fix layout define again I used a k

* Remove layer variable

* Update keyboards/dz60/keymaps/default_abnt2/readme.md

* Make changes from noroadsleft
2019-11-17 16:10:16 -08:00
zvecr a91c0c4765 Run clang-format manually to fix recently changed files 2019-11-17 08:25:58 -08:00
James Young 6b18ca2875 Add Community Layout: 60_abnt2 (#7381)
* Add Community Layout: 60_abnt2

Add a 60% version of the standard keyboard layout used in Brazil.

* Enable 60_abnt2 support for DZ60

* fix the indenting in the Community Layout keymap
2019-11-17 08:12:57 -08:00
Erovia 7b6c8e89ca Doc fix to conform with #7221 (#7392) 2019-11-17 16:04:44 +00:00
James Young 46d0fe44f3 [Keyboard] Cutie Club Wraith: Configurator Bugfix for LAYOUT_iso (#7376)
* debug lint info.json

Because I need to debug this file.

* move ISO Enter to the proper location in sequence

* add key counts because I like having them
2019-11-16 12:46:34 -08:00
Robert Akhmerov 634b277b07 [Docs] Explain Tap Dance interruption (#5520) 2019-11-16 09:20:49 -08:00
40 changed files with 768 additions and 750 deletions

No files matched your search

+3 -5
View File
@@ -28,9 +28,9 @@ the Ctrl, Alt, or GUI modifiers are held down.
A compact 40% (12x4) ortholinear keyboard kit made and sold by OLKB and Massdrop. [More info on qmk.fm](http://qmk.fm/planck/) A compact 40% (12x4) ortholinear keyboard kit made and sold by OLKB and Massdrop. [More info on qmk.fm](http://qmk.fm/planck/)
Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert) * Keyboard Maintainer: [Jack Humbert](https://github.com/jackhumbert)
Hardware Supported: Planck PCB rev1, rev2, rev3, rev4, Teensy 2.0 * Hardware Supported: Planck PCB rev1, rev2, rev3, rev4, Teensy 2.0
Hardware Availability: [OLKB.com](https://olkb.com), [Massdrop](https://www.massdrop.com/buy/planck-mechanical-keyboard?mode=guest_open) * Hardware Availability: [OLKB.com](https://olkb.com), [Massdrop](https://www.massdrop.com/buy/planck-mechanical-keyboard?mode=guest_open)
Make example for this keyboard (after setting up your build environment): Make example for this keyboard (after setting up your build environment):
@@ -38,5 +38,3 @@ Make example for this keyboard (after setting up your build environment):
See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs). See the [build environment setup](https://docs.qmk.fm/#/getting_started_build_tools) and the [make instructions](https://docs.qmk.fm/#/getting_started_make_guide) for more information. Brand new to QMK? Start with our [Complete Newbs Guide](https://docs.qmk.fm/#/newbs).
``` ```
There needs to be two spaces at the end of the `Keyboard Maintainer` and `Hardware Supported` lines for it to render correctly with Markdown.
+1 -1
View File
@@ -27,7 +27,7 @@ You may need privilege to access the device on OS like Linux.
Check: Check:
- *hid_listen* finds your device. See above. - *hid_listen* finds your device. See above.
- Enable debug with pressing **Magic**+d. See [Magic Commands](https://github.com/tmk/tmk_keyboard#magic-commands). - Enable debug with pressing **Magic**+d. See [Magic Commands](https://github.com/tmk/tmk_keyboard#magic-commands).
- set `debug_enable=true` usually in `matrix_init()` in **matrix.c**. - set `debug_enable=true`. See [Testing and Debugging](newbs_testing_debugging.md#debugging)
- try using 'print' function instead of debug print. See **common/print.h**. - try using 'print' function instead of debug print. See **common/print.h**.
- disconnect other devices with console function. See [Issue #97](https://github.com/tmk/tmk_keyboard/issues/97). - disconnect other devices with console function. See [Issue #97](https://github.com/tmk/tmk_keyboard/issues/97).
+2
View File
@@ -333,6 +333,8 @@ And then simply use `TD(X_CTL)` anywhere in your keymap.
If you want to implement this in your userspace, then you may want to check out how [DanielGGordon](https://github.com/qmk/qmk_firmware/tree/master/users/gordon) has implemented this in their userspace. If you want to implement this in your userspace, then you may want to check out how [DanielGGordon](https://github.com/qmk/qmk_firmware/tree/master/users/gordon) has implemented this in their userspace.
> In this configuration "hold" takes place **after** tap dance timeout (see `ACTION_TAP_DANCE_FN_ADVANCED_TIME`). To achieve instant hold, remove `state->interrupted` checks in conditions. As a result you may use comfortable longer tapping periods to have more time for taps and not to wait too long for holds (try starting with doubled `TAPPING_TERM`).
### Example 5: Using tap dance for advanced mod-tap and layer-tap keys ### Example 5: Using tap dance for advanced mod-tap and layer-tap keys
Tap dance can be used to emulate `MT()` and `LT()` behavior when the tapped code is not a basic keycode. This is useful to send tapped keycodes that normally require `Shift`, such as parentheses or curly braces—or other modified keycodes, such as `Control + X`. Tap dance can be used to emulate `MT()` and `LT()` behavior when the tapped code is not a basic keycode. This is useful to send tapped keycodes that normally require `Shift`, such as parentheses or curly braces—or other modified keycodes, such as `Control + X`.
+5 -7
View File
@@ -115,15 +115,13 @@ void DRV_init(void) {
} }
void DRV_rtp_init(void) { void DRV_rtp_init(void) {
DRV_write(DRV_GO, 0x00); DRV_write(DRV_GO, 0x00);
DRV_write(DRV_RTP_INPUT, 20); //20 is the lowest value I've found where haptics can still be felt. DRV_write(DRV_RTP_INPUT, 20); // 20 is the lowest value I've found where haptics can still be felt.
DRV_write(DRV_MODE, 0x05); DRV_write(DRV_MODE, 0x05);
DRV_write(DRV_GO, 0x01); DRV_write(DRV_GO, 0x01);
} }
void DRV_amplitude(uint8_t amplitude) { void DRV_amplitude(uint8_t amplitude) { DRV_write(DRV_RTP_INPUT, amplitude); }
DRV_write(DRV_RTP_INPUT, amplitude);
}
void DRV_pulse(uint8_t sequence) { void DRV_pulse(uint8_t sequence) {
DRV_write(DRV_GO, 0x00); DRV_write(DRV_GO, 0x00);
+41 -44
View File
@@ -169,12 +169,12 @@ void haptic_set_mode(uint8_t mode) {
} }
void haptic_set_amplitude(uint8_t amp) { void haptic_set_amplitude(uint8_t amp) {
haptic_config.amplitude = amp; haptic_config.amplitude = amp;
eeconfig_update_haptic(haptic_config.raw); eeconfig_update_haptic(haptic_config.raw);
xprintf("haptic_config.amplitude = %u\n", haptic_config.amplitude); xprintf("haptic_config.amplitude = %u\n", haptic_config.amplitude);
#ifdef DRV2605L #ifdef DRV2605L
DRV_amplitude(amp); DRV_amplitude(amp);
#endif #endif
} }
void haptic_set_buzz(uint8_t buzz) { void haptic_set_buzz(uint8_t buzz) {
@@ -211,52 +211,50 @@ uint8_t haptic_get_dwell(void) {
} }
void haptic_enable_continuous(void) { void haptic_enable_continuous(void) {
haptic_config.cont = 1; haptic_config.cont = 1;
xprintf("haptic_config.cont = %u\n", haptic_config.cont); xprintf("haptic_config.cont = %u\n", haptic_config.cont);
eeconfig_update_haptic(haptic_config.raw); eeconfig_update_haptic(haptic_config.raw);
#ifdef DRV2605L #ifdef DRV2605L
DRV_rtp_init(); DRV_rtp_init();
#endif #endif
} }
void haptic_disable_continuous(void) { void haptic_disable_continuous(void) {
haptic_config.cont = 0; haptic_config.cont = 0;
xprintf("haptic_config.cont = %u\n", haptic_config.cont); xprintf("haptic_config.cont = %u\n", haptic_config.cont);
eeconfig_update_haptic(haptic_config.raw); eeconfig_update_haptic(haptic_config.raw);
#ifdef DRV2605L #ifdef DRV2605L
DRV_write(DRV_MODE,0x00); DRV_write(DRV_MODE, 0x00);
#endif #endif
} }
void haptic_toggle_continuous(void) { void haptic_toggle_continuous(void) {
#ifdef DRV2605L #ifdef DRV2605L
if (haptic_config.cont) { if (haptic_config.cont) {
haptic_disable_continuous(); haptic_disable_continuous();
} else { } else {
haptic_enable_continuous(); haptic_enable_continuous();
} }
eeconfig_update_haptic(haptic_config.raw); eeconfig_update_haptic(haptic_config.raw);
#endif #endif
} }
void haptic_cont_increase(void) { void haptic_cont_increase(void) {
uint8_t amp = haptic_config.amplitude + 10; uint8_t amp = haptic_config.amplitude + 10;
if (haptic_config.amplitude >= 120) { if (haptic_config.amplitude >= 120) {
amp = 120; amp = 120;
} }
haptic_set_amplitude(amp); haptic_set_amplitude(amp);
} }
void haptic_cont_decrease(void) { void haptic_cont_decrease(void) {
uint8_t amp = haptic_config.amplitude - 10; uint8_t amp = haptic_config.amplitude - 10;
if (haptic_config.amplitude < 20) { if (haptic_config.amplitude < 20) {
amp = 20; amp = 20;
} }
haptic_set_amplitude(amp); haptic_set_amplitude(amp);
} }
void haptic_play(void) { void haptic_play(void) {
#ifdef DRV2605L #ifdef DRV2605L
uint8_t play_eff = 0; uint8_t play_eff = 0;
@@ -269,7 +267,6 @@ void haptic_play(void) {
} }
bool process_haptic(uint16_t keycode, keyrecord_t *record) { bool process_haptic(uint16_t keycode, keyrecord_t *record) {
if (keycode == HPT_ON && record->event.pressed) { if (keycode == HPT_ON && record->event.pressed) {
haptic_enable(); haptic_enable();
} }
@@ -300,16 +297,16 @@ bool process_haptic(uint16_t keycode, keyrecord_t *record) {
if (keycode == HPT_DWLD && record->event.pressed) { if (keycode == HPT_DWLD && record->event.pressed) {
haptic_dwell_decrease(); haptic_dwell_decrease();
} }
if (keycode == HPT_CONT && record->event.pressed) { if (keycode == HPT_CONT && record->event.pressed) {
haptic_toggle_continuous(); haptic_toggle_continuous();
} }
if (keycode == HPT_CONI && record->event.pressed) { if (keycode == HPT_CONI && record->event.pressed) {
haptic_cont_increase(); haptic_cont_increase();
} }
if (keycode == HPT_COND && record->event.pressed) { if (keycode == HPT_COND && record->event.pressed) {
haptic_cont_decrease(); haptic_cont_decrease();
} }
if (haptic_config.enable) { if (haptic_config.enable) {
if (record->event.pressed) { if (record->event.pressed) {
// keypress // keypress
+8 -8
View File
@@ -34,14 +34,14 @@
typedef union { typedef union {
uint32_t raw; uint32_t raw;
struct { struct {
bool enable :1; bool enable : 1;
uint8_t feedback :2; uint8_t feedback : 2;
uint8_t mode :7; uint8_t mode : 7;
bool buzz :1; bool buzz : 1;
uint8_t dwell :7; uint8_t dwell : 7;
bool cont :1; bool cont : 1;
uint8_t amplitude :8; uint8_t amplitude : 8;
uint16_t reserved :7; uint16_t reserved : 7;
}; };
} haptic_config_t; } haptic_config_t;
+177 -12
View File
@@ -1,15 +1,180 @@
{ {
"keyboard_name": "wraith", "keyboard_name": "wraith",
"url": "", "url": "",
"maintainer": "amberstarlight", "maintainer": "amberstarlight",
"width": 16, "width": 16,
"height": 6, "height": 6,
"layouts": { "layouts": {
"LAYOUT_ansi": { "LAYOUT_ansi": {
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1.25, "y":0}, {"label":"F2", "x":2.25, "y":0}, {"label":"F3", "x":3.25, "y":0}, {"label":"F4", "x":4.25, "y":0}, {"label":"F5", "x":5.5, "y":0}, {"label":"F6", "x":6.5, "y":0}, {"label":"F7", "x":7.5, "y":0}, {"label":"F8", "x":8.5, "y":0}, {"label":"F9", "x":9.75, "y":0}, {"label":"F10", "x":10.75, "y":0}, {"label":"F11", "x":11.75, "y":0}, {"label":"F12", "x":12.75, "y":0}, {"label":"Prt Sc", "x":14, "y":0}, {"label":"Fn", "x":15, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"@", "x":2, "y":1}, {"label":"#", "x":3, "y":1}, {"label":"$", "x":4, "y":1}, {"label":"%", "x":5, "y":1}, {"label":"^", "x":6, "y":1}, {"label":"&", "x":7, "y":1}, {"label":"*", "x":8, "y":1}, {"label":"(", "x":9, "y":1}, {"label":")", "x":10, "y":1}, {"label":"_", "x":11, "y":1}, {"label":"+", "x":12, "y":1}, {"label":"Backspace", "x":13, "y":1, "w":2}, {"label":"Insert", "x":15, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"|", "x":13.5, "y":2, "w":1.5}, {"label":"Delete", "x":15, "y":2}, {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"\"", "x":11.75, "y":3}, {"label":"Enter", "x":12.75, "y":3, "w":2.25}, {"label":"Pg Up", "x":15, "y":3}, {"label":"Shift", "x":0, "y":4, "w":2.25}, {"label":"Z", "x":2.25, "y":4}, {"label":"X", "x":3.25, "y":4}, {"label":"C", "x":4.25, "y":4}, {"label":"V", "x":5.25, "y":4}, {"label":"B", "x":6.25, "y":4}, {"label":"N", "x":7.25, "y":4}, {"label":"M", "x":8.25, "y":4}, {"label":"<", "x":9.25, "y":4}, {"label":">", "x":10.25, "y":4}, {"label":"?", "x":11.25, "y":4}, {"label":"Shift", "x":12.25, "y":4, "w":1.75}, {"label":"\u2191", "x":14, "y":4}, {"label":"Pg Dn", "x":15, "y":4}, {"label":"Ctrl", "x":0, "y":5, "w":1.5}, {"label":"Alt", "x":2.25, "y":5, "w":1.5}, {"x":3.75, "y":5, "w":7}, {"label":"Alt", "x":10.75, "y":5, "w":1.5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}] "key_count": 80,
}, "layout": [
"LAYOUT_iso": { {"label":"Esc", "x":0, "y":0},
"layout": [{"label":"Esc", "x":0, "y":0}, {"label":"F1", "x":1.25, "y":0}, {"label":"F2", "x":2.25, "y":0}, {"label":"F3", "x":3.25, "y":0}, {"label":"F4", "x":4.25, "y":0}, {"label":"F5", "x":5.5, "y":0}, {"label":"F6", "x":6.5, "y":0}, {"label":"F7", "x":7.5, "y":0}, {"label":"F8", "x":8.5, "y":0}, {"label":"F9", "x":9.75, "y":0}, {"label":"F10", "x":10.75, "y":0}, {"label":"F11", "x":11.75, "y":0}, {"label":"F12", "x":12.75, "y":0}, {"label":"Prt Sc", "x":14, "y":0}, {"label":"Fn", "x":15, "y":0}, {"label":"~", "x":0, "y":1}, {"label":"!", "x":1, "y":1}, {"label":"\"", "x":2, "y":1}, {"label":"\u00a3", "x":3, "y":1}, {"label":"$", "x":4, "y":1}, {"label":"%", "x":5, "y":1}, {"label":"^", "x":6, "y":1}, {"label":"&", "x":7, "y":1}, {"label":"*", "x":8, "y":1}, {"label":"(", "x":9, "y":1}, {"label":")", "x":10, "y":1}, {"label":"_", "x":11, "y":1}, {"label":"+", "x":12, "y":1}, {"label":"Backspace", "x":13, "y":1, "w":2}, {"label":"Insert", "x":15, "y":1}, {"label":"Tab", "x":0, "y":2, "w":1.5}, {"label":"Q", "x":1.5, "y":2}, {"label":"W", "x":2.5, "y":2}, {"label":"E", "x":3.5, "y":2}, {"label":"R", "x":4.5, "y":2}, {"label":"T", "x":5.5, "y":2}, {"label":"Y", "x":6.5, "y":2}, {"label":"U", "x":7.5, "y":2}, {"label":"I", "x":8.5, "y":2}, {"label":"O", "x":9.5, "y":2}, {"label":"P", "x":10.5, "y":2}, {"label":"{", "x":11.5, "y":2}, {"label":"}", "x":12.5, "y":2}, {"label":"Enter", "x":13.75, "y":2, "w":1.25, "h":2}, {"label":"Delete", "x":15, "y":2}, {"label":"Caps Lock", "x":0, "y":3, "w":1.75}, {"label":"A", "x":1.75, "y":3}, {"label":"S", "x":2.75, "y":3}, {"label":"D", "x":3.75, "y":3}, {"label":"F", "x":4.75, "y":3}, {"label":"G", "x":5.75, "y":3}, {"label":"H", "x":6.75, "y":3}, {"label":"J", "x":7.75, "y":3}, {"label":"K", "x":8.75, "y":3}, {"label":"L", "x":9.75, "y":3}, {"label":":", "x":10.75, "y":3}, {"label":"@", "x":11.75, "y":3}, {"label":"~", "x":12.75, "y":3}, {"label":"Pg Up", "x":15, "y":3}, {"label":"Shift", "x":0, "y":4, "w":1.25}, {"label":"|", "x":1.25, "y":4}, {"label":"Z", "x":2.25, "y":4}, {"label":"X", "x":3.25, "y":4}, {"label":"C", "x":4.25, "y":4}, {"label":"V", "x":5.25, "y":4}, {"label":"B", "x":6.25, "y":4}, {"label":"N", "x":7.25, "y":4}, {"label":"M", "x":8.25, "y":4}, {"label":"<", "x":9.25, "y":4}, {"label":">", "x":10.25, "y":4}, {"label":"?", "x":11.25, "y":4}, {"label":"Shift", "x":12.25, "y":4, "w":1.75}, {"label":"\u2191", "x":14, "y":4}, {"label":"Pg Dn", "x":15, "y":4}, {"label":"Ctrl", "x":0, "y":5, "w":1.5}, {"label":"Alt", "x":2.25, "y":5, "w":1.5}, {"x":3.75, "y":5, "w":7}, {"label":"Alt", "x":10.75, "y":5, "w":1.5}, {"label":"\u2190", "x":13, "y":5}, {"label":"\u2193", "x":14, "y":5}, {"label":"\u2192", "x":15, "y":5}] {"label":"F1", "x":1.25, "y":0},
{"label":"F2", "x":2.25, "y":0},
{"label":"F3", "x":3.25, "y":0},
{"label":"F4", "x":4.25, "y":0},
{"label":"F5", "x":5.5, "y":0},
{"label":"F6", "x":6.5, "y":0},
{"label":"F7", "x":7.5, "y":0},
{"label":"F8", "x":8.5, "y":0},
{"label":"F9", "x":9.75, "y":0},
{"label":"F10", "x":10.75, "y":0},
{"label":"F11", "x":11.75, "y":0},
{"label":"F12", "x":12.75, "y":0},
{"label":"Prt Sc", "x":14, "y":0},
{"label":"Fn", "x":15, "y":0},
{"label":"~", "x":0, "y":1},
{"label":"!", "x":1, "y":1},
{"label":"@", "x":2, "y":1},
{"label":"#", "x":3, "y":1},
{"label":"$", "x":4, "y":1},
{"label":"%", "x":5, "y":1},
{"label":"^", "x":6, "y":1},
{"label":"&", "x":7, "y":1},
{"label":"*", "x":8, "y":1},
{"label":"(", "x":9, "y":1},
{"label":")", "x":10, "y":1},
{"label":"_", "x":11, "y":1},
{"label":"+", "x":12, "y":1},
{"label":"Backspace", "x":13, "y":1, "w":2},
{"label":"Insert", "x":15, "y":1},
{"label":"Tab", "x":0, "y":2, "w":1.5},
{"label":"Q", "x":1.5, "y":2},
{"label":"W", "x":2.5, "y":2},
{"label":"E", "x":3.5, "y":2},
{"label":"R", "x":4.5, "y":2},
{"label":"T", "x":5.5, "y":2},
{"label":"Y", "x":6.5, "y":2},
{"label":"U", "x":7.5, "y":2},
{"label":"I", "x":8.5, "y":2},
{"label":"O", "x":9.5, "y":2},
{"label":"P", "x":10.5, "y":2},
{"label":"{", "x":11.5, "y":2},
{"label":"}", "x":12.5, "y":2},
{"label":"|", "x":13.5, "y":2, "w":1.5},
{"label":"Delete", "x":15, "y":2},
{"label":"Caps Lock", "x":0, "y":3, "w":1.75},
{"label":"A", "x":1.75, "y":3},
{"label":"S", "x":2.75, "y":3},
{"label":"D", "x":3.75, "y":3},
{"label":"F", "x":4.75, "y":3},
{"label":"G", "x":5.75, "y":3},
{"label":"H", "x":6.75, "y":3},
{"label":"J", "x":7.75, "y":3},
{"label":"K", "x":8.75, "y":3},
{"label":"L", "x":9.75, "y":3},
{"label":":", "x":10.75, "y":3},
{"label":"\"", "x":11.75, "y":3},
{"label":"Enter", "x":12.75, "y":3, "w":2.25},
{"label":"Pg Up", "x":15, "y":3},
{"label":"Shift", "x":0, "y":4, "w":2.25},
{"label":"Z", "x":2.25, "y":4},
{"label":"X", "x":3.25, "y":4},
{"label":"C", "x":4.25, "y":4},
{"label":"V", "x":5.25, "y":4},
{"label":"B", "x":6.25, "y":4},
{"label":"N", "x":7.25, "y":4},
{"label":"M", "x":8.25, "y":4},
{"label":"<", "x":9.25, "y":4},
{"label":">", "x":10.25, "y":4},
{"label":"?", "x":11.25, "y":4},
{"label":"Shift", "x":12.25, "y":4, "w":1.75},
{"label":"\u2191", "x":14, "y":4},
{"label":"Pg Dn", "x":15, "y":4},
{"label":"Ctrl", "x":0, "y":5, "w":1.5},
{"label":"Alt", "x":2.25, "y":5, "w":1.5},
{"x":3.75, "y":5, "w":7},
{"label":"Alt", "x":10.75, "y":5, "w":1.5},
{"label":"\u2190", "x":13, "y":5},
{"label":"\u2193", "x":14, "y":5},
{"label":"\u2192", "x":15, "y":5}
]
},
"LAYOUT_iso": {
"key_count": 81,
"layout": [
{"label":"Esc", "x":0, "y":0},
{"label":"F1", "x":1.25, "y":0},
{"label":"F2", "x":2.25, "y":0},
{"label":"F3", "x":3.25, "y":0},
{"label":"F4", "x":4.25, "y":0},
{"label":"F5", "x":5.5, "y":0},
{"label":"F6", "x":6.5, "y":0},
{"label":"F7", "x":7.5, "y":0},
{"label":"F8", "x":8.5, "y":0},
{"label":"F9", "x":9.75, "y":0},
{"label":"F10", "x":10.75, "y":0},
{"label":"F11", "x":11.75, "y":0},
{"label":"F12", "x":12.75, "y":0},
{"label":"Prt Sc", "x":14, "y":0},
{"label":"Fn", "x":15, "y":0},
{"label":"~", "x":0, "y":1},
{"label":"!", "x":1, "y":1},
{"label":"\"", "x":2, "y":1},
{"label":"\u00a3", "x":3, "y":1},
{"label":"$", "x":4, "y":1},
{"label":"%", "x":5, "y":1},
{"label":"^", "x":6, "y":1},
{"label":"&", "x":7, "y":1},
{"label":"*", "x":8, "y":1},
{"label":"(", "x":9, "y":1},
{"label":")", "x":10, "y":1},
{"label":"_", "x":11, "y":1},
{"label":"+", "x":12, "y":1},
{"label":"Backspace", "x":13, "y":1, "w":2},
{"label":"Insert", "x":15, "y":1},
{"label":"Tab", "x":0, "y":2, "w":1.5},
{"label":"Q", "x":1.5, "y":2},
{"label":"W", "x":2.5, "y":2},
{"label":"E", "x":3.5, "y":2},
{"label":"R", "x":4.5, "y":2},
{"label":"T", "x":5.5, "y":2},
{"label":"Y", "x":6.5, "y":2},
{"label":"U", "x":7.5, "y":2},
{"label":"I", "x":8.5, "y":2},
{"label":"O", "x":9.5, "y":2},
{"label":"P", "x":10.5, "y":2},
{"label":"{", "x":11.5, "y":2},
{"label":"}", "x":12.5, "y":2},
{"label":"Delete", "x":15, "y":2},
{"label":"Caps Lock", "x":0, "y":3, "w":1.75},
{"label":"A", "x":1.75, "y":3},
{"label":"S", "x":2.75, "y":3},
{"label":"D", "x":3.75, "y":3},
{"label":"F", "x":4.75, "y":3},
{"label":"G", "x":5.75, "y":3},
{"label":"H", "x":6.75, "y":3},
{"label":"J", "x":7.75, "y":3},
{"label":"K", "x":8.75, "y":3},
{"label":"L", "x":9.75, "y":3},
{"label":":", "x":10.75, "y":3},
{"label":"@", "x":11.75, "y":3},
{"label":"~", "x":12.75, "y":3},
{"label":"Enter", "x":13.75, "y":2, "w":1.25, "h":2},
{"label":"Pg Up", "x":15, "y":3},
{"label":"Shift", "x":0, "y":4, "w":1.25},
{"label":"|", "x":1.25, "y":4},
{"label":"Z", "x":2.25, "y":4},
{"label":"X", "x":3.25, "y":4},
{"label":"C", "x":4.25, "y":4},
{"label":"V", "x":5.25, "y":4},
{"label":"B", "x":6.25, "y":4},
{"label":"N", "x":7.25, "y":4},
{"label":"M", "x":8.25, "y":4},
{"label":"<", "x":9.25, "y":4},
{"label":">", "x":10.25, "y":4},
{"label":"?", "x":11.25, "y":4},
{"label":"Shift", "x":12.25, "y":4, "w":1.75},
{"label":"\u2191", "x":14, "y":4},
{"label":"Pg Dn", "x":15, "y":4},
{"label":"Ctrl", "x":0, "y":5, "w":1.5},
{"label":"Alt", "x":2.25, "y":5, "w":1.5},
{"x":3.75, "y":5, "w":7},
{"label":"Alt", "x":10.75, "y":5, "w":1.5},
{"label":"\u2190", "x":13, "y":5},
{"label":"\u2193", "x":14, "y":5},
{"label":"\u2192", "x":15, "y":5}
]
}
} }
}
} }
+1 -1
View File
@@ -25,4 +25,4 @@ BACKLIGHT_ENABLE = yes # Enable keyboard backlight functionality
AUDIO_ENABLE = no AUDIO_ENABLE = no
RGBLIGHT_ENABLE = yes RGBLIGHT_ENABLE = yes
LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_hhkb 60_iso LAYOUTS = 60_ansi 60_ansi_split_bs_rshift 60_hhkb 60_iso 60_abnt2
+16 -395
View File
@@ -9,417 +9,38 @@
"height": 5, "height": 5,
"layouts": { "layouts": {
"LAYOUT_all": { "LAYOUT_all": {
"key_count": 65, "key_count":65,
"layout": [ "layout": [{"label":"~","x":0,"y":0},{"label":"!","x":1,"y":0},{"label":"@","x":2,"y":0},{"label":"#","x":3,"y":0},{"label":"$","x":4,"y":0},{"label":"%","x":5,"y":0},{"label":"^","x":6,"y":0},{"label":"&","x":7,"y":0},{"label":"*","x":8,"y":0},{"label":"(","x":9,"y":0},{"label":")","x":10,"y":0},{"label":"_","x":11,"y":0},{"label":"+","x":12,"y":0},{"label":"Backspace","x":13,"y":0},{"label":"Backspace Extra","x":14,"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":6.5,"y":1},{"label":"U","x":7.5,"y":1},{"label":"I","x":8.5,"y":1},{"label":"O","x":9.5,"y":1},{"label":"P","x":10.5,"y":1},{"label":"{","x":11.5,"y":1},{"label":"}","x":12.5,"y":1},{"label":"|","x":13.5,"y":1,"w":1.5},{"label":"Caps Lock","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":6.75,"y":2},{"label":"J","x":7.75,"y":2},{"label":"K","x":8.75,"y":2},{"label":"L","x":9.75,"y":2},{"label":":","x":10.75,"y":2},{"label":"\"","x":11.75,"y":2},{"label":"ISO Hash","x":12.75,"y":2},{"label":"Enter","x":13.75,"y":2,"w":1.25},{"label":"Shift","x":0,"y":3,"w":1.25},{"label":"ISO Backslash","x":1.25,"y":3},{"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":7.25,"y":3},{"label":"M","x":8.25,"y":3},{"label":"<","x":9.25,"y":3},{"label":">","x":10.25,"y":3},{"label":"?","x":11.25,"y":3},{"label":"Shift","x":12.25,"y":3,"w":1.75},{"label":"HHKB Fn","x":14,"y":3},{"label":"Ctrl","x":0,"y":4,"w":1.25},{"label":"Win","x":1.25,"y":4,"w":1.25},{"label":"Alt","x":2.5,"y":4,"w":1.25},{"label":"Space","x":3.75,"y":4,"w":6.25},{"label":"Alt","x":10,"y":4,"w":1.25},{"label":"Win","x":11.25,"y":4,"w":1.25},{"label":"Menu","x":12.5,"y":4,"w":1.25},{"label":"Ctrl","x":13.75,"y":4,"w":1.25}]
{"label":"~", "x":0, "y":0},
{"label":"!", "x":1, "y":0},
{"label":"@", "x":2, "y":0},
{"label":"#", "x":3, "y":0},
{"label":"$", "x":4, "y":0},
{"label":"%", "x":5, "y":0},
{"label":"^", "x":6, "y":0},
{"label":"&", "x":7, "y":0},
{"label":"*", "x":8, "y":0},
{"label":"(", "x":9, "y":0},
{"label":")", "x":10, "y":0},
{"label":"_", "x":11, "y":0},
{"label":"+", "x":12, "y":0},
{"label":"Backspace", "x":13, "y":0},
{"label":"Backspace Extra", "x":14, "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":6.5, "y":1},
{"label":"U", "x":7.5, "y":1},
{"label":"I", "x":8.5, "y":1},
{"label":"O", "x":9.5, "y":1},
{"label":"P", "x":10.5, "y":1},
{"label":"{", "x":11.5, "y":1},
{"label":"}", "x":12.5, "y":1},
{"label":"|", "x":13.5, "y":1, "w":1.5},
{"label":"Caps Lock", "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":6.75, "y":2},
{"label":"J", "x":7.75, "y":2},
{"label":"K", "x":8.75, "y":2},
{"label":"L", "x":9.75, "y":2},
{"label":":", "x":10.75, "y":2},
{"label":"\"", "x":11.75, "y":2},
{"label":"ISO Hash", "x":12.75, "y":2},
{"label":"Enter", "x":13.75, "y":2, "w":1.25},
{"label":"Shift", "x":0, "y":3, "w":1.25},
{"label":"ISO Backslash", "x":1.25, "y":3},
{"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":7.25, "y":3},
{"label":"M", "x":8.25, "y":3},
{"label":"<", "x":9.25, "y":3},
{"label":">", "x":10.25, "y":3},
{"label":"?", "x":11.25, "y":3},
{"label":"Shift", "x":12.25, "y":3, "w":1.75},
{"label":"HHKB Fn", "x":14, "y":3},
{"label":"Ctrl", "x":0, "y":4, "w":1.25},
{"label":"Win", "x":1.25, "y":4, "w":1.25},
{"label":"Alt", "x":2.5, "y":4, "w":1.25},
{"label":"Space", "x":3.75, "y":4, "w":6.25},
{"label":"Alt", "x":10, "y":4, "w":1.25},
{"label":"Win", "x":11.25, "y":4, "w":1.25},
{"label":"Menu", "x":12.5, "y":4, "w":1.25},
{"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
]
}, },
"LAYOUT": { "LAYOUT": {
"key_count": 65, "key_count":65,
"layout": [ "layout": [{"label":"~","x":0,"y":0},{"label":"!","x":1,"y":0},{"label":"@","x":2,"y":0},{"label":"#","x":3,"y":0},{"label":"$","x":4,"y":0},{"label":"%","x":5,"y":0},{"label":"^","x":6,"y":0},{"label":"&","x":7,"y":0},{"label":"*","x":8,"y":0},{"label":"(","x":9,"y":0},{"label":")","x":10,"y":0},{"label":"_","x":11,"y":0},{"label":"+","x":12,"y":0},{"label":"Backspace","x":13,"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":6.5,"y":1},{"label":"U","x":7.5,"y":1},{"label":"I","x":8.5,"y":1},{"label":"O","x":9.5,"y":1},{"label":"P","x":10.5,"y":1},{"label":"{","x":11.5,"y":1},{"label":"}","x":12.5,"y":1},{"label":"|","x":13.5,"y":1,"w":1.5},{"label":"Caps Lock","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":6.75,"y":2},{"label":"J","x":7.75,"y":2},{"label":"K","x":8.75,"y":2},{"label":"L","x":9.75,"y":2},{"label":":","x":10.75,"y":2},{"label":"\"","x":11.75,"y":2},{"label":"ISO Hash","x":12.75,"y":2},{"label":"Enter","x":13.75,"y":2,"w":1.25},{"label":"Shift","x":0,"y":3,"w":1.25},{"label":"ISO Backslash","x":1.25,"y":3},{"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":7.25,"y":3},{"label":"M","x":8.25,"y":3},{"label":"<","x":9.25,"y":3},{"label":">","x":10.25,"y":3},{"label":"?","x":11.25,"y":3},{"label":"Shift","x":12.25,"y":3,"w":1.75},{"label":"HHKB Fn","x":14,"y":3},{"label":"Ctrl","x":0,"y":4,"w":1.25},{"label":"Win","x":1.25,"y":4,"w":1.25},{"label":"Alt","x":2.5,"y":4,"w":1.25},{"label":"Space","x":3.75,"y":4,"w":6.25},{"label":"Backspace Extra","x":14,"y":0},{"label":"Alt","x":10,"y":4,"w":1.25},{"label":"Win","x":11.25,"y":4,"w":1.25},{"label":"Menu","x":12.5,"y":4,"w":1.25},{"label":"Ctrl","x":13.75,"y":4,"w":1.25}]
{"label":"~", "x":0, "y":0},
{"label":"!", "x":1, "y":0},
{"label":"@", "x":2, "y":0},
{"label":"#", "x":3, "y":0},
{"label":"$", "x":4, "y":0},
{"label":"%", "x":5, "y":0},
{"label":"^", "x":6, "y":0},
{"label":"&", "x":7, "y":0},
{"label":"*", "x":8, "y":0},
{"label":"(", "x":9, "y":0},
{"label":")", "x":10, "y":0},
{"label":"_", "x":11, "y":0},
{"label":"+", "x":12, "y":0},
{"label":"Backspace", "x":13, "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":6.5, "y":1},
{"label":"U", "x":7.5, "y":1},
{"label":"I", "x":8.5, "y":1},
{"label":"O", "x":9.5, "y":1},
{"label":"P", "x":10.5, "y":1},
{"label":"{", "x":11.5, "y":1},
{"label":"}", "x":12.5, "y":1},
{"label":"|", "x":13.5, "y":1, "w":1.5},
{"label":"Caps Lock", "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":6.75, "y":2},
{"label":"J", "x":7.75, "y":2},
{"label":"K", "x":8.75, "y":2},
{"label":"L", "x":9.75, "y":2},
{"label":":", "x":10.75, "y":2},
{"label":"\"", "x":11.75, "y":2},
{"label":"ISO Hash", "x":12.75, "y":2},
{"label":"Enter", "x":13.75, "y":2, "w":1.25},
{"label":"Shift", "x":0, "y":3, "w":1.25},
{"label":"ISO Backslash", "x":1.25, "y":3},
{"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":7.25, "y":3},
{"label":"M", "x":8.25, "y":3},
{"label":"<", "x":9.25, "y":3},
{"label":">", "x":10.25, "y":3},
{"label":"?", "x":11.25, "y":3},
{"label":"Shift", "x":12.25, "y":3, "w":1.75},
{"label":"HHKB Fn", "x":14, "y":3},
{"label":"Ctrl", "x":0, "y":4, "w":1.25},
{"label":"Win", "x":1.25, "y":4, "w":1.25},
{"label":"Alt", "x":2.5, "y":4, "w":1.25},
{"label":"Space", "x":3.75, "y":4, "w":6.25},
{"label":"Backspace Extra", "x":14, "y":0},
{"label":"Alt", "x":10, "y":4, "w":1.25},
{"label":"Win", "x":11.25, "y":4, "w":1.25},
{"label":"Menu", "x":12.5, "y":4, "w":1.25},
{"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
]
}, },
"LAYOUT_60_ansi": { "LAYOUT_60_ansi": {
"key_count": 61, "key_count":61,
"layout": [ "layout": [{"label":"~","x":0,"y":0},{"label":"!","x":1,"y":0},{"label":"@","x":2,"y":0},{"label":"#","x":3,"y":0},{"label":"$","x":4,"y":0},{"label":"%","x":5,"y":0},{"label":"^","x":6,"y":0},{"label":"&","x":7,"y":0},{"label":"*","x":8,"y":0},{"label":"(","x":9,"y":0},{"label":")","x":10,"y":0},{"label":"_","x":11,"y":0},{"label":"+","x":12,"y":0},{"label":"Backspace","x":13,"y":0,"w":2},{"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":6.5,"y":1},{"label":"U","x":7.5,"y":1},{"label":"I","x":8.5,"y":1},{"label":"O","x":9.5,"y":1},{"label":"P","x":10.5,"y":1},{"label":"{","x":11.5,"y":1},{"label":"}","x":12.5,"y":1},{"label":"|","x":13.5,"y":1,"w":1.5},{"label":"Caps Lock","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":6.75,"y":2},{"label":"J","x":7.75,"y":2},{"label":"K","x":8.75,"y":2},{"label":"L","x":9.75,"y":2},{"label":":","x":10.75,"y":2},{"label":"\"","x":11.75,"y":2},{"label":"Enter","x":12.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":7.25,"y":3},{"label":"M","x":8.25,"y":3},{"label":"<","x":9.25,"y":3},{"label":">","x":10.25,"y":3},{"label":"?","x":11.25,"y":3},{"label":"Shift","x":12.25,"y":3,"w":2.75},{"label":"Ctrl","x":0,"y":4,"w":1.25},{"label":"Win","x":1.25,"y":4,"w":1.25},{"label":"Alt","x":2.5,"y":4,"w":1.25},{"label":"Space","x":3.75,"y":4,"w":6.25},{"label":"Alt","x":10,"y":4,"w":1.25},{"label":"Win","x":11.25,"y":4,"w":1.25},{"label":"Menu","x":12.5,"y":4,"w":1.25},{"label":"Ctrl","x":13.75,"y":4,"w":1.25}]
{"label":"~", "x":0, "y":0},
{"label":"!", "x":1, "y":0},
{"label":"@", "x":2, "y":0},
{"label":"#", "x":3, "y":0},
{"label":"$", "x":4, "y":0},
{"label":"%", "x":5, "y":0},
{"label":"^", "x":6, "y":0},
{"label":"&", "x":7, "y":0},
{"label":"*", "x":8, "y":0},
{"label":"(", "x":9, "y":0},
{"label":")", "x":10, "y":0},
{"label":"_", "x":11, "y":0},
{"label":"+", "x":12, "y":0},
{"label":"Backspace", "x":13, "y":0, "w":2},
{"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":6.5, "y":1},
{"label":"U", "x":7.5, "y":1},
{"label":"I", "x":8.5, "y":1},
{"label":"O", "x":9.5, "y":1},
{"label":"P", "x":10.5, "y":1},
{"label":"{", "x":11.5, "y":1},
{"label":"}", "x":12.5, "y":1},
{"label":"|", "x":13.5, "y":1, "w":1.5},
{"label":"Caps Lock", "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":6.75, "y":2},
{"label":"J", "x":7.75, "y":2},
{"label":"K", "x":8.75, "y":2},
{"label":"L", "x":9.75, "y":2},
{"label":":", "x":10.75, "y":2},
{"label":"\"", "x":11.75, "y":2},
{"label":"Enter", "x":12.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":7.25, "y":3},
{"label":"M", "x":8.25, "y":3},
{"label":"<", "x":9.25, "y":3},
{"label":">", "x":10.25, "y":3},
{"label":"?", "x":11.25, "y":3},
{"label":"Shift", "x":12.25, "y":3, "w":2.75},
{"label":"Ctrl", "x":0, "y":4, "w":1.25},
{"label":"Win", "x":1.25, "y":4, "w":1.25},
{"label":"Alt", "x":2.5, "y":4, "w":1.25},
{"label":"Space", "x":3.75, "y":4, "w":6.25},
{"label":"Alt", "x":10, "y":4, "w":1.25},
{"label":"Win", "x":11.25, "y":4, "w":1.25},
{"label":"Menu", "x":12.5, "y":4, "w":1.25},
{"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
]
}, },
"LAYOUT_60_iso": { "LAYOUT_60_iso": {
"key_count": 62, "key_count":62,
"layout": [ "layout": [{"label":"\u00ac","x":0,"y":0},{"label":"!","x":1,"y":0},{"label":"\"","x":2,"y":0},{"label":"\u00a3","x":3,"y":0},{"label":"$","x":4,"y":0},{"label":"%","x":5,"y":0},{"label":"^","x":6,"y":0},{"label":"&","x":7,"y":0},{"label":"*","x":8,"y":0},{"label":"(","x":9,"y":0},{"label":")","x":10,"y":0},{"label":"_","x":11,"y":0},{"label":"+","x":12,"y":0},{"label":"Backspace","x":13,"y":0,"w":2},{"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":6.5,"y":1},{"label":"U","x":7.5,"y":1},{"label":"I","x":8.5,"y":1},{"label":"O","x":9.5,"y":1},{"label":"P","x":10.5,"y":1},{"label":"{","x":11.5,"y":1},{"label":"}","x":12.5,"y":1},{"label":"Enter","x":13.75,"y":1,"w":1.25,"h":2},{"label":"Caps Lock","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":6.75,"y":2},{"label":"J","x":7.75,"y":2},{"label":"K","x":8.75,"y":2},{"label":"L","x":9.75,"y":2},{"label":":","x":10.75,"y":2},{"label":"@","x":11.75,"y":2},{"label":"~","x":12.75,"y":2},{"label":"Shift","x":0,"y":3,"w":1.25},{"label":"|","x":1.25,"y":3},{"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":7.25,"y":3},{"label":"M","x":8.25,"y":3},{"label":"<","x":9.25,"y":3},{"label":">","x":10.25,"y":3},{"label":"?","x":11.25,"y":3},{"label":"Shift","x":12.25,"y":3,"w":2.75},{"label":"Ctrl","x":0,"y":4,"w":1.25},{"label":"Win","x":1.25,"y":4,"w":1.25},{"label":"Alt","x":2.5,"y":4,"w":1.25},{"label":"Space","x":3.75,"y":4,"w":6.25},{"label":"AltGr","x":10,"y":4,"w":1.25},{"label":"Win","x":11.25,"y":4,"w":1.25},{"label":"Menu","x":12.5,"y":4,"w":1.25},{"label":"Ctrl","x":13.75,"y":4,"w":1.25}]
{"label":"\u00ac", "x":0, "y":0},
{"label":"!", "x":1, "y":0},
{"label":"\"", "x":2, "y":0},
{"label":"\u00a3", "x":3, "y":0},
{"label":"$", "x":4, "y":0},
{"label":"%", "x":5, "y":0},
{"label":"^", "x":6, "y":0},
{"label":"&", "x":7, "y":0},
{"label":"*", "x":8, "y":0},
{"label":"(", "x":9, "y":0},
{"label":")", "x":10, "y":0},
{"label":"_", "x":11, "y":0},
{"label":"+", "x":12, "y":0},
{"label":"Backspace", "x":13, "y":0, "w":2},
{"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":6.5, "y":1},
{"label":"U", "x":7.5, "y":1},
{"label":"I", "x":8.5, "y":1},
{"label":"O", "x":9.5, "y":1},
{"label":"P", "x":10.5, "y":1},
{"label":"{", "x":11.5, "y":1},
{"label":"}", "x":12.5, "y":1},
{"label":"Caps Lock", "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":6.75, "y":2},
{"label":"J", "x":7.75, "y":2},
{"label":"K", "x":8.75, "y":2},
{"label":"L", "x":9.75, "y":2},
{"label":":", "x":10.75, "y":2},
{"label":"@", "x":11.75, "y":2},
{"label":"~", "x":12.75, "y":2},
{"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2},
{"label":"Shift", "x":0, "y":3, "w":1.25},
{"label":"|", "x":1.25, "y":3},
{"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":7.25, "y":3},
{"label":"M", "x":8.25, "y":3},
{"label":"<", "x":9.25, "y":3},
{"label":">", "x":10.25, "y":3},
{"label":"?", "x":11.25, "y":3},
{"label":"Shift", "x":12.25, "y":3, "w":2.75},
{"label":"Ctrl", "x":0, "y":4, "w":1.25},
{"label":"Win", "x":1.25, "y":4, "w":1.25},
{"label":"Alt", "x":2.5, "y":4, "w":1.25},
{"label":"Space", "x":3.75, "y":4, "w":6.25},
{"label":"AltGr", "x":10, "y":4, "w":1.25},
{"label":"Win", "x":11.25, "y":4, "w":1.25},
{"label":"Menu", "x":12.5, "y":4, "w":1.25},
{"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
]
}, },
"LAYOUT_60_ansi_split_bs_rshift": { "LAYOUT_60_ansi_split_bs_rshift": {
"key_count": 63, "key_count":63,
"layout": [ "layout": [{"label":"~","x":0,"y":0},{"label":"!","x":1,"y":0},{"label":"@","x":2,"y":0},{"label":"#","x":3,"y":0},{"label":"$","x":4,"y":0},{"label":"%","x":5,"y":0},{"label":"^","x":6,"y":0},{"label":"&","x":7,"y":0},{"label":"*","x":8,"y":0},{"label":"(","x":9,"y":0},{"label":")","x":10,"y":0},{"label":"_","x":11,"y":0},{"label":"+","x":12,"y":0},{"label":"Backspace","x":13,"y":0},{"label":"Backspace Extra","x":14,"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":6.5,"y":1},{"label":"U","x":7.5,"y":1},{"label":"I","x":8.5,"y":1},{"label":"O","x":9.5,"y":1},{"label":"P","x":10.5,"y":1},{"label":"{","x":11.5,"y":1},{"label":"}","x":12.5,"y":1},{"label":"|","x":13.5,"y":1,"w":1.5},{"label":"Caps Lock","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":6.75,"y":2},{"label":"J","x":7.75,"y":2},{"label":"K","x":8.75,"y":2},{"label":"L","x":9.75,"y":2},{"label":":","x":10.75,"y":2},{"label":"\"","x":11.75,"y":2},{"label":"Enter","x":12.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":7.25,"y":3},{"label":"M","x":8.25,"y":3},{"label":"<","x":9.25,"y":3},{"label":">","x":10.25,"y":3},{"label":"?","x":11.25,"y":3},{"label":"Shift","x":12.25,"y":3,"w":1.75},{"label":"HHKB Fn","x":14,"y":3},{"label":"Ctrl","x":0,"y":4,"w":1.5},{"label":"Win","x":1.5,"y":4},{"label":"Alt","x":2.5,"y":4,"w":1.5},{"label":"Space","x":4,"y":4,"w":6},{"label":"Alt","x":10,"y":4,"w":1.5},{"label":"Win","x":11.5,"y":4},{"label":"Menu","x":12.5,"y":4},{"label":"Ctrl","x":13.5,"y":4,"w":1.5}]
{"label":"~", "x":0, "y":0},
{"label":"!", "x":1, "y":0},
{"label":"@", "x":2, "y":0},
{"label":"#", "x":3, "y":0},
{"label":"$", "x":4, "y":0},
{"label":"%", "x":5, "y":0},
{"label":"^", "x":6, "y":0},
{"label":"&", "x":7, "y":0},
{"label":"*", "x":8, "y":0},
{"label":"(", "x":9, "y":0},
{"label":")", "x":10, "y":0},
{"label":"_", "x":11, "y":0},
{"label":"+", "x":12, "y":0},
{"label":"Backspace", "x":13, "y":0},
{"label":"Backspace Extra", "x":14, "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":6.5, "y":1},
{"label":"U", "x":7.5, "y":1},
{"label":"I", "x":8.5, "y":1},
{"label":"O", "x":9.5, "y":1},
{"label":"P", "x":10.5, "y":1},
{"label":"{", "x":11.5, "y":1},
{"label":"}", "x":12.5, "y":1},
{"label":"|", "x":13.5, "y":1, "w":1.5},
{"label":"Caps Lock", "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":6.75, "y":2},
{"label":"J", "x":7.75, "y":2},
{"label":"K", "x":8.75, "y":2},
{"label":"L", "x":9.75, "y":2},
{"label":":", "x":10.75, "y":2},
{"label":"\"", "x":11.75, "y":2},
{"label":"Enter", "x":12.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":7.25, "y":3},
{"label":"M", "x":8.25, "y":3},
{"label":"<", "x":9.25, "y":3},
{"label":">", "x":10.25, "y":3},
{"label":"?", "x":11.25, "y":3},
{"label":"Shift", "x":12.25, "y":3, "w":1.75},
{"label":"HHKB Fn", "x":14, "y":3},
{"label":"Ctrl", "x":0, "y":4, "w":1.5},
{"label":"Win", "x":1.5, "y":4},
{"label":"Alt", "x":2.5, "y":4, "w":1.5},
{"label":"Space", "x":4, "y":4, "w":6},
{"label":"Alt", "x":10, "y":4, "w":1.5},
{"label":"Win", "x":11.5, "y":4},
{"label":"Menu", "x":12.5, "y":4},
{"label":"Ctrl", "x":13.5, "y":4, "w":1.5}
]
}, },
"LAYOUT_60_ansi_split_rshift": { "LAYOUT_60_ansi_split_rshift": {
"key_count": 62, "key_count": 62,
"layout": [ "layout": [{"label":"~", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"^", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"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":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"{", "x":11.5, "y":1}, {"label":"}", "x":12.5, "y":1}, {"label":"|", "x":13.5, "y":1, "w":1.5}, {"label":"Caps Lock", "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":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":":", "x":10.75, "y":2}, {"label":"\"", "x":11.75, "y":2}, {"label":"Enter", "x":12.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":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "x":9.25, "y":3}, {"label":">", "x":10.25, "y":3}, {"label":"?", "x":11.25, "y":3}, {"label":"Shift", "x":12.25, "y":3, "w":1.75}, {"label":"HHKB Fn", "x":14, "y":3}, {"label":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"label":"Space", "x":3.75, "y":4, "w":6.25}, {"label":"Alt", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
{"label":"~", "x":0, "y":0}, },
{"label":"!", "x":1, "y":0},
{"label":"@", "x":2, "y":0}, "LAYOUT_60_abnt2": {
{"label":"#", "x":3, "y":0}, "key_count": 63,
{"label":"$", "x":4, "y":0}, "layout": [{"label":"Esc", "x":0, "y":0}, {"label":"!", "x":1, "y":0}, {"label":"@", "x":2, "y":0}, {"label":"#", "x":3, "y":0}, {"label":"$", "x":4, "y":0}, {"label":"%", "x":5, "y":0}, {"label":"\u00a8", "x":6, "y":0}, {"label":"&", "x":7, "y":0}, {"label":"*", "x":8, "y":0}, {"label":"(", "x":9, "y":0}, {"label":")", "x":10, "y":0}, {"label":"_", "x":11, "y":0}, {"label":"+", "x":12, "y":0}, {"label":"Backspace", "x":13, "y":0, "w":2}, {"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":6.5, "y":1}, {"label":"U", "x":7.5, "y":1}, {"label":"I", "x":8.5, "y":1}, {"label":"O", "x":9.5, "y":1}, {"label":"P", "x":10.5, "y":1}, {"label":"`", "x":11.5, "y":1}, {"label":"{", "x":12.5, "y":1}, {"label":"Caps Lock", "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":6.75, "y":2}, {"label":"J", "x":7.75, "y":2}, {"label":"K", "x":8.75, "y":2}, {"label":"L", "x":9.75, "y":2}, {"label":"\u00c7", "x":10.75, "y":2}, {"label":"^", "x":11.75, "y":2}, {"label":"}", "x":12.75, "y":2}, {"label":"Enter", "x":13.75, "y":1, "w":1.25, "h":2}, {"label":"Shift", "x":0, "y":3, "w":1.25}, {"label":"|", "x":1.25, "y":3}, {"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":7.25, "y":3}, {"label":"M", "x":8.25, "y":3}, {"label":"<", "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":"Ctrl", "x":0, "y":4, "w":1.25}, {"label":"Win", "x":1.25, "y":4, "w":1.25}, {"label":"Alt", "x":2.5, "y":4, "w":1.25}, {"x":3.75, "y":4, "w":6.25}, {"label":"AltGr", "x":10, "y":4, "w":1.25}, {"label":"Win", "x":11.25, "y":4, "w":1.25}, {"label":"Menu", "x":12.5, "y":4, "w":1.25}, {"label":"Ctrl", "x":13.75, "y":4, "w":1.25}]
{"label":"%", "x":5, "y":0},
{"label":"^", "x":6, "y":0},
{"label":"&", "x":7, "y":0},
{"label":"*", "x":8, "y":0},
{"label":"(", "x":9, "y":0},
{"label":")", "x":10, "y":0},
{"label":"_", "x":11, "y":0},
{"label":"+", "x":12, "y":0},
{"label":"Backspace", "x":13, "y":0, "w":2},
{"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":6.5, "y":1},
{"label":"U", "x":7.5, "y":1},
{"label":"I", "x":8.5, "y":1},
{"label":"O", "x":9.5, "y":1},
{"label":"P", "x":10.5, "y":1},
{"label":"{", "x":11.5, "y":1},
{"label":"}", "x":12.5, "y":1},
{"label":"|", "x":13.5, "y":1, "w":1.5},
{"label":"Caps Lock", "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":6.75, "y":2},
{"label":"J", "x":7.75, "y":2},
{"label":"K", "x":8.75, "y":2},
{"label":"L", "x":9.75, "y":2},
{"label":":", "x":10.75, "y":2},
{"label":"\"", "x":11.75, "y":2},
{"label":"Enter", "x":12.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":7.25, "y":3},
{"label":"M", "x":8.25, "y":3},
{"label":"<", "x":9.25, "y":3},
{"label":">", "x":10.25, "y":3},
{"label":"?", "x":11.25, "y":3},
{"label":"Shift", "x":12.25, "y":3, "w":1.75},
{"label":"HHKB Fn", "x":14, "y":3},
{"label":"Ctrl", "x":0, "y":4, "w":1.25},
{"label":"Win", "x":1.25, "y":4, "w":1.25},
{"label":"Alt", "x":2.5, "y":4, "w":1.25},
{"label":"Space", "x":3.75, "y":4, "w":6.25},
{"label":"Alt", "x":10, "y":4, "w":1.25},
{"label":"Win", "x":11.25, "y":4, "w":1.25},
{"label":"Menu", "x":12.5, "y":4, "w":1.25},
{"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
]
} }
} }
} }
@@ -0,0 +1,83 @@
/* Copyright 2019 Luiz Correia
*
* 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
#include "keymap_br_abnt2.h"
enum layer_names {
_BL,
_FL,
_CL,
};
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Layer 0 (BR ABNT2 Layout shown)
* ,-----------------------------------------------------------.
* |Esc|1 !|2 @|3 #|4 $|5 %|6 ¨|7 &|8 *|9 (|0 )|- _|= +| Bksp |
* |-----------------------------------------------------------|
* | Tab | Q | W | E | R | T | Y | U | I | O | P |' `|{ [|Enter|
* |------------------------------------------------------. |
* | Fn1 | A | S | D | F | G | H | J | K | L | Ç |^ ~|} ]| |
* |-----------------------------------------------------------|
* |Sft |\ || Z | X | C | V | B | N | M |, <|. >|; :|/ ?|Shift |
* |-----------------------------------------------------------|
* |Ctrl |GUI|Alt | Space |Alt |GUI|Fn2|Ctrl |
* `-----------------------------------------------------------'
*/
[_BL] = LAYOUT_60_abnt2(
KC_GESC, 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_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, BR_ACUT, BR_LBRC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, BR_CCDL, BR_TILD, BR_RBRC, KC_ENT,
KC_LSFT, BR_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, BR_SCLN, BR_SLSH, KC_RSFT,
KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, KC_RGUI, MO(_FL), KC_RCTL),
[_FL] = LAYOUT_60_abnt2(
KC_GRV, 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,
XXXXXXX, RGB_TOG, RGB_MOD, RGB_HUI, RGB_HUD, RGB_SAI, RGB_SAD, RGB_VAI, RGB_VAD, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
_______, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, BL_DEC, BL_TOGG, BL_INC, BL_STEP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
KC_LCTL, KC_LGUI, KC_LGUI, XXXXXXX, KC_RALT, KC_RGUI, _______, KC_RCTL),
[_CL] = LAYOUT_60_abnt2(
KC_GRV, KC_MPRV, KC_MPLY, KC_MNXT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, KC_DEL,
XXXXXXX, XXXXXXX, KC_UP, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
_______, KC_LEFT, KC_DOWN, KC_RGHT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
KC_LSFT, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX, XXXXXXX,
KC_LCTL, KC_LGUI, KC_LALT, XXXXXXX, XXXXXXX, XXXXXXX, _______, XXXXXXX),
};
void matrix_scan_user(void) {
if (layer_state_is(_FL)) {
gh60_wasd_leds_on();
gh60_fn_led_on();
} else {
gh60_wasd_leds_off();
gh60_fn_led_off();
}
if (layer_state_is(_CL)) {
gh60_poker_leds_on();
gh60_esc_led_on();
} else {
gh60_poker_leds_off();
gh60_esc_led_off();
}
};
@@ -0,0 +1,15 @@
# BR ABNT2 layout
This is a Brazilian ABNT2 keymap for the GH60 in a standard layout.
The top-left sends Escape normally, but becomes a quote key when
tapped whilst either Fn or GUI are held down.
## Layout Image
![Layout Image](http://s2.glbimg.com/hlQMZ_E87B3DB_96rVuO_pY2Yy8=/695x0/s.glbimg.com/po/tt2/f/original/2016/06/21/900px-kb_portuguese_brazilsvg_.png)
----
### References
1. [Grave Escape - QMK Firmware Documentation](https://docs.qmk.fm/#/feature_grave_esc)
+27
View File
@@ -115,3 +115,30 @@ inline void gh60_wasd_leds_off(void) { setPinInput(F7); writePinLow(F7); }
{ K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \ { K30, KC_NO, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
{ K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \ { K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
} }
/* LAYOUT_60_abnt2
* ┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───────┐
* │00 │01 │02 │03 │04 │05 │06 │07 │08 │09 │0a │0b │0c │0d │
* ├───┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─────┤
* │10 │11 │12 │13 │14 │15 │16 │17 │18 │19 │1a │1b │1c │ │
* ├─────┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┬──┴┐2d │
* │20 │21 │22 │23 │24 │25 │26 │27 │28 │29 │2a │2b │2c │ │
* ├────┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴─┬─┴────┤
* │30 │31 │32 │33 │34 │35 │36 │37 │38 │39 │3a │3b │3c │ 3d │
* ├────┼───┴┬──┴─┬─┴───┴───┴───┴───┴───┴──┬┴───┼───┴┬──┴─┬────┤
* │40 │41 │42 │45 │4a │4b │4c │4d │
* └────┴────┴────┴────────────────────────┴────┴────┴────┴────┘
*/
#define LAYOUT_60_abnt2( \
K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D, \
K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, \
K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D, \
K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D, \
K40, K41, K42, K45, K4A, K4B,K4C, K4D \
) { \
{ K00, K01, K02, K03, K04, K05, K06, K07, K08, K09, K0A, K0B, K0C, K0D }, \
{ K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K1A, K1B, K1C, KC_NO }, \
{ K20, K21, K22, K23, K24, K25, K26, K27, K28, K29, K2A, K2B, K2C, K2D }, \
{ K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K3A, K3B, K3C, K3D }, \
{ K40, K41, K42, KC_NO, KC_NO, K45, KC_NO, KC_NO, KC_NO, KC_NO, K4A, K4B, K4C, K4D } \
}
@@ -2,14 +2,14 @@
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT( [0] = 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_DEL, KC_PSCR, KC_ESC, KC_TAB, KC_BSPC, MO(1), 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_DEL, KC_PSCR, KC_ESC , KC_TAB, KC_BSPC, MO(1),
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_NLCK, KC_PSLS, KC_PAST, KC_EQL, 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_NLCK, KC_PSLS, KC_PAST, KC_EQL,
KC_TAB, 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_PGUP, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_TAB, 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_PGUP, KC_P7, KC_P8, KC_P9, KC_PMNS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_BSPC,KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_BSPC,KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, KC_P4, KC_P5, KC_P6, KC_PPLS,
KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ENT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_ENT, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3,
KC_LCTL, KC_LGUI, KC_LALT,KC_SPC, KC_LCTL, KC_LSFT,KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_ENT), KC_LCTL, KC_LGUI, KC_LALT,KC_SPC, KC_LCTL, KC_LSFT,KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT, KC_ENT),
[1] = LAYOUT( [1] = 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_DEL, KC_PSCR, KC_ESC, KC_TAB, KC_BSPC,KC_TRNS, 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_DEL, KC_PSCR, RESET, KC_TAB, KC_BSPC,KC_TRNS,
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_NLCK,KC_PSLS,KC_PAST,KC_EQL, 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_NLCK,KC_PSLS,KC_PAST,KC_EQL,
KC_TAB, 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_PGUP, KC_P7, KC_P8, KC_P9, KC_PMNS, KC_TAB, 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_PGUP, KC_P7, KC_P8, KC_P9, KC_PMNS,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, BL_STEP,KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, KC_P4, KC_P5, KC_P6, KC_PPLS, KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, BL_STEP,KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_PGDN, KC_P4, KC_P5, KC_P6, KC_PPLS,
+18 -14
View File
@@ -1,19 +1,23 @@
#include "knight.h" #include "knight.h"
void matrix_init_kb(void) { void matrix_init_kb(void) {
setPinOutput(D1); // put your keyboard start-up code here
setPinOutput(E2); // runs once when the firmware starts up
matrix_init_user(); matrix_init_user();
}; led_init_ports();
void led_set_kb(uint8_t usb_led) { }
if (IS_LED_ON(usb_led, USB_LED_NUM_LOCK)) {
writePinHigh(D1); void led_init_ports(void) {
} else { setPinOutput(D1);
writePinLow(D1); writePinHigh(D1);
setPinOutput(E2);
writePinHigh(E2);
}
bool led_update_kb(led_t led_state) {
if(led_update_user(led_state)) {
writePin(E2, !led_state.caps_lock);
writePin(D1, !led_state.num_lock);
} }
if (IS_LED_ON(usb_led, USB_LED_CAPS_LOCK)) { return true;
writePinHigh(E2);
} else {
writePinLow(E2);
}
led_set_user(usb_led);
} }
@@ -0,0 +1,22 @@
#include QMK_KEYBOARD_H
#include "keymap_br_abnt2.h"
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
[0] = LAYOUT_60_abnt2(
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_BSPC,
KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, BR_ACUT, BR_LBRC,
KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, BR_CCDL, BR_TILD, BR_RBRC, KC_ENT,
KC_LSFT, BR_BSLS, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, BR_SCLN, BR_SLSH, KC_RSFT,
KC_LCTL, KC_LALT, KC_LGUI, KC_SPC, KC_RGUI, KC_RALT, MO(1), KC_RCTL
),
[1] = LAYOUT_60_abnt2(
BR_QUOT, 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,
_______, _______, _______, _______, RESET, _______, KC_INS, KC_HOME, KC_UP, KC_END, KC_PGUP, _______, _______,
_______, _______, _______, _______, _______, _______, _______, KC_LEFT, KC_DOWN, KC_RGHT, KC_PGDN, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
_______, _______, _______, _______, _______, _______, _______, _______
)
};
+76
View File
@@ -0,0 +1,76 @@
{
"keyboard_name": "",
"url": "",
"maintainer": "qmk",
"width": 15,
"height": 5,
"layouts": {
"LAYOUT_60_abnt2": {
"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":6, "y":0},
{"label":"7", "x":7, "y":0},
{"label":"8", "x":8, "y":0},
{"label":"9", "x":9, "y":0},
{"label":"0", "x":10, "y":0},
{"label":"-", "x":11, "y":0},
{"label":"=", "x":12, "y":0},
{"label":"Backspace", "x":13, "y":0, "w":2},
{"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":6.5, "y":1},
{"label":"U", "x":7.5, "y":1},
{"label":"I", "x":8.5, "y":1},
{"label":"O", "x":9.5, "y":1},
{"label":"P", "x":10.5, "y":1},
{"label":"&acute;", "x":11.5, "y":1},
{"label":"[", "x":12.5, "y":1},
{"label":"Caps Lock", "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":6.75, "y":2},
{"label":"J", "x":7.75, "y":2},
{"label":"K", "x":8.75, "y":2},
{"label":"L", "x":9.75, "y":2},
{"label":"&Ccedil;", "x":10.75, "y":2},
{"label":"&tilde;", "x":11.75, "y":2},
{"label":"]", "x":12.75, "y":2},
{"label":"Enter", "x":13.5, "y":1, "w":1.5},
{"label":"Shift", "x":0, "y":3, "w":1.25},
{"label":"\\", "x":1.25, "y":3},
{"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":7.25, "y":3},
{"label":"M", "x":8.25, "y":3},
{"label":",", "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":"Ctrl", "x":0, "y":4, "w":1.25},
{"label":"GUI", "x":1.25, "y":4, "w":1.25},
{"label":"Alt", "x":2.5, "y":4, "w":1.25},
{"label":"Space", "x":3.75, "y":4, "w":6.25},
{"label":"AltGr", "x":10, "y":4, "w":1.25},
{"label":"GUI", "x":11.25, "y":4, "w":1.25},
{"label":"MO(1)", "x":12.5, "y":4, "w":1.25},
{"label":"Ctrl", "x":13.75, "y":4, "w":1.25}
]
}
}
}
+5
View File
@@ -0,0 +1,5 @@
[{a:7,f:5},"","","","","","","","","","","","","",{w:2},""],
[{w:1.5},"","","","","","","","","","","","","",{w:1.5,w2:1.25,h2:2,x2:0.25},""],
[{w:1.75},"","","","","","","","","","","","",""],
[{w:1.25},"","","","","","","","","","","","","",{w:1.75},""],
[{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:6.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},"",{w:1.25},""]
+3
View File
@@ -0,0 +1,3 @@
# 60_abnt2
![60% ABNT2 layout](https://raw.githubusercontent.com/noroadsleft/qmk_images/master/layouts/default/60_abnt2/keyboard-layout.png)
+82 -85
View File
@@ -20,6 +20,7 @@ import re
import shlex import shlex
import sys import sys
from decimal import Decimal from decimal import Decimal
from pathlib import Path
from tempfile import NamedTemporaryFile from tempfile import NamedTemporaryFile
from time import sleep from time import sleep
@@ -39,7 +40,7 @@ import colorama
from appdirs import user_config_dir from appdirs import user_config_dir
# Disable logging until we can configure it how the user wants # Disable logging until we can configure it how the user wants
logging.basicConfig(filename='/dev/null') logging.basicConfig(stream=os.devnull)
# Log Level Representations # Log Level Representations
EMOJI_LOGLEVELS = { EMOJI_LOGLEVELS = {
@@ -96,7 +97,6 @@ def format_ansi(text):
class ANSIFormatter(logging.Formatter): class ANSIFormatter(logging.Formatter):
"""A log formatter that inserts ANSI color. """A log formatter that inserts ANSI color.
""" """
def format(self, record): def format(self, record):
msg = super(ANSIFormatter, self).format(record) msg = super(ANSIFormatter, self).format(record)
return format_ansi(msg) return format_ansi(msg)
@@ -105,7 +105,6 @@ class ANSIFormatter(logging.Formatter):
class ANSIEmojiLoglevelFormatter(ANSIFormatter): class ANSIEmojiLoglevelFormatter(ANSIFormatter):
"""A log formatter that makes the loglevel an emoji on UTF capable terminals. """A log formatter that makes the loglevel an emoji on UTF capable terminals.
""" """
def format(self, record): def format(self, record):
if UNICODE_SUPPORT: if UNICODE_SUPPORT:
record.levelname = EMOJI_LOGLEVELS[record.levelname].format(**ansi_colors) record.levelname = EMOJI_LOGLEVELS[record.levelname].format(**ansi_colors)
@@ -115,7 +114,6 @@ class ANSIEmojiLoglevelFormatter(ANSIFormatter):
class ANSIStrippingFormatter(ANSIFormatter): class ANSIStrippingFormatter(ANSIFormatter):
"""A log formatter that strips ANSI. """A log formatter that strips ANSI.
""" """
def format(self, record): def format(self, record):
msg = super(ANSIStrippingFormatter, self).format(record) msg = super(ANSIStrippingFormatter, self).format(record)
return ansi_escape.sub('', msg) return ansi_escape.sub('', msg)
@@ -127,7 +125,6 @@ class Configuration(object):
This class never raises IndexError, instead it will return None if a This class never raises IndexError, instead it will return None if a
section or option does not yet exist. section or option does not yet exist.
""" """
def __contains__(self, key): def __contains__(self, key):
return self._config.__contains__(key) return self._config.__contains__(key)
@@ -214,9 +211,8 @@ def handle_store_boolean(self, *args, **kwargs):
class SubparserWrapper(object): class SubparserWrapper(object):
"""Wrap subparsers so we can populate the normal and the shadow parser. """Wrap subparsers so we can track what options the user passed.
""" """
def __init__(self, cli, submodule, subparser): def __init__(self, cli, submodule, subparser):
self.cli = cli self.cli = cli
self.submodule = submodule self.submodule = submodule
@@ -232,26 +228,30 @@ class SubparserWrapper(object):
self.subparser.completer = completer self.subparser.completer = completer
def add_argument(self, *args, **kwargs): def add_argument(self, *args, **kwargs):
"""Add an argument for this subcommand.
This also stores the default for the argument in `self.cli.default_arguments`.
"""
if 'action' in kwargs and kwargs['action'] == 'store_boolean': if 'action' in kwargs and kwargs['action'] == 'store_boolean':
# Store boolean will call us again with the enable/disable flag arguments
return handle_store_boolean(self, *args, **kwargs) return handle_store_boolean(self, *args, **kwargs)
self.cli.acquire_lock() self.cli.acquire_lock()
self.subparser.add_argument(*args, **kwargs) self.subparser.add_argument(*args, **kwargs)
if self.submodule not in self.cli.default_arguments:
if 'default' in kwargs: self.cli.default_arguments[self.submodule] = {}
del kwargs['default'] self.cli.default_arguments[self.submodule][self.cli.get_argument_name(*args, **kwargs)] = kwargs.get('default')
if 'action' in kwargs and kwargs['action'] == 'store_false':
kwargs['action'] == 'store_true'
self.cli.subcommands_default[self.submodule].add_argument(*args, **kwargs)
self.cli.release_lock() self.cli.release_lock()
class MILC(object): class MILC(object):
"""MILC - An Opinionated Batteries Included Framework """MILC - An Opinionated Batteries Included Framework
""" """
def __init__(self): def __init__(self):
"""Initialize the MILC object. """Initialize the MILC object.
version
The version string to associate with your CLI program
""" """
# Setup a lock for thread safety # Setup a lock for thread safety
self._lock = threading.RLock() if thread else None self._lock = threading.RLock() if thread else None
@@ -263,9 +263,10 @@ class MILC(object):
self._inside_context_manager = False self._inside_context_manager = False
self.ansi = ansi_colors self.ansi = ansi_colors
self.arg_only = [] self.arg_only = []
self.config = Configuration() self.config = None
self.config_file = None self.config_file = None
self.version = os.environ.get('QMK_VERSION', 'unknown') self.default_arguments = {}
self.version = 'unknown'
self.release_lock() self.release_lock()
# Figure out our program name # Figure out our program name
@@ -273,6 +274,7 @@ class MILC(object):
self.prog_name = self.prog_name.split('/')[-1] self.prog_name = self.prog_name.split('/')[-1]
# Initialize all the things # Initialize all the things
self.read_config_file()
self.initialize_argparse() self.initialize_argparse()
self.initialize_logging() self.initialize_logging()
@@ -282,7 +284,7 @@ class MILC(object):
@description.setter @description.setter
def description(self, value): def description(self, value):
self._description = self._arg_parser.description = self._arg_defaults.description = value self._description = self._arg_parser.description = value
def echo(self, text, *args, **kwargs): def echo(self, text, *args, **kwargs):
"""Print colorized text to stdout. """Print colorized text to stdout.
@@ -311,12 +313,9 @@ class MILC(object):
self.acquire_lock() self.acquire_lock()
self.subcommands = {} self.subcommands = {}
self.subcommands_default = {}
self._subparsers = None self._subparsers = None
self._subparsers_default = None
self.argwarn = argcomplete.warn self.argwarn = argcomplete.warn
self.args = None self.args = None
self._arg_defaults = argparse.ArgumentParser(**kwargs)
self._arg_parser = argparse.ArgumentParser(**kwargs) self._arg_parser = argparse.ArgumentParser(**kwargs)
self.set_defaults = self._arg_parser.set_defaults self.set_defaults = self._arg_parser.set_defaults
self.print_usage = self._arg_parser.print_usage self.print_usage = self._arg_parser.print_usage
@@ -329,25 +328,18 @@ class MILC(object):
self._arg_parser.completer = completer self._arg_parser.completer = completer
def add_argument(self, *args, **kwargs): def add_argument(self, *args, **kwargs):
"""Wrapper to add arguments to both the main and the shadow argparser. """Wrapper to add arguments and track whether they were passed on the command line.
""" """
if 'action' in kwargs and kwargs['action'] == 'store_boolean': if 'action' in kwargs and kwargs['action'] == 'store_boolean':
return handle_store_boolean(self, *args, **kwargs) return handle_store_boolean(self, *args, **kwargs)
if kwargs.get('add_dest', True) and args[0][0] == '-':
kwargs['dest'] = 'general_' + self.get_argument_name(*args, **kwargs)
if 'add_dest' in kwargs:
del kwargs['add_dest']
self.acquire_lock() self.acquire_lock()
self._arg_parser.add_argument(*args, **kwargs)
# Populate the shadow parser self._arg_parser.add_argument(*args, **kwargs)
if 'default' in kwargs: if 'general' not in self.default_arguments:
del kwargs['default'] self.default_arguments['general'] = {}
if 'action' in kwargs and kwargs['action'] == 'store_false': self.default_arguments['general'][self.get_argument_name(*args, **kwargs)] = kwargs.get('default')
kwargs['action'] == 'store_true'
self._arg_defaults.add_argument(*args, **kwargs)
self.release_lock() self.release_lock()
def initialize_logging(self): def initialize_logging(self):
@@ -374,15 +366,14 @@ class MILC(object):
self.add_argument('--log-file-fmt', default='[%(levelname)s] [%(asctime)s] [file:%(pathname)s] [line:%(lineno)d] %(message)s', help='Format string for log file.') self.add_argument('--log-file-fmt', default='[%(levelname)s] [%(asctime)s] [file:%(pathname)s] [line:%(lineno)d] %(message)s', help='Format string for log file.')
self.add_argument('--log-file', help='File to write log messages to') self.add_argument('--log-file', help='File to write log messages to')
self.add_argument('--color', action='store_boolean', default=True, help='color in output') self.add_argument('--color', action='store_boolean', default=True, help='color in output')
self.add_argument('-c', '--config-file', help='The config file to read and/or write') self.add_argument('--config-file', help='The location for the configuration file')
self.add_argument('--save-config', action='store_true', help='Save the running configuration to the config file') self.arg_only.append('config_file')
def add_subparsers(self, title='Sub-commands', **kwargs): def add_subparsers(self, title='Sub-commands', **kwargs):
if self._inside_context_manager: if self._inside_context_manager:
raise RuntimeError('You must run this before the with statement!') raise RuntimeError('You must run this before the with statement!')
self.acquire_lock() self.acquire_lock()
self._subparsers_default = self._arg_defaults.add_subparsers(title=title, dest='subparsers', **kwargs)
self._subparsers = self._arg_parser.add_subparsers(title=title, dest='subparsers', **kwargs) self._subparsers = self._arg_parser.add_subparsers(title=title, dest='subparsers', **kwargs)
self.release_lock() self.release_lock()
@@ -404,10 +395,12 @@ class MILC(object):
if self.config_file: if self.config_file:
return self.config_file return self.config_file
if self.args and self.args.general_config_file: if '--config-file' in sys.argv:
return self.args.general_config_file return Path(sys.argv[sys.argv.index('--config-file') + 1]).expanduser().resolve()
return os.path.join(user_config_dir(appname='qmk', appauthor='QMK'), '%s.ini' % self.prog_name) filedir = user_config_dir(appname='qmk', appauthor='QMK')
filename = '%s.ini' % self.prog_name
return Path(filedir) / filename
def get_argument_name(self, *args, **kwargs): def get_argument_name(self, *args, **kwargs):
"""Takes argparse arguments and returns the dest name. """Takes argparse arguments and returns the dest name.
@@ -446,7 +439,7 @@ class MILC(object):
def arg_passed(self, arg): def arg_passed(self, arg):
"""Returns True if arg was passed on the command line. """Returns True if arg was passed on the command line.
""" """
return self.args_passed[arg] in (None, False) return self.default_arguments.get(arg) != self.args[arg]
def parse_args(self): def parse_args(self):
"""Parse the CLI args. """Parse the CLI args.
@@ -459,25 +452,22 @@ class MILC(object):
self.acquire_lock() self.acquire_lock()
self.args = self._arg_parser.parse_args() self.args = self._arg_parser.parse_args()
self.args_passed = self._arg_defaults.parse_args()
if 'entrypoint' in self.args: if 'entrypoint' in self.args:
self._entrypoint = self.args.entrypoint self._entrypoint = self.args.entrypoint
if self.args.general_config_file:
self.config_file = self.args.general_config_file
self.release_lock() self.release_lock()
def read_config(self): def read_config_file(self):
"""Parse the configuration file and determine the runtime configuration. """Read in the configuration file and store it in self.config.
""" """
self.acquire_lock() self.acquire_lock()
self.config = Configuration()
self.config_file = self.find_config_file() self.config_file = self.find_config_file()
if self.config_file and os.path.exists(self.config_file): if self.config_file and self.config_file.exists():
config = RawConfigParser(self.config) config = RawConfigParser(self.config)
config.read(self.config_file) config.read(str(self.config_file))
# Iterate over the config file options and write them into self.config # Iterate over the config file options and write them into self.config
for section in config.sections(): for section in config.sections():
@@ -487,8 +477,10 @@ class MILC(object):
# Coerce values into useful datatypes # Coerce values into useful datatypes
if value.lower() in ['1', 'yes', 'true', 'on']: if value.lower() in ['1', 'yes', 'true', 'on']:
value = True value = True
elif value.lower() in ['0', 'no', 'false', 'none', 'off']: elif value.lower() in ['0', 'no', 'false', 'off']:
value = False value = False
elif value.lower() in ['none']:
continue
elif value.replace('.', '').isdigit(): elif value.replace('.', '').isdigit():
if '.' in value: if '.' in value:
value = Decimal(value) value = Decimal(value)
@@ -497,32 +489,44 @@ class MILC(object):
self.config[section][option] = value self.config[section][option] = value
# Fold the CLI args into self.config self.release_lock()
def merge_args_into_config(self):
"""Merge CLI arguments into self.config to create the runtime configuration.
"""
self.acquire_lock()
for argument in vars(self.args): for argument in vars(self.args):
if argument in ('subparsers', 'entrypoint'): if argument in ('subparsers', 'entrypoint'):
continue continue
if '_' in argument: if argument not in self.arg_only:
section, option = argument.split('_', 1) # Find the argument's section
else: if self._entrypoint.__name__ in self.default_arguments and argument in self.default_arguments[self._entrypoint.__name__]:
section = self._entrypoint.__name__ argument_found = True
option = argument section = self._entrypoint.__name__
if argument in self.default_arguments['general']:
argument_found = True
section = 'general'
if option not in self.arg_only: if not argument_found:
if hasattr(self.args_passed, argument): raise RuntimeError('Could not find argument in `self.default_arguments`. This should be impossible!')
exit(1)
# Merge this argument into self.config
if argument in self.default_arguments:
arg_value = getattr(self.args, argument) arg_value = getattr(self.args, argument)
if arg_value: if arg_value:
self.config[section][option] = arg_value self.config[section][argument] = arg_value
else: else:
if option not in self.config[section]: if argument not in self.config[section]:
self.config[section][option] = getattr(self.args, argument) self.config[section][argument] = getattr(self.args, argument)
self.release_lock() self.release_lock()
def save_config(self): def save_config(self):
"""Save the current configuration to the config file. """Save the current configuration to the config file.
""" """
self.log.debug("Saving config file to '%s'", self.config_file) self.log.debug("Saving config file to '%s'", str(self.config_file))
if not self.config_file: if not self.config_file:
self.log.warning('%s.config_file file not set, not saving config!', self.__class__.__name__) self.log.warning('%s.config_file file not set, not saving config!', self.__class__.__name__)
@@ -530,31 +534,34 @@ class MILC(object):
self.acquire_lock() self.acquire_lock()
# Generate a sanitized version of our running configuration
config = RawConfigParser() config = RawConfigParser()
config_dir = os.path.dirname(self.config_file)
for section_name, section in self.config._config.items(): for section_name, section in self.config._config.items():
config.add_section(section_name) config.add_section(section_name)
for option_name, value in section.items(): for option_name, value in section.items():
if section_name == 'general': if section_name == 'general':
if option_name in ['save_config']: if option_name in ['config_file']:
continue continue
config.set(section_name, option_name, str(value)) if value is not None:
config.set(section_name, option_name, str(value))
if not os.path.exists(config_dir): # Write out the config file
os.makedirs(config_dir) config_dir = self.config_file.parent
if not config_dir.exists():
config_dir.mkdir(parents=True, exist_ok=True)
with NamedTemporaryFile(mode='w', dir=config_dir, delete=False) as tmpfile: with NamedTemporaryFile(mode='w', dir=str(config_dir), delete=False) as tmpfile:
config.write(tmpfile) config.write(tmpfile)
# Move the new config file into place atomically # Move the new config file into place atomically
if os.path.getsize(tmpfile.name) > 0: if os.path.getsize(tmpfile.name) > 0:
os.rename(tmpfile.name, self.config_file) os.rename(tmpfile.name, str(self.config_file))
else: else:
self.log.warning('Config file saving failed, not replacing %s with %s.', self.config_file, tmpfile.name) self.log.warning('Config file saving failed, not replacing %s with %s.', str(self.config_file), tmpfile.name)
# Housekeeping
self.release_lock() self.release_lock()
cli.log.info('Wrote configuration to %s', shlex.quote(self.config_file)) cli.log.info('Wrote configuration to %s', shlex.quote(str(self.config_file)))
def __call__(self): def __call__(self):
"""Execute the entrypoint function. """Execute the entrypoint function.
@@ -603,16 +610,11 @@ class MILC(object):
name = handler.__name__.replace("_", "-") name = handler.__name__.replace("_", "-")
self.acquire_lock() self.acquire_lock()
kwargs['help'] = description kwargs['help'] = description
self.subcommands_default[name] = self._subparsers_default.add_parser(name, **kwargs)
self.subcommands[name] = SubparserWrapper(self, name, self._subparsers.add_parser(name, **kwargs)) self.subcommands[name] = SubparserWrapper(self, name, self._subparsers.add_parser(name, **kwargs))
self.subcommands[name].set_defaults(entrypoint=handler) self.subcommands[name].set_defaults(entrypoint=handler)
if name not in self.__dict__:
self.__dict__[name] = self.subcommands[name]
else:
self.log.debug("Could not add subcommand '%s' to attributes, key already exists!", name)
self.release_lock() self.release_lock()
return handler return handler
@@ -620,7 +622,6 @@ class MILC(object):
def subcommand(self, description, **kwargs): def subcommand(self, description, **kwargs):
"""Decorator to register a subcommand. """Decorator to register a subcommand.
""" """
def subcommand_function(handler): def subcommand_function(handler):
return self.add_subcommand(handler, description, **kwargs) return self.add_subcommand(handler, description, **kwargs)
@@ -644,9 +645,9 @@ class MILC(object):
self.log_format = self.config['general']['log_fmt'] self.log_format = self.config['general']['log_fmt']
if self.config.general.color: if self.config.general.color:
self.log_format = ANSIEmojiLoglevelFormatter(self.args.general_log_fmt, self.config.general.datetime_fmt) self.log_format = ANSIEmojiLoglevelFormatter(self.args.log_fmt, self.config.general.datetime_fmt)
else: else:
self.log_format = ANSIStrippingFormatter(self.args.general_log_fmt, self.config.general.datetime_fmt) self.log_format = ANSIStrippingFormatter(self.args.log_fmt, self.config.general.datetime_fmt)
if self.log_file: if self.log_file:
self.log_file_handler = logging.FileHandler(self.log_file, self.log_file_mode) self.log_file_handler = logging.FileHandler(self.log_file, self.log_file_mode)
@@ -673,13 +674,9 @@ class MILC(object):
colorama.init() colorama.init()
self.parse_args() self.parse_args()
self.read_config() self.merge_args_into_config()
self.setup_logging() self.setup_logging()
if 'save_config' in self.config.general and self.config.general.save_config:
self.save_config()
exit(0)
return self return self
def __exit__(self, exc_type, exc_val, exc_tb): def __exit__(self, exc_type, exc_val, exc_tb):
+1 -1
View File
@@ -191,7 +191,7 @@ void backlight_off(pin_t backlight_pin) {
# define FOR_EACH_LED(x) \ # define FOR_EACH_LED(x) \
for (uint8_t i = 0; i < BACKLIGHT_LED_COUNT; i++) { \ for (uint8_t i = 0; i < BACKLIGHT_LED_COUNT; i++) { \
pin_t backlight_pin = backlight_pins[i]; \ pin_t backlight_pin = backlight_pins[i]; \
{ x } \ { x } \
} }
+20 -19
View File
@@ -303,25 +303,26 @@
UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \ UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
sei(); \ sei(); \
} while (0) } while (0)
# elif (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__)) # elif (defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB1286__))
# define SERIAL_UART_BAUD 115200 # define SERIAL_UART_BAUD 115200
# define SERIAL_UART_DATA UDR1 # define SERIAL_UART_DATA UDR1
/* UBRR should result in ~16 and set UCSR1A = _BV(U2X1) as per rn42 documentation. HC05 needs baudrate configured accordingly */ /* UBRR should result in ~16 and set UCSR1A = _BV(U2X1) as per rn42 documentation. HC05 needs baudrate configured accordingly */
# define SERIAL_UART_UBRR (F_CPU / (8UL * SERIAL_UART_BAUD) - 1) # define SERIAL_UART_UBRR (F_CPU / (8UL * SERIAL_UART_BAUD) - 1)
# define SERIAL_UART_RXD_VECT USART1_RX_vect # define SERIAL_UART_RXD_VECT USART1_RX_vect
# define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1)) # define SERIAL_UART_TXD_READY (UCSR1A & _BV(UDRE1))
# define SERIAL_UART_INIT() do { \ # define SERIAL_UART_INIT() \
UCSR1A = _BV(U2X1); \ do { \
/* baud rate */ \ UCSR1A = _BV(U2X1); \
UBRR1L = SERIAL_UART_UBRR; \ /* baud rate */ \
/* baud rate */ \ UBRR1L = SERIAL_UART_UBRR; \
UBRR1H = SERIAL_UART_UBRR >> 8; \ /* baud rate */ \
/* enable TX */ \ UBRR1H = SERIAL_UART_UBRR >> 8; \
UCSR1B = _BV(TXEN1); \ /* enable TX */ \
/* 8-bit data */ \ UCSR1B = _BV(TXEN1); \
UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \ /* 8-bit data */ \
sei(); \ UCSR1C = _BV(UCSZ11) | _BV(UCSZ10); \
} while(0) sei(); \
} while (0)
# else # else
# error "USART configuration is needed." # error "USART configuration is needed."
# endif # endif
+15 -22
View File
@@ -21,40 +21,33 @@
// for memcpy // for memcpy
#include <string.h> #include <string.h>
#if !defined(DIP_SWITCH_PINS) #if !defined(DIP_SWITCH_PINS)
# error "No DIP switch pads defined by DIP_SWITCH_PINS" # error "No DIP switch pads defined by DIP_SWITCH_PINS"
#endif #endif
#define NUMBER_OF_DIP_SWITCHES (sizeof(dip_switch_pad)/sizeof(pin_t)) #define NUMBER_OF_DIP_SWITCHES (sizeof(dip_switch_pad) / sizeof(pin_t))
static pin_t dip_switch_pad[] = DIP_SWITCH_PINS; static pin_t dip_switch_pad[] = DIP_SWITCH_PINS;
static bool dip_switch_state[NUMBER_OF_DIP_SWITCHES] = { 0 }; static bool dip_switch_state[NUMBER_OF_DIP_SWITCHES] = {0};
static bool last_dip_switch_state[NUMBER_OF_DIP_SWITCHES] = { 0 }; static bool last_dip_switch_state[NUMBER_OF_DIP_SWITCHES] = {0};
__attribute__((weak)) void dip_switch_update_user(uint8_t index, bool active) {}
__attribute__((weak)) __attribute__((weak)) void dip_switch_update_kb(uint8_t index, bool active) { dip_switch_update_user(index, active); }
void dip_switch_update_user(uint8_t index, bool active) {}
__attribute__((weak)) __attribute__((weak)) void dip_switch_update_mask_user(uint32_t state) {}
void dip_switch_update_kb(uint8_t index, bool active) { dip_switch_update_user(index, active); }
__attribute__((weak)) __attribute__((weak)) void dip_switch_update_mask_kb(uint32_t state) { dip_switch_update_mask_user(state); }
void dip_switch_update_mask_user(uint32_t state) {}
__attribute__((weak))
void dip_switch_update_mask_kb(uint32_t state) { dip_switch_update_mask_user(state); }
void dip_switch_init(void) { void dip_switch_init(void) {
for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) { for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) {
setPinInputHigh(dip_switch_pad[i]); setPinInputHigh(dip_switch_pad[i]);
} }
dip_switch_read(true); dip_switch_read(true);
} }
void dip_switch_read(bool forced) { void dip_switch_read(bool forced) {
bool has_dip_state_changed = false; bool has_dip_state_changed = false;
uint32_t dip_switch_mask = 0; uint32_t dip_switch_mask = 0;
for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) { for (uint8_t i = 0; i < NUMBER_OF_DIP_SWITCHES; i++) {
dip_switch_state[i] = !readPin(dip_switch_pad[i]); dip_switch_state[i] = !readPin(dip_switch_pad[i]);
+4 -4
View File
@@ -37,8 +37,8 @@ static pin_t encoders_pad_b[] = ENCODERS_PAD_B;
static int8_t encoder_LUT[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0}; static int8_t encoder_LUT[] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0};
static uint8_t encoder_state[NUMBER_OF_ENCODERS] = {0}; static uint8_t encoder_state[NUMBER_OF_ENCODERS] = {0};
static int8_t encoder_pulses[NUMBER_OF_ENCODERS] = {0}; static int8_t encoder_pulses[NUMBER_OF_ENCODERS] = {0};
#ifdef SPLIT_KEYBOARD #ifdef SPLIT_KEYBOARD
// right half encoders come over as second set of encoders // right half encoders come over as second set of encoders
@@ -84,7 +84,7 @@ static void encoder_update(int8_t index, uint8_t state) {
encoder_value[index]++; encoder_value[index]++;
encoder_update_kb(index, true); encoder_update_kb(index, true);
} }
if (encoder_pulses[index] <= -ENCODER_RESOLUTION) { // direction is arbitrary here, but this clockwise if (encoder_pulses[index] <= -ENCODER_RESOLUTION) { // direction is arbitrary here, but this clockwise
encoder_value[index]--; encoder_value[index]--;
encoder_update_kb(index, false); encoder_update_kb(index, false);
} }
@@ -109,7 +109,7 @@ void encoder_state_raw(uint8_t* slave_state) { memcpy(slave_state, &encoder_valu
void encoder_update_raw(uint8_t* slave_state) { void encoder_update_raw(uint8_t* slave_state) {
for (int i = 0; i < NUMBER_OF_ENCODERS; i++) { for (int i = 0; i < NUMBER_OF_ENCODERS; i++) {
uint8_t index = i + thatHand; uint8_t index = i + thatHand;
int8_t delta = slave_state[i] - encoder_value[index]; int8_t delta = slave_state[i] - encoder_value[index];
while (delta > 0) { while (delta > 0) {
delta--; delta--;
encoder_value[index]++; encoder_value[index]++;
+27 -27
View File
@@ -78,36 +78,36 @@
#define IT_MINS KC_SLSH // - and _ #define IT_MINS KC_SLSH // - and _
// shifted characters // shifted characters
#define IT_DEGR LSFT(IT_AACC) // ° #define IT_DEGR LSFT(IT_AACC) // °
#define IT_EXLM LSFT(KC_1) // ! #define IT_EXLM LSFT(KC_1) // !
#define IT_DQOT LSFT(KC_2) // " #define IT_DQOT LSFT(KC_2) // "
#define IT_STRL LSFT(KC_3) // £ #define IT_STRL LSFT(KC_3) // £
#define IT_DLR LSFT(KC_4) // $ #define IT_DLR LSFT(KC_4) // $
#define IT_PERC LSFT(KC_5) // % #define IT_PERC LSFT(KC_5) // %
#define IT_AMPR LSFT(KC_6) // & #define IT_AMPR LSFT(KC_6) // &
#define IT_SLSH LSFT(KC_7) // / #define IT_SLSH LSFT(KC_7) // /
#define IT_LPRN LSFT(KC_8) // ( #define IT_LPRN LSFT(KC_8) // (
#define IT_RPRN LSFT(KC_9) // ) #define IT_RPRN LSFT(KC_9) // )
#define IT_EQL LSFT(KC_0) // = #define IT_EQL LSFT(KC_0) // =
#define IT_QST LSFT(IT_APOS) // ? #define IT_QST LSFT(IT_APOS) // ?
#define IT_CRC LSFT(IT_IACC) // ^ #define IT_CRC LSFT(IT_IACC) // ^
#define IT_ASTR LSFT(IT_PLUS) // * #define IT_ASTR LSFT(IT_PLUS) // *
#define IT_MORE LSFT(IT_LESS) // > #define IT_MORE LSFT(IT_LESS) // >
#define IT_COLN LSFT(IT_DOT) // : #define IT_COLN LSFT(IT_DOT) // :
#define IT_SCLN LSFT(IT_COMM) // ; #define IT_SCLN LSFT(IT_COMM) // ;
#define IT_UNDS LSFT(IT_MINS) // _ #define IT_UNDS LSFT(IT_MINS) // _
// Alt Gr-ed characters // Alt Gr-ed characters
#define IT_LCBR ALGR(KC_7) // { #define IT_LCBR ALGR(KC_7) // {
#define IT_LBRC ALGR(IT_EACC) // [ #define IT_LBRC ALGR(IT_EACC) // [
#define IT_RBRC ALGR(IT_PLUS) // ] #define IT_RBRC ALGR(IT_PLUS) // ]
#define IT_RCBR ALGR(KC_0) // } #define IT_RCBR ALGR(KC_0) // }
#define IT_AT ALGR(IT_OACC) // @ #define IT_AT ALGR(IT_OACC) // @
#define IT_EURO ALGR(KC_E) // € #define IT_EURO ALGR(KC_E) // €
#define IT_PIPE LSFT(IT_BSLS) // | #define IT_PIPE LSFT(IT_BSLS) // |
#define IT_SHRP ALGR(IT_AACC) // # #define IT_SHRP ALGR(IT_AACC) // #
// Deprecated // Deprecated
#define IT_X_PLUS X_RBRACKET // # #define IT_X_PLUS X_RBRACKET // #
#endif #endif
+30 -30
View File
@@ -65,7 +65,7 @@
#define IT_COMM KC_COMM // , and ; #define IT_COMM KC_COMM // , and ;
#define IT_APOS KC_MINS // ' and ? #define IT_APOS KC_MINS // ' and ?
#define IT_BSLS KC_NUBS // \ and | #define IT_BSLS KC_NUBS // \ and |
#define IT_LESS KC_GRV // < and > #define IT_LESS KC_GRV // < and >
#define IT_MINS KC_SLSH // - and _ #define IT_MINS KC_SLSH // - and _
// accented vowels (regular, with shift, with option, with option and shift) // accented vowels (regular, with shift, with option, with option and shift)
@@ -77,37 +77,37 @@
#define IT_IACC KC_EQL // ì, ^, ˆ, ± #define IT_IACC KC_EQL // ì, ^, ˆ, ±
// shifted characters // shifted characters
#define IT_EXLM LSFT(KC_1) // ! #define IT_EXLM LSFT(KC_1) // !
#define IT_DQOT LSFT(KC_2) // " #define IT_DQOT LSFT(KC_2) // "
#define IT_STRL LSFT(KC_3) // £ #define IT_STRL LSFT(KC_3) // £
#define IT_DLR LSFT(KC_4) // $ #define IT_DLR LSFT(KC_4) // $
#define IT_PERC LSFT(KC_5) // % #define IT_PERC LSFT(KC_5) // %
#define IT_AMPR LSFT(KC_6) // & #define IT_AMPR LSFT(KC_6) // &
#define IT_SLSH LSFT(KC_7) // / #define IT_SLSH LSFT(KC_7) // /
#define IT_LPRN LSFT(KC_8) // ( #define IT_LPRN LSFT(KC_8) // (
#define IT_RPRN LSFT(KC_9) // ) #define IT_RPRN LSFT(KC_9) // )
#define IT_EQL LSFT(KC_0) // = #define IT_EQL LSFT(KC_0) // =
#define IT_DEGR LSFT(IT_AACC) // ° #define IT_DEGR LSFT(IT_AACC) // °
#define IT_QST LSFT(IT_APOS) // ? #define IT_QST LSFT(IT_APOS) // ?
#define IT_CRC LSFT(IT_IACC) // ^ #define IT_CRC LSFT(IT_IACC) // ^
#define IT_ASTR LSFT(IT_PLUS) // * #define IT_ASTR LSFT(IT_PLUS) // *
#define IT_MORE LSFT(IT_LESS) // > #define IT_MORE LSFT(IT_LESS) // >
#define IT_COLN LSFT(IT_DOT) // : #define IT_COLN LSFT(IT_DOT) // :
#define IT_SCLN LSFT(IT_COMM) // ; #define IT_SCLN LSFT(IT_COMM) // ;
#define IT_UNDS LSFT(IT_MINS) // _ #define IT_UNDS LSFT(IT_MINS) // _
#define IT_LCBR LSFT(IT_LBRC) // { #define IT_LCBR LSFT(IT_LBRC) // {
#define IT_RCBR LSFT(IT_RBRC) // } #define IT_RCBR LSFT(IT_RBRC) // }
#define IT_PIPE LSFT(IT_BSLS) // | #define IT_PIPE LSFT(IT_BSLS) // |
// Alt -ed characters // Alt -ed characters
#define IT_LBRC LALT(IT_EACC) // [ #define IT_LBRC LALT(IT_EACC) // [
#define IT_RBRC LALT(IT_PLUS) // ] #define IT_RBRC LALT(IT_PLUS) // ]
#define IT_AT LALT(IT_OACC) // @ #define IT_AT LALT(IT_OACC) // @
#define IT_EURO LALT(KC_E) // € #define IT_EURO LALT(KC_E) // €
#define IT_SHRP LALT(IT_AACC ) // # #define IT_SHRP LALT(IT_AACC) // #
#define IT_ACUT LALT(KC_8) // ´ #define IT_ACUT LALT(KC_8) // ´
#define IT_GRAVE LALT(KC_9) // ` #define IT_GRAVE LALT(KC_9) // `
#define IT_TILDE LALT(KC_5) // ~ #define IT_TILDE LALT(KC_5) // ~
#define IT_PLMN LALT(LSFT(IT_IACC)) // ± #define IT_PLMN LALT(LSFT(IT_IACC)) // ±
#endif #endif
+30 -30
View File
@@ -65,7 +65,7 @@
#define IT_COMM KC_COMM // , and ; #define IT_COMM KC_COMM // , and ;
#define IT_APOS KC_MINS // ' and ? #define IT_APOS KC_MINS // ' and ?
#define IT_BSLS KC_GRV // \ and | #define IT_BSLS KC_GRV // \ and |
#define IT_LESS KC_NUBS// < and > #define IT_LESS KC_NUBS // < and >
#define IT_MINS KC_SLSH // - and _ #define IT_MINS KC_SLSH // - and _
// accented vowels (regular, with shift, with option, with option and shift) // accented vowels (regular, with shift, with option, with option and shift)
@@ -77,37 +77,37 @@
#define IT_IACC KC_EQL // ì, ^, ˆ, ± #define IT_IACC KC_EQL // ì, ^, ˆ, ±
// shifted characters // shifted characters
#define IT_EXLM LSFT(KC_1) // ! #define IT_EXLM LSFT(KC_1) // !
#define IT_DQOT LSFT(KC_2) // " #define IT_DQOT LSFT(KC_2) // "
#define IT_STRL LSFT(KC_3) // £ #define IT_STRL LSFT(KC_3) // £
#define IT_DLR LSFT(KC_4) // $ #define IT_DLR LSFT(KC_4) // $
#define IT_PERC LSFT(KC_5) // % #define IT_PERC LSFT(KC_5) // %
#define IT_AMPR LSFT(KC_6) // & #define IT_AMPR LSFT(KC_6) // &
#define IT_SLSH LSFT(KC_7) // / #define IT_SLSH LSFT(KC_7) // /
#define IT_LPRN LSFT(KC_8) // ( #define IT_LPRN LSFT(KC_8) // (
#define IT_RPRN LSFT(KC_9) // ) #define IT_RPRN LSFT(KC_9) // )
#define IT_EQL LSFT(KC_0) // = #define IT_EQL LSFT(KC_0) // =
#define IT_DEGR LSFT(IT_AACC) // ° #define IT_DEGR LSFT(IT_AACC) // °
#define IT_QST LSFT(IT_APOS) // ? #define IT_QST LSFT(IT_APOS) // ?
#define IT_CRC LSFT(IT_IACC) // ^ #define IT_CRC LSFT(IT_IACC) // ^
#define IT_ASTR LSFT(IT_PLUS) // * #define IT_ASTR LSFT(IT_PLUS) // *
#define IT_MORE LSFT(IT_LESS) // > #define IT_MORE LSFT(IT_LESS) // >
#define IT_COLN LSFT(IT_DOT) // : #define IT_COLN LSFT(IT_DOT) // :
#define IT_SCLN LSFT(IT_COMM) // ; #define IT_SCLN LSFT(IT_COMM) // ;
#define IT_UNDS LSFT(IT_MINS) // _ #define IT_UNDS LSFT(IT_MINS) // _
#define IT_LCBR LSFT(IT_LBRC) // { #define IT_LCBR LSFT(IT_LBRC) // {
#define IT_RCBR LSFT(IT_RBRC) // } #define IT_RCBR LSFT(IT_RBRC) // }
#define IT_PIPE LSFT(IT_BSLS) // | #define IT_PIPE LSFT(IT_BSLS) // |
// Alt -ed characters // Alt -ed characters
#define IT_LBRC LALT(IT_EACC) // [ #define IT_LBRC LALT(IT_EACC) // [
#define IT_RBRC LALT(IT_PLUS) // ] #define IT_RBRC LALT(IT_PLUS) // ]
#define IT_AT LALT(IT_OACC) // @ #define IT_AT LALT(IT_OACC) // @
#define IT_EURO LALT(KC_E) // € #define IT_EURO LALT(KC_E) // €
#define IT_SHRP LALT(IT_AACC ) // # #define IT_SHRP LALT(IT_AACC) // #
#define IT_ACUT LALT(KC_8) // ´ #define IT_ACUT LALT(KC_8) // ´
#define IT_GRAVE LALT(KC_9) // ` #define IT_GRAVE LALT(KC_9) // `
#define IT_TILDE LALT(KC_5) // ~ #define IT_TILDE LALT(KC_5) // ~
#define IT_PLMN LALT(LSFT(IT_IACC)) // ± #define IT_PLMN LALT(LSFT(IT_IACC)) // ±
#endif #endif
+2 -4
View File
@@ -63,10 +63,10 @@ typedef struct {
{ .fn = {qk_tap_dance_pair_on_each_tap, qk_tap_dance_pair_finished, qk_tap_dance_pair_reset}, .user_data = (void *)&((qk_tap_dance_pair_t){kc1, kc2}), } { .fn = {qk_tap_dance_pair_on_each_tap, qk_tap_dance_pair_finished, qk_tap_dance_pair_reset}, .user_data = (void *)&((qk_tap_dance_pair_t){kc1, kc2}), }
# define ACTION_TAP_DANCE_DUAL_ROLE(kc, layer) \ # define ACTION_TAP_DANCE_DUAL_ROLE(kc, layer) \
{ .fn = { qk_tap_dance_dual_role_on_each_tap, qk_tap_dance_dual_role_finished, qk_tap_dance_dual_role_reset }, .user_data = (void *)&((qk_tap_dance_dual_role_t) { kc, layer, layer_move }), } { .fn = {qk_tap_dance_dual_role_on_each_tap, qk_tap_dance_dual_role_finished, qk_tap_dance_dual_role_reset}, .user_data = (void *)&((qk_tap_dance_dual_role_t){kc, layer, layer_move}), }
# define ACTION_TAP_DANCE_LAYER_TOGGLE(kc, layer) \ # define ACTION_TAP_DANCE_LAYER_TOGGLE(kc, layer) \
{ .fn = { NULL, qk_tap_dance_dual_role_finished, qk_tap_dance_dual_role_reset }, .user_data = (void *)&((qk_tap_dance_dual_role_t) { kc, layer, layer_invert }), } { .fn = {NULL, qk_tap_dance_dual_role_finished, qk_tap_dance_dual_role_reset}, .user_data = (void *)&((qk_tap_dance_dual_role_t){kc, layer, layer_invert}), }
# define ACTION_TAP_DANCE_LAYER_MOVE(kc, layer) ACTION_TAP_DANCE_DUAL_ROLE(kc, layer) # define ACTION_TAP_DANCE_LAYER_MOVE(kc, layer) ACTION_TAP_DANCE_DUAL_ROLE(kc, layer)
@@ -79,8 +79,6 @@ typedef struct {
# define ACTION_TAP_DANCE_FN_ADVANCED_TIME(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset, tap_specific_tapping_term) \ # define ACTION_TAP_DANCE_FN_ADVANCED_TIME(user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset, tap_specific_tapping_term) \
{ .fn = {user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset}, .user_data = NULL, .custom_tapping_term = tap_specific_tapping_term, } { .fn = {user_fn_on_each_tap, user_fn_on_dance_finished, user_fn_on_dance_reset}, .user_data = NULL, .custom_tapping_term = tap_specific_tapping_term, }
extern qk_tap_dance_action_t tap_dance_actions[]; extern qk_tap_dance_action_t tap_dance_actions[];
/* To be used internally */ /* To be used internally */
+1 -1
View File
@@ -1116,7 +1116,7 @@ __attribute__((weak)) void led_set(uint8_t usb_led) {
#endif #endif
led_set_kb(usb_led); led_set_kb(usb_led);
led_update_kb((led_t) usb_led); led_update_kb((led_t)usb_led);
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
+2 -3
View File
@@ -146,14 +146,13 @@ extern layer_state_t layer_state;
#endif #endif
#ifdef DIP_SWITCH_ENABLE #ifdef DIP_SWITCH_ENABLE
#include "dip_switch.h" # include "dip_switch.h"
#endif #endif
#ifdef DYNAMIC_MACRO_ENABLE #ifdef DYNAMIC_MACRO_ENABLE
#include "process_dynamic_macro.h" # include "process_dynamic_macro.h"
#endif #endif
// Function substitutions to ease GPIO manipulation // Function substitutions to ease GPIO manipulation
#if defined(__AVR__) #if defined(__AVR__)
typedef uint8_t pin_t; typedef uint8_t pin_t;
+1 -1
View File
@@ -771,4 +771,4 @@ enum quantum_keycodes {
#define DM_PLY1 DYN_MACRO_PLAY1 #define DM_PLY1 DYN_MACRO_PLAY1
#define DM_PLY2 DYN_MACRO_PLAY2 #define DM_PLY2 DYN_MACRO_PLAY2
#endif // QUANTUM_KEYCODES_H #endif // QUANTUM_KEYCODES_H
+1 -1
View File
@@ -919,7 +919,7 @@ void rgblight_effect_snake(animation_status_t *anim) {
ledp->g = 0; ledp->g = 0;
ledp->b = 0; ledp->b = 0;
# ifdef RGBW # ifdef RGBW
ledp->w = 0; ledp->w = 0;
# endif # endif
for (j = 0; j < RGBLIGHT_EFFECT_SNAKE_LENGTH; j++) { for (j = 0; j < RGBLIGHT_EFFECT_SNAKE_LENGTH; j++) {
k = pos + j * increment; k = pos + j * increment;
+25 -14
View File
@@ -419,34 +419,39 @@
* @note It is invoked from within @p chThdInit() and implicitly from all * @note It is invoked from within @p chThdInit() and implicitly from all
* the threads creation APIs. * the threads creation APIs.
*/ */
# define CH_CFG_THREAD_INIT_HOOK(tp) \ # define CH_CFG_THREAD_INIT_HOOK(tp) \
{ /* Add threads initialization code here.*/ } { /* Add threads initialization code here.*/ \
}
/** /**
* @brief Threads finalization hook. * @brief Threads finalization hook.
* @details User finalization code added to the @p chThdExit() API. * @details User finalization code added to the @p chThdExit() API.
*/ */
# define CH_CFG_THREAD_EXIT_HOOK(tp) \ # define CH_CFG_THREAD_EXIT_HOOK(tp) \
{ /* Add threads finalization code here.*/ } { /* Add threads finalization code here.*/ \
}
/** /**
* @brief Context switch hook. * @brief Context switch hook.
* @details This hook is invoked just before switching between threads. * @details This hook is invoked just before switching between threads.
*/ */
# define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) \ # define CH_CFG_CONTEXT_SWITCH_HOOK(ntp, otp) \
{ /* Context switch code here.*/ } { /* Context switch code here.*/ \
}
/** /**
* @brief ISR enter hook. * @brief ISR enter hook.
*/ */
# define CH_CFG_IRQ_PROLOGUE_HOOK() \ # define CH_CFG_IRQ_PROLOGUE_HOOK() \
{ /* IRQ prologue code here.*/ } { /* IRQ prologue code here.*/ \
}
/** /**
* @brief ISR exit hook. * @brief ISR exit hook.
*/ */
# define CH_CFG_IRQ_EPILOGUE_HOOK() \ # define CH_CFG_IRQ_EPILOGUE_HOOK() \
{ /* IRQ epilogue code here.*/ } { /* IRQ epilogue code here.*/ \
}
/** /**
* @brief Idle thread enter hook. * @brief Idle thread enter hook.
@@ -455,7 +460,8 @@
* @note This macro can be used to activate a power saving mode. * @note This macro can be used to activate a power saving mode.
*/ */
# define CH_CFG_IDLE_ENTER_HOOK() \ # define CH_CFG_IDLE_ENTER_HOOK() \
{ /* Idle-enter code here.*/ } { /* Idle-enter code here.*/ \
}
/** /**
* @brief Idle thread leave hook. * @brief Idle thread leave hook.
@@ -464,22 +470,25 @@
* @note This macro can be used to deactivate a power saving mode. * @note This macro can be used to deactivate a power saving mode.
*/ */
# define CH_CFG_IDLE_LEAVE_HOOK() \ # define CH_CFG_IDLE_LEAVE_HOOK() \
{ /* Idle-leave code here.*/ } { /* Idle-leave code here.*/ \
}
/** /**
* @brief Idle Loop hook. * @brief Idle Loop hook.
* @details This hook is continuously invoked by the idle thread loop. * @details This hook is continuously invoked by the idle thread loop.
*/ */
# define CH_CFG_IDLE_LOOP_HOOK() \ # define CH_CFG_IDLE_LOOP_HOOK() \
{ /* Idle loop code here.*/ } { /* Idle loop code here.*/ \
}
/** /**
* @brief System tick event hook. * @brief System tick event hook.
* @details This hook is invoked in the system tick handler immediately * @details This hook is invoked in the system tick handler immediately
* after processing the virtual timers queue. * after processing the virtual timers queue.
*/ */
# define CH_CFG_SYSTEM_TICK_HOOK() \ # define CH_CFG_SYSTEM_TICK_HOOK() \
{ /* System tick event code here.*/ } { /* System tick event code here.*/ \
}
/** /**
* @brief System halt hook. * @brief System halt hook.
@@ -487,7 +496,8 @@
* the system is halted. * the system is halted.
*/ */
# define CH_CFG_SYSTEM_HALT_HOOK(reason) \ # define CH_CFG_SYSTEM_HALT_HOOK(reason) \
{ /* System halt code here.*/ } { /* System halt code here.*/ \
}
/** /**
* @brief Trace hook. * @brief Trace hook.
@@ -495,7 +505,8 @@
* trace buffer. * trace buffer.
*/ */
# define CH_CFG_TRACE_HOOK(tep) \ # define CH_CFG_TRACE_HOOK(tep) \
{ /* Trace code here.*/ } { /* Trace code here.*/ \
}
/** @} */ /** @} */
+2 -1
View File
@@ -7,7 +7,8 @@
* *
* FIXME: needs doc * FIXME: needs doc
*/ */
void suspend_idle(uint8_t time) { /* Note: Not used anywhere currently */ } void suspend_idle(uint8_t time) { /* Note: Not used anywhere currently */
}
/** \brief Run user level Power down /** \brief Run user level Power down
* *
+2 -2
View File
@@ -51,10 +51,10 @@ void eeconfig_init_quantum(void) {
// TODO: Remove once ARM has a way to configure EECONFIG_HANDEDNESS // TODO: Remove once ARM has a way to configure EECONFIG_HANDEDNESS
// within the emulated eeprom via dfu-util or another tool // within the emulated eeprom via dfu-util or another tool
#if defined INIT_EE_HANDS_LEFT #if defined INIT_EE_HANDS_LEFT
#pragma message "Faking EE_HANDS for left hand" # pragma message "Faking EE_HANDS for left hand"
eeprom_update_byte(EECONFIG_HANDEDNESS, 1); eeprom_update_byte(EECONFIG_HANDEDNESS, 1);
#elif defined INIT_EE_HANDS_RIGHT #elif defined INIT_EE_HANDS_RIGHT
#pragma message "Faking EE_HANDS for right hand" # pragma message "Faking EE_HANDS for right hand"
eeprom_update_byte(EECONFIG_HANDEDNESS, 0); eeprom_update_byte(EECONFIG_HANDEDNESS, 0);
#endif #endif
+1 -1
View File
@@ -41,7 +41,7 @@ uint8_t host_keyboard_leds(void) {
} }
led_t host_keyboard_led_state(void) { led_t host_keyboard_led_state(void) {
if (!driver) return (led_t) {0}; if (!driver) return (led_t){0};
return (led_t)((*driver->keyboard_leds)()); return (led_t)((*driver->keyboard_leds)());
} }
+5 -5
View File
@@ -36,11 +36,11 @@ extern "C" {
typedef union { typedef union {
uint8_t raw; uint8_t raw;
struct { struct {
bool num_lock : 1; bool num_lock : 1;
bool caps_lock : 1; bool caps_lock : 1;
bool scroll_lock : 1; bool scroll_lock : 1;
bool compose : 1; bool compose : 1;
bool kana : 1; bool kana : 1;
uint8_t reserved : 3; uint8_t reserved : 3;
}; };
} led_t; } led_t;
@@ -186,9 +186,10 @@ COMPILER_PACK_RESET()
#define USB_HID_COUNTRY_UK 32 // UK #define USB_HID_COUNTRY_UK 32 // UK
#define USB_HID_COUNTRY_US 33 // US #define USB_HID_COUNTRY_US 33 // US
#define USB_HID_COUNTRY_YUGOSLAVIA 34 // Yugoslavia #define USB_HID_COUNTRY_YUGOSLAVIA 34 // Yugoslavia
#define USB_HID_COUNTRY_TURKISH_F 35 // Turkish-F #define USB_HID_COUNTRY_TURKISH_F \
//! @} 35 // Turkish-F
//! @} //! @}
//! @}
//! @} //! @}
//! \name HID KEYS values //! \name HID KEYS values
+3 -3
View File
@@ -310,7 +310,7 @@ static void usb_event_cb(USBDriver *usbp, usbevent_t event) {
case USB_EVENT_SUSPEND: case USB_EVENT_SUSPEND:
#ifdef SLEEP_LED_ENABLE #ifdef SLEEP_LED_ENABLE
sleep_led_enable(); sleep_led_enable();
#endif /* SLEEP_LED_ENABLE */ #endif /* SLEEP_LED_ENABLE */
/* Falls into.*/ /* Falls into.*/
case USB_EVENT_UNCONFIGURED: case USB_EVENT_UNCONFIGURED:
/* Falls into.*/ /* Falls into.*/
@@ -453,9 +453,9 @@ static bool usb_request_hook_cb(USBDriver *usbp) {
#ifdef NKRO_ENABLE #ifdef NKRO_ENABLE
keymap_config.nkro = !!keyboard_protocol; keymap_config.nkro = !!keyboard_protocol;
if (!keymap_config.nkro && keyboard_idle) { if (!keymap_config.nkro && keyboard_idle) {
#else /* NKRO_ENABLE */ #else /* NKRO_ENABLE */
if (keyboard_idle) { if (keyboard_idle) {
#endif /* NKRO_ENABLE */ #endif /* NKRO_ENABLE */
/* arm the idle timer if boot protocol & idle */ /* arm the idle timer if boot protocol & idle */
osalSysLockFromISR(); osalSysLockFromISR();
chVTSetI(&keyboard_idle_timer, 4 * MS2ST(keyboard_idle), keyboard_idle_timer_cb, (void *)usbp); chVTSetI(&keyboard_idle_timer, 4 * MS2ST(keyboard_idle), keyboard_idle_timer_cb, (void *)usbp);
+2 -1
View File
@@ -320,7 +320,8 @@ static void send_mouse(report_mouse_t *report) {
#endif #endif
} }
static void send_system(uint16_t data) { /* not supported */ } static void send_system(uint16_t data) { /* not supported */
}
static void send_consumer(uint16_t data) { static void send_consumer(uint16_t data) {
#ifdef EXTRAKEY_ENABLE #ifdef EXTRAKEY_ENABLE
+3 -3
View File
@@ -31,9 +31,9 @@
#define ConnectionUpdateInterval 1000 /* milliseconds */ #define ConnectionUpdateInterval 1000 /* milliseconds */
#ifdef SAMPLE_BATTERY #ifdef SAMPLE_BATTERY
#ifndef BATTERY_LEVEL_PIN # ifndef BATTERY_LEVEL_PIN
# define BATTERY_LEVEL_PIN 7 # define BATTERY_LEVEL_PIN 7
#endif # endif
#endif #endif
static struct { static struct {